: 1
sha256sum: 3c4243c5e0ba276fb190772299d79c7fd2e703a51c097741b950c3bce4e677b7
:
name: args
version: 6.4.6+2
type: lib,binless
language: c++
project: args
summary: A simple header-only C++ argument parser library
license: MIT
description:
\
# args

#### Note that this library is essentially in maintenance mode.  I haven't\
 had the time to work on it or give it the love that it deserves.  I'm not\
 adding new features, but I will fix bugs.  I will also very gladly accept\
 pull requests.

[![Cpp Standard](https://img.shields.io/badge/C%2B%2B-11-blue.svg)](https://e\
n.wikipedia.org/wiki/C%2B%2B11)
[![Travis status](https://travis-ci.org/Taywee/args.svg?branch=master)](https\
://travis-ci.org/Taywee/args)
[![AppVeyor status](https://ci.appveyor.com/api/projects/status/nlnlmpttdjlnd\
yc2?svg=true)](https://ci.appveyor.com/project/Taywee/args)
[![Coverage Status](https://coveralls.io/repos/github/Taywee/args/badge.svg?b\
ranch=master)](https://coveralls.io/github/Taywee/args?branch=master)
[![Read the Docs](https://img.shields.io/readthedocs/pip.svg)](https://taywee\
.github.io/args)

A simple, small, flexible, single-header C++11 argument parsing library.

This is designed to appear somewhat similar to Python's argparse, but in C++,
with static type checking, and hopefully a lot faster (also allowing fully
nestable group logic, where Python's argparse does not).

UTF-8 support is limited at best.  No normalization is performed, so non-ascii
characters are very best kept out of flags, and combined glyphs are probably
going to mess up help output if you use them.  Most UTF-8 necessary for
internationalization should work for most cases, though heavily combinatory\
 UTF
alphabets may wreak havoc.

This program is MIT-licensed, so you can use the header as-is with no
restrictions. I'd appreciate attribution in a README, Man page, or something\
 if
you are feeling generous, but all that's required is that you don't remove the
license and my name from the header of the args.hxx file in source
redistributions (ie. don't pretend that you wrote it).  I do welcome additions
and updates wherever you feel like contributing code.

The API documentation can be found at https://taywee.github.io/args

The code can be downloaded at https://github.com/Taywee/args

There are also somewhat extensive examples below.

You can find the complete test cases at
https://github.com/Taywee/args/blob/master/test.cxx, which should very well
describe the usage, as it's built to push the boundaries.

# What does it do?

It:

* Lets you handle flags, flag+value, and positional arguments simply and
  elegantly, with the full help of static typechecking.
* Allows you to use your own types in a pretty simple way.
* Lets you use count flags, and lists of all argument-accepting types.
* Allows full validation of groups of required arguments, though output isn't
  pretty when something fails group validation. User validation functions are
  accepted. Groups are fully nestable.
* Generates pretty help for you, with some good tweakable parameters.
* Lets you customize all prefixes and most separators, allowing you to create
  an infinite number of different argument syntaxes.
* Lets you parse, by default, any type that has a stream extractor operator\
 for
  it. If this doesn't work for your uses, you can supply a function and parse
  the string yourself if you like.
* Lets you decide not to allow separate-argument value flags or joined ones
  (like disallowing `--foo bar`, requiring `--foo=bar`, or the inverse, or the
  same for short options).
* Allows you to create subparsers, to reuse arguments for multiple commands\
 and
  to refactor your command's logic to a function or lambda.
* Allows one value flag to take a specific number of values (like `--foo first
  second`, where --foo slurps both arguments).
* Allows you to have value flags only optionally accept values.
* Provides autocompletion for bash.

# What does it not do?

There are tons of things this library does not do!

## It will not ever:

* Allow you to intermix multiple different prefix types (eg. `++foo` and
  `--foo` in the same parser), though shortopt and longopt prefixes can be
  different.
* Allow you to make flags sensitive to order (like gnu find), or make them
  sensitive to relative ordering with positionals.  The only orderings that\
 are
  order-sensitive are:
    * Positionals relative to one-another
    * List positionals or flag values to each of their own respective items
* Allow you to use a positional list before any other positionals (the last
  argument list will slurp all subsequent positional arguments).  The logic\
 for
  allowing this would be a lot more code than I'd like, and would make static
  checking much more difficult, requiring us to sort std::string arguments and
  pair them to positional arguments before assigning them, rather than what we
  currently do, which is assigning them as we go for better simplicity and
  speed.  The library doesn't stop you from trying, but the first positional
  list will slurp in all following positionals

# How do I install it?

```shell
sudo make install
```

Or, to install it somewhere special (default is `/usr/local`):

```shell
sudo make install DESTDIR=/opt/mydir
```

You can also copy the file into your source tree, if you want to be absolutely
sure you keep a stable API between projects.

## I also want man pages.

```shell
make doc/man
sudo make installman
```

This requires Doxygen

## I want the doxygen documentation locally

```shell
doxygen Doxyfile
```

Your docs are now in doc/html

## How to depend on it using tipi.build?

Simply add the following entry to your `.tipi/deps` file

```json
{
    "taywee/args": { "@": "6.4.1" }
}
```

You can optionally remove the `@` section to *target HEAD* easily.

# How do I use it?

Create an ArgumentParser, modify its attributes to fit your needs, add
arguments through regular argument objects (or create your own), and match\
 them
with an args::Matcher object (check its construction details in the doxygen
documentation.

Then you can either call it with args::ArgumentParser::ParseCLI for the full
command line with program name, or args::ArgumentParser::ParseArgs with
just the arguments to be parsed.  The argument and group variables can then be
interpreted as a boolean to see if they've been matched.

All variables can be pulled (including the boolean match status for regular
args::Flag variables) with args::get.

# Group validation is weird.  How do I get more helpful output for failed\
 validation?

This is unfortunately not possible, given the power of the groups available.
For instance, if you have a group validation that works like 
`(A && B) || (C && (D XOR E))`, how is this library going to be able to
determine what exactly when wrong when it fails?  It only knows that the
entire expression evaluated false, not specifically what the user did wrong
(and this is doubled over by the fact that validation operations are ordinary
functions without any special meaning to the library).  As you are the only\
 one
who understands the logic of your program, if you want useful group messages,
you have to catch the ValidationError as a special case and check your own
groups and spit out messages accordingly.

# Is it developed with regression tests?

Yes.  tests.cxx in the git repository has a set of standard tests (which are
still relatively small in number, but I would welcome some expansion here),\
 and
thanks to Travis CI and AppVeyor, these tests run with every single push:

```shell
% make runtests
g++ test.cxx -o test.o -I. -std=c++11 -O2 -c -MMD
g++ -o test test.o -std=c++11 -O2
./test
=============================================================================\
==
All tests passed (74 assertions in 15 test cases)

%
```

The testing library used is [Catch](https://github.com/philsquared/Catch).

# Examples

All the code examples here will be complete code examples, with some output.

## Simple example:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::CompletionFlag completion(parser, {"complete"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (const args::Completion& e)
    {
        std::cout << e.what();
        return 0;
    }
    catch (const args::Help&)
    {
        std::cout << parser;
        return 0;
    }
    catch (const args::ParseError& e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test
 % ./test -h
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 

    This goes after the options. 
 % 
```

## Boolean flags, special group types, different matcher construction:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group group(parser, "This group is all exclusive:",\
 args::Group::Validators::Xor);
    args::Flag foo(group, "foo", "The foo flag", {'f', "foo"});
    args::Flag bar(group, "bar", "The bar flag", {'b'});
    args::Flag baz(group, "baz", "The baz flag", {"baz"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (foo) { std::cout << "foo" << std::endl; }
    if (bar) { std::cout << "bar" << std::endl; }
    if (baz) { std::cout << "baz" << std::endl; }
    return 0;
}
```

```shell
 % ./test   
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         This group is all exclusive:
        -f, --foo          The foo flag 
        -b                 The bar flag 
        --baz              The baz flag 

    This goes after the options. 
 % ./test -f
foo
 % ./test --foo
foo
 % ./test --foo -f
foo
 % ./test -b      
bar
 % ./test --baz
baz
 % ./test --baz -f
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 
...
 % ./test --baz -fb
Group validation failed somewhere!
  ./test {OPTIONS} 
...
 % 
```

## Argument flags, Positional arguments, lists

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::ValueFlag<int> integer(parser, "integer", "The integer flag",\
 {'i'});
    args::ValueFlagList<char> characters(parser, "characters", "The character\
 flag", {'c'});
    args::Positional<std::string> foo(parser, "foo", "The foo position");
    args::PositionalList<double> numbers(parser, "numbers", "The numbers\
 position list");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (integer) { std::cout << "i: " << args::get(integer) << std::endl; }
    if (characters) { for (const auto ch: args::get(characters)) { std::cout\
 << "c: " << ch << std::endl; } }
    if (foo) { std::cout << "f: " << args::get(foo) << std::endl; }
    if (numbers) { for (const auto nm: args::get(numbers)) { std::cout << "n:\
 " << nm << std::endl; } }
    return 0;
}
```

```shell
% ./test -h
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 
      -i integer         The integer flag 
      -c characters      The character flag 
      foo                The foo position 
      numbers            The numbers position list 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. 
 % ./test -i 5
i: 5
 % ./test -i 5.2
Argument 'integer' received invalid value type '5.2'
  ./test {OPTIONS} [foo] [numbers...] 
 % ./test -c 1 -c 2 -c 3
c: 1
c: 2
c: 3
 % 
 % ./test 1 2 3 4 5 6 7 8 9
f: 1
n: 2
n: 3
n: 4
n: 5
n: 6
n: 7
n: 8
n: 9
 % ./test 1 2 3 4 5 6 7 8 9 a
Argument 'numbers' received invalid value type 'a'
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 
...
```

## Commands

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index");
    args::Command commit(commands, "commit", "record changes to the\
 repository");
    args::Group arguments(p, "arguments", args::Group::Validators::DontCare,\
 args::Options::Global);
    args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
    args::HelpFlag h(arguments, "help", "help", {'h', "help"});
    args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

    try
    {
        p.ParseCLI(argc, argv);
        if (add)
        {
            std::cout << "Add";
        }
        else
        {
            std::cout << "Commit";
        }

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2
```

## Refactoring commands

```cpp
#include <iostream>
#include "args.hxx"

args::Group arguments("arguments");
args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
args::HelpFlag h(arguments, "help", "help", {'h', "help"});
args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

void CommitCommand(args::Subparser &parser)
{
    args::ValueFlag<std::string> message(parser, "MESSAGE", "commit message",\
 {'m'});
    parser.Parse();

    std::cout << "Commit";

    for (auto &&path : pathsList)
    {
        std::cout << ' ' << path;
    }

    std::cout << std::endl;

    if (message)
    {
        std::cout << "message: " << args::get(message) << std::endl;
    }
}

int main(int argc, const char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index",\
 [&](args::Subparser &parser)
    {
        parser.Parse();
        std::cout << "Add";

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    });

    args::Command commit(commands, "commit", "record changes to the\
 repository", &CommitCommand);
    args::GlobalOptions globals(p, arguments);

    try
    {
        p.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2

% ./test commit -m "my commit message" 1 2
Commit 1 2
message: my commit message
```

# Custom type parsers (here we use std::tuple)

```cpp
#include <iostream>
#include <tuple>

std::istream& operator>>(std::istream& is, std::tuple<int, int>& ints)
{
    is >> std::get<0>(ints);
    is.get();
    is >> std::get<1>(ints);
    return is;
}

#include <args.hxx>

struct DoublesReader
{
    void operator()(const std::string &name, const std::string &value,\
 std::tuple<double, double> &destination)
    {
        size_t commapos = 0;
        std::get<0>(destination) = std::stod(value, &commapos);
        std::get<1>(destination) = std::stod(std::string(value, commapos +\
 1));
    }
};

int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.");
    args::Positional<std::tuple<int, int>> ints(parser, "INTS", "This takes a\
 pair of integers.");
    args::Positional<std::tuple<double, double>, DoublesReader>\
 doubles(parser, "DOUBLES", "This takes a pair of doubles.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (ints)
    {
        std::cout << "ints found: " << std::get<0>(args::get(ints)) << " and\
 " << std::get<1>(args::get(ints)) << std::endl;
    }
    if (doubles)
    {
        std::cout << "doubles found: " << std::get<0>(args::get(doubles)) <<\
 " and " << std::get<1>(args::get(doubles)) << std::endl;
    }
    return 0;
}
```

```shell
 % ./test -h
Argument could not be matched: 'h'
  ./test [INTS] [DOUBLES] 

    This is a test program. 

  OPTIONS:

      INTS               This takes a pair of integers. 
      DOUBLES            This takes a pair of doubles. 

 % ./test 5
ints found: 5 and 0
 % ./test 5,8
ints found: 5 and 8
 % ./test 5,8 2.4,8
ints found: 5 and 8
doubles found: 2.4 and 8
 % ./test 5,8 2.4, 
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stod
zsh: abort      ./test 5,8 2.4,
 % ./test 5,8 2.4 
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::basic_string: __pos (which is 4) > this->size()\
 (which is 3)
zsh: abort      ./test 5,8 2.4
 % ./test 5,8 2.4-7
ints found: 5 and 8
doubles found: 2.4 and 7
 % ./test 5,8 2.4,-7
ints found: 5 and 8
doubles found: 2.4 and -7
```

As you can see, with your own types, validation can get a little weird.  Make
sure to check and throw a parsing error (or whatever error you want to catch)
if you can't fully deduce your type.  The built-in validator will only throw\
 if
there are unextracted characters left in the stream.

## Long descriptions and proper wrapping and listing

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program with a really long\
 description that is probably going to have to be wrapped across multiple\
 different lines.  This is a test to see how the line wrapping works", "This\
 goes after the options.  This epilog is also long enough that it will have\
 to be properly wrapped to display correctly on the screen");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {'h',\
 "help"});
    args::ValueFlag<std::string> foo(parser, "FOO", "The foo flag.", {'a',\
 'b', 'c', "a", "b", "c", "the-foo-flag"});
    args::ValueFlag<std::string> bar(parser, "BAR", "The bar flag.  This one\
 has a lot of options, and will need wrapping in the description, along with\
 its long flag list.", {'d', 'e', 'f', "d", "e", "f"});
    args::ValueFlag<std::string> baz(parser, "FOO", "The baz flag.  This one\
 has a lot of options, and will need wrapping in the description, even with\
 its short flag list.", {"baz"});
    args::Positional<std::string> pos1(parser, "POS1", "The pos1 argument.");
    args::PositionalList<std::string> poslist1(parser, "POSLIST1", "The\
 poslist1 argument.");
    args::Positional<std::string> pos2(parser, "POS2", "The pos2 argument.");
    args::PositionalList<std::string> poslist2(parser, "POSLIST2", "The\
 poslist2 argument.");
    args::Positional<std::string> pos3(parser, "POS3", "The pos3 argument.");
    args::PositionalList<std::string> poslist3(parser, "POSLIST3", "The\
 poslist3 argument.");
    args::Positional<std::string> pos4(parser, "POS4", "The pos4 argument.");
    args::PositionalList<std::string> poslist4(parser, "POSLIST4", "The\
 poslist4 argument.");
    args::Positional<std::string> pos5(parser, "POS5", "The pos5 argument.");
    args::PositionalList<std::string> poslist5(parser, "POSLIST5", "The\
 poslist5 argument.");
    args::Positional<std::string> pos6(parser, "POS6", "The pos6 argument.");
    args::PositionalList<std::string> poslist6(parser, "POSLIST6", "The\
 poslist6 argument.");
    args::Positional<std::string> pos7(parser, "POS7", "The pos7 argument.");
    args::PositionalList<std::string> poslist7(parser, "POSLIST7", "The\
 poslist7 argument.");
    args::Positional<std::string> pos8(parser, "POS8", "The pos8 argument.");
    args::PositionalList<std::string> poslist8(parser, "POSLIST8", "The\
 poslist8 argument.");
    args::Positional<std::string> pos9(parser, "POS9", "The pos9 argument.");
    args::PositionalList<std::string> poslist9(parser, "POSLIST9", "The\
 poslist9 argument.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test -h
  ./test {OPTIONS} [POS1] [POSLIST1...] [POS2] [POSLIST2...] [POS3]
      [POSLIST3...] [POS4] [POSLIST4...] [POS5] [POSLIST5...] [POS6]
      [POSLIST6...] [POS7] [POSLIST7...] [POS8] [POSLIST8...] [POS9]
      [POSLIST9...] 

    This is a test program with a really long description that is probably\
 going
    to have to be wrapped across multiple different lines. This is a test to\
 see
    how the line wrapping works 

  OPTIONS:

      -h, --help         Show this help menu. 
      -a FOO, -b FOO, -c FOO, --a FOO, --b FOO, --c FOO, --the-foo-flag FOO
                         The foo flag. 
      -d BAR, -e BAR, -f BAR, --d BAR, --e BAR, --f BAR
                         The bar flag. This one has a lot of options, and will
                         need wrapping in the description, along with its long
                         flag list. 
      --baz FOO          The baz flag. This one has a lot of options, and will
                         need wrapping in the description, even with its short
                         flag list. 
      POS1               The pos1 argument. 
      POSLIST1           The poslist1 argument. 
      POS2               The pos2 argument. 
      POSLIST2           The poslist2 argument. 
      POS3               The pos3 argument. 
      POSLIST3           The poslist3 argument. 
      POS4               The pos4 argument. 
      POSLIST4           The poslist4 argument. 
      POS5               The pos5 argument. 
      POSLIST5           The poslist5 argument. 
      POS6               The pos6 argument. 
      POSLIST6           The poslist6 argument. 
      POS7               The pos7 argument. 
      POSLIST7           The poslist7 argument. 
      POS8               The pos8 argument. 
      POSLIST8           The poslist8 argument. 
      POS9               The pos9 argument. 
      POSLIST9           The poslist9 argument. 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. This epilog is also long enough that it will
    have to be properly wrapped to display correctly on the screen 
 %
```

## Customizing parser prefixes

### dd-style

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This command likes to break your disks");
    parser.LongPrefix("");
    parser.LongSeparator("=");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {"help"});
    args::ValueFlag<long> bs(parser, "BYTES", "Block size", {"bs"}, 512);
    args::ValueFlag<long> skip(parser, "BYTES", "Bytes to skip", {"skip"}, 0);
    args::ValueFlag<std::string> input(parser, "BLOCK SIZE", "Block size",\
 {"if"});
    args::ValueFlag<std::string> output(parser, "BLOCK SIZE", "Block size",\
 {"of"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    std::cout << "bs = " << args::get(bs) << std::endl;
    std::cout << "skip = " << args::get(skip) << std::endl;
    if (input) { std::cout << "if = " << args::get(input) << std::endl; }
    if (output) { std::cout << "of = " << args::get(output) << std::endl; }
    return 0;
}
```

```shell
 % ./test help
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      help                              Show this help menu.
      bs=[BYTES]                        Block size
      skip=[BYTES]                      Bytes to skip
      if=[BLOCK SIZE]                   Block size
      of=[BLOCK SIZE]                   Block size

 % ./test bs=1024 skip=7 if=/tmp/input
bs = 1024
skip = 7
if = /tmp/input
```

### Windows style

The code is the same as above, but the two lines are replaced out:

```cpp
parser.LongPrefix("/");
parser.LongSeparator(":");
```

```shell
 % ./test /help     
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      /help                             Show this help menu.
      /bs:[BYTES]                       Block size
      /skip:[BYTES]                     Bytes to skip
      /if:[BLOCK SIZE]                  Block size
      /of:[BLOCK SIZE]                  Block size

 % ./test /bs:72 /skip:87 /if:/tmp/test.txt
bs = 72
skip = 87
if = /tmp/test.txt
 % 
```

## Group nesting help menu text

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group xorgroup(parser, "this group provides xor validation:",\
 args::Group::Validators::Xor);
    args::Flag a(xorgroup, "a", "test flag", {'a'});
    args::Flag b(xorgroup, "b", "test flag", {'b'});
    args::Flag c(xorgroup, "c", "test flag", {'c'});
    args::Group nxor(xorgroup, "this group provides all-or-none (nxor)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag d(nxor, "d", "test flag", {'d'});
    args::Flag e(nxor, "e", "test flag", {'e'});
    args::Flag f(nxor, "f", "test flag", {'f'});
    args::Group nxor2(nxor, "this group provides all-or-none (nxor2)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag i(nxor2, "i", "test flag", {'i'});
    args::Flag j(nxor2, "j", "test flag", {'j'});
    args::Flag k(nxor2, "k", "test flag", {'k'});
    args::Group nxor3(nxor, "this group provides all-or-none (nxor3)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag l(nxor3, "l", "test flag", {'l'});
    args::Flag m(nxor3, "m", "test flag", {'m'});
    args::Flag n(nxor3, "n", "test flag", {'n'});
    args::Group atleastone(xorgroup, "this group provides at-least-one\
 validation:", args::Group::Validators::AtLeastOne);
    args::Flag g(atleastone, "g", "test flag", {'g'});
    args::Flag o(atleastone, "o", "test flag", {'o'});
    args::HelpFlag help(parser, "help", "Show this help menu", {'h', "help"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    return 0;
}
```

```shell
 % /tmp/test -h
  /tmp/test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         this group provides xor validation: 
        -a                 test flag 
        -b                 test flag 
        -c                 test flag 
                           this group provides all-or-none (nxor) validation: 
          -d                 test flag 
          -e                 test flag 
          -f                 test flag 
                             this group provides all-or-none (nxor2)\
 validation:
            -i                 test flag 
            -j                 test flag 
            -k                 test flag 
                             this group provides all-or-none (nxor3)\
 validation:
            -l                 test flag 
            -m                 test flag 
            -n                 test flag 
                           this group provides at-least-one validation: 
          -g                 test flag 
          -o                 test flag 
      -h, --help         Show this help menu 

    This goes after the options. 
 %                                                                           \
     
```

# Mapping arguments

I haven't written out a long example for this, but here's the test case you\
 should be able to discern the meaning from:

```cpp
bool ToLowerReader(const std::string &name, const std::string &value,\
 std::string &destination)
{
    destination = value;
    std::transform(destination.begin(), destination.end(),\
 destination.begin(), ::tolower);
    return true;
}

TEST_CASE("Mapping types work as needed", "[args]")
{
    std::unordered_map<std::string, MappingEnum> map{
        {"default", MappingEnum::def},
        {"foo", MappingEnum::foo},
        {"bar", MappingEnum::bar},
        {"red", MappingEnum::red},
        {"yellow", MappingEnum::yellow},
        {"green", MappingEnum::green}};
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::MapFlag<std::string, MappingEnum> dmf(parser, "DMF", "Maps string\
 to an enum", {"dmf"}, map);
    args::MapFlag<std::string, MappingEnum> mf(parser, "MF", "Maps string to\
 an enum", {"mf"}, map);
    args::MapFlag<std::string, MappingEnum, ToLowerReader> cimf(parser,\
 "CIMF", "Maps string to an enum case-insensitively", {"cimf"}, map);
    args::MapFlagList<std::string, MappingEnum> mfl(parser, "MFL", "Maps\
 string to an enum list", {"mfl"}, map);
    args::MapPositional<std::string, MappingEnum> mp(parser, "MP", "Maps\
 string to an enum", map);
    args::MapPositionalList<std::string, MappingEnum> mpl(parser, "MPL",\
 "Maps string to an enum list", map);
    parser.ParseArgs(std::vector<std::string>{"--mf=red", "--cimf=YeLLoW",\
 "--mfl=bar", "foo", "--mfl=green", "red", "--mfl", "bar", "default"});
    REQUIRE_FALSE(dmf);
    REQUIRE(args::get(dmf) == MappingEnum::def);
    REQUIRE(mf);
    REQUIRE(args::get(mf) == MappingEnum::red);
    REQUIRE(cimf);
    REQUIRE(args::get(cimf) == MappingEnum::yellow);
    REQUIRE(mfl);
    REQUIRE((args::get(mfl) == std::vector<MappingEnum>{MappingEnum::bar,\
 MappingEnum::green, MappingEnum::bar}));
    REQUIRE(mp);
    REQUIRE((args::get(mp) == MappingEnum::foo));
    REQUIRE(mpl);
    REQUIRE((args::get(mpl) == std::vector<MappingEnum>{MappingEnum::red,\
 MappingEnum::def}));
    REQUIRE_THROWS_AS(parser.ParseArgs(std::vector<std::string>{"--mf=YeLLoW"\
}), args::MapError);
}
```

# How fast is it?

This should not really be a question you ask when you are looking for an
argument-parsing library, but every test I've done shows args as being about
65% faster than TCLAP and 220% faster than boost::program_options.

The simplest benchmark I threw together is the following one, which parses the
command line `-i 7 -c a 2.7 --char b 8.4 -c c 8.8 --char d` with a parser that
parses -i as an int, -c as a list of chars, and the positional parameters as a
list of doubles (the command line was originally much more complex, but\
 TCLAP's
limitations made me trim it down so I could use a common command line across
all libraries.  I also have to copy in the arguments list with every run,
because TCLAP permutes its argument list as it runs (and comparison would have
been unfair without comparing all about equally), but that surprisingly didn't
affect much.  Also tested is pulling the arguments out, but that was fast
compared to parsing, as would be expected.

### The run:

```shell
% g++ -obench bench.cxx -O2 -std=c++11 -lboost_program_options
% ./bench
args seconds to run: 0.895472
tclap seconds to run: 1.45001
boost::program_options seconds to run: 1.98972
%
```

### The benchmark:

```cpp
#undef NDEBUG
#include <iostream>
#include <chrono>
#include <cassert>
#include "args.hxx"
#include <tclap/CmdLine.h>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
using namespace std::chrono;
inline bool doubleequals(const double a, const double b)
{
    static const double delta = 0.0001;
    const double diff = a - b;
    return diff < delta && diff > -delta;
}
int main()
{
    const std::vector<std::string> carguments({"-i", "7", "-c", "a", "2.7",\
 "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    const std::vector<std::string> pcarguments({"progname", "-i", "7", "-c",\
 "a", "2.7", "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    // args
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            args::ArgumentParser parser("This is a test program.", "This goes\
 after the options.");
            args::ValueFlag<int> integer(parser, "integer", "The integer\
 flag", {'i', "int"});
            args::ValueFlagList<char> characters(parser, "characters", "The\
 character flag", {'c', "char"});
            args::PositionalList<double> numbers(parser, "numbers", "The\
 numbers position list");
            parser.ParseArgs(arguments);
            const int i = args::get(integer);
            const std::vector<char> c(args::get(characters));
            const std::vector<double> n(args::get(numbers));
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "args seconds to run: " << duration_cast<duration<double\
>>(runtime).count() << std::endl;
    }
    // tclap
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(pcarguments);
            TCLAP::CmdLine cmd("Command description message", ' ', "0.9");
            TCLAP::ValueArg<int> integer("i", "int", "The integer flag",\
 false, 0, "integer", cmd);
            TCLAP::MultiArg<char> characters("c", "char", "The character\
 flag", false, "characters", cmd);
            TCLAP::UnlabeledMultiArg<double> numbers("numbers", "The numbers\
 position list", false, "foo", cmd, false);
            cmd.parse(arguments);
            const int i = integer.getValue();
            const std::vector<char> c(characters.getValue());
            const std::vector<double> n(numbers.getValue());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "tclap seconds to run: " << duration_cast<duration<doubl\
e>>(runtime).count() << std::endl;
    }
    // boost::program_options
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            po::options_description desc("This is a test program.");
            desc.add_options()
                ("int,i", po::value<int>(), "The integer flag")
                ("char,c", po::value<std::vector<char>>(), "The character\
 flag")
                ("numbers", po::value<std::vector<double>>(), "The numbers\
 flag");
            po::positional_options_description p;
            p.add("numbers", -1);
            po::variables_map vm;
            po::store(po::command_line_parser(carguments).options(desc).posit\
ional(p).run(), vm);
            const int i = vm["int"].as<int>();
            const std::vector<char> c(vm["char"].as<std::vector<char>>());
            const std::vector<double> n(vm["numbers"].as<std::vector<double>>\
());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "boost::program_options seconds to run: " <<\
 duration_cast<duration<double>>(runtime).count() << std::endl;
    }
    return 0;
}
```

So, on top of being more flexible, smaller, and easier to read, it is faster
than the most common alternatives.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for args
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/taywee/args">args</a>.
    A simple, small, flexible, single-header C++11 argument parsing library.
</p>

<p align="center">
    <a href="https://github.com/taywee/args">
        <img src="https://img.shields.io/website/https/github.com/taywee/args\
.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://github.com/build2-packaging/args">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/args.svg?down_message=offline&label=build2&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://cppget.org/args">
        <img src="https://img.shields.io/website/https/cppget.org/args.svg?do\
wn_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_mess\
age=online">
    </a>
    <a href="https://queue.cppget.org/args">
        <img src="https://img.shields.io/website/https/queue.cppget.org/args.\
svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-the-b\
adge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: args ^ 6.4.6

The single header-only C++ library to use args as command-line argument\
 parser can be imported by the following declaration in a `buildfile`.

    import args = args%lib{args}

## Configuration
There are no configuration options vailable.

## Issues
Currently, there are no known issues.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/args/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/args/is\
sues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/args)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
* 6.0.0
Change Reader to functor type, breaking change.
Change Reader functor to allow any return type, but specifically need\
 bool-testable return for NOEXCEPT use.
Change List and Map templates into template templates to enforce proper type\
 use and to clean up user template invocations (i.e. `args::ValueFlagList<std\
::string, std::unordered_set<std::string>>` becomes `args::ValueFlagList<std:\
:string, std::unordered_set>`, also breaking change.

* 5.0.0
Implemented proper subparsers.
Added better C++11 style.
Improved documentation.

* 4.0.0
Changed all wording:

ArgFlag -> ValueFlag
Counter -> CounterFlag
PosArg -> Positional

Argument now solely refers to command line arguments.
Value refers to the argument that flags or positionals can take and store.
Positional is a positional option, which contains a value.
Option refers to flags and positionals, which can contain values.

\
changes-type: text/plain
url: https://github.com/Taywee/args
doc-url: https://taywee.github.io/args/
package-url: https://github.com/build2-packaging/args/
email: taywee@gmx.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
tests: args-tests == 6.4.6
builds: default
builds: -( +windows &gcc &!optimized ); Unoptimized compilation with MinGW on\
 Windows gets stuck.
bootstrap-build:
\
project = args

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: args/args-6.4.6+2.tar.gz
sha256sum: beeba3583dd43e2693f6316c4b3d505f321277d5eb5978794f7b1d3c4c995e4c
:
name: args
version: 6.4.7
type: lib,binless
language: c++
project: args
summary: C++ argument parser library
license: MIT
description:
\
# args

**This library is considered feature-complete by its creator.  It will still
receive bug fixes, and good pull requests will be accepted, but no new major
functionality or API changes will be added to this codebase.**

[![Cpp Standard](https://img.shields.io/badge/C%2B%2B-11-blue.svg)](https://e\
n.wikipedia.org/wiki/C%2B%2B11)
[![Travis status](https://travis-ci.org/Taywee/args.svg?branch=master)](https\
://travis-ci.org/Taywee/args)
[![AppVeyor status](https://ci.appveyor.com/api/projects/status/nlnlmpttdjlnd\
yc2?svg=true)](https://ci.appveyor.com/project/Taywee/args)
[![Coverage Status](https://coveralls.io/repos/github/Taywee/args/badge.svg?b\
ranch=master)](https://coveralls.io/github/Taywee/args?branch=master)
[![Read the Docs](https://img.shields.io/readthedocs/pip.svg)](https://taywee\
.github.io/args)

A simple, small, flexible, single-header C++11 argument parsing library.

This is designed to appear somewhat similar to Python's argparse, but in C++,
with static type checking, and hopefully a lot faster (also allowing fully
nestable group logic, where Python's argparse does not).

UTF-8 support is limited at best.  No normalization is performed, so non-ascii
characters are very best kept out of flags, and combined glyphs are probably
going to mess up help output if you use them.  Most UTF-8 necessary for
internationalization should work for most cases, though heavily combinatory\
 UTF
alphabets may wreak havoc.

This program is MIT-licensed, so you can use the header as-is with no
restrictions. I'd appreciate attribution in a README, Man page, or something\
 if
you are feeling generous, but all that's required is that you don't remove the
license and my name from the header of the args.hxx file in source
redistributions (ie. don't pretend that you wrote it).  I do welcome additions
and updates wherever you feel like contributing code.

The API documentation can be found at https://taywee.github.io/args

The code can be downloaded at https://github.com/Taywee/args

There are also somewhat extensive examples below.

You can find the complete test cases at
https://github.com/Taywee/args/blob/master/test.cxx, which should very well
describe the usage, as it's built to push the boundaries.

# What does it do?

It:

* Lets you handle flags, flag+value, and positional arguments simply and
  elegantly, with the full help of static typechecking.
* Allows you to use your own types in a pretty simple way.
* Lets you use count flags, and lists of all argument-accepting types.
* Allows full validation of groups of required arguments, though output isn't
  pretty when something fails group validation. User validation functions are
  accepted. Groups are fully nestable.
* Generates pretty help for you, with some good tweakable parameters.
* Lets you customize all prefixes and most separators, allowing you to create
  an infinite number of different argument syntaxes.
* Lets you parse, by default, any type that has a stream extractor operator\
 for
  it. If this doesn't work for your uses, you can supply a function and parse
  the string yourself if you like.
* Lets you decide not to allow separate-argument value flags or joined ones
  (like disallowing `--foo bar`, requiring `--foo=bar`, or the inverse, or the
  same for short options).
* Allows you to create subparsers, to reuse arguments for multiple commands\
 and
  to refactor your command's logic to a function or lambda.
* Allows one value flag to take a specific number of values (like `--foo first
  second`, where --foo slurps both arguments).
* Allows you to have value flags only optionally accept values.
* Provides autocompletion for bash.

# What does it not do?

There are tons of things this library does not do!

## It will not ever:

* Allow you to intermix multiple different prefix types (eg. `++foo` and
  `--foo` in the same parser), though shortopt and longopt prefixes can be
  different.
* Allow you to make flags sensitive to order (like gnu find), or make them
  sensitive to relative ordering with positionals.  The only orderings that\
 are
  order-sensitive are:
    * Positionals relative to one-another
    * List positionals or flag values to each of their own respective items
* Allow you to use a positional list before any other positionals (the last
  argument list will slurp all subsequent positional arguments).  The logic\
 for
  allowing this would be a lot more code than I'd like, and would make static
  checking much more difficult, requiring us to sort std::string arguments and
  pair them to positional arguments before assigning them, rather than what we
  currently do, which is assigning them as we go for better simplicity and
  speed.  The library doesn't stop you from trying, but the first positional
  list will slurp in all following positionals

# How do I install it?

```shell
sudo make install
```

Or, to install it somewhere special (default is `/usr/local`):

```shell
sudo make install DESTDIR=/opt/mydir
```

You can also copy the file into your source tree, if you want to be absolutely
sure you keep a stable API between projects.

If you prefer other installation methods, many standard ones are available and
included, including CMake, conan, buck, and meson.  An example CMake file\
 using
args is included in the examples directory.

## I also want man pages.

```shell
make doc/man
sudo make installman
```

This requires Doxygen

## I want the doxygen documentation locally

```shell
doxygen Doxyfile
```

Your docs are now in doc/html

## How to depend on it using tipi.build?

Simply add the following entry to your `.tipi/deps` file

```json
{
    "taywee/args": { "@": "6.4.1" }
}
```

You can optionally remove the `@` section to *target HEAD* easily.

# How do I use it?

Create an ArgumentParser, modify its attributes to fit your needs, add
arguments through regular argument objects (or create your own), and match\
 them
with an args::Matcher object (check its construction details in the doxygen
documentation.

Then you can either call it with args::ArgumentParser::ParseCLI for the full
command line with program name, or args::ArgumentParser::ParseArgs with
just the arguments to be parsed.  The argument and group variables can then be
interpreted as a boolean to see if they've been matched.

All variables can be pulled (including the boolean match status for regular
args::Flag variables) with args::get.

# Group validation is weird.  How do I get more helpful output for failed\
 validation?

This is unfortunately not possible, given the power of the groups available.
For instance, if you have a group validation that works like 
`(A && B) || (C && (D XOR E))`, how is this library going to be able to
determine what exactly when wrong when it fails?  It only knows that the
entire expression evaluated false, not specifically what the user did wrong
(and this is doubled over by the fact that validation operations are ordinary
functions without any special meaning to the library).  As you are the only\
 one
who understands the logic of your program, if you want useful group messages,
you have to catch the ValidationError as a special case and check your own
groups and spit out messages accordingly.

# Is it developed with regression tests?

Yes.  tests.cxx in the git repository has a set of standard tests (which are
still relatively small in number, but I would welcome some expansion here),\
 and
thanks to Travis CI and AppVeyor, these tests run with every single push:

```shell
% make runtests
g++ test.cxx -o test.o -I. -std=c++11 -O2 -c -MMD
g++ -o test test.o -std=c++11 -O2
./test
=============================================================================\
==
All tests passed (74 assertions in 15 test cases)

%
```

The testing library used is [Catch](https://github.com/philsquared/Catch).

# Examples

All the code examples here will be complete code examples, with some output.

## Simple example:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::CompletionFlag completion(parser, {"complete"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (const args::Completion& e)
    {
        std::cout << e.what();
        return 0;
    }
    catch (const args::Help&)
    {
        std::cout << parser;
        return 0;
    }
    catch (const args::ParseError& e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test
 % ./test -h
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 

    This goes after the options. 
 % 
```

## Boolean flags, special group types, different matcher construction:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group group(parser, "This group is all exclusive:",\
 args::Group::Validators::Xor);
    args::Flag foo(group, "foo", "The foo flag", {'f', "foo"});
    args::Flag bar(group, "bar", "The bar flag", {'b'});
    args::Flag baz(group, "baz", "The baz flag", {"baz"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (foo) { std::cout << "foo" << std::endl; }
    if (bar) { std::cout << "bar" << std::endl; }
    if (baz) { std::cout << "baz" << std::endl; }
    return 0;
}
```

```shell
 % ./test   
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         This group is all exclusive:
        -f, --foo          The foo flag 
        -b                 The bar flag 
        --baz              The baz flag 

    This goes after the options. 
 % ./test -f
foo
 % ./test --foo
foo
 % ./test --foo -f
foo
 % ./test -b      
bar
 % ./test --baz
baz
 % ./test --baz -f
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 
...
 % ./test --baz -fb
Group validation failed somewhere!
  ./test {OPTIONS} 
...
 % 
```

## Argument flags, Positional arguments, lists

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::ValueFlag<int> integer(parser, "integer", "The integer flag",\
 {'i'});
    args::ValueFlagList<char> characters(parser, "characters", "The character\
 flag", {'c'});
    args::Positional<std::string> foo(parser, "foo", "The foo position");
    args::PositionalList<double> numbers(parser, "numbers", "The numbers\
 position list");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (integer) { std::cout << "i: " << args::get(integer) << std::endl; }
    if (characters) { for (const auto ch: args::get(characters)) { std::cout\
 << "c: " << ch << std::endl; } }
    if (foo) { std::cout << "f: " << args::get(foo) << std::endl; }
    if (numbers) { for (const auto nm: args::get(numbers)) { std::cout << "n:\
 " << nm << std::endl; } }
    return 0;
}
```

```shell
% ./test -h
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 
      -i integer         The integer flag 
      -c characters      The character flag 
      foo                The foo position 
      numbers            The numbers position list 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. 
 % ./test -i 5
i: 5
 % ./test -i 5.2
Argument 'integer' received invalid value type '5.2'
  ./test {OPTIONS} [foo] [numbers...] 
 % ./test -c 1 -c 2 -c 3
c: 1
c: 2
c: 3
 % 
 % ./test 1 2 3 4 5 6 7 8 9
f: 1
n: 2
n: 3
n: 4
n: 5
n: 6
n: 7
n: 8
n: 9
 % ./test 1 2 3 4 5 6 7 8 9 a
Argument 'numbers' received invalid value type 'a'
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 
...
```

## Commands

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index");
    args::Command commit(commands, "commit", "record changes to the\
 repository");
    args::Group arguments(p, "arguments", args::Group::Validators::DontCare,\
 args::Options::Global);
    args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
    args::HelpFlag h(arguments, "help", "help", {'h', "help"});
    args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

    try
    {
        p.ParseCLI(argc, argv);
        if (add)
        {
            std::cout << "Add";
        }
        else
        {
            std::cout << "Commit";
        }

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2
```

## Refactoring commands

```cpp
#include <iostream>
#include "args.hxx"

args::Group arguments("arguments");
args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
args::HelpFlag h(arguments, "help", "help", {'h', "help"});
args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

void CommitCommand(args::Subparser &parser)
{
    args::ValueFlag<std::string> message(parser, "MESSAGE", "commit message",\
 {'m'});
    parser.Parse();

    std::cout << "Commit";

    for (auto &&path : pathsList)
    {
        std::cout << ' ' << path;
    }

    std::cout << std::endl;

    if (message)
    {
        std::cout << "message: " << args::get(message) << std::endl;
    }
}

int main(int argc, const char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index",\
 [&](args::Subparser &parser)
    {
        parser.Parse();
        std::cout << "Add";

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    });

    args::Command commit(commands, "commit", "record changes to the\
 repository", &CommitCommand);
    args::GlobalOptions globals(p, arguments);

    try
    {
        p.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2

% ./test commit -m "my commit message" 1 2
Commit 1 2
message: my commit message
```

# Custom type parsers (here we use std::tuple)

```cpp
#include <iostream>
#include <tuple>

std::istream& operator>>(std::istream& is, std::tuple<int, int>& ints)
{
    is >> std::get<0>(ints);
    is.get();
    is >> std::get<1>(ints);
    return is;
}

#include <args.hxx>

struct DoublesReader
{
    void operator()(const std::string &name, const std::string &value,\
 std::tuple<double, double> &destination)
    {
        size_t commapos = 0;
        std::get<0>(destination) = std::stod(value, &commapos);
        std::get<1>(destination) = std::stod(std::string(value, commapos +\
 1));
    }
};

int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.");
    args::Positional<std::tuple<int, int>> ints(parser, "INTS", "This takes a\
 pair of integers.");
    args::Positional<std::tuple<double, double>, DoublesReader>\
 doubles(parser, "DOUBLES", "This takes a pair of doubles.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (ints)
    {
        std::cout << "ints found: " << std::get<0>(args::get(ints)) << " and\
 " << std::get<1>(args::get(ints)) << std::endl;
    }
    if (doubles)
    {
        std::cout << "doubles found: " << std::get<0>(args::get(doubles)) <<\
 " and " << std::get<1>(args::get(doubles)) << std::endl;
    }
    return 0;
}
```

```shell
 % ./test -h
Argument could not be matched: 'h'
  ./test [INTS] [DOUBLES] 

    This is a test program. 

  OPTIONS:

      INTS               This takes a pair of integers. 
      DOUBLES            This takes a pair of doubles. 

 % ./test 5
ints found: 5 and 0
 % ./test 5,8
ints found: 5 and 8
 % ./test 5,8 2.4,8
ints found: 5 and 8
doubles found: 2.4 and 8
 % ./test 5,8 2.4, 
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stod
zsh: abort      ./test 5,8 2.4,
 % ./test 5,8 2.4 
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::basic_string: __pos (which is 4) > this->size()\
 (which is 3)
zsh: abort      ./test 5,8 2.4
 % ./test 5,8 2.4-7
ints found: 5 and 8
doubles found: 2.4 and 7
 % ./test 5,8 2.4,-7
ints found: 5 and 8
doubles found: 2.4 and -7
```

As you can see, with your own types, validation can get a little weird.  Make
sure to check and throw a parsing error (or whatever error you want to catch)
if you can't fully deduce your type.  The built-in validator will only throw\
 if
there are unextracted characters left in the stream.

## Long descriptions and proper wrapping and listing

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program with a really long\
 description that is probably going to have to be wrapped across multiple\
 different lines.  This is a test to see how the line wrapping works", "This\
 goes after the options.  This epilog is also long enough that it will have\
 to be properly wrapped to display correctly on the screen");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {'h',\
 "help"});
    args::ValueFlag<std::string> foo(parser, "FOO", "The foo flag.", {'a',\
 'b', 'c', "a", "b", "c", "the-foo-flag"});
    args::ValueFlag<std::string> bar(parser, "BAR", "The bar flag.  This one\
 has a lot of options, and will need wrapping in the description, along with\
 its long flag list.", {'d', 'e', 'f', "d", "e", "f"});
    args::ValueFlag<std::string> baz(parser, "FOO", "The baz flag.  This one\
 has a lot of options, and will need wrapping in the description, even with\
 its short flag list.", {"baz"});
    args::Positional<std::string> pos1(parser, "POS1", "The pos1 argument.");
    args::PositionalList<std::string> poslist1(parser, "POSLIST1", "The\
 poslist1 argument.");
    args::Positional<std::string> pos2(parser, "POS2", "The pos2 argument.");
    args::PositionalList<std::string> poslist2(parser, "POSLIST2", "The\
 poslist2 argument.");
    args::Positional<std::string> pos3(parser, "POS3", "The pos3 argument.");
    args::PositionalList<std::string> poslist3(parser, "POSLIST3", "The\
 poslist3 argument.");
    args::Positional<std::string> pos4(parser, "POS4", "The pos4 argument.");
    args::PositionalList<std::string> poslist4(parser, "POSLIST4", "The\
 poslist4 argument.");
    args::Positional<std::string> pos5(parser, "POS5", "The pos5 argument.");
    args::PositionalList<std::string> poslist5(parser, "POSLIST5", "The\
 poslist5 argument.");
    args::Positional<std::string> pos6(parser, "POS6", "The pos6 argument.");
    args::PositionalList<std::string> poslist6(parser, "POSLIST6", "The\
 poslist6 argument.");
    args::Positional<std::string> pos7(parser, "POS7", "The pos7 argument.");
    args::PositionalList<std::string> poslist7(parser, "POSLIST7", "The\
 poslist7 argument.");
    args::Positional<std::string> pos8(parser, "POS8", "The pos8 argument.");
    args::PositionalList<std::string> poslist8(parser, "POSLIST8", "The\
 poslist8 argument.");
    args::Positional<std::string> pos9(parser, "POS9", "The pos9 argument.");
    args::PositionalList<std::string> poslist9(parser, "POSLIST9", "The\
 poslist9 argument.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test -h
  ./test {OPTIONS} [POS1] [POSLIST1...] [POS2] [POSLIST2...] [POS3]
      [POSLIST3...] [POS4] [POSLIST4...] [POS5] [POSLIST5...] [POS6]
      [POSLIST6...] [POS7] [POSLIST7...] [POS8] [POSLIST8...] [POS9]
      [POSLIST9...] 

    This is a test program with a really long description that is probably\
 going
    to have to be wrapped across multiple different lines. This is a test to\
 see
    how the line wrapping works 

  OPTIONS:

      -h, --help         Show this help menu. 
      -a FOO, -b FOO, -c FOO, --a FOO, --b FOO, --c FOO, --the-foo-flag FOO
                         The foo flag. 
      -d BAR, -e BAR, -f BAR, --d BAR, --e BAR, --f BAR
                         The bar flag. This one has a lot of options, and will
                         need wrapping in the description, along with its long
                         flag list. 
      --baz FOO          The baz flag. This one has a lot of options, and will
                         need wrapping in the description, even with its short
                         flag list. 
      POS1               The pos1 argument. 
      POSLIST1           The poslist1 argument. 
      POS2               The pos2 argument. 
      POSLIST2           The poslist2 argument. 
      POS3               The pos3 argument. 
      POSLIST3           The poslist3 argument. 
      POS4               The pos4 argument. 
      POSLIST4           The poslist4 argument. 
      POS5               The pos5 argument. 
      POSLIST5           The poslist5 argument. 
      POS6               The pos6 argument. 
      POSLIST6           The poslist6 argument. 
      POS7               The pos7 argument. 
      POSLIST7           The poslist7 argument. 
      POS8               The pos8 argument. 
      POSLIST8           The poslist8 argument. 
      POS9               The pos9 argument. 
      POSLIST9           The poslist9 argument. 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. This epilog is also long enough that it will
    have to be properly wrapped to display correctly on the screen 
 %
```

## Completion

Completion currently only supports bash.

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::CompletionFlag completion(parser, {"complete"});
    args::ValueFlag<std::string> foo(parser, "name", "description", {'f',\
 "foo"}, "abc");
    args::ValueFlag<std::string> bar(parser, "name", "description", {'b',\
 "bar"}, "abc");
    args::ValueFlag<std::string> baz(parser, "name", "description", {'a',\
 "baz"}, "abc");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (const args::Completion& e)
    {
        std::cout << e.what();
        return 0;
    }
    catch (const args::Help&)
    {
        std::cout << parser;
        return 0;
    }
    catch (const args::ParseError& e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```sh
g++ -ocompletiontest ./completiontest.cxx "-I$args_path"
PATH="$PWD:$PATH"
_args() {
    _init_completion -n 2> /dev/null
    local program comparg

    program="${COMP_WORDS[0]}"
    comparg="--complete" # replace this with your flag

    COMPREPLY=($("$program" "$comparg" bash "$COMP_CWORD" "${COMP_WORDS[@]}"\
 2> /dev/null))
    [[ $COMPREPLY ]] && return
    _filedir
}
complete -F _args completiontest

# Now when you type `completiontest --` and press tab, you'll get completion
```

## Customizing parser prefixes

### dd-style

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This command likes to break your disks");
    parser.LongPrefix("");
    parser.LongSeparator("=");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {"help"});
    args::ValueFlag<long> bs(parser, "BYTES", "Block size", {"bs"}, 512);
    args::ValueFlag<long> skip(parser, "BYTES", "Bytes to skip", {"skip"}, 0);
    args::ValueFlag<std::string> input(parser, "BLOCK SIZE", "Block size",\
 {"if"});
    args::ValueFlag<std::string> output(parser, "BLOCK SIZE", "Block size",\
 {"of"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    std::cout << "bs = " << args::get(bs) << std::endl;
    std::cout << "skip = " << args::get(skip) << std::endl;
    if (input) { std::cout << "if = " << args::get(input) << std::endl; }
    if (output) { std::cout << "of = " << args::get(output) << std::endl; }
    return 0;
}
```

```shell
 % ./test help
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      help                              Show this help menu.
      bs=[BYTES]                        Block size
      skip=[BYTES]                      Bytes to skip
      if=[BLOCK SIZE]                   Block size
      of=[BLOCK SIZE]                   Block size

 % ./test bs=1024 skip=7 if=/tmp/input
bs = 1024
skip = 7
if = /tmp/input
```

### Windows style

The code is the same as above, but the two lines are replaced out:

```cpp
parser.LongPrefix("/");
parser.LongSeparator(":");
```

```shell
 % ./test /help     
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      /help                             Show this help menu.
      /bs:[BYTES]                       Block size
      /skip:[BYTES]                     Bytes to skip
      /if:[BLOCK SIZE]                  Block size
      /of:[BLOCK SIZE]                  Block size

 % ./test /bs:72 /skip:87 /if:/tmp/test.txt
bs = 72
skip = 87
if = /tmp/test.txt
 % 
```

## Group nesting help menu text

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group xorgroup(parser, "this group provides xor validation:",\
 args::Group::Validators::Xor);
    args::Flag a(xorgroup, "a", "test flag", {'a'});
    args::Flag b(xorgroup, "b", "test flag", {'b'});
    args::Flag c(xorgroup, "c", "test flag", {'c'});
    args::Group nxor(xorgroup, "this group provides all-or-none (nxor)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag d(nxor, "d", "test flag", {'d'});
    args::Flag e(nxor, "e", "test flag", {'e'});
    args::Flag f(nxor, "f", "test flag", {'f'});
    args::Group nxor2(nxor, "this group provides all-or-none (nxor2)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag i(nxor2, "i", "test flag", {'i'});
    args::Flag j(nxor2, "j", "test flag", {'j'});
    args::Flag k(nxor2, "k", "test flag", {'k'});
    args::Group nxor3(nxor, "this group provides all-or-none (nxor3)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag l(nxor3, "l", "test flag", {'l'});
    args::Flag m(nxor3, "m", "test flag", {'m'});
    args::Flag n(nxor3, "n", "test flag", {'n'});
    args::Group atleastone(xorgroup, "this group provides at-least-one\
 validation:", args::Group::Validators::AtLeastOne);
    args::Flag g(atleastone, "g", "test flag", {'g'});
    args::Flag o(atleastone, "o", "test flag", {'o'});
    args::HelpFlag help(parser, "help", "Show this help menu", {'h', "help"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    return 0;
}
```

```shell
 % /tmp/test -h
  /tmp/test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         this group provides xor validation: 
        -a                 test flag 
        -b                 test flag 
        -c                 test flag 
                           this group provides all-or-none (nxor) validation: 
          -d                 test flag 
          -e                 test flag 
          -f                 test flag 
                             this group provides all-or-none (nxor2)\
 validation:
            -i                 test flag 
            -j                 test flag 
            -k                 test flag 
                             this group provides all-or-none (nxor3)\
 validation:
            -l                 test flag 
            -m                 test flag 
            -n                 test flag 
                           this group provides at-least-one validation: 
          -g                 test flag 
          -o                 test flag 
      -h, --help         Show this help menu 

    This goes after the options. 
 %                                                                           \
     
```

## Mapping arguments

I haven't written out a long example for this, but here's the test case you\
 should be able to discern the meaning from:

```cpp
bool ToLowerReader(const std::string &name, const std::string &value,\
 std::string &destination)
{
    destination = value;
    std::transform(destination.begin(), destination.end(),\
 destination.begin(), ::tolower);
    return true;
}

TEST_CASE("Mapping types work as needed", "[args]")
{
    std::unordered_map<std::string, MappingEnum> map{
        {"default", MappingEnum::def},
        {"foo", MappingEnum::foo},
        {"bar", MappingEnum::bar},
        {"red", MappingEnum::red},
        {"yellow", MappingEnum::yellow},
        {"green", MappingEnum::green}};
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::MapFlag<std::string, MappingEnum> dmf(parser, "DMF", "Maps string\
 to an enum", {"dmf"}, map);
    args::MapFlag<std::string, MappingEnum> mf(parser, "MF", "Maps string to\
 an enum", {"mf"}, map);
    args::MapFlag<std::string, MappingEnum, ToLowerReader> cimf(parser,\
 "CIMF", "Maps string to an enum case-insensitively", {"cimf"}, map);
    args::MapFlagList<std::string, MappingEnum> mfl(parser, "MFL", "Maps\
 string to an enum list", {"mfl"}, map);
    args::MapPositional<std::string, MappingEnum> mp(parser, "MP", "Maps\
 string to an enum", map);
    args::MapPositionalList<std::string, MappingEnum> mpl(parser, "MPL",\
 "Maps string to an enum list", map);
    parser.ParseArgs(std::vector<std::string>{"--mf=red", "--cimf=YeLLoW",\
 "--mfl=bar", "foo", "--mfl=green", "red", "--mfl", "bar", "default"});
    REQUIRE_FALSE(dmf);
    REQUIRE(args::get(dmf) == MappingEnum::def);
    REQUIRE(mf);
    REQUIRE(args::get(mf) == MappingEnum::red);
    REQUIRE(cimf);
    REQUIRE(args::get(cimf) == MappingEnum::yellow);
    REQUIRE(mfl);
    REQUIRE((args::get(mfl) == std::vector<MappingEnum>{MappingEnum::bar,\
 MappingEnum::green, MappingEnum::bar}));
    REQUIRE(mp);
    REQUIRE((args::get(mp) == MappingEnum::foo));
    REQUIRE(mpl);
    REQUIRE((args::get(mpl) == std::vector<MappingEnum>{MappingEnum::red,\
 MappingEnum::def}));
    REQUIRE_THROWS_AS(parser.ParseArgs(std::vector<std::string>{"--mf=YeLLoW"\
}), args::MapError);
}
```

# How fast is it?

This should not really be a question you ask when you are looking for an
argument-parsing library, but every test I've done shows args as being about
65% faster than TCLAP and 220% faster than boost::program_options.

The simplest benchmark I threw together is the following one, which parses the
command line `-i 7 -c a 2.7 --char b 8.4 -c c 8.8 --char d` with a parser that
parses -i as an int, -c as a list of chars, and the positional parameters as a
list of doubles (the command line was originally much more complex, but\
 TCLAP's
limitations made me trim it down so I could use a common command line across
all libraries.  I also have to copy in the arguments list with every run,
because TCLAP permutes its argument list as it runs (and comparison would have
been unfair without comparing all about equally), but that surprisingly didn't
affect much.  Also tested is pulling the arguments out, but that was fast
compared to parsing, as would be expected.

### The run:

```shell
% g++ -obench bench.cxx -O2 -std=c++11 -lboost_program_options
% ./bench
args seconds to run: 0.895472
tclap seconds to run: 1.45001
boost::program_options seconds to run: 1.98972
%
```

### The benchmark:

```cpp
#undef NDEBUG
#include <iostream>
#include <chrono>
#include <cassert>
#include "args.hxx"
#include <tclap/CmdLine.h>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
using namespace std::chrono;
inline bool doubleequals(const double a, const double b)
{
    static const double delta = 0.0001;
    const double diff = a - b;
    return diff < delta && diff > -delta;
}
int main()
{
    const std::vector<std::string> carguments({"-i", "7", "-c", "a", "2.7",\
 "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    const std::vector<std::string> pcarguments({"progname", "-i", "7", "-c",\
 "a", "2.7", "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    // args
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            args::ArgumentParser parser("This is a test program.", "This goes\
 after the options.");
            args::ValueFlag<int> integer(parser, "integer", "The integer\
 flag", {'i', "int"});
            args::ValueFlagList<char> characters(parser, "characters", "The\
 character flag", {'c', "char"});
            args::PositionalList<double> numbers(parser, "numbers", "The\
 numbers position list");
            parser.ParseArgs(arguments);
            const int i = args::get(integer);
            const std::vector<char> c(args::get(characters));
            const std::vector<double> n(args::get(numbers));
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "args seconds to run: " << duration_cast<duration<double\
>>(runtime).count() << std::endl;
    }
    // tclap
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(pcarguments);
            TCLAP::CmdLine cmd("Command description message", ' ', "0.9");
            TCLAP::ValueArg<int> integer("i", "int", "The integer flag",\
 false, 0, "integer", cmd);
            TCLAP::MultiArg<char> characters("c", "char", "The character\
 flag", false, "characters", cmd);
            TCLAP::UnlabeledMultiArg<double> numbers("numbers", "The numbers\
 position list", false, "foo", cmd, false);
            cmd.parse(arguments);
            const int i = integer.getValue();
            const std::vector<char> c(characters.getValue());
            const std::vector<double> n(numbers.getValue());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "tclap seconds to run: " << duration_cast<duration<doubl\
e>>(runtime).count() << std::endl;
    }
    // boost::program_options
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            po::options_description desc("This is a test program.");
            desc.add_options()
                ("int,i", po::value<int>(), "The integer flag")
                ("char,c", po::value<std::vector<char>>(), "The character\
 flag")
                ("numbers", po::value<std::vector<double>>(), "The numbers\
 flag");
            po::positional_options_description p;
            p.add("numbers", -1);
            po::variables_map vm;
            po::store(po::command_line_parser(carguments).options(desc).posit\
ional(p).run(), vm);
            const int i = vm["int"].as<int>();
            const std::vector<char> c(vm["char"].as<std::vector<char>>());
            const std::vector<double> n(vm["numbers"].as<std::vector<double>>\
());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "boost::program_options seconds to run: " <<\
 duration_cast<duration<double>>(runtime).count() << std::endl;
    }
    return 0;
}
```

So, on top of being more flexible, smaller, and easier to read, it is faster
than the most common alternatives.

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for args

This project builds and defines the build2 package for [args](https://github.\
com/taywee/args), which is a simple, small, flexible, single-header C++11\
 argument parsing library.

[![Official](https://img.shields.io/website/https/github.com/taywee/args.svg?\
down_message=offline&label=Official&style=for-the-badge&up_color=blue&up_mess\
age=online)](https://github.com/taywee/args)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/a\
rgs.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blue&u\
p_message=online)](https://github.com/build2-packaging/args)
[![cppget.org](https://img.shields.io/website/https/cppget.org/args.svg?down_\
message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_message\
=online)](https://cppget.org/args)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/ar\
gs.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-th\
e-badge&up_color=orange&up_message=running)](https://queue.cppget.org/args)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/args.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: args ^6.4.7

The library can be imported by the following declaration in a `buildfile`.

    import args = args%lib{args}

## Configuration
There are no configuration options available.

## Issues
Currently, there are no known issues.

## Contributing
Thank you in advance for your help and contribution to keep this package\
 up-to-date.
Please, file an issue on [GitHub](https://github.com/build2-packaging/glm/iss\
ues) for questions, bug reports, or to recommend updating the package version.
If you're making a pull request to fix bugs or update the package version\
 yourself, refer to the [`build2` Packaging Guidelines](https://build2.org/bu\
ild2-toolchain/doc/build2-toolchain-packaging.xhtml#core-version-management).

\
package-description-type: text/markdown;variant=GFM
changes:
\
* 6.0.0
Change Reader to functor type, breaking change.
Change Reader functor to allow any return type, but specifically need\
 bool-testable return for NOEXCEPT use.
Change List and Map templates into template templates to enforce proper type\
 use and to clean up user template invocations (i.e. `args::ValueFlagList<std\
::string, std::unordered_set<std::string>>` becomes `args::ValueFlagList<std:\
:string, std::unordered_set>`, also breaking change.

* 5.0.0
Implemented proper subparsers.
Added better C++11 style.
Improved documentation.

* 4.0.0
Changed all wording:

ArgFlag -> ValueFlag
Counter -> CounterFlag
PosArg -> Positional

Argument now solely refers to command line arguments.
Value refers to the argument that flags or positionals can take and store.
Positional is a positional option, which contains a value.
Option refers to flags and positionals, which can contain values.

\
changes-type: text/plain
url: https://github.com/Taywee/args
doc-url: https://taywee.github.io/args/
package-url: https://github.com/build2-packaging/args/
email: taywee@gmx.com
package-email: packaging@build2.org
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: args-tests == 6.4.7
builds: default
builds: -( +windows &gcc &!optimized ); Unoptimized compilation with MinGW on\
 Windows gets stuck.
bootstrap-build:
\
project = args

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: args/args-6.4.7.tar.gz
sha256sum: 81f4ff2e875ad345a4b7e3d6ccf8d467ee5204a9b4a3830e73b6c36ff77b5031
:
name: args-tests
version: 6.4.6+2
type: exe
language: c++
project: args
summary: Tests for the args library
license: MIT
description:
\
# args

#### Note that this library is essentially in maintenance mode.  I haven't\
 had the time to work on it or give it the love that it deserves.  I'm not\
 adding new features, but I will fix bugs.  I will also very gladly accept\
 pull requests.

[![Cpp Standard](https://img.shields.io/badge/C%2B%2B-11-blue.svg)](https://e\
n.wikipedia.org/wiki/C%2B%2B11)
[![Travis status](https://travis-ci.org/Taywee/args.svg?branch=master)](https\
://travis-ci.org/Taywee/args)
[![AppVeyor status](https://ci.appveyor.com/api/projects/status/nlnlmpttdjlnd\
yc2?svg=true)](https://ci.appveyor.com/project/Taywee/args)
[![Coverage Status](https://coveralls.io/repos/github/Taywee/args/badge.svg?b\
ranch=master)](https://coveralls.io/github/Taywee/args?branch=master)
[![Read the Docs](https://img.shields.io/readthedocs/pip.svg)](https://taywee\
.github.io/args)

A simple, small, flexible, single-header C++11 argument parsing library.

This is designed to appear somewhat similar to Python's argparse, but in C++,
with static type checking, and hopefully a lot faster (also allowing fully
nestable group logic, where Python's argparse does not).

UTF-8 support is limited at best.  No normalization is performed, so non-ascii
characters are very best kept out of flags, and combined glyphs are probably
going to mess up help output if you use them.  Most UTF-8 necessary for
internationalization should work for most cases, though heavily combinatory\
 UTF
alphabets may wreak havoc.

This program is MIT-licensed, so you can use the header as-is with no
restrictions. I'd appreciate attribution in a README, Man page, or something\
 if
you are feeling generous, but all that's required is that you don't remove the
license and my name from the header of the args.hxx file in source
redistributions (ie. don't pretend that you wrote it).  I do welcome additions
and updates wherever you feel like contributing code.

The API documentation can be found at https://taywee.github.io/args

The code can be downloaded at https://github.com/Taywee/args

There are also somewhat extensive examples below.

You can find the complete test cases at
https://github.com/Taywee/args/blob/master/test.cxx, which should very well
describe the usage, as it's built to push the boundaries.

# What does it do?

It:

* Lets you handle flags, flag+value, and positional arguments simply and
  elegantly, with the full help of static typechecking.
* Allows you to use your own types in a pretty simple way.
* Lets you use count flags, and lists of all argument-accepting types.
* Allows full validation of groups of required arguments, though output isn't
  pretty when something fails group validation. User validation functions are
  accepted. Groups are fully nestable.
* Generates pretty help for you, with some good tweakable parameters.
* Lets you customize all prefixes and most separators, allowing you to create
  an infinite number of different argument syntaxes.
* Lets you parse, by default, any type that has a stream extractor operator\
 for
  it. If this doesn't work for your uses, you can supply a function and parse
  the string yourself if you like.
* Lets you decide not to allow separate-argument value flags or joined ones
  (like disallowing `--foo bar`, requiring `--foo=bar`, or the inverse, or the
  same for short options).
* Allows you to create subparsers, to reuse arguments for multiple commands\
 and
  to refactor your command's logic to a function or lambda.
* Allows one value flag to take a specific number of values (like `--foo first
  second`, where --foo slurps both arguments).
* Allows you to have value flags only optionally accept values.
* Provides autocompletion for bash.

# What does it not do?

There are tons of things this library does not do!

## It will not ever:

* Allow you to intermix multiple different prefix types (eg. `++foo` and
  `--foo` in the same parser), though shortopt and longopt prefixes can be
  different.
* Allow you to make flags sensitive to order (like gnu find), or make them
  sensitive to relative ordering with positionals.  The only orderings that\
 are
  order-sensitive are:
    * Positionals relative to one-another
    * List positionals or flag values to each of their own respective items
* Allow you to use a positional list before any other positionals (the last
  argument list will slurp all subsequent positional arguments).  The logic\
 for
  allowing this would be a lot more code than I'd like, and would make static
  checking much more difficult, requiring us to sort std::string arguments and
  pair them to positional arguments before assigning them, rather than what we
  currently do, which is assigning them as we go for better simplicity and
  speed.  The library doesn't stop you from trying, but the first positional
  list will slurp in all following positionals

# How do I install it?

```shell
sudo make install
```

Or, to install it somewhere special (default is `/usr/local`):

```shell
sudo make install DESTDIR=/opt/mydir
```

You can also copy the file into your source tree, if you want to be absolutely
sure you keep a stable API between projects.

## I also want man pages.

```shell
make doc/man
sudo make installman
```

This requires Doxygen

## I want the doxygen documentation locally

```shell
doxygen Doxyfile
```

Your docs are now in doc/html

## How to depend on it using tipi.build?

Simply add the following entry to your `.tipi/deps` file

```json
{
    "taywee/args": { "@": "6.4.1" }
}
```

You can optionally remove the `@` section to *target HEAD* easily.

# How do I use it?

Create an ArgumentParser, modify its attributes to fit your needs, add
arguments through regular argument objects (or create your own), and match\
 them
with an args::Matcher object (check its construction details in the doxygen
documentation.

Then you can either call it with args::ArgumentParser::ParseCLI for the full
command line with program name, or args::ArgumentParser::ParseArgs with
just the arguments to be parsed.  The argument and group variables can then be
interpreted as a boolean to see if they've been matched.

All variables can be pulled (including the boolean match status for regular
args::Flag variables) with args::get.

# Group validation is weird.  How do I get more helpful output for failed\
 validation?

This is unfortunately not possible, given the power of the groups available.
For instance, if you have a group validation that works like 
`(A && B) || (C && (D XOR E))`, how is this library going to be able to
determine what exactly when wrong when it fails?  It only knows that the
entire expression evaluated false, not specifically what the user did wrong
(and this is doubled over by the fact that validation operations are ordinary
functions without any special meaning to the library).  As you are the only\
 one
who understands the logic of your program, if you want useful group messages,
you have to catch the ValidationError as a special case and check your own
groups and spit out messages accordingly.

# Is it developed with regression tests?

Yes.  tests.cxx in the git repository has a set of standard tests (which are
still relatively small in number, but I would welcome some expansion here),\
 and
thanks to Travis CI and AppVeyor, these tests run with every single push:

```shell
% make runtests
g++ test.cxx -o test.o -I. -std=c++11 -O2 -c -MMD
g++ -o test test.o -std=c++11 -O2
./test
=============================================================================\
==
All tests passed (74 assertions in 15 test cases)

%
```

The testing library used is [Catch](https://github.com/philsquared/Catch).

# Examples

All the code examples here will be complete code examples, with some output.

## Simple example:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::CompletionFlag completion(parser, {"complete"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (const args::Completion& e)
    {
        std::cout << e.what();
        return 0;
    }
    catch (const args::Help&)
    {
        std::cout << parser;
        return 0;
    }
    catch (const args::ParseError& e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test
 % ./test -h
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 

    This goes after the options. 
 % 
```

## Boolean flags, special group types, different matcher construction:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group group(parser, "This group is all exclusive:",\
 args::Group::Validators::Xor);
    args::Flag foo(group, "foo", "The foo flag", {'f', "foo"});
    args::Flag bar(group, "bar", "The bar flag", {'b'});
    args::Flag baz(group, "baz", "The baz flag", {"baz"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (foo) { std::cout << "foo" << std::endl; }
    if (bar) { std::cout << "bar" << std::endl; }
    if (baz) { std::cout << "baz" << std::endl; }
    return 0;
}
```

```shell
 % ./test   
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         This group is all exclusive:
        -f, --foo          The foo flag 
        -b                 The bar flag 
        --baz              The baz flag 

    This goes after the options. 
 % ./test -f
foo
 % ./test --foo
foo
 % ./test --foo -f
foo
 % ./test -b      
bar
 % ./test --baz
baz
 % ./test --baz -f
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 
...
 % ./test --baz -fb
Group validation failed somewhere!
  ./test {OPTIONS} 
...
 % 
```

## Argument flags, Positional arguments, lists

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::ValueFlag<int> integer(parser, "integer", "The integer flag",\
 {'i'});
    args::ValueFlagList<char> characters(parser, "characters", "The character\
 flag", {'c'});
    args::Positional<std::string> foo(parser, "foo", "The foo position");
    args::PositionalList<double> numbers(parser, "numbers", "The numbers\
 position list");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (integer) { std::cout << "i: " << args::get(integer) << std::endl; }
    if (characters) { for (const auto ch: args::get(characters)) { std::cout\
 << "c: " << ch << std::endl; } }
    if (foo) { std::cout << "f: " << args::get(foo) << std::endl; }
    if (numbers) { for (const auto nm: args::get(numbers)) { std::cout << "n:\
 " << nm << std::endl; } }
    return 0;
}
```

```shell
% ./test -h
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 
      -i integer         The integer flag 
      -c characters      The character flag 
      foo                The foo position 
      numbers            The numbers position list 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. 
 % ./test -i 5
i: 5
 % ./test -i 5.2
Argument 'integer' received invalid value type '5.2'
  ./test {OPTIONS} [foo] [numbers...] 
 % ./test -c 1 -c 2 -c 3
c: 1
c: 2
c: 3
 % 
 % ./test 1 2 3 4 5 6 7 8 9
f: 1
n: 2
n: 3
n: 4
n: 5
n: 6
n: 7
n: 8
n: 9
 % ./test 1 2 3 4 5 6 7 8 9 a
Argument 'numbers' received invalid value type 'a'
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 
...
```

## Commands

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index");
    args::Command commit(commands, "commit", "record changes to the\
 repository");
    args::Group arguments(p, "arguments", args::Group::Validators::DontCare,\
 args::Options::Global);
    args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
    args::HelpFlag h(arguments, "help", "help", {'h', "help"});
    args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

    try
    {
        p.ParseCLI(argc, argv);
        if (add)
        {
            std::cout << "Add";
        }
        else
        {
            std::cout << "Commit";
        }

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2
```

## Refactoring commands

```cpp
#include <iostream>
#include "args.hxx"

args::Group arguments("arguments");
args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
args::HelpFlag h(arguments, "help", "help", {'h', "help"});
args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

void CommitCommand(args::Subparser &parser)
{
    args::ValueFlag<std::string> message(parser, "MESSAGE", "commit message",\
 {'m'});
    parser.Parse();

    std::cout << "Commit";

    for (auto &&path : pathsList)
    {
        std::cout << ' ' << path;
    }

    std::cout << std::endl;

    if (message)
    {
        std::cout << "message: " << args::get(message) << std::endl;
    }
}

int main(int argc, const char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index",\
 [&](args::Subparser &parser)
    {
        parser.Parse();
        std::cout << "Add";

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    });

    args::Command commit(commands, "commit", "record changes to the\
 repository", &CommitCommand);
    args::GlobalOptions globals(p, arguments);

    try
    {
        p.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2

% ./test commit -m "my commit message" 1 2
Commit 1 2
message: my commit message
```

# Custom type parsers (here we use std::tuple)

```cpp
#include <iostream>
#include <tuple>

std::istream& operator>>(std::istream& is, std::tuple<int, int>& ints)
{
    is >> std::get<0>(ints);
    is.get();
    is >> std::get<1>(ints);
    return is;
}

#include <args.hxx>

struct DoublesReader
{
    void operator()(const std::string &name, const std::string &value,\
 std::tuple<double, double> &destination)
    {
        size_t commapos = 0;
        std::get<0>(destination) = std::stod(value, &commapos);
        std::get<1>(destination) = std::stod(std::string(value, commapos +\
 1));
    }
};

int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.");
    args::Positional<std::tuple<int, int>> ints(parser, "INTS", "This takes a\
 pair of integers.");
    args::Positional<std::tuple<double, double>, DoublesReader>\
 doubles(parser, "DOUBLES", "This takes a pair of doubles.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (ints)
    {
        std::cout << "ints found: " << std::get<0>(args::get(ints)) << " and\
 " << std::get<1>(args::get(ints)) << std::endl;
    }
    if (doubles)
    {
        std::cout << "doubles found: " << std::get<0>(args::get(doubles)) <<\
 " and " << std::get<1>(args::get(doubles)) << std::endl;
    }
    return 0;
}
```

```shell
 % ./test -h
Argument could not be matched: 'h'
  ./test [INTS] [DOUBLES] 

    This is a test program. 

  OPTIONS:

      INTS               This takes a pair of integers. 
      DOUBLES            This takes a pair of doubles. 

 % ./test 5
ints found: 5 and 0
 % ./test 5,8
ints found: 5 and 8
 % ./test 5,8 2.4,8
ints found: 5 and 8
doubles found: 2.4 and 8
 % ./test 5,8 2.4, 
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stod
zsh: abort      ./test 5,8 2.4,
 % ./test 5,8 2.4 
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::basic_string: __pos (which is 4) > this->size()\
 (which is 3)
zsh: abort      ./test 5,8 2.4
 % ./test 5,8 2.4-7
ints found: 5 and 8
doubles found: 2.4 and 7
 % ./test 5,8 2.4,-7
ints found: 5 and 8
doubles found: 2.4 and -7
```

As you can see, with your own types, validation can get a little weird.  Make
sure to check and throw a parsing error (or whatever error you want to catch)
if you can't fully deduce your type.  The built-in validator will only throw\
 if
there are unextracted characters left in the stream.

## Long descriptions and proper wrapping and listing

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program with a really long\
 description that is probably going to have to be wrapped across multiple\
 different lines.  This is a test to see how the line wrapping works", "This\
 goes after the options.  This epilog is also long enough that it will have\
 to be properly wrapped to display correctly on the screen");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {'h',\
 "help"});
    args::ValueFlag<std::string> foo(parser, "FOO", "The foo flag.", {'a',\
 'b', 'c', "a", "b", "c", "the-foo-flag"});
    args::ValueFlag<std::string> bar(parser, "BAR", "The bar flag.  This one\
 has a lot of options, and will need wrapping in the description, along with\
 its long flag list.", {'d', 'e', 'f', "d", "e", "f"});
    args::ValueFlag<std::string> baz(parser, "FOO", "The baz flag.  This one\
 has a lot of options, and will need wrapping in the description, even with\
 its short flag list.", {"baz"});
    args::Positional<std::string> pos1(parser, "POS1", "The pos1 argument.");
    args::PositionalList<std::string> poslist1(parser, "POSLIST1", "The\
 poslist1 argument.");
    args::Positional<std::string> pos2(parser, "POS2", "The pos2 argument.");
    args::PositionalList<std::string> poslist2(parser, "POSLIST2", "The\
 poslist2 argument.");
    args::Positional<std::string> pos3(parser, "POS3", "The pos3 argument.");
    args::PositionalList<std::string> poslist3(parser, "POSLIST3", "The\
 poslist3 argument.");
    args::Positional<std::string> pos4(parser, "POS4", "The pos4 argument.");
    args::PositionalList<std::string> poslist4(parser, "POSLIST4", "The\
 poslist4 argument.");
    args::Positional<std::string> pos5(parser, "POS5", "The pos5 argument.");
    args::PositionalList<std::string> poslist5(parser, "POSLIST5", "The\
 poslist5 argument.");
    args::Positional<std::string> pos6(parser, "POS6", "The pos6 argument.");
    args::PositionalList<std::string> poslist6(parser, "POSLIST6", "The\
 poslist6 argument.");
    args::Positional<std::string> pos7(parser, "POS7", "The pos7 argument.");
    args::PositionalList<std::string> poslist7(parser, "POSLIST7", "The\
 poslist7 argument.");
    args::Positional<std::string> pos8(parser, "POS8", "The pos8 argument.");
    args::PositionalList<std::string> poslist8(parser, "POSLIST8", "The\
 poslist8 argument.");
    args::Positional<std::string> pos9(parser, "POS9", "The pos9 argument.");
    args::PositionalList<std::string> poslist9(parser, "POSLIST9", "The\
 poslist9 argument.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test -h
  ./test {OPTIONS} [POS1] [POSLIST1...] [POS2] [POSLIST2...] [POS3]
      [POSLIST3...] [POS4] [POSLIST4...] [POS5] [POSLIST5...] [POS6]
      [POSLIST6...] [POS7] [POSLIST7...] [POS8] [POSLIST8...] [POS9]
      [POSLIST9...] 

    This is a test program with a really long description that is probably\
 going
    to have to be wrapped across multiple different lines. This is a test to\
 see
    how the line wrapping works 

  OPTIONS:

      -h, --help         Show this help menu. 
      -a FOO, -b FOO, -c FOO, --a FOO, --b FOO, --c FOO, --the-foo-flag FOO
                         The foo flag. 
      -d BAR, -e BAR, -f BAR, --d BAR, --e BAR, --f BAR
                         The bar flag. This one has a lot of options, and will
                         need wrapping in the description, along with its long
                         flag list. 
      --baz FOO          The baz flag. This one has a lot of options, and will
                         need wrapping in the description, even with its short
                         flag list. 
      POS1               The pos1 argument. 
      POSLIST1           The poslist1 argument. 
      POS2               The pos2 argument. 
      POSLIST2           The poslist2 argument. 
      POS3               The pos3 argument. 
      POSLIST3           The poslist3 argument. 
      POS4               The pos4 argument. 
      POSLIST4           The poslist4 argument. 
      POS5               The pos5 argument. 
      POSLIST5           The poslist5 argument. 
      POS6               The pos6 argument. 
      POSLIST6           The poslist6 argument. 
      POS7               The pos7 argument. 
      POSLIST7           The poslist7 argument. 
      POS8               The pos8 argument. 
      POSLIST8           The poslist8 argument. 
      POS9               The pos9 argument. 
      POSLIST9           The poslist9 argument. 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. This epilog is also long enough that it will
    have to be properly wrapped to display correctly on the screen 
 %
```

## Customizing parser prefixes

### dd-style

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This command likes to break your disks");
    parser.LongPrefix("");
    parser.LongSeparator("=");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {"help"});
    args::ValueFlag<long> bs(parser, "BYTES", "Block size", {"bs"}, 512);
    args::ValueFlag<long> skip(parser, "BYTES", "Bytes to skip", {"skip"}, 0);
    args::ValueFlag<std::string> input(parser, "BLOCK SIZE", "Block size",\
 {"if"});
    args::ValueFlag<std::string> output(parser, "BLOCK SIZE", "Block size",\
 {"of"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    std::cout << "bs = " << args::get(bs) << std::endl;
    std::cout << "skip = " << args::get(skip) << std::endl;
    if (input) { std::cout << "if = " << args::get(input) << std::endl; }
    if (output) { std::cout << "of = " << args::get(output) << std::endl; }
    return 0;
}
```

```shell
 % ./test help
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      help                              Show this help menu.
      bs=[BYTES]                        Block size
      skip=[BYTES]                      Bytes to skip
      if=[BLOCK SIZE]                   Block size
      of=[BLOCK SIZE]                   Block size

 % ./test bs=1024 skip=7 if=/tmp/input
bs = 1024
skip = 7
if = /tmp/input
```

### Windows style

The code is the same as above, but the two lines are replaced out:

```cpp
parser.LongPrefix("/");
parser.LongSeparator(":");
```

```shell
 % ./test /help     
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      /help                             Show this help menu.
      /bs:[BYTES]                       Block size
      /skip:[BYTES]                     Bytes to skip
      /if:[BLOCK SIZE]                  Block size
      /of:[BLOCK SIZE]                  Block size

 % ./test /bs:72 /skip:87 /if:/tmp/test.txt
bs = 72
skip = 87
if = /tmp/test.txt
 % 
```

## Group nesting help menu text

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group xorgroup(parser, "this group provides xor validation:",\
 args::Group::Validators::Xor);
    args::Flag a(xorgroup, "a", "test flag", {'a'});
    args::Flag b(xorgroup, "b", "test flag", {'b'});
    args::Flag c(xorgroup, "c", "test flag", {'c'});
    args::Group nxor(xorgroup, "this group provides all-or-none (nxor)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag d(nxor, "d", "test flag", {'d'});
    args::Flag e(nxor, "e", "test flag", {'e'});
    args::Flag f(nxor, "f", "test flag", {'f'});
    args::Group nxor2(nxor, "this group provides all-or-none (nxor2)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag i(nxor2, "i", "test flag", {'i'});
    args::Flag j(nxor2, "j", "test flag", {'j'});
    args::Flag k(nxor2, "k", "test flag", {'k'});
    args::Group nxor3(nxor, "this group provides all-or-none (nxor3)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag l(nxor3, "l", "test flag", {'l'});
    args::Flag m(nxor3, "m", "test flag", {'m'});
    args::Flag n(nxor3, "n", "test flag", {'n'});
    args::Group atleastone(xorgroup, "this group provides at-least-one\
 validation:", args::Group::Validators::AtLeastOne);
    args::Flag g(atleastone, "g", "test flag", {'g'});
    args::Flag o(atleastone, "o", "test flag", {'o'});
    args::HelpFlag help(parser, "help", "Show this help menu", {'h', "help"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    return 0;
}
```

```shell
 % /tmp/test -h
  /tmp/test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         this group provides xor validation: 
        -a                 test flag 
        -b                 test flag 
        -c                 test flag 
                           this group provides all-or-none (nxor) validation: 
          -d                 test flag 
          -e                 test flag 
          -f                 test flag 
                             this group provides all-or-none (nxor2)\
 validation:
            -i                 test flag 
            -j                 test flag 
            -k                 test flag 
                             this group provides all-or-none (nxor3)\
 validation:
            -l                 test flag 
            -m                 test flag 
            -n                 test flag 
                           this group provides at-least-one validation: 
          -g                 test flag 
          -o                 test flag 
      -h, --help         Show this help menu 

    This goes after the options. 
 %                                                                           \
     
```

# Mapping arguments

I haven't written out a long example for this, but here's the test case you\
 should be able to discern the meaning from:

```cpp
bool ToLowerReader(const std::string &name, const std::string &value,\
 std::string &destination)
{
    destination = value;
    std::transform(destination.begin(), destination.end(),\
 destination.begin(), ::tolower);
    return true;
}

TEST_CASE("Mapping types work as needed", "[args]")
{
    std::unordered_map<std::string, MappingEnum> map{
        {"default", MappingEnum::def},
        {"foo", MappingEnum::foo},
        {"bar", MappingEnum::bar},
        {"red", MappingEnum::red},
        {"yellow", MappingEnum::yellow},
        {"green", MappingEnum::green}};
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::MapFlag<std::string, MappingEnum> dmf(parser, "DMF", "Maps string\
 to an enum", {"dmf"}, map);
    args::MapFlag<std::string, MappingEnum> mf(parser, "MF", "Maps string to\
 an enum", {"mf"}, map);
    args::MapFlag<std::string, MappingEnum, ToLowerReader> cimf(parser,\
 "CIMF", "Maps string to an enum case-insensitively", {"cimf"}, map);
    args::MapFlagList<std::string, MappingEnum> mfl(parser, "MFL", "Maps\
 string to an enum list", {"mfl"}, map);
    args::MapPositional<std::string, MappingEnum> mp(parser, "MP", "Maps\
 string to an enum", map);
    args::MapPositionalList<std::string, MappingEnum> mpl(parser, "MPL",\
 "Maps string to an enum list", map);
    parser.ParseArgs(std::vector<std::string>{"--mf=red", "--cimf=YeLLoW",\
 "--mfl=bar", "foo", "--mfl=green", "red", "--mfl", "bar", "default"});
    REQUIRE_FALSE(dmf);
    REQUIRE(args::get(dmf) == MappingEnum::def);
    REQUIRE(mf);
    REQUIRE(args::get(mf) == MappingEnum::red);
    REQUIRE(cimf);
    REQUIRE(args::get(cimf) == MappingEnum::yellow);
    REQUIRE(mfl);
    REQUIRE((args::get(mfl) == std::vector<MappingEnum>{MappingEnum::bar,\
 MappingEnum::green, MappingEnum::bar}));
    REQUIRE(mp);
    REQUIRE((args::get(mp) == MappingEnum::foo));
    REQUIRE(mpl);
    REQUIRE((args::get(mpl) == std::vector<MappingEnum>{MappingEnum::red,\
 MappingEnum::def}));
    REQUIRE_THROWS_AS(parser.ParseArgs(std::vector<std::string>{"--mf=YeLLoW"\
}), args::MapError);
}
```

# How fast is it?

This should not really be a question you ask when you are looking for an
argument-parsing library, but every test I've done shows args as being about
65% faster than TCLAP and 220% faster than boost::program_options.

The simplest benchmark I threw together is the following one, which parses the
command line `-i 7 -c a 2.7 --char b 8.4 -c c 8.8 --char d` with a parser that
parses -i as an int, -c as a list of chars, and the positional parameters as a
list of doubles (the command line was originally much more complex, but\
 TCLAP's
limitations made me trim it down so I could use a common command line across
all libraries.  I also have to copy in the arguments list with every run,
because TCLAP permutes its argument list as it runs (and comparison would have
been unfair without comparing all about equally), but that surprisingly didn't
affect much.  Also tested is pulling the arguments out, but that was fast
compared to parsing, as would be expected.

### The run:

```shell
% g++ -obench bench.cxx -O2 -std=c++11 -lboost_program_options
% ./bench
args seconds to run: 0.895472
tclap seconds to run: 1.45001
boost::program_options seconds to run: 1.98972
%
```

### The benchmark:

```cpp
#undef NDEBUG
#include <iostream>
#include <chrono>
#include <cassert>
#include "args.hxx"
#include <tclap/CmdLine.h>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
using namespace std::chrono;
inline bool doubleequals(const double a, const double b)
{
    static const double delta = 0.0001;
    const double diff = a - b;
    return diff < delta && diff > -delta;
}
int main()
{
    const std::vector<std::string> carguments({"-i", "7", "-c", "a", "2.7",\
 "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    const std::vector<std::string> pcarguments({"progname", "-i", "7", "-c",\
 "a", "2.7", "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    // args
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            args::ArgumentParser parser("This is a test program.", "This goes\
 after the options.");
            args::ValueFlag<int> integer(parser, "integer", "The integer\
 flag", {'i', "int"});
            args::ValueFlagList<char> characters(parser, "characters", "The\
 character flag", {'c', "char"});
            args::PositionalList<double> numbers(parser, "numbers", "The\
 numbers position list");
            parser.ParseArgs(arguments);
            const int i = args::get(integer);
            const std::vector<char> c(args::get(characters));
            const std::vector<double> n(args::get(numbers));
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "args seconds to run: " << duration_cast<duration<double\
>>(runtime).count() << std::endl;
    }
    // tclap
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(pcarguments);
            TCLAP::CmdLine cmd("Command description message", ' ', "0.9");
            TCLAP::ValueArg<int> integer("i", "int", "The integer flag",\
 false, 0, "integer", cmd);
            TCLAP::MultiArg<char> characters("c", "char", "The character\
 flag", false, "characters", cmd);
            TCLAP::UnlabeledMultiArg<double> numbers("numbers", "The numbers\
 position list", false, "foo", cmd, false);
            cmd.parse(arguments);
            const int i = integer.getValue();
            const std::vector<char> c(characters.getValue());
            const std::vector<double> n(numbers.getValue());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "tclap seconds to run: " << duration_cast<duration<doubl\
e>>(runtime).count() << std::endl;
    }
    // boost::program_options
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            po::options_description desc("This is a test program.");
            desc.add_options()
                ("int,i", po::value<int>(), "The integer flag")
                ("char,c", po::value<std::vector<char>>(), "The character\
 flag")
                ("numbers", po::value<std::vector<double>>(), "The numbers\
 flag");
            po::positional_options_description p;
            p.add("numbers", -1);
            po::variables_map vm;
            po::store(po::command_line_parser(carguments).options(desc).posit\
ional(p).run(), vm);
            const int i = vm["int"].as<int>();
            const std::vector<char> c(vm["char"].as<std::vector<char>>());
            const std::vector<double> n(vm["numbers"].as<std::vector<double>>\
());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "boost::program_options seconds to run: " <<\
 duration_cast<duration<double>>(runtime).count() << std::endl;
    }
    return 0;
}
```

So, on top of being more flexible, smaller, and easier to read, it is faster
than the most common alternatives.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for args
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/taywee/args">args</a>.
    A simple, small, flexible, single-header C++11 argument parsing library.
</p>

<p align="center">
    <a href="https://github.com/taywee/args">
        <img src="https://img.shields.io/website/https/github.com/taywee/args\
.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://github.com/build2-packaging/args">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/args.svg?down_message=offline&label=build2&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://cppget.org/args">
        <img src="https://img.shields.io/website/https/cppget.org/args.svg?do\
wn_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_mess\
age=online">
    </a>
    <a href="https://queue.cppget.org/args">
        <img src="https://img.shields.io/website/https/queue.cppget.org/args.\
svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-the-b\
adge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: args ^ 6.4.6

The single header-only C++ library to use args as command-line argument\
 parser can be imported by the following declaration in a `buildfile`.

    import args = args%lib{args}

## Configuration
There are no configuration options vailable.

## Issues
Currently, there are no known issues.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/args/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/args/is\
sues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/args)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
* 6.0.0
Change Reader to functor type, breaking change.
Change Reader functor to allow any return type, but specifically need\
 bool-testable return for NOEXCEPT use.
Change List and Map templates into template templates to enforce proper type\
 use and to clean up user template invocations (i.e. `args::ValueFlagList<std\
::string, std::unordered_set<std::string>>` becomes `args::ValueFlagList<std:\
:string, std::unordered_set>`, also breaking change.

* 5.0.0
Implemented proper subparsers.
Added better C++11 style.
Improved documentation.

* 4.0.0
Changed all wording:

ArgFlag -> ValueFlag
Counter -> CounterFlag
PosArg -> Positional

Argument now solely refers to command line arguments.
Value refers to the argument that flags or positionals can take and store.
Positional is a positional option, which contains a value.
Option refers to flags and positionals, which can contain values.

\
changes-type: text/plain
url: https://github.com/Taywee/args
doc-url: https://taywee.github.io/args/
package-url: https://github.com/build2-packaging/args/
email: taywee@gmx.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: catch2 ^2.13.7
builds: default
builds: -( +windows &gcc &!optimized ); Unoptimized compilation with MinGW on\
 Windows gets stuck.
bootstrap-build:
\
project = args-tests

using version
using config
using test
using dist

# Tests should not be installed.
# Do not use 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

hxx{*}: cxx.importable = false

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Import the 'args' library.
#
import args = args%lib{args}

\
location: args/args-tests-6.4.6+2.tar.gz
sha256sum: 5444bd025f0be566759689957cbb8fa5e1d972c4fc213a4e4b130aac72493e5f
:
name: args-tests
version: 6.4.7
type: exe
language: c++
project: args
summary: C++ argument parser library, tests
license: MIT
description:
\
# args

**This library is considered feature-complete by its creator.  It will still
receive bug fixes, and good pull requests will be accepted, but no new major
functionality or API changes will be added to this codebase.**

[![Cpp Standard](https://img.shields.io/badge/C%2B%2B-11-blue.svg)](https://e\
n.wikipedia.org/wiki/C%2B%2B11)
[![Travis status](https://travis-ci.org/Taywee/args.svg?branch=master)](https\
://travis-ci.org/Taywee/args)
[![AppVeyor status](https://ci.appveyor.com/api/projects/status/nlnlmpttdjlnd\
yc2?svg=true)](https://ci.appveyor.com/project/Taywee/args)
[![Coverage Status](https://coveralls.io/repos/github/Taywee/args/badge.svg?b\
ranch=master)](https://coveralls.io/github/Taywee/args?branch=master)
[![Read the Docs](https://img.shields.io/readthedocs/pip.svg)](https://taywee\
.github.io/args)

A simple, small, flexible, single-header C++11 argument parsing library.

This is designed to appear somewhat similar to Python's argparse, but in C++,
with static type checking, and hopefully a lot faster (also allowing fully
nestable group logic, where Python's argparse does not).

UTF-8 support is limited at best.  No normalization is performed, so non-ascii
characters are very best kept out of flags, and combined glyphs are probably
going to mess up help output if you use them.  Most UTF-8 necessary for
internationalization should work for most cases, though heavily combinatory\
 UTF
alphabets may wreak havoc.

This program is MIT-licensed, so you can use the header as-is with no
restrictions. I'd appreciate attribution in a README, Man page, or something\
 if
you are feeling generous, but all that's required is that you don't remove the
license and my name from the header of the args.hxx file in source
redistributions (ie. don't pretend that you wrote it).  I do welcome additions
and updates wherever you feel like contributing code.

The API documentation can be found at https://taywee.github.io/args

The code can be downloaded at https://github.com/Taywee/args

There are also somewhat extensive examples below.

You can find the complete test cases at
https://github.com/Taywee/args/blob/master/test.cxx, which should very well
describe the usage, as it's built to push the boundaries.

# What does it do?

It:

* Lets you handle flags, flag+value, and positional arguments simply and
  elegantly, with the full help of static typechecking.
* Allows you to use your own types in a pretty simple way.
* Lets you use count flags, and lists of all argument-accepting types.
* Allows full validation of groups of required arguments, though output isn't
  pretty when something fails group validation. User validation functions are
  accepted. Groups are fully nestable.
* Generates pretty help for you, with some good tweakable parameters.
* Lets you customize all prefixes and most separators, allowing you to create
  an infinite number of different argument syntaxes.
* Lets you parse, by default, any type that has a stream extractor operator\
 for
  it. If this doesn't work for your uses, you can supply a function and parse
  the string yourself if you like.
* Lets you decide not to allow separate-argument value flags or joined ones
  (like disallowing `--foo bar`, requiring `--foo=bar`, or the inverse, or the
  same for short options).
* Allows you to create subparsers, to reuse arguments for multiple commands\
 and
  to refactor your command's logic to a function or lambda.
* Allows one value flag to take a specific number of values (like `--foo first
  second`, where --foo slurps both arguments).
* Allows you to have value flags only optionally accept values.
* Provides autocompletion for bash.

# What does it not do?

There are tons of things this library does not do!

## It will not ever:

* Allow you to intermix multiple different prefix types (eg. `++foo` and
  `--foo` in the same parser), though shortopt and longopt prefixes can be
  different.
* Allow you to make flags sensitive to order (like gnu find), or make them
  sensitive to relative ordering with positionals.  The only orderings that\
 are
  order-sensitive are:
    * Positionals relative to one-another
    * List positionals or flag values to each of their own respective items
* Allow you to use a positional list before any other positionals (the last
  argument list will slurp all subsequent positional arguments).  The logic\
 for
  allowing this would be a lot more code than I'd like, and would make static
  checking much more difficult, requiring us to sort std::string arguments and
  pair them to positional arguments before assigning them, rather than what we
  currently do, which is assigning them as we go for better simplicity and
  speed.  The library doesn't stop you from trying, but the first positional
  list will slurp in all following positionals

# How do I install it?

```shell
sudo make install
```

Or, to install it somewhere special (default is `/usr/local`):

```shell
sudo make install DESTDIR=/opt/mydir
```

You can also copy the file into your source tree, if you want to be absolutely
sure you keep a stable API between projects.

If you prefer other installation methods, many standard ones are available and
included, including CMake, conan, buck, and meson.  An example CMake file\
 using
args is included in the examples directory.

## I also want man pages.

```shell
make doc/man
sudo make installman
```

This requires Doxygen

## I want the doxygen documentation locally

```shell
doxygen Doxyfile
```

Your docs are now in doc/html

## How to depend on it using tipi.build?

Simply add the following entry to your `.tipi/deps` file

```json
{
    "taywee/args": { "@": "6.4.1" }
}
```

You can optionally remove the `@` section to *target HEAD* easily.

# How do I use it?

Create an ArgumentParser, modify its attributes to fit your needs, add
arguments through regular argument objects (or create your own), and match\
 them
with an args::Matcher object (check its construction details in the doxygen
documentation.

Then you can either call it with args::ArgumentParser::ParseCLI for the full
command line with program name, or args::ArgumentParser::ParseArgs with
just the arguments to be parsed.  The argument and group variables can then be
interpreted as a boolean to see if they've been matched.

All variables can be pulled (including the boolean match status for regular
args::Flag variables) with args::get.

# Group validation is weird.  How do I get more helpful output for failed\
 validation?

This is unfortunately not possible, given the power of the groups available.
For instance, if you have a group validation that works like 
`(A && B) || (C && (D XOR E))`, how is this library going to be able to
determine what exactly when wrong when it fails?  It only knows that the
entire expression evaluated false, not specifically what the user did wrong
(and this is doubled over by the fact that validation operations are ordinary
functions without any special meaning to the library).  As you are the only\
 one
who understands the logic of your program, if you want useful group messages,
you have to catch the ValidationError as a special case and check your own
groups and spit out messages accordingly.

# Is it developed with regression tests?

Yes.  tests.cxx in the git repository has a set of standard tests (which are
still relatively small in number, but I would welcome some expansion here),\
 and
thanks to Travis CI and AppVeyor, these tests run with every single push:

```shell
% make runtests
g++ test.cxx -o test.o -I. -std=c++11 -O2 -c -MMD
g++ -o test test.o -std=c++11 -O2
./test
=============================================================================\
==
All tests passed (74 assertions in 15 test cases)

%
```

The testing library used is [Catch](https://github.com/philsquared/Catch).

# Examples

All the code examples here will be complete code examples, with some output.

## Simple example:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::CompletionFlag completion(parser, {"complete"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (const args::Completion& e)
    {
        std::cout << e.what();
        return 0;
    }
    catch (const args::Help&)
    {
        std::cout << parser;
        return 0;
    }
    catch (const args::ParseError& e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test
 % ./test -h
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 

    This goes after the options. 
 % 
```

## Boolean flags, special group types, different matcher construction:

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group group(parser, "This group is all exclusive:",\
 args::Group::Validators::Xor);
    args::Flag foo(group, "foo", "The foo flag", {'f', "foo"});
    args::Flag bar(group, "bar", "The bar flag", {'b'});
    args::Flag baz(group, "baz", "The baz flag", {"baz"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (foo) { std::cout << "foo" << std::endl; }
    if (bar) { std::cout << "bar" << std::endl; }
    if (baz) { std::cout << "baz" << std::endl; }
    return 0;
}
```

```shell
 % ./test   
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         This group is all exclusive:
        -f, --foo          The foo flag 
        -b                 The bar flag 
        --baz              The baz flag 

    This goes after the options. 
 % ./test -f
foo
 % ./test --foo
foo
 % ./test --foo -f
foo
 % ./test -b      
bar
 % ./test --baz
baz
 % ./test --baz -f
Group validation failed somewhere!
  ./test {OPTIONS} 

    This is a test program. 
...
 % ./test --baz -fb
Group validation failed somewhere!
  ./test {OPTIONS} 
...
 % 
```

## Argument flags, Positional arguments, lists

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::ValueFlag<int> integer(parser, "integer", "The integer flag",\
 {'i'});
    args::ValueFlagList<char> characters(parser, "characters", "The character\
 flag", {'c'});
    args::Positional<std::string> foo(parser, "foo", "The foo position");
    args::PositionalList<double> numbers(parser, "numbers", "The numbers\
 position list");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (integer) { std::cout << "i: " << args::get(integer) << std::endl; }
    if (characters) { for (const auto ch: args::get(characters)) { std::cout\
 << "c: " << ch << std::endl; } }
    if (foo) { std::cout << "f: " << args::get(foo) << std::endl; }
    if (numbers) { for (const auto nm: args::get(numbers)) { std::cout << "n:\
 " << nm << std::endl; } }
    return 0;
}
```

```shell
% ./test -h
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 

  OPTIONS:

      -h, --help         Display this help menu 
      -i integer         The integer flag 
      -c characters      The character flag 
      foo                The foo position 
      numbers            The numbers position list 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. 
 % ./test -i 5
i: 5
 % ./test -i 5.2
Argument 'integer' received invalid value type '5.2'
  ./test {OPTIONS} [foo] [numbers...] 
 % ./test -c 1 -c 2 -c 3
c: 1
c: 2
c: 3
 % 
 % ./test 1 2 3 4 5 6 7 8 9
f: 1
n: 2
n: 3
n: 4
n: 5
n: 6
n: 7
n: 8
n: 9
 % ./test 1 2 3 4 5 6 7 8 9 a
Argument 'numbers' received invalid value type 'a'
  ./test {OPTIONS} [foo] [numbers...] 

    This is a test program. 
...
```

## Commands

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index");
    args::Command commit(commands, "commit", "record changes to the\
 repository");
    args::Group arguments(p, "arguments", args::Group::Validators::DontCare,\
 args::Options::Global);
    args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
    args::HelpFlag h(arguments, "help", "help", {'h', "help"});
    args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

    try
    {
        p.ParseCLI(argc, argv);
        if (add)
        {
            std::cout << "Add";
        }
        else
        {
            std::cout << "Commit";
        }

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2
```

## Refactoring commands

```cpp
#include <iostream>
#include "args.hxx"

args::Group arguments("arguments");
args::ValueFlag<std::string> gitdir(arguments, "path", "", {"git-dir"});
args::HelpFlag h(arguments, "help", "help", {'h', "help"});
args::PositionalList<std::string> pathsList(arguments, "paths", "files to\
 commit");

void CommitCommand(args::Subparser &parser)
{
    args::ValueFlag<std::string> message(parser, "MESSAGE", "commit message",\
 {'m'});
    parser.Parse();

    std::cout << "Commit";

    for (auto &&path : pathsList)
    {
        std::cout << ' ' << path;
    }

    std::cout << std::endl;

    if (message)
    {
        std::cout << "message: " << args::get(message) << std::endl;
    }
}

int main(int argc, const char **argv)
{
    args::ArgumentParser p("git-like parser");
    args::Group commands(p, "commands");
    args::Command add(commands, "add", "add file contents to the index",\
 [&](args::Subparser &parser)
    {
        parser.Parse();
        std::cout << "Add";

        for (auto &&path : pathsList)
        {
            std::cout << ' ' << path;
        }

        std::cout << std::endl;
    });

    args::Command commit(commands, "commit", "record changes to the\
 repository", &CommitCommand);
    args::GlobalOptions globals(p, arguments);

    try
    {
        p.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << p;
    }
    catch (args::Error& e)
    {
        std::cerr << e.what() << std::endl << p;
        return 1;
    }
    return 0;
}
```

```shell
% ./test -h
  ./test COMMAND [paths...] {OPTIONS}

    git-like parser

  OPTIONS:

      commands
        add                               add file contents to the index
        commit                            record changes to the repository
      arguments
        --git-dir=[path]
        -h, --help                        help
        paths...                          files
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options

% ./test add 1 2
Add 1 2

% ./test commit -m "my commit message" 1 2
Commit 1 2
message: my commit message
```

# Custom type parsers (here we use std::tuple)

```cpp
#include <iostream>
#include <tuple>

std::istream& operator>>(std::istream& is, std::tuple<int, int>& ints)
{
    is >> std::get<0>(ints);
    is.get();
    is >> std::get<1>(ints);
    return is;
}

#include <args.hxx>

struct DoublesReader
{
    void operator()(const std::string &name, const std::string &value,\
 std::tuple<double, double> &destination)
    {
        size_t commapos = 0;
        std::get<0>(destination) = std::stod(value, &commapos);
        std::get<1>(destination) = std::stod(std::string(value, commapos +\
 1));
    }
};

int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.");
    args::Positional<std::tuple<int, int>> ints(parser, "INTS", "This takes a\
 pair of integers.");
    args::Positional<std::tuple<double, double>, DoublesReader>\
 doubles(parser, "DOUBLES", "This takes a pair of doubles.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    if (ints)
    {
        std::cout << "ints found: " << std::get<0>(args::get(ints)) << " and\
 " << std::get<1>(args::get(ints)) << std::endl;
    }
    if (doubles)
    {
        std::cout << "doubles found: " << std::get<0>(args::get(doubles)) <<\
 " and " << std::get<1>(args::get(doubles)) << std::endl;
    }
    return 0;
}
```

```shell
 % ./test -h
Argument could not be matched: 'h'
  ./test [INTS] [DOUBLES] 

    This is a test program. 

  OPTIONS:

      INTS               This takes a pair of integers. 
      DOUBLES            This takes a pair of doubles. 

 % ./test 5
ints found: 5 and 0
 % ./test 5,8
ints found: 5 and 8
 % ./test 5,8 2.4,8
ints found: 5 and 8
doubles found: 2.4 and 8
 % ./test 5,8 2.4, 
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stod
zsh: abort      ./test 5,8 2.4,
 % ./test 5,8 2.4 
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::basic_string: __pos (which is 4) > this->size()\
 (which is 3)
zsh: abort      ./test 5,8 2.4
 % ./test 5,8 2.4-7
ints found: 5 and 8
doubles found: 2.4 and 7
 % ./test 5,8 2.4,-7
ints found: 5 and 8
doubles found: 2.4 and -7
```

As you can see, with your own types, validation can get a little weird.  Make
sure to check and throw a parsing error (or whatever error you want to catch)
if you can't fully deduce your type.  The built-in validator will only throw\
 if
there are unextracted characters left in the stream.

## Long descriptions and proper wrapping and listing

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program with a really long\
 description that is probably going to have to be wrapped across multiple\
 different lines.  This is a test to see how the line wrapping works", "This\
 goes after the options.  This epilog is also long enough that it will have\
 to be properly wrapped to display correctly on the screen");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {'h',\
 "help"});
    args::ValueFlag<std::string> foo(parser, "FOO", "The foo flag.", {'a',\
 'b', 'c', "a", "b", "c", "the-foo-flag"});
    args::ValueFlag<std::string> bar(parser, "BAR", "The bar flag.  This one\
 has a lot of options, and will need wrapping in the description, along with\
 its long flag list.", {'d', 'e', 'f', "d", "e", "f"});
    args::ValueFlag<std::string> baz(parser, "FOO", "The baz flag.  This one\
 has a lot of options, and will need wrapping in the description, even with\
 its short flag list.", {"baz"});
    args::Positional<std::string> pos1(parser, "POS1", "The pos1 argument.");
    args::PositionalList<std::string> poslist1(parser, "POSLIST1", "The\
 poslist1 argument.");
    args::Positional<std::string> pos2(parser, "POS2", "The pos2 argument.");
    args::PositionalList<std::string> poslist2(parser, "POSLIST2", "The\
 poslist2 argument.");
    args::Positional<std::string> pos3(parser, "POS3", "The pos3 argument.");
    args::PositionalList<std::string> poslist3(parser, "POSLIST3", "The\
 poslist3 argument.");
    args::Positional<std::string> pos4(parser, "POS4", "The pos4 argument.");
    args::PositionalList<std::string> poslist4(parser, "POSLIST4", "The\
 poslist4 argument.");
    args::Positional<std::string> pos5(parser, "POS5", "The pos5 argument.");
    args::PositionalList<std::string> poslist5(parser, "POSLIST5", "The\
 poslist5 argument.");
    args::Positional<std::string> pos6(parser, "POS6", "The pos6 argument.");
    args::PositionalList<std::string> poslist6(parser, "POSLIST6", "The\
 poslist6 argument.");
    args::Positional<std::string> pos7(parser, "POS7", "The pos7 argument.");
    args::PositionalList<std::string> poslist7(parser, "POSLIST7", "The\
 poslist7 argument.");
    args::Positional<std::string> pos8(parser, "POS8", "The pos8 argument.");
    args::PositionalList<std::string> poslist8(parser, "POSLIST8", "The\
 poslist8 argument.");
    args::Positional<std::string> pos9(parser, "POS9", "The pos9 argument.");
    args::PositionalList<std::string> poslist9(parser, "POSLIST9", "The\
 poslist9 argument.");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```shell
 % ./test -h
  ./test {OPTIONS} [POS1] [POSLIST1...] [POS2] [POSLIST2...] [POS3]
      [POSLIST3...] [POS4] [POSLIST4...] [POS5] [POSLIST5...] [POS6]
      [POSLIST6...] [POS7] [POSLIST7...] [POS8] [POSLIST8...] [POS9]
      [POSLIST9...] 

    This is a test program with a really long description that is probably\
 going
    to have to be wrapped across multiple different lines. This is a test to\
 see
    how the line wrapping works 

  OPTIONS:

      -h, --help         Show this help menu. 
      -a FOO, -b FOO, -c FOO, --a FOO, --b FOO, --c FOO, --the-foo-flag FOO
                         The foo flag. 
      -d BAR, -e BAR, -f BAR, --d BAR, --e BAR, --f BAR
                         The bar flag. This one has a lot of options, and will
                         need wrapping in the description, along with its long
                         flag list. 
      --baz FOO          The baz flag. This one has a lot of options, and will
                         need wrapping in the description, even with its short
                         flag list. 
      POS1               The pos1 argument. 
      POSLIST1           The poslist1 argument. 
      POS2               The pos2 argument. 
      POSLIST2           The poslist2 argument. 
      POS3               The pos3 argument. 
      POSLIST3           The poslist3 argument. 
      POS4               The pos4 argument. 
      POSLIST4           The poslist4 argument. 
      POS5               The pos5 argument. 
      POSLIST5           The poslist5 argument. 
      POS6               The pos6 argument. 
      POSLIST6           The poslist6 argument. 
      POS7               The pos7 argument. 
      POSLIST7           The poslist7 argument. 
      POS8               The pos8 argument. 
      POSLIST8           The poslist8 argument. 
      POS9               The pos9 argument. 
      POSLIST9           The poslist9 argument. 
      "--" can be used to terminate flag options and force all following
      arguments to be treated as positional options 

    This goes after the options. This epilog is also long enough that it will
    have to be properly wrapped to display correctly on the screen 
 %
```

## Completion

Completion currently only supports bash.

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::HelpFlag help(parser, "help", "Display this help menu", {'h',\
 "help"});
    args::CompletionFlag completion(parser, {"complete"});
    args::ValueFlag<std::string> foo(parser, "name", "description", {'f',\
 "foo"}, "abc");
    args::ValueFlag<std::string> bar(parser, "name", "description", {'b',\
 "bar"}, "abc");
    args::ValueFlag<std::string> baz(parser, "name", "description", {'a',\
 "baz"}, "abc");
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (const args::Completion& e)
    {
        std::cout << e.what();
        return 0;
    }
    catch (const args::Help&)
    {
        std::cout << parser;
        return 0;
    }
    catch (const args::ParseError& e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    return 0;
}
```

```sh
g++ -ocompletiontest ./completiontest.cxx "-I$args_path"
PATH="$PWD:$PATH"
_args() {
    _init_completion -n 2> /dev/null
    local program comparg

    program="${COMP_WORDS[0]}"
    comparg="--complete" # replace this with your flag

    COMPREPLY=($("$program" "$comparg" bash "$COMP_CWORD" "${COMP_WORDS[@]}"\
 2> /dev/null))
    [[ $COMPREPLY ]] && return
    _filedir
}
complete -F _args completiontest

# Now when you type `completiontest --` and press tab, you'll get completion
```

## Customizing parser prefixes

### dd-style

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This command likes to break your disks");
    parser.LongPrefix("");
    parser.LongSeparator("=");
    args::HelpFlag help(parser, "HELP", "Show this help menu.", {"help"});
    args::ValueFlag<long> bs(parser, "BYTES", "Block size", {"bs"}, 512);
    args::ValueFlag<long> skip(parser, "BYTES", "Bytes to skip", {"skip"}, 0);
    args::ValueFlag<std::string> input(parser, "BLOCK SIZE", "Block size",\
 {"if"});
    args::ValueFlag<std::string> output(parser, "BLOCK SIZE", "Block size",\
 {"of"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        std::cerr << parser;
        return 1;
    }
    std::cout << "bs = " << args::get(bs) << std::endl;
    std::cout << "skip = " << args::get(skip) << std::endl;
    if (input) { std::cout << "if = " << args::get(input) << std::endl; }
    if (output) { std::cout << "of = " << args::get(output) << std::endl; }
    return 0;
}
```

```shell
 % ./test help
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      help                              Show this help menu.
      bs=[BYTES]                        Block size
      skip=[BYTES]                      Bytes to skip
      if=[BLOCK SIZE]                   Block size
      of=[BLOCK SIZE]                   Block size

 % ./test bs=1024 skip=7 if=/tmp/input
bs = 1024
skip = 7
if = /tmp/input
```

### Windows style

The code is the same as above, but the two lines are replaced out:

```cpp
parser.LongPrefix("/");
parser.LongSeparator(":");
```

```shell
 % ./test /help     
  ./test {OPTIONS}

    This command likes to break your disks

  OPTIONS:

      /help                             Show this help menu.
      /bs:[BYTES]                       Block size
      /skip:[BYTES]                     Bytes to skip
      /if:[BLOCK SIZE]                  Block size
      /of:[BLOCK SIZE]                  Block size

 % ./test /bs:72 /skip:87 /if:/tmp/test.txt
bs = 72
skip = 87
if = /tmp/test.txt
 % 
```

## Group nesting help menu text

```cpp
#include <iostream>
#include <args.hxx>
int main(int argc, char **argv)
{
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::Group xorgroup(parser, "this group provides xor validation:",\
 args::Group::Validators::Xor);
    args::Flag a(xorgroup, "a", "test flag", {'a'});
    args::Flag b(xorgroup, "b", "test flag", {'b'});
    args::Flag c(xorgroup, "c", "test flag", {'c'});
    args::Group nxor(xorgroup, "this group provides all-or-none (nxor)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag d(nxor, "d", "test flag", {'d'});
    args::Flag e(nxor, "e", "test flag", {'e'});
    args::Flag f(nxor, "f", "test flag", {'f'});
    args::Group nxor2(nxor, "this group provides all-or-none (nxor2)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag i(nxor2, "i", "test flag", {'i'});
    args::Flag j(nxor2, "j", "test flag", {'j'});
    args::Flag k(nxor2, "k", "test flag", {'k'});
    args::Group nxor3(nxor, "this group provides all-or-none (nxor3)\
 validation:", args::Group::Validators::AllOrNone);
    args::Flag l(nxor3, "l", "test flag", {'l'});
    args::Flag m(nxor3, "m", "test flag", {'m'});
    args::Flag n(nxor3, "n", "test flag", {'n'});
    args::Group atleastone(xorgroup, "this group provides at-least-one\
 validation:", args::Group::Validators::AtLeastOne);
    args::Flag g(atleastone, "g", "test flag", {'g'});
    args::Flag o(atleastone, "o", "test flag", {'o'});
    args::HelpFlag help(parser, "help", "Show this help menu", {'h', "help"});
    try
    {
        parser.ParseCLI(argc, argv);
    }
    catch (args::Help)
    {
        std::cout << parser;
        return 0;
    }
    catch (args::ParseError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    catch (args::ValidationError e)
    {
        std::cerr << e.what() << std::endl;
        parser.Help(std::cerr);
        return 1;
    }
    return 0;
}
```

```shell
 % /tmp/test -h
  /tmp/test {OPTIONS} 

    This is a test program. 

  OPTIONS:

                         this group provides xor validation: 
        -a                 test flag 
        -b                 test flag 
        -c                 test flag 
                           this group provides all-or-none (nxor) validation: 
          -d                 test flag 
          -e                 test flag 
          -f                 test flag 
                             this group provides all-or-none (nxor2)\
 validation:
            -i                 test flag 
            -j                 test flag 
            -k                 test flag 
                             this group provides all-or-none (nxor3)\
 validation:
            -l                 test flag 
            -m                 test flag 
            -n                 test flag 
                           this group provides at-least-one validation: 
          -g                 test flag 
          -o                 test flag 
      -h, --help         Show this help menu 

    This goes after the options. 
 %                                                                           \
     
```

## Mapping arguments

I haven't written out a long example for this, but here's the test case you\
 should be able to discern the meaning from:

```cpp
bool ToLowerReader(const std::string &name, const std::string &value,\
 std::string &destination)
{
    destination = value;
    std::transform(destination.begin(), destination.end(),\
 destination.begin(), ::tolower);
    return true;
}

TEST_CASE("Mapping types work as needed", "[args]")
{
    std::unordered_map<std::string, MappingEnum> map{
        {"default", MappingEnum::def},
        {"foo", MappingEnum::foo},
        {"bar", MappingEnum::bar},
        {"red", MappingEnum::red},
        {"yellow", MappingEnum::yellow},
        {"green", MappingEnum::green}};
    args::ArgumentParser parser("This is a test program.", "This goes after\
 the options.");
    args::MapFlag<std::string, MappingEnum> dmf(parser, "DMF", "Maps string\
 to an enum", {"dmf"}, map);
    args::MapFlag<std::string, MappingEnum> mf(parser, "MF", "Maps string to\
 an enum", {"mf"}, map);
    args::MapFlag<std::string, MappingEnum, ToLowerReader> cimf(parser,\
 "CIMF", "Maps string to an enum case-insensitively", {"cimf"}, map);
    args::MapFlagList<std::string, MappingEnum> mfl(parser, "MFL", "Maps\
 string to an enum list", {"mfl"}, map);
    args::MapPositional<std::string, MappingEnum> mp(parser, "MP", "Maps\
 string to an enum", map);
    args::MapPositionalList<std::string, MappingEnum> mpl(parser, "MPL",\
 "Maps string to an enum list", map);
    parser.ParseArgs(std::vector<std::string>{"--mf=red", "--cimf=YeLLoW",\
 "--mfl=bar", "foo", "--mfl=green", "red", "--mfl", "bar", "default"});
    REQUIRE_FALSE(dmf);
    REQUIRE(args::get(dmf) == MappingEnum::def);
    REQUIRE(mf);
    REQUIRE(args::get(mf) == MappingEnum::red);
    REQUIRE(cimf);
    REQUIRE(args::get(cimf) == MappingEnum::yellow);
    REQUIRE(mfl);
    REQUIRE((args::get(mfl) == std::vector<MappingEnum>{MappingEnum::bar,\
 MappingEnum::green, MappingEnum::bar}));
    REQUIRE(mp);
    REQUIRE((args::get(mp) == MappingEnum::foo));
    REQUIRE(mpl);
    REQUIRE((args::get(mpl) == std::vector<MappingEnum>{MappingEnum::red,\
 MappingEnum::def}));
    REQUIRE_THROWS_AS(parser.ParseArgs(std::vector<std::string>{"--mf=YeLLoW"\
}), args::MapError);
}
```

# How fast is it?

This should not really be a question you ask when you are looking for an
argument-parsing library, but every test I've done shows args as being about
65% faster than TCLAP and 220% faster than boost::program_options.

The simplest benchmark I threw together is the following one, which parses the
command line `-i 7 -c a 2.7 --char b 8.4 -c c 8.8 --char d` with a parser that
parses -i as an int, -c as a list of chars, and the positional parameters as a
list of doubles (the command line was originally much more complex, but\
 TCLAP's
limitations made me trim it down so I could use a common command line across
all libraries.  I also have to copy in the arguments list with every run,
because TCLAP permutes its argument list as it runs (and comparison would have
been unfair without comparing all about equally), but that surprisingly didn't
affect much.  Also tested is pulling the arguments out, but that was fast
compared to parsing, as would be expected.

### The run:

```shell
% g++ -obench bench.cxx -O2 -std=c++11 -lboost_program_options
% ./bench
args seconds to run: 0.895472
tclap seconds to run: 1.45001
boost::program_options seconds to run: 1.98972
%
```

### The benchmark:

```cpp
#undef NDEBUG
#include <iostream>
#include <chrono>
#include <cassert>
#include "args.hxx"
#include <tclap/CmdLine.h>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
using namespace std::chrono;
inline bool doubleequals(const double a, const double b)
{
    static const double delta = 0.0001;
    const double diff = a - b;
    return diff < delta && diff > -delta;
}
int main()
{
    const std::vector<std::string> carguments({"-i", "7", "-c", "a", "2.7",\
 "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    const std::vector<std::string> pcarguments({"progname", "-i", "7", "-c",\
 "a", "2.7", "--char", "b", "8.4", "-c", "c", "8.8", "--char", "d"});
    // args
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            args::ArgumentParser parser("This is a test program.", "This goes\
 after the options.");
            args::ValueFlag<int> integer(parser, "integer", "The integer\
 flag", {'i', "int"});
            args::ValueFlagList<char> characters(parser, "characters", "The\
 character flag", {'c', "char"});
            args::PositionalList<double> numbers(parser, "numbers", "The\
 numbers position list");
            parser.ParseArgs(arguments);
            const int i = args::get(integer);
            const std::vector<char> c(args::get(characters));
            const std::vector<double> n(args::get(numbers));
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "args seconds to run: " << duration_cast<duration<double\
>>(runtime).count() << std::endl;
    }
    // tclap
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(pcarguments);
            TCLAP::CmdLine cmd("Command description message", ' ', "0.9");
            TCLAP::ValueArg<int> integer("i", "int", "The integer flag",\
 false, 0, "integer", cmd);
            TCLAP::MultiArg<char> characters("c", "char", "The character\
 flag", false, "characters", cmd);
            TCLAP::UnlabeledMultiArg<double> numbers("numbers", "The numbers\
 position list", false, "foo", cmd, false);
            cmd.parse(arguments);
            const int i = integer.getValue();
            const std::vector<char> c(characters.getValue());
            const std::vector<double> n(numbers.getValue());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "tclap seconds to run: " << duration_cast<duration<doubl\
e>>(runtime).count() << std::endl;
    }
    // boost::program_options
    {
        high_resolution_clock::time_point start = high_resolution_clock::now(\
);
        for (unsigned int x = 0; x < 100000; ++x)
        {
            std::vector<std::string> arguments(carguments);
            po::options_description desc("This is a test program.");
            desc.add_options()
                ("int,i", po::value<int>(), "The integer flag")
                ("char,c", po::value<std::vector<char>>(), "The character\
 flag")
                ("numbers", po::value<std::vector<double>>(), "The numbers\
 flag");
            po::positional_options_description p;
            p.add("numbers", -1);
            po::variables_map vm;
            po::store(po::command_line_parser(carguments).options(desc).posit\
ional(p).run(), vm);
            const int i = vm["int"].as<int>();
            const std::vector<char> c(vm["char"].as<std::vector<char>>());
            const std::vector<double> n(vm["numbers"].as<std::vector<double>>\
());
            assert(i == 7);
            assert(c[0] == 'a');
            assert(c[1] == 'b');
            assert(c[2] == 'c');
            assert(c[3] == 'd');
            assert(doubleequals(n[0], 2.7));
            assert(doubleequals(n[1], 8.4));
            assert(doubleequals(n[2], 8.8));
        }
        high_resolution_clock::duration runtime = high_resolution_clock::now(\
) - start;
        std::cout << "boost::program_options seconds to run: " <<\
 duration_cast<duration<double>>(runtime).count() << std::endl;
    }
    return 0;
}
```

So, on top of being more flexible, smaller, and easier to read, it is faster
than the most common alternatives.

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for args

This project builds and defines the build2 package for [args](https://github.\
com/taywee/args), which is a simple, small, flexible, single-header C++11\
 argument parsing library.

[![Official](https://img.shields.io/website/https/github.com/taywee/args.svg?\
down_message=offline&label=Official&style=for-the-badge&up_color=blue&up_mess\
age=online)](https://github.com/taywee/args)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/a\
rgs.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blue&u\
p_message=online)](https://github.com/build2-packaging/args)
[![cppget.org](https://img.shields.io/website/https/cppget.org/args.svg?down_\
message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_message\
=online)](https://cppget.org/args)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/ar\
gs.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-th\
e-badge&up_color=orange&up_message=running)](https://queue.cppget.org/args)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/args.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: args ^6.4.7

The library can be imported by the following declaration in a `buildfile`.

    import args = args%lib{args}

## Configuration
There are no configuration options available.

## Issues
Currently, there are no known issues.

## Contributing
Thank you in advance for your help and contribution to keep this package\
 up-to-date.
Please, file an issue on [GitHub](https://github.com/build2-packaging/glm/iss\
ues) for questions, bug reports, or to recommend updating the package version.
If you're making a pull request to fix bugs or update the package version\
 yourself, refer to the [`build2` Packaging Guidelines](https://build2.org/bu\
ild2-toolchain/doc/build2-toolchain-packaging.xhtml#core-version-management).

\
package-description-type: text/markdown;variant=GFM
changes:
\
* 6.0.0
Change Reader to functor type, breaking change.
Change Reader functor to allow any return type, but specifically need\
 bool-testable return for NOEXCEPT use.
Change List and Map templates into template templates to enforce proper type\
 use and to clean up user template invocations (i.e. `args::ValueFlagList<std\
::string, std::unordered_set<std::string>>` becomes `args::ValueFlagList<std:\
:string, std::unordered_set>`, also breaking change.

* 5.0.0
Implemented proper subparsers.
Added better C++11 style.
Improved documentation.

* 4.0.0
Changed all wording:

ArgFlag -> ValueFlag
Counter -> CounterFlag
PosArg -> Positional

Argument now solely refers to command line arguments.
Value refers to the argument that flags or positionals can take and store.
Positional is a positional option, which contains a value.
Option refers to flags and positionals, which can contain values.

\
changes-type: text/plain
url: https://github.com/Taywee/args
doc-url: https://taywee.github.io/args/
package-url: https://github.com/build2-packaging/args/
email: taywee@gmx.com
package-email: packaging@build2.org
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: catch2 ^2.13.7
builds: default
builds: -( +windows &gcc &!optimized ); Unoptimized compilation with MinGW on\
 Windows gets stuck.
bootstrap-build:
\
project = args-tests

using version
using config
using test
using dist

# Tests should not be installed.
# Do not use 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

hxx{*}: cxx.importable = false

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Import the 'args' library.
#
import args = args%lib{args}

\
location: args/args-tests-6.4.7.tar.gz
sha256sum: 9fe8ddba5ca83f037ade1297988738a22b3d2d8c3ee839111f38ecd5eb8248ab
:
name: byacc
version: 20210808
summary: Berkeley yacc parser generator
license: other: public domain
topics: yacc, bison, LALR, parser
description:
\
# byacc

Berkeley yacc is a parser generator utility that reads a grammar specification
from a file and generates an LR(1) parser for it. The parsers consist of a set
of LALR(1) parsing tables and a driver routine written in the C programming
language. It has a public domain license which includes the generated C.

This package is configured with backtracking enable which makes it reasonably
compatible with GNU bison.

Note that for better compatibility with bison, byacc supports the
`--defines=<defines_file>` and `--output=<output_file>` options as\
 alternatives
for `-H <defines_file>` and `-o <output_file>`. For example:

```
byacc --defines=parse.h --output=parse.c parse.y
```

Note also that the `byacc` executable provides `build2` metadata.

\
description-type: text/markdown;variant=GFM
changes:
\
2021-08-08  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c:
	fix memory-leak when replacing $$'s in destructor code (report/testcase
	by Boris Kolpackov).

	* main.c: account for a memory-leak

	* test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c,\
 test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c,\
 test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c,\
 test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c,\
 test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c,\
 test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c,\
 test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c,\
 test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inheri\
t3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.t\
ab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c,\
 test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/rename_debug.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.ca\
lc.c, test/btyacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c,\
 test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c,\
 test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c,\
 test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c,\
 test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c,\
 test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/defines1.\
calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c,\
 test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.\
tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.ta\
b.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc\
.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c,\
 test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/rename_debug.c, test/yacc/stdin1.calc\
.c, test/yacc/stdin2.calc.c, test/yacc/varsyntax_calc1.tab.c, btyaccpar.c,\
 yaccpar.c:
	regen

	* btyaccpar.skel, yaccpar.skel:
	revert change to initialization of yystate, which confuses gcc, making a
	different warning

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2021-08-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c, yacc.1: add "-h" option

	* test/btyacc/no_b_opt.error, test/btyacc/no_output2.error,\
 test/btyacc/no_p_opt.error, test/btyacc/big_b.error, test/btyacc/big_l.error\
, test/btyacc/help.error, test/btyacc/nostdin.error, test/yacc/big_b.error,\
 test/yacc/big_l.error, test/yacc/help.error, test/yacc/no_b_opt.error,\
 test/yacc/no_output2.error, test/yacc/no_p_opt.error, test/yacc/nostdin.erro\
r:
	regen

	* main.c:
	map any of bison's long-options which have a corresponding yacc option
	into the latter, without depending upon getopt_long().

	* main.c: suggested patch:
	From: Boris Kolpackov <boris@codesynthesis.com>
	Subject: Re: [PATCH] support bison's --defines and --output options in byacc

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2021-08-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/inherit2.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c:
	regen

	* output.c:
	fix a misplaced #line, which was after a generated line in the code-file

	* test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/quote_cal\
c-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c,\
 test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c, test/yacc/calc.tab.c,\
 test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c,\
 test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c,\
 test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c,\
 test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c,\
 test/yacc/code_calc.code.c, test/yacc/defines1.calc.c, test/yacc/defines2.ca\
lc.c, test/yacc/defines3.calc.c, test/yacc/stdin1.calc.c, test/yacc/stdin2.ca\
lc.c:
	regen

	* output.c:
	add a state-machine to output_semantic_actions() to detect and replace
	the "#line" directives added by Roland Illig's change, making them show
	the actual line-numbers in the code-file.

	* test/btyacc/pure_calc.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit\
0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c,\
 test/btyacc/ok_syntax1.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c,\
 test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/calc_code_all.tab.c,\
 test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_imports.tab.c,\
 test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_requires.tab.c,\
 test/btyacc/calc_code_top.tab.c, test/btyacc/code_calc.code.c,\
 test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c,\
 test/btyacc/defines3.calc.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/stdin1.calc.c,\
 test/btyacc/stdin2.calc.c:
	regen

	* reader.c:
	adapt a patch by Roland Illig which added #line directives with dummy
	filename and line number, because the debug information was incorrect.
	The actual fix (see output_semantic_actions) is to emit #line directives
	which correspond to the code-file.

	* reader.c: simplify an ifdef so I can balance {/}

	* output.c: use new macro

	* defs.h: add fprintf_lineno macro

	* reader.c:
	make that a little simpler - but I see that this should be using the
	code-file's line-numbering rather than ""

	* reader.c:
	make that into a macro, and add a begin_case() to more/less match (the
	#line's are not together in some btyacc cases...)

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2021-07-14  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: From: Roland Illig <roland.illig@gmx.de>
	Subject: small patch for byacc
	...
	this splits up "\nbreak;\n" output to put #line directives after first "\n"

2021-07-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2021-07-03
	    From: Ozkan Sezer <sezero@users.sourceforge.net>
	    config.sub: disable shellcheck SC2006 / SC2268 warnings

	    This is in line with the recent config.guess change in commit
	    12fcf67c9108f4c4b581eaa302088782f0ee40ea

	    * config.sub (shellcheck disable): Add SC2006,SC2268.

	    Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
	    Signed-off-by: Ozkan Sezer <sezero@users.sourceforge.net>
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

	* config.sub: 2021-07-03
	    From: Ozkan Sezer <sezero@users.sourceforge.net>
	    config.sub: normalize the quoting in the `echo FOO | sed ...`

	    Some cases quote the argument to echo and some do not.  At runtime
	    it probably does not matter because the substituted values will never
	    contain whitespace, but quoting them all would make shellcheck more
	    useful.

	    * config.sub: Consistently quote the argument of echo.
	    * doc/config.sub.1: Regenerate.

	    Suggested-by: Jacob Bachmeyer <jcb@gnu.org>
	    Signed-off-by: Ozkan Sezer <sezero@users.sourceforge.net>
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-07-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2021-06-03
	    From: Ozkan Sezer <sezero@users.sourceforge.net>
	    config.sub: replace POSIX $( ) with classic ` ` throughout

	    This is in line with the recent config.guess change in commit
	    d70c4fa934de164178054c3a60aaa0024ed07c91.

	    The patch was generated using patch-6.gawk script introduced in that
	    commit.

	    * config.sub: Revert POSIX command substitutions to classic form.

	    Signed-off-by: Ozkan Sezer <sezero@users.sourceforge.net>
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-06-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4: resync with my-autoconf

	* test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.ox\
out.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c,\
 test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_synta\
x1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c,\
 test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c,\
 test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c,\
 test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c,\
 test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c,\
 test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c,\
 test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c,\
 test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inheri\
t3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/rename_debug.c, btyaccpar.c, test/btyacc/stdin1.calc.c,\
 test/btyacc/stdin2.calc.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c,\
 test/yacc/error.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c,\
 test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.\
tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/calc_code_all.tab.c, test/yacc/calc_code_de\
fault.tab.c, test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.\
tab.c, test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c,\
 test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/defines1.\
calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c,\
 test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/rename_debug.\
c, test/yacc/stdin1.calc.c, test/yacc/stdin2.calc.c, yaccpar.c:
	regen

	* btyaccpar.skel, yaccpar.skel: cancel unused assignments

	* output.c: gcc warning

	* test/run_test.sh, test/run_lint.sh, test/run_make.sh:
	shellcheck-warnings

2021-06-19  jannick0

	* test/run_test.sh: changes suggested at
		https://github.com/jannick0/byacc-snapshots/tree/YYINT-fix-20210520

2021-06-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2021-06-13  Thomas E. Dickey  <dickey@invisible-island.net>

	* aclocal.m4: resync with my-autoconf

2021-06-04  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2021-06-03
	    From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
	    Recognize arc32

	    This is the 32-bit variant of ARCv3 ISA (which is not compatible with the
	    32-bit ARCv2 ISA)

	    | make check
	    | cd testsuite && bash config-guess.sh && rm uname
	    | PASS: config.guess checks (136 tests)
	    | cd testsuite && bash config-sub.sh
	    | PASS: config.sub checks (864 tests)
	    | PASS: config.sub idempotency checks (801 tests)
	    | PASS: config.sub canonicalise each config.guess testcase (136 tests)

	    * config.guess (arc32:Linux:*:*): Recognize.
	    * config.sub (arc32): Likewise.
	    * doc/config.guess.1: Regenerate.
	    * doc/config.sub.1: Likewise.
	    * testsuite/config-guess.data: Add a test case for arc32.
	    * testsuite/config-sub.data (arc32, arc*-elf): Add test cases.

	    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

	* config.sub: 2021-06-03 (repaired)
	    From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
	    Recognize arc32

	    This is the 32-bit variant of ARCv3 ISA (which is not compatible with the
	    32-bit ARCv2 ISA)

	    | make check
	    | cd testsuite && bash config-guess.sh && rm uname
	    | PASS: config.guess checks (136 tests)
	    | cd testsuite && bash config-sub.sh
	    | PASS: config.sub checks (864 tests)
	    | PASS: config.sub idempotency checks (801 tests)
	    | PASS: config.sub canonicalise each config.guess testcase (136 tests)

	    * config.guess (arc32:Linux:*:*): Recognize.
	    * config.sub (arc32): Likewise.
	    * doc/config.guess.1: Regenerate.
	    * doc/config.sub.1: Likewise.
	    * testsuite/config-guess.data: Add a test case for arc32.
	    * testsuite/config-sub.data (arc32, arc*-elf): Add test cases.

	    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-05-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2021-05-24
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: manual fixups after previous automatic patch

	    The tool could not handle command substitutions that span lines, but
	    fortunately there were only two such substitutions in the script.

	    The test for which universe is active on Pyramid is rewritten into a
	    case block because it was the only use of a command substitution as an
	    argument to the test command, which would require quoting.

	    * config.guess: Rewrite "if" for Pyramid systems to "case".

	* config.guess: 2021-05-24 (repaired)
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: replace POSIX $( ) with classic ` ` throughout

	    The previous replacement of backticks with POSIX command substitutions
	    was ill-considered and illogical: this script recognizes many archaic
	    machine types that probably never had POSIX shells, therefore it needs
	    to be able to run successfully under pre-POSIX shells.

	    This patch was generated using the included GNU Awk program.

	    * config.guess: Revert POSIX command substitutions to classic form.
	    * patch-6.gawk: Store the tool that produced the automated patch.

2021-05-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2021-05-24 (repaired)
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: manual fixup after previous automated patches

	    This patch provides the special handling for the GNU system.  As these
	    were two small and unique edits, they were not included in the scripts.

	    This patch also cleans up other minor issues that must be addressed
	    before reverting to classic command substitutions and updates
	    "shellcheck" directives to account for changes in this script and the
	    change in "shellcheck" towards reporting individual portability issues.

	* config.guess: 2021-05-24 (repaired)
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: automatic fixups after previous automated patch

	    This patch was generated using the following command:

	      sed -i config.guess \\
	          -e '/="[^"]\+"\(-\|$\)/s/="\([^"([:space:])]\+\)"/=\1/' \\
	          -e '/="[^"]\+"[[:alnum:]]/s/="\$\([^([:space:])]\+\)"/=${\1}/' \\
	          -e \\
	    '/\$(echo[^|]\+|/s/\([^[:space:]]\)[[:space:]]*|[[:space:]]*sed/\1 |\
 sed/g'

	    * config.guess: Remove unneeded quotes in other variable assignments,
	    standardize spacing for "echo ... | sed" substitutions.

	* config.guess: 2021-05-24 (repaired)
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: remove unneeded quotes and factor command substitutions

	    This is further cleanup and simplifies some constructs that can confuse
	    Emacs' syntax highlighting while generally reducing required quoting.

	    This patch was generated using the included GNU Awk program.

	    * config.guess: Remove unneeded variable quotes and factor out command
	    substitutions when setting GUESS.
	    * patch-3.gawk: Store the tool that produced the automated patch.

	* config.guess: 2021-05-24 (repaired)
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: manual fixups after previous automatic patch

	    * config.guess: Adjust a few "leftover" cases that the tool could not
	    easily recognize and fixes comment indentation in a few other special
	    cases.

	* config.guess: 2021-05-24 (repaired)
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: introduce intermediate variable with uname results

	    This will allow quoting to be significantly simplified in another
	    pass through the file.

	    * config.guess: Introduce GUESS variable to hold results of uname\
 analysis.

	* config.guess: 2021-05-24 (repaired)
	    From: Jacob Bachmeyer <jcb@gnu.org>
	    config.guess: use intermediate variable with uname results

	    This will allow quoting to be significantly simplified in another
	    pass through the file.

	    This patch was generated using the included GNU Awk program.

	    * config.guess: Use GUESS variable to hold results of uname analysis.
	    * patch-1.gawk: Store the tool that produced the automated patch.

2021-05-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2021-05-24 (repaired)
	    From: Dmitry V. Levin <ldv@altlinux.org>
	    config.guess: fix shellcheck warning SC2154

	    While, according to Plan 9 documentation, the environment variable
	    $cputype is set to the name of the kernel's CPU's architecture,
	    shellcheck warns that cputype is referenced but not assigned.
	    Be on the safe side and do not use cputype if it is not defined
	    or empty.

	    * config.guess (*:Plan9:*:*): Fix shellcheck warning SC2154.

	* config.guess: 2021-05-24 (repaired)
	    From: Dmitry V. Levin <ldv@altlinux.org>
	    config.guess: remove redundant quotes in case commands

	    According to the GNU Autoconf Portable Shell Programming manual,
	    the Bourne shell does not systematically split variables and back-quoted
	    expressions, in particular on the right-hand side of assignments and in
	    the argument of 'case'.

	    The change is made automatically using the following command:
	    $ sed -E -i 's/(\<case )"(\$[^"]+)"( in\>)/\1\2\3/' config.guess

	    * config.guess: Simplify case commands by removing quotes around the
	    argument.

	    Suggested-by: Jacob Bachmeyer <jcb@gnu.org>

	* config.guess: 2021-05-24 (repaired)
	    From: Dmitry V. Levin <ldv@altlinux.org>
	    config.guess: simplify exit status workaround on alphaev67-dec-osf5.1

	    Commit 29865ea8a5622cdd80b7a69a0afa78004b4cd311 introduced an exit trap
	    reset before exiting to avoid a spurious non-zero exit status on
	    alphaev67-dec-osf5.1.  Simplify that code a bit by moving the exit trap
	    reset around.

	    * config.guess (alpha:OSF1:*:*): Reset exit trap earlier.
	    * doc/config.guess.1: Regenerate.

2021-05-20  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c,\
 test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c,\
 test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c,\
 test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c,\
 test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c,\
 test/btyacc/code_calc.code.c, test/btyacc/code_calc.tab.c,\
 test/btyacc/code_error.code.c, test/btyacc/code_error.tab.c,\
 test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c,\
 test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inheri\
t3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.t\
ab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c,\
 test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/rename_debug.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.ca\
lc.c, test/btyacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c,\
 test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c,\
 test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c,\
 test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c,\
 test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c,\
 test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c, test/yacc/code_error.\
code.c, test/yacc/code_error.tab.c, test/yacc/defines1.calc.c,\
 test/yacc/defines2.calc.c, test/yacc/defines3.calc.c, test/yacc/empty.tab.c,\
 test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c,\
 test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.ta\
b.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc\
.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c,\
 test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/rename_debug.c, test/yacc/stdin1.calc\
.c, test/yacc/stdin2.calc.c, test/yacc/varsyntax_calc1.tab.c:
	regen

	* mkpar.c, reader.c: change printf format to allow for long-YYINT

	* lalr.c, lr0.c: change type, fix gcc warnings

	* verbose.c: change type, fix gcc warnings
	also change printf format, to allow for long YYINT

	* output.c: change type, fix gcc warnings
	also change printf format, to allow for long-YYINT

	* package/debian/rules, package/byacc.spec:
	change max-table-size to correspond with switch of YYINT from short to int

	* defs.h:
	change default for MAXTABLE to INT_MAX, like the FreeBSD port.
	that requires changing some types to eliminate type-mismatches.

	* configure: regen

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2021-05-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* aclocal.m4: resync with my-autoconf

2021-04-30  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2021-04-30 (repaired)
	    From: Maciej W. Rozycki <macro@orcam.me.uk>
	    config.sub: Handle MIPS R3 and R5 ISA levels with CPU names

	    Complement binutils commit ae52f4830604 ("Add MIPS r3 and r5 support.")
	    and recognize MIPS CPU patterns for the R3 and R5 ISA levels, used by
	    GAS to set defaults.

	    * config.sub (mipsisa32r3, mipsisa32r3el, mipsisa32r5, mipsisa32r5el,
	    mipsisa64r3, mipsisa64r3el, mipsisa64r5, mipsisa64r5el): Recognize.
	    * doc/config.sub.1: Regenerate.
	    * testsuite/config-sub.data: Add test cases.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-04-21  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2021-04-21 (repaired)
	    From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
	    Recognize arc64

	    This paves way for setting up arc64 software ecosystem.

	    $ make check
	    cd testsuite && bash config-guess.sh && rm uname
	    PASS: config.guess checks (136 tests)
	    cd testsuite && bash config-sub.sh
	    PASS: config.sub checks (853 tests)
	    PASS: config.sub idempotency checks (790 tests)
	    PASS: config.sub canonicalise each config.guess testcase (136 tests)

	    * config.guess (arc64:Linux:*:*): Recognize.
	    * config.sub (arc64): Likewise.
	    * doc/config.guess.1: Regenerate.
	    * doc/config.sub.1: Likewise.
	    * testsuite/config-guess.data: Add a test case for arc64.
	    * testsuite/config-sub.data (arc64, arc*-elf): Add test cases.

	    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-04-16  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2021-04-16 (repaired)
	    From: Purple Rain <purplerain@secbsd.org>
	    config.guess: add SecBSD support

	    * config.guess (*:SecBSD:*:*): Recognize.
	    * doc/config.guess.1: Regenerate.
	    * testsuite/config-guess.data: Add a test case.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

	* config.sub: 2021-04-16 (repaired)
	    From: Purple Rain <purplerain@secbsd.org>
	    config.sub: add SecBSD support

	    * config.sub (secbsd*): Recognize.
	    * doc/config.sub.1: Regenerate.
	    * testsuite/config-sub.data: Add x86_64-secbsd.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-03-28  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: ignore bison's "%empty" extension

	* reader.c, defs.h:
	%debug was a trivial bison "extension", mark it as such

	* yacc.1: use italics in a few places where bold was inappropriate

	* test/btyacc/varsyntax_calc1.tab.c, test/btyacc/varsyntax_calc1.tab.h,\
 test/btyacc/expr.oxout.tab.c, test/btyacc/expr.oxout.tab.h,\
 test/btyacc/inherit1.tab.c, test/btyacc/inherit1.tab.h, test/btyacc/inherit2\
.tab.c, test/btyacc/inherit2.tab.h, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/ok_syntax1.tab.h, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit3.tab.h, test/btyacc/err_inherit4.tab.c,\
 test/btyacc/err_inherit4.tab.h, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_calc1.tab.h, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_demo.tab.h, test/btyacc/btyacc_destroy1.tab.c,\
 test/btyacc/btyacc_destroy1.tab.h, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy2.tab.h, test/btyacc/btyacc_destroy3.tab.c,\
 test/btyacc/btyacc_destroy3.tab.h, test/btyacc/calc1.tab.c,\
 test/btyacc/calc1.tab.h, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/varsyntax_calc1.tab.h, test/yacc/expr.oxout.tab.c,\
 test/yacc/expr.oxout.tab.h, test/yacc/ok_syntax1.tab.c, test/yacc/ok_syntax1\
.tab.h, test/yacc/calc1.tab.c, test/yacc/calc1.tab.h:
	regen

	* reader.c:
	add union tag to YYSTYPE structure for compatibility with a feature which
	bison copied from Solaris yacc (request by Ella Stanforth)

	* configure: regen

	* config_h.in: update for _Noreturn feature

	* aclocal.m4: updated to work with autoheader

	* defs.h: apply syntax change needed for _Noreturn keyword

	* package/byacc.spec, package/debian/rules: use stdnoreturn

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2021-03-20  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4:
	resync with my-autoconf (adds --enable-stdnoreturn option)

2021-03-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2021-03-10 (repaired)
	    From: Idan Horo <idan.horowitz@gmail.com>
	    config.sub: Add support for SerenityOS

	    * config.sub (serenity*): Recognize.
	    * doc/config.sub.1: Regenerate.
	    * testsuite/config-sub.data: Add i386-serenity.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-01-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2021-01-25 (repaired)
	    From: Kalamatee <kalamatee@gmail.com>
	    config.guess: update AROS system detection

	    * config.guess: Recognize *:AROS:*:*.
	    * doc/config.guess.1: Regenerate.
	    * testsuite/config-guess.data: Add test cases.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-01-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2021-01-19 (repaired)
	    From: M. Levinson <mlevins@users.sourceforge.net>
	    config.guess: fix shell variable quoting bug

	    * config.guess (*:NetBSD:*:*): Spell out the full sysctl command twice
	    instead of using a shell variable.
	    * doc/config.guess.1: Regenerate.

	    Fixes: 827c77253b396c07306927b2a4b794a3251c48eb
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-01-09  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/copyright, VERSION, package/byacc.spec, package/debian/chan\
gelog, package/mingw-byacc.spec, package/pkgsrc/Makefile:
	bump

2021-01-07  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2021-01-08 (repaired)
	    From: Peixing Xin <peixing.xin@windriver.com>
	    config.sub: recognize four-part configuration name for VxWorks

	    For example:

	      armv7m-wrs-vxworks-eabihf
	      armv7-wrs-vxworks-eabihf
	      i686-wrs-vxworks-simlinux
	      i686-wrs-vxworks-simwindows
	      powerpc-wrs-vxworks-spe
	      x86_64-wrs-vxworks-simlinux
	      x86_64-wrs-vxworks-simwindows

	    * config.sub: Recognize four-part configuration name for VxWorks.
	    * doc/config.guess.1: Regenerate.
	    * testsuite/config-sub.data: Add test cases.

	    Co-authored-by: John Ericson <git@JohnEricson.me>
	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-01-06  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2021-01-07 (repaired)
	    From: Alan Modra <amodra@gmail.com>
	    config.sub: accept OS of eabi* and gnueabi*

	    Commit 5e531d391852 broke powerpc-eabivle:

	    $ ./config.sub powerpc-eabivle
	    Invalid configuration `powerpc-eabivle': OS `eabivle' not recognized

	    Also powerpc-eabisim and probably some arm configurations.

	    * config.sub: Accept OS of eabi* and gnueabi*.
	    * testsuite/config-sub.data: Add powerpc-eabisim and powerpc-eabivle.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2021-01-05  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4: resync with my-autoconf

2021-01-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2021-01-01 (repaired)
	    From: Dmitry V. Levin <ldv@altlinux.org>
	    Update copyright years

	    * config.guess: Update copyright years.
	    * config.sub: Likewise.
	    * doc/config.guess.1: Regenerate.
	    * doc/config.sub.1: Likewise.

2020-12-31  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2020-12-31 (repaired)
	    From: Kito Cheng <kito.cheng@sifive.com>
	    Recognize riscv32be and riscv64be

	    Recently RISC-V community got patches big-endian support for binutils,
	    and we'd like to accept that, however before accepting that I think it
	    would be better to upstream config.sub and config.guess change here :)

	    It's my check result on Ubuntu 18.04:

	     $ make check
	     cd testsuite && bash config-guess.sh && rm uname
	     PASS: config.guess checks (131 tests)
	     cd testsuite && bash config-sub.sh
	     PASS: config.sub checks (830 tests)
	     PASS: config.sub idempotency checks (767 tests)
	     PASS: config.sub canonicalise each config.guess testcase (131 tests)

	    * config.guess (riscv32be:Linux:*:*, riscv64be:Linux:*:*): Recognize.
	    * config.sub (riscv32be, riscv64be): Likewise.
	    * doc/config.guess.1: Regenerate.
	    * doc/config.sub.1: Likewise.
	    * testsuite/config-guess.data: Add test cases for riscv32be, and\
 riscv64be.
	    * testsuite/config-sub.data (riscv32be, riscv64be): Add test cases.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2020-12-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2020-12-22 (repaired)
	    From: Xiaotian Wu <wuxiaotian@loongson.cn>
	    Recognize loongarch32, loongarch64, and loongarchx32

	    * config.guess (loongarch32:Linux:*:*, loongarch64:Linux:*:*,
	    loongarchx32:Linux:*:*): Recognize.
	    * config.sub (loongarch32, loongarch64, loongarchx32): Likewise.
	    * doc/config.guess.1: Regenerate.
	    * doc/config.sub.1: Likewise.
	    * testsuite/config-guess.data: Add test cases for loongarch32,
	    loongarch64, and loongarchx32.
	    * testsuite/config-sub.data (loongarch32, loongarch64, loongarchx32):
	    Add test cases.

	    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>

2020-12-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2020-12-02 (repaired)
	    From: Dmitry V. Levin <ldv@altlinux.org>
	    config.sub: recognize thumbv7*

	    * config.sub (thumbv7*): Recognize.
	    * testsuite/config-sub.data (thumbv7): New test.

	    Reported-by: Karl Berry <karl@freefriends.org>
	    Link: https://lists.gnu.org/archive/html/config-patches/2020-12/msg00001\
.html

2020-11-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2020-11-17 (repaired)
	    From: Dmitry V. Levin <ldv@altlinux.org>
	    .gitattributes: specify a custom git merge driver for the ChangeLog file

	* config.guess, config.sub: 2020-11-19 (repaired)
	    From: Dmitry V. Levin <ldv@altlinux.org>
	    Update URLs of the latest version of config.guess and config.sub scripts

	    Prefer cgit URLs over gitweb as the former are usually served faster:
	    $ time -f %e wget -q 'https://git.savannah.gnu.org/gitweb/?p=config.git;\
a=blob_plain;f=config.guess'
	    1.06
	    $ time -f %e wget -q 'https://git.savannah.gnu.org/cgit/config.git/plain\
/config.guess'
	    0.73

	    * config.guess: Prefer cgit URLs over gitweb.
	    (timestamp): Update.
	    * config.sub: Likewise.
	    * doc/config.guess.1: Regenerate.
	    * doc/config.sub.1: Likewise.

2020-11-06  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2020-11-07 (repaired)
	    From: Ben Elliston <bje@gnu.org>
	    Update timestamps.

	* config.sub: 2020-10-13 (repaired)
	    From: Ben Elliston <bje@gnu.org>
	            * config.sub, config.guess: Replace backtick `..` substitutions
	            with POSIX $(..) command substitutions throughout.
	            * Makefile (shellcheck): Don't exclude message SC2006.

	* config.guess: 2020-10-22 (repaired)
	    From: Ben Elliston <bje@gnu.org>
	            * config.sub, config.guess: Replace backtick `..` substitutions
	            with POSIX $(..) command substitutions throughout.
	            * Makefile (shellcheck): Don't exclude message SC2006.

2020-10-21  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2020-10-22
	    From: Rin Okuyama <rin@netbsd.org>
	            * config.guess (*:NetBSD:*:*): Handle aarch64eb.
	            * testsuite/config-guess.data: Add test cases.

	    Signed-off-by: Ben Elliston <bje@gnu.org>

2020-10-14  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2020-10-13
	    From: Ben Elliston <bje@gnu.org>
	    Fix whitespace problem in config.sub.

2020-10-13  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2020-10-13
	    From: Ben Elliston <bje@gnu.org>
	            * config.sub (i*86-pc-os2-emx): Recognise correctly.
	            * testsuite/config-sub.data: Add OS/2 tests to avoid regressions.

2020-09-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2020-09-08
	    From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
	            * config.sub (uclinux-uclibc*): Fix detection.
	            * testsuite/config-sub.data: Add a test case to avoid regression.

	    Signed-off-by: Ben Elliston <bje@gnu.org>

2020-09-22  Thomas E. Dickey  <dickey@invisible-island.net>

	* closure.c, warshall.c:
	fix undefined-behavior diagnosed with gcc -fsanitize=undefined (report by
	Alexander Richardson)

2020-09-20  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2020-09-19
	    From: Bruno Haible <bruno@clisp.org>
	            * config.guess: Don't use 'ldd --version' to determine the\
 presence of
	            musl libc, as this fails on Alpine Linux 3.10.

	    Signed-off-by: Ben Elliston <bje@gnu.org>

2020-09-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* LICENSE: RCS_BASE

	* reader.c, output.c: cppcheck -- reduce scope

	* defs.h: update to 2.0

	* test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c,\
 test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c,\
 test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c,\
 test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c,\
 test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c,\
 test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c,\
 test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c,\
 test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inheri\
t1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c,\
 test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c,\
 test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c,\
 test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax2.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c,\
 test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c,\
 test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax25.tab.c,\
 test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c,\
 test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c,\
 test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c,\
 test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c,\
 test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c,\
 test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.t\
ab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c,\
 test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/rename_debug.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.ca\
lc.c, test/btyacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c,\
 test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c,\
 test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c,\
 test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c,\
 test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c,\
 test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/defines1.\
calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c,\
 test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax10.t\
ab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c,\
 test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c,\
 test/yacc/err_syntax17.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/err_syntax21.tab.c,\
 test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c,\
 test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c,\
 test/yacc/err_syntax26.tab.c, test/yacc/err_syntax27.tab.c,\
 test/yacc/err_syntax3.tab.c, test/yacc/err_syntax4.tab.c,\
 test/yacc/err_syntax5.tab.c, test/yacc/err_syntax6.tab.c,\
 test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7a.tab.c,\
 test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax8.tab.c,\
 test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax9.tab.c,\
 test/yacc/error.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c,\
 test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.\
tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c,\
 test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c,\
 test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c,\
 test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c,\
 test/yacc/rename_debug.c, test/yacc/stdin1.calc.c, test/yacc/stdin2.calc.c,\
 test/yacc/varsyntax_calc1.tab.c:
	update to version 2.0

	* reader.c:
	improve loop which skips backward through a (possibly nested) sequence of
	square-brackets.

	* reader.c: simplify a check to quiet a bogus cppcheck-warning

	* yacc.1: bump date

	* reader.c: add a note about a bogus cppcheck warning

	* configure: regen

	* configure.in:
	always check for gcc attributes, to work around defect in clang's imitation
	of this feature

	* reader.c: cppcheck -- scope reduction
	cppcheck -- eliminate bogus returns after no-return functions

	* verbose.c, output.c, mkpar.c, main.c, warshall.c, lr0.c, lalr.c, graph.c,\
 closure.c:
	cppcheck -- scope reduction

	* package/debian/compat: quiet compatibility-warning

	* yacc.1: use "ASCII" for dashes which are part of proper names

	* configure: regen

	* configure.in: switch to --enable-warnings, for consistency

	* aclocal.m4:
	resync with my-autoconf, for compiler-warning fixes with macOS

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2020-09-07  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2020-09-08
	    From: Elad Lahav <e2lahav@gmail.com>
	            * config.sub: Fix regression in QNX recognition.
	            * testsuite/config-sub.data: Add some test cases.

	    Signed-off-by: Ben Elliston <bje@gnu.org>

2020-08-16  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2020-08-17

2020-06-28  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2020/06/28

2020-06-14  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2020/04/26

2020-03-30  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/copyright: bump

	* test/yacc/grammar.tab.c, test/btyacc/grammar.tab.c, test/grammar.y,\
 reader.c:
	typo found with codespell

	* yacc.1: fixes noted in the original report, overlooked in followup

2020-03-30  Bjarni.Ingi.Gislason

	* yacc.1: typography/spelling fixes - Debian #955175

2020-03-30  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2020-03-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4:
	resync with my-autoconf, mostly fixes for compiler-warnings

	* configure.in: use macro to suppress X-dependency from newer macros

2019-12-20  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2019-12-21

2019-11-25  Tom.Shields

	* main.c:
	fix an inconsistency between the getopt and non-getopt configuration.
	In the former, getopt always used "yacc", not the name of the executable.

2019-11-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/run_make.sh:
	suppress bison's -Wyacc warning, which is not useful.

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2019-11-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* yacc.1: new version of manpage

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* yacc.1: document %code

	* test/btyacc/calc_code_all.error, test/btyacc/calc_code_all.output,\
 test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_all.tab.h,\
 test/btyacc/calc_code_default.error, test/btyacc/calc_code_default.output,\
 test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_default.tab.h,\
 test/btyacc/calc_code_imports.error, test/btyacc/calc_code_imports.output,\
 test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_imports.tab.h,\
 test/btyacc/calc_code_provides.error, test/btyacc/calc_code_provides.output,\
 test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_provides.tab.h,\
 test/btyacc/calc_code_requires.error, test/btyacc/calc_code_requires.output,\
 test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_requires.tab.h,\
 test/btyacc/calc_code_top.error, test/btyacc/calc_code_top.output,\
 test/btyacc/calc_code_top.tab.c, test/btyacc/calc_code_top.tab.h,\
 test/yacc/calc_code_all.tab.c, test/yacc/calc_code_all.tab.h,\
 test/yacc/calc_code_default.tab.c, test/yacc/calc_code_provides.tab.c,\
 test/yacc/calc_code_provides.tab.h, test/yacc/calc_code_requires.tab.c,\
 test/yacc/calc_code_requires.tab.h, test/yacc/calc_code_top.tab.c:
	RCS_BASE

	* output.c:
	amend updates for 'outline' when processing "%code" in code-file

	* output.c:
	modify output_code_lines() to show begin/end block comments which were in
	reader.c, and to generate a #line for the code-file.

	* reader.c:
	modify copy_code() to allow for multiple %code directives for a given
	section, recording the input line-number for each directive as a #line
	in the resulting string.  remove the block start/end comments, since those
	will be done for a whole section in output.c

	* mstring.c, defs.h: add msrenew()

	* test/yacc/calc_code_all.error, test/yacc/calc_code_all.output,\
 test/yacc/calc_code_default.error, test/yacc/calc_code_default.output,\
 test/yacc/calc_code_default.tab.h, test/yacc/calc_code_imports.error,\
 test/yacc/calc_code_imports.output, test/yacc/calc_code_imports.tab.c,\
 test/yacc/calc_code_imports.tab.h, test/yacc/calc_code_provides.error,\
 test/yacc/calc_code_provides.output, test/yacc/calc_code_requires.error,\
 test/yacc/calc_code_requires.output, test/yacc/calc_code_top.error,\
 test/yacc/calc_code_top.output, test/yacc/calc_code_top.tab.h:
	RCS_BASE

2019-11-18  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/calc_code_imports.y, test/calc_code_all.y, test/calc_code_default.y,\
 test/calc_code_top.y, test/calc_code_provides.y, test/calc_code_requires.y:
	RCS_BASE

2019-11-04  Michael.Forney

	* defs.h: add missing "extern" for new variable "code_lines"

2019-11-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c: build-fix for MinGW cross-compiling

	* output.c, reader.c: gcc-warnings

	* output.c: check validity of text_file before rewind
	remove redundant check of iflag

	* main.c: fix memory-leak reported by clang

	* mkpar.c: guard against a null-reference reported by clang (unlikely)

	* reader.c: fix two coverity warnings:
	a) resource leak on malloc-failure
	b) possible null-pointer dereference on parse-error

	* test/btyacc/err_inherit4.tab.h, test/btyacc/btyacc_demo.tab.h: regen

	* defs.h: use enum's to simplify recent change

	* mstring.c:
	enable mstring() in regular byacc, since Zoulas' change relies upon it

2019-11-03  Christos.Zoulas

	* defs.h, reader.c, output.c: add support for bison's "%code" feature
	also fix a small bug: declare YYLTYPE externally when producing locations

2019-11-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/help.error, test/btyacc/no_b_opt.error, test/btyacc/no_output2\
.error, test/btyacc/no_p_opt.error, test/yacc/help.error, test/yacc/no_b_opt.\
error, test/yacc/no_output2.error, test/yacc/no_p_opt.error:
	regen

	* test/run_test.sh:
	there's no standard wording for the options-errors from getopt;
	filter that to "error message" in the test reference files.

	* main.c:
	provide for using getopt(), to accommodate a case where developers have
	relied upon non-POSIX behavior.

	* test/run_test.sh:
	getopt's messages do not print the full pathname of yacc in some cases;
	adjust the sed-script which changes those to "YACC"

	* configure: regen

	* config_h.in: regen, using autoheader-252

	* configure.in: add configure check for getopt

	* configure: regen

	* aclocal.m4:
	resync with my-autoconf adds a fix which accommodates a difference in
	warning options between gcc/clang when --enable-warnings is not set.

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2019-09-11  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2019-09-10

2019-06-17  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/big_b.error, test/btyacc/big_l.error, test/btyacc/help.error,\
 test/btyacc/no_b_opt.error, test/btyacc/no_output2.error,\
 test/btyacc/no_p_opt.error, test/btyacc/nostdin.error, test/yacc/big_b.error\
, test/yacc/big_l.error, test/yacc/help.error, test/yacc/no_b_opt.error,\
 test/yacc/no_output2.error, test/yacc/no_p_opt.error, test/yacc/nostdin.erro\
r:
	regen

	* test/run_test.sh: test "-H" rather than "-D"

2019-06-16  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c, yacc.1:
	change "-D" option to "-H" (discussion with Ethan Sommer)

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c,\
 test/btyacc/defines3.calc.c:
	RCS_BASE

	* test/run_test.sh: in test_defines, save the ".c" file too

	* test/yacc/defines3.calc.c, test/yacc/defines2.calc.c, test/yacc/defines1.c\
alc.c:
	RCS_BASE

	* test/run_test.sh:
	output of test_defines should be a header ".h", not ".c"

	* test/btyacc/defines1.calc.h, test/btyacc/defines1.error,\
 test/btyacc/defines1.output, test/btyacc/defines2.calc.h,\
 test/btyacc/defines2.error, test/btyacc/defines2.output, test/btyacc/defines\
3.calc.h, test/btyacc/defines3.error, test/btyacc/defines3.output:
	RCS_BASE

	* main.c: however, a subsequent -d cancels -D

	* test/yacc/defines1.calc.h, test/yacc/defines3.calc.h: RCS_BASE

	* main.c: -D option implies -d

	* test/yacc/defines1.error, test/yacc/defines1.output, test/yacc/defines2.ca\
lc.h, test/yacc/defines2.error, test/yacc/defines2.output,\
 test/yacc/defines3.error, test/yacc/defines3.output:
	RCS_BASE

	* yacc.1: align macro definitions with my other manpages

	* test/run_test.sh: add test for -D after -d or -b options

	* test/btyacc/stdin1.calc.c, test/btyacc/stdin1.error, test/btyacc/stdin1.ou\
tput, test/btyacc/stdin2.calc.c, test/btyacc/stdin2.error,\
 test/btyacc/stdin2.output:
	RCS_BASE

	* test/btyacc/big_b.error, test/btyacc/big_b.output, test/btyacc/big_l.error\
, test/btyacc/big_l.output, test/btyacc/help.error, test/btyacc/help.output,\
 test/btyacc/no_b_opt.error, test/btyacc/no_b_opt.output, test/btyacc/no_b_op\
t1.error, test/btyacc/no_b_opt1.output, test/btyacc/no_code_c.error,\
 test/btyacc/no_code_c.output, test/btyacc/no_defines.error,\
 test/btyacc/no_defines.output, test/btyacc/no_graph.error,\
 test/btyacc/no_graph.output, test/btyacc/no_include.error,\
 test/btyacc/no_include.output, test/btyacc/no_opts.error,\
 test/btyacc/no_opts.output, test/btyacc/no_output.error, test/btyacc/no_outp\
ut.output, test/btyacc/no_output1.error, test/btyacc/no_output1.output,\
 test/btyacc/no_output2.error, test/btyacc/no_output2.output,\
 test/btyacc/no_p_opt.error, test/btyacc/no_p_opt.output, test/btyacc/no_p_op\
t1.error, test/btyacc/no_p_opt1.output, test/btyacc/no_verbose.error,\
 test/btyacc/no_verbose.output, test/btyacc/nostdin.error,\
 test/btyacc/nostdin.output, test/yacc/big_b.error, test/yacc/big_b.output,\
 test/yacc/big_l.error, test/yacc/big_l.output, test/yacc/help.error,\
 test/yacc/help.output, test/yacc/no_b_opt.error, test/yacc/no_b_opt.output,\
 test/yacc/no_b_opt1.error, test/yacc/no_b_opt1.output, test/yacc/no_code_c.e\
rror, test/yacc/no_code_c.output, test/yacc/no_defines.error,\
 test/yacc/no_defines.output, test/yacc/no_graph.error, test/yacc/no_graph.ou\
tput, test/yacc/no_include.error, test/yacc/no_include.output,\
 test/yacc/no_opts.error, test/yacc/no_opts.output, test/yacc/no_output.error\
, test/yacc/no_output.output, test/yacc/no_output1.error, test/yacc/no_output\
1.output, test/yacc/no_output2.error, test/yacc/no_output2.output,\
 test/yacc/no_p_opt.error, test/yacc/no_p_opt.output, test/yacc/no_p_opt1.err\
or, test/yacc/no_p_opt1.output, test/yacc/no_verbose.error,\
 test/yacc/no_verbose.output, test/yacc/nostdin.error, test/yacc/nostdin.outp\
ut:
	regen

	* test/run_test.sh:
	add a test for stdin "-" vs end-options "--", and correct a redirection
	of stderr in test_flags

	* test/yacc/stdin2.output, test/yacc/stdin2.calc.c, test/yacc/stdin1.calc.c,\
 test/yacc/stdin1.error, test/yacc/stdin1.output, test/yacc/stdin2.error:
	RCS_BASE

	* test/btyacc/big_b.output, test/btyacc/big_l.output, test/btyacc/help.outpu\
t, test/btyacc/no_b_opt.output, test/btyacc/no_output2.output,\
 test/btyacc/no_p_opt.output, test/btyacc/nostdin.output, test/yacc/big_b.out\
put, test/yacc/big_l.output, test/yacc/help.output, test/yacc/no_b_opt.output\
, test/yacc/no_output2.output, test/yacc/no_p_opt.output, test/yacc/nostdin.o\
utput:
	regen

	* main.c: add -D option, to specify filename vs y.tab.h for -d

	* defs.h: add dflag2, for -D option

	* yacc.1: document -D option

	* config_h.in: updated with autoheader-252

	* configure: regen

	* package/debian/copyright: bump

	* aclocal.m4: add CF_GETOPT_HEADER

	* aclocal.m4: Improved autoconf macros:
	+ CF_CC_ENV_FLAGS
		putting preprocessor flags in CFLAGS also is a nuisance, which can be
		addressed in the same way.
	+ CF_GCC_WARNINGS
		factor out workaround for XTSTRINGDEFINES as CF_CONST_X_STRING
	+ CF_GNU_SOURCE
		The check for _DEFAULT_SOURCE should apply to "recent" Cygwin (since early\
 2016),
		and except for "NEWLIB" vs "GLIBC" in the test, acts the same if I pretend
		that "newlib" is the GNU C library.  Without this, the check falls through
		to the _XOPEN_SOURCE test, which breaks the pseudoterminal checks for xterm.
	+ CF_POSIX_C_SOURCE
		add/use CF_POSIX_VISIBLE
	+ CF_TRY_XOPEN_SOURCE
		use CF_APPEND_TEXT
	+ CF_WITH_MAN2HTML
		use sed to work around non-POSIX tail utility
	+ CF_XOPEN_SOURCE
		use CF_APPEND_TEXT
		add/use CF_POSIX_VISIBLE

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2019-06-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2019-06-10

2019-05-22  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2019-05-22

2018-06-09  Thomas E. Dickey  <dickey@invisible-island.net>

	* yacc.1: minor typographical fixes

	* test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c,\
 test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit\
0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c,\
 test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c,\
 test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c,\
 test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c,\
 test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c,\
 test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inh\
erit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/rename_debug.c, btyaccpar.c:
	regen

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2018-06-09  Tom.Shields

	* btyaccpar.skel:
	add casts to fix g++ (clang++) compile errors in the backtracking skeleton
	due to assignment of ‘void *’ to another pointer type.

2018-05-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/run_make.sh:
	check if this is bison 3+ before adding options to suppress warnings

	* package/byacc.spec: build-fix for Mageia 6

	* package/byacc.spec: add btyacc package

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* package/debian/control: add a package for btyacc

	* package/debian/rules: generate a package for btyacc

2018-05-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/code_error.code.c,\
 test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inh\
erit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.ox\
out.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c,\
 test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_synta\
x1.tab.c, btyaccpar.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_dem\
o.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c\
, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c,\
 test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c,\
 test/btyacc/code_calc.code.c, test/btyacc/rename_debug.c:
	regen

	* btyaccpar.skel: fix typo

2018-05-21  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/run_make.sh:
	ignore case for "%" directives to skip with old-yacc, and add %token-table
	to the list

	* btyaccpar.c: regen

2018-05-21  Christos.Zoulas

	* btyaccpar.skel:
	improve compatibility with bison by changing the YYLLOC_DEFAULT macro to use
	YYRHSLOC() macro, and adjusting the array indices of yyerror_loc_range[] for
	consistency.

2018-05-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* output.c:
	add a fallback definition for YYDEBUG to the -i externs file.

	* test/btyacc/rename_debug.i, test/yacc/rename_debug.i: regen

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2018-05-09  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4: resync with my-autoconf

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* test/btyacc/rename_debug.i, btyaccpar.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c,\
 test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_erro\
r.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.t\
ab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c,\
 test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/rename_debug.c, test/btyacc/varsyntax_calc1.tab.c:
	regen

	* btyaccpar.skel: apply Guy Harris' changes here as well

	* test/btyacc/rename_debug.i, test/yacc/rename_debug.i: regen

	* output.c: correct/improve fallback prototype for yylex()

	* test/btyacc/rename_debug.i, test/yacc/rename_debug.i: regen

2018-05-08  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/grammar.tab.c, test/yacc/grammar.tab.c: regen

	* test/grammar.y:
	quiet some warnings from gcc 7 when doing "make check_make"

	* package/debian/watch, package/pkgsrc/Makefile: update ftp-url

	* test/btyacc/ok_syntax1.tab.h, test/btyacc/btyacc_calc1.tab.h: regen

	* output.c:
	provide yylex() declaration for simple case (request by "Mutiny")

	* test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.\
tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c,\
 test/yacc/ok_syntax1.tab.h, test/yacc/pure_calc.tab.c, test/yacc/pure_error.\
tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c,\
 test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c,\
 test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c,\
 test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c,\
 test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c\
, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c,\
 test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.t\
ab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/err_syntax18.tab.c, test/yacc/rename_debug.c, test/yacc/rename_deb\
ug.i, yaccpar.c:
	regen

	* VERSION, package/byacc.spec, package/debian/changelog, package/debian/copy\
right, package/mingw-byacc.spec, package/pkgsrc/Makefile:
	bump

2018-05-06  Guy.Harris

	* yaccpar.skel: two fixes:
	1) define yydebug only if YYDEBUG is defined and
	2) make yynerrs a parser-local variable if the parser is reentrant.

2018-02-24  Guy.Harris

	* output.c: do not emit "extern YYSTYPE yylval;" for pure parsers

2018-02-05  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2018-01-15

	* config.guess: 2018-01-26

2017-12-04  erik.b.andersen

	* main.c: A proper path for temporary files is needed by byacc under
	Windows commandline, otherwise there's a risk of empty files.
	The TEMP environment variable is always defined in Windows.

	* defs.h: The noreturn attribute needs to be specified before function
	to be portable among compilers (gcc, clang, msvc).

2017-12-04  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: adapted fix by Erik B:
	 a) increase the length of name[] to account for a trailing null
	 b) note that calling syntax_error() from get_number() does not return

2017-09-14  Tom.Shields

	* yacc.1: fix typo

2017-07-09  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/byacc.spec, package/mingw-byacc.spec:
	use predefined "configure"

	* reader.c: remove unused assignment

	* package/debian/rules: use dpkg-buildflags

	* configure: regen

	* aclocal.m4: resync with my-autoconf

	* reader.c, output.c, defs.h:
	add/use IS_NAME1() and IS_NAME2() to reduce clutter

	* reader.c, output.c, defs.h:
	guard against sign-extension in ctype-macros

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* reader.c: check for numeric overflow in get_number()

	* reader.c:
	correct limit-checks for input filename and line-number, in case no valid
	filename and/or number was found.

2017-04-30  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.t\
ab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c,\
 test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c,\
 test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_erro\
r.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/rename_debug.c, btyaccpar.c, btyaccpar.skel:
	fix another uninitialized variable warning in "make check_make" for btyacc

	* test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/ok_syntax1.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/calc3.tab.c, btyaccpar.c, btyaccpar.skel, test/yacc/ok_syntax1.t\
ab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c,\
 test/yacc/calc3.tab.c, yaccpar.c, defs.h, yaccpar.skel, output.c:
	fix some compiler warnings for "make check_make" by adding section init_vars,
	which initializes the body_vars for pure-parser configuration.

2017-04-30  Tom.Shields

	* output.c:
	use YY_NO_LEAKS set in configure --with-no-leaks, in the generated code

2017-04-30  Julien.Ramseier

	* main.c, test/yacc/big_l.output:
	fix typo in unsupported-flag warning message

2017-04-30  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2017-04-29  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2017-04-02

2017-03-18  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2017-02-07

	* config.guess: 2017-03-05

2017-02-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/expr.oxout.error, test/btyacc/expr.oxout.output,\
 test/btyacc/expr.oxout.tab.c, test/btyacc/expr.oxout.tab.h,\
 test/yacc/expr.oxout.error, test/yacc/expr.oxout.output, test/yacc/expr.oxou\
t.tab.c, test/yacc/expr.oxout.tab.h:
	RCS_BASE

	* package/debian/copyright: update copyright

	* reader.c, defs.h, main.c:
	avoid using regex.h since some low-end platforms do not have this

	* test/expr.oxout.y: RCS_BASE

	* configure: regen

	* aclocal.m4: quiet a strict gcc warning in CF_MKSTEMP

2017-02-01  Tom.Shields

	* main.c, reader.c, defs.h:
	process #line directives, like bison and flex

2017-02-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2016-12-31  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2017-01-01

2016-12-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/quote_calc4-s.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab\
.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c,\
 test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c,\
 test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_erro\
r.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/rename_debug.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c,\
 test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c,\
 btyaccpar.c:
	regen

	* btyaccpar.skel: changes from NetBSD
	+ use YYINT rather than short in btyaccpar.skel
	  (some of this had already been done by Tom Shields)
	+ remove some casts of malloc/realloc

	* yaccpar.c, yaccpar.skel, output.c: changes from NetBSD
	- Add some more bison stuff to make the mesa/gallium parser work:
	    %initial-action (add missing source struct member in location)
	    %debug (unimplemented)
	    %error-verbose (unimplemented)

	This changes some existing code:
	+ yylloc is now a pointer, so
	+ the first parameter to YYERROR_DECL() is a pointer
	+ struct YYLTYPE now has a "source" field

	* test/btyacc/btyacc_demo.tab.h, test/btyacc/code_calc.tab.c,\
 test/btyacc/code_error.tab.c, test/btyacc/err_inherit4.tab.h:
	regen

	* btyaccpar.c, btyaccpar.skel, reader.c: changes from NetBSD
	- Add some more bison stuff to make the mesa/gallium parser work:
	    %initial-action (add missing source struct member in location)
	    %debug (unimplemented)
	    %error-verbose (unimplemented)

	This changes some existing code:
	+ yylloc is now a pointer, so
	+ the first parameter to YYERROR_DECL() is a pointer
	+ struct YYLTYPE now has a "source" field

	* reader.c:
	fix from NetBSD: correct off-by-one when adding a null in copy_param()

	* reader.c: adapted from NetBSD
	- Convert *most* error fingerprints to:
	    -unterminated_arglist(int a_lineno, char *a_line, char *a_cptr)
	    +unterminated_arglist(const struct ainfo *a)
	- Cast new <ctype.h> args to unsigned char

	* defs.h: changes from NetBSD
	- Add some more bison stuff to make the mesa/gallium parser work:
	    %initial-action (add missing source struct member in location)
	    %debug (unimplemented)
	    %error-verbose (unimplemented)

	This changes some existing code:
	+ yylloc is now a pointer, so
	+ the first parameter to YYERROR_DECL() is a pointer
	+ struct YYLTYPE now has a "source" field

	* defs.h: adapted from NetBSD
	- Convert *most* error fingerprints to:
	    -unterminated_arglist(int a_lineno, char *a_line, char *a_cptr)
	    +unterminated_arglist(const struct ainfo *a)
	- Cast new <ctype.h> args to unsigned char

	* main.c: changes from NetBSD
	- Add some more bison stuff to make the mesa/gallium parser work:
	    %initial-action (add missing source struct member in location)
	    %debug (unimplemented)
	    %error-verbose (unimplemented)

	This changes some existing code:
	+ yylloc is now a pointer, so
	+ the first parameter to YYERROR_DECL() is a pointer
	+ struct YYLTYPE now has a "source" field

	* error.c: adapted from NetBSD
	- Convert *most* error fingerprints to:
	    -unterminated_arglist(int a_lineno, char *a_line, char *a_cptr)
	    +unterminated_arglist(const struct ainfo *a)
	- Cast new <ctype.h> args to unsigned char

	* mstring.c: adapted change from NetBSD to add casts for ctype macros

	* test/btyacc/btyacc_demo.tab.h, test/btyacc/err_inherit4.tab.h: regen

	* output.c: reorder to eliminate a forward-reference

2016-12-02  Tom.Shields

	* output.c:
	modify output to enable compilation of a lexer generated by flex (using
	"%option bison-bridge" and "%option bison-locations") to be used with a\
 parser
	generated by b(t)yacc (using directives "%locations" and "%pure-parser").

2016-12-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4: Improved autoconf macros
	CF_CC_ENV_FLAGS
	+ improve split between compiler and options, prompted by report where user
	  had "ccache" before the compiler
	+ leave non-preprocessor options in "$CC" (but still copy them to "$CFLAGS"
	  since that's where they should be)
	CF_GNU_SOURCE,v
	+ recent glibc (Debian 2.23-4 for example) has misordered ifdef/checks for\
 new
	  symbol _DEFAULT_SOURCE, producing warning messages when only _GNU_SOURCE is
	  defined.  Add a followup check to define _DEFAULT_SOURCE.
	CF_XOPEN_SOURCE
	+ add "uclinux" to list of Linux's (patch by Yann E.  Morin)
	+ use _GNU_SOURCE for cygwin headers
	+ build-fixes for OS/2

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2016-11-20  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2016-11-19

	* config.guess: 2016-10-02

2016-06-06  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4: improved autoconf macros:
	CF_CC_ENV_FLAGS - don't limit the check to -I, -U and -D options, since the
		added options can include various compiler options before and after
		preprocessor options.
	CF_PROG_LINT - add cpplint to programs to use; drop ad hoc tdlint and alint.

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* lalr.c: indented

	* btyaccpar.c: regen

	* skel2c:
	adjust whitespace so that generated skeleton will follow the same format
	as other code

	* mkpar.c, verbose.c, lr0.c, reader.c, error.c, output.c: indented

	* reader.c: fix two compiler warnings

	* test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab\
.c, test/btyacc/inherit1.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c,\
 test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_erro\
r.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/rename_debug.c, btyaccpar.c,\
 test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c,\
 test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c,\
 test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c,\
 test/yacc/varsyntax_calc1.tab.c, test/yacc/err_syntax20.tab.c,\
 test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c,\
 test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-\
s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/calc.tab.c,\
 test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c,\
 test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab\
.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c,\
 test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/rename_debug.c, yaccpar.c:
	regen

2016-06-06  Tom.Shields

	* btyaccpar.skel, yaccpar.skel:
	small fix for an edge case of initialized data in Chris Dodd's btyacc\
 changes:
	"Avoid crash when input pops up an Action error at the first token"

2016-06-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c,\
 test/yacc/err_syntax24.error, test/yacc/error.tab.c, test/yacc/grammar.tab.c\
, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error\
.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c,\
 test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c,\
 test/yacc/code_calc.tab.c, test/yacc/code_calc.tab.h, test/yacc/code_error.c\
ode.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c,\
 test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/rename_debug.c, yaccpar.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c,\
 test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c,\
 test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax2.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c,\
 test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c,\
 test/btyacc/err_syntax24.error, test/btyacc/err_syntax24.tab.c,\
 test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax26.tab.c,\
 test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax3.tab.c,\
 test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax5.tab.c,\
 test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax7.tab.c,\
 test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7b.tab.c,\
 test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8a.tab.c,\
 test/btyacc/err_syntax9.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.\
tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c,\
 test/btyacc/inherit2.output, test/btyacc/inherit2.tab.c, test/btyacc/ok_synt\
ax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.error,\
 test/btyacc/btyacc_demo.output, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c,\
 test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c,\
 test/btyacc/code_calc.code.c, test/btyacc/code_calc.tab.c,\
 test/btyacc/code_calc.tab.h, test/btyacc/code_error.code.c,\
 test/btyacc/empty.tab.c, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inh\
erit2.tab.c, test/btyacc/err_inherit3.output, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.output, test/btyacc/err_inherit4.tab.c,\
 test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax1.tab.c,\
 test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax12.tab.c, test/btyacc/rename_debug.c, btyaccpar.c:
	regen

2016-06-01  Tom.Shields

	* btyaccpar.skel, defs.h, error.c, output.c, reader.c, test/code_calc.y,\
 test/err_inherit4.y, test/run_make.sh, yaccpar.skel:
	fixes for issues in btyacc (report by Francis Andre):

	+ correction to the placement of the #line directive for a %union\
 specification

	+ recovery of a set of casts originally added into btyaccpar.c rather than\
 into
	  btyaccpar.skel, and so are lost whenever building from scratch

	+ Chris Dodd's btyacc improved handling of inherited attributes to eliminate
	  implicit empty copy rules that are not necessary, and thereby avoiding the
	  introduction of extra parsing ambiguity

	+ Chris Dodd's added support for @-N syntax to reference inherited position
	  information

	+ correction to bad interaction between %token-table and YYDEBUG, where\
 YYDEBUG
	  was required to be defined in order to compile the generated code

	+ correction to yyname[] access in code included with YYDEBUG defined for
	  single character symbols not recognized (e.g., input containing '&'\
 character
	  where grammar doesn't define that as a symbol) - map to existing
	  "illegal-symbol" entry in byname[]

	+ fixes to test/run_make.sh:  skip test-err_* files; in the bison test phase
	  skip additional files that contain features not supported by bison and
	  inhibit new bison warning messages

	+ minor changes to btyaccpar.skel & yaccpar.skel so they are more similar in
	  their commonality; makes it easier to maintain the pair of files using
	  vimdiff

	+ changes to a couple of test cases for coverage of #3, #4 and #5 above

2016-06-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2016-03-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: unused variable

	* package/pkgsrc/Makefile, package/debian/copyright: bump

2016-03-24  Jung-uk.Kim

	* main.c:
	correct logic for finding output suffix in the "-o" option, which matched
	the first occurrence of ".c" in the name in 2005-08-13 changes rather than
	at the end of the filename (patch by Jung-uk Kim)

2016-03-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* aclocal.m4:
	update CF_WITH_MAN2HTML to use configured shell rather than /bin/sh

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2016-01-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: 2016-01-01

2015-07-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* lr0.c: fix a duplicate-free in the leak-checking

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* reader.c:
	make cache-size clearer (prompted by discussion with Pedro Giffuni,
	Oliver Pinter)

	* main.c:
	make relationship with format/size clearer (prompted by discussion
	with Pedro Giffuni, Oliver Pinter)

2015-07-05  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* package/pkgsrc/Makefile, package/mingw-byacc.spec, package/debian/copyrigh\
t, package/debian/changelog, package/byacc.spec, VERSION:
	bump

	* aclocal.m4: resync with my-autoconf
	add configure option --with-man2html

	* makefile.in: add configure options --with-man2html

	* configure.in: add configure option --with-man2html

2015-05-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2015-03-04

	* config.sub: 2015-03-08

2014-11-28  Thomas E. Dickey  <dickey@invisible-island.net>

	* lr0.c: coverity #39181: memory leak

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

2014-11-13  Jouk.Jansen

	* descrip.mms:
	I sucessfully compiled byacc on my OpenVMS systems. However, I had to update
	the descrip.mms to include some extra c-source files and some dependenxcies
	so that it also works when the distribution is located on an ODS5 disk.

	The patched descrip.mms file can be found at:
	  http://nchrem.tnw.tudelft.nl/openvms/software2.html#BYACC

	Please feel free to insert the file in your distribution.

	             Regards
	                 Jouk.

2014-10-06  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/source/format:
	change to native format to work around regression in Debian packaging.

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* configure: regen

	* main.c:
	correct parameter for umask - for very old mkstemp's - and use type mode_t
	to quiet compiler warning

	* configure.in: add configure check for mode_t

	* reader.c:
	better fix for get_line, by ensuring there is enough space to null-terminate
	its result (prompted by discussion with Craig Rodrigues).

2014-10-05  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c:
	make change to umask before calling mkstemp, as suggested in Coverity #56902

	* reader.c:
	adjust logic in copy_action to avoid potential null-pointer dereference
	(Coverity #56901)

	* reader.c:
	adjust logic to avoid potential null-pointer dereference in compile_args
	(Coverity #63407)

	* reader.c: eliminate strcpy into fixed-size buffer (Coverity #63408)

	* yacc.1: document changes made with respect to %parse-param

	* output.c:
	add parameters from %parse-param to destructor.  The order of the parameters
	is intentionally inconsistent with yyparse/yyerror, for "compatibility" with
	bison.

	* test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c,\
 test/btyacc/btyacc_destroy3.tab.c:
	regen

	* output.c:
	use puts_param_types/puts_param_names to output lex_param data.

	* test/btyacc/ok_syntax1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.t\
ab.c, test/yacc/ok_syntax1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.\
c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.t\
ab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab\
.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c,\
 test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inh\
erit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/rename_debug.c:
	regen

	* btyaccpar.c: add casts, change types to fix strict compiler warnings

	* test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax19.tab.c,\
 test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax21.tab.c,\
 test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c,\
 test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax25.tab.c,\
 test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c,\
 test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c,\
 test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c,\
 test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c,\
 test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c,\
 test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c,\
 test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c,\
 test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax1.tab.c,\
 test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c,\
 test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c:
	regen

	* output.c: gcc-warning

	* test/btyacc/code_calc.tab.c, test/btyacc/code_error.tab.c: regen

	* output.c: fix limit when merging real/workaround tables

	* output.c:
	for btyacc, it is possible to have no conflicts - but in that case, the
	"ctable" was not generated at all, while the skeleton uses the table.
	The most straightforward (workaround) is generating a dummy table which
	rejects any state.

	* test/btyacc_destroy3.y, test/btyacc_destroy2.y, test/btyacc_destroy1.y:
	fix "make check_make"

	* test/yacc/calc3.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/calc2.tab.c,\
 test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c:
	regen

	* reader.c:
	trim blanks from interim value in copy_param() to handle special case when
	a space precedes a comma.

	* output.c:
	use two new functions, puts_param_types and puts_param_names, to improve
	format of the parse_param list (by trimming space after "*") as well as
	correcting the output of the comma-separated names (only the last name
	was output).

	* test/btyacc/ok_syntax1.tab.c, test/btyacc/btyacc_destroy3.tab.c,\
 test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c:
	regen

	* reader.c:
	modify copy_param() to handle resulting comma-separated list.  Before, it
	only expected a single parameter.

2014-10-04  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: split-out save_param() from copy_param()

	* reader.c: trim_blanks() did not always convert spaces - fix.

	* reader.c: fix some minor regressions with error-reporting

	* aclocal.m4: update CF_XOPEN_SOURCE for Unixware change from lynx

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* reader.c:
	modify copy_param() to accept multiple parameters, each in curly braces like
	recent bison, as well as honoring bison's undocumented feature to accept the
	parameters as a comma-separated list.

	* test/btyacc/btyacc_destroy3.tab.c, test/btyacc/btyacc_destroy1.tab.c,\
 test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.error,\
 test/btyacc/btyacc_destroy3.output, test/btyacc/btyacc_destroy3.tab.h,\
 test/btyacc/btyacc_destroy2.error, test/btyacc/btyacc_destroy2.output,\
 test/btyacc/btyacc_destroy2.tab.h:
	RCS_BASE

2014-10-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/btyacc_demo2.error, test/btyacc/btyacc_demo2.output,\
 test/btyacc/btyacc_demo2.tab.c, test/btyacc/btyacc_demo2.tab.h,\
 test/btyacc/btyacc_destroy1.error, test/btyacc/btyacc_destroy1.output,\
 test/btyacc/btyacc_destroy1.tab.h, test/btyacc_destroy3.y,\
 test/btyacc_destroy1.y, test/btyacc_destroy2.y:
	RCS_BASE

2014-10-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c, reader.c, defs.h:
	use calloc in get_line() when allocating line to ensure it is fully\
 initialized,
	fixes a later uninitialized value in copy_param() (FreeBSD #193499).

2014-09-17  Thomas E. Dickey  <dickey@invisible-island.net>

	* closure.c, lalr.c, output.c, defs.h:
	rephrase odd addressing to fix Coverity #48848, #38950, #38860, not actually
	a bug.

2014-09-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2014-07-28

2014-07-27  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4: modified to support port to Minix3.2

	* package/pkgsrc/Makefile, VERSION, package/byacc.spec, package/debian/chang\
elog, package/mingw-byacc.spec:
	bump

2014-07-15  Thomas E. Dickey  <dickey@invisible-island.net>

	* aclocal.m4: resync with my-autoconf (no change to configure script)

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* test/run_test.sh:
	make top-level "make check" work again, by adding another step to filtering
	the test results.

2014-07-14  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/run_test.sh: changes from Garrett Cooper's patch:
		a) ensure that the script returns an error-code if there are differences
		b) escape "." character in left side of sed expression for $YACC
		c) ensure that $ifBTYACC has a value

	* test/btyacc/big_b.output, test/btyacc/big_l.output, test/btyacc/help.outpu\
t, test/btyacc/no_b_opt.output, test/btyacc/no_output2.output,\
 test/btyacc/no_p_opt.output, test/btyacc/nostdin.output:
	regen (reminder by Garrett Cooper)

2014-07-14  Garrett.Cooper

	* test/btyacc/err_inherit1.error, test/btyacc/err_inherit2.error,\
 test/btyacc/err_inherit3.error, test/btyacc/err_inherit4.error,\
 test/btyacc/err_inherit5.error, test/btyacc/err_syntax1.error,\
 test/btyacc/err_syntax10.error, test/btyacc/err_syntax11.error,\
 test/btyacc/err_syntax12.error, test/btyacc/err_syntax13.error,\
 test/btyacc/err_syntax14.error, test/btyacc/err_syntax15.error,\
 test/btyacc/err_syntax16.error, test/btyacc/err_syntax17.error,\
 test/btyacc/err_syntax18.error, test/btyacc/err_syntax19.error,\
 test/btyacc/err_syntax2.error, test/btyacc/err_syntax21.error,\
 test/btyacc/err_syntax22.error, test/btyacc/err_syntax23.error,\
 test/btyacc/err_syntax24.error, test/btyacc/err_syntax25.error,\
 test/btyacc/err_syntax26.error, test/btyacc/err_syntax27.error,\
 test/btyacc/err_syntax3.error, test/btyacc/err_syntax4.error,\
 test/btyacc/err_syntax5.error, test/btyacc/err_syntax6.error,\
 test/btyacc/err_syntax7.error, test/btyacc/err_syntax7a.error,\
 test/btyacc/err_syntax7b.error, test/btyacc/err_syntax8.error,\
 test/btyacc/err_syntax8a.error, test/btyacc/err_syntax9.error,\
 test/yacc/err_syntax1.error, test/yacc/err_syntax10.error,\
 test/yacc/err_syntax11.error, test/yacc/err_syntax12.error,\
 test/yacc/err_syntax13.error, test/yacc/err_syntax14.error,\
 test/yacc/err_syntax15.error, test/yacc/err_syntax16.error,\
 test/yacc/err_syntax17.error, test/yacc/err_syntax18.error,\
 test/yacc/err_syntax19.error, test/yacc/err_syntax2.error,\
 test/yacc/err_syntax21.error, test/yacc/err_syntax22.error,\
 test/yacc/err_syntax23.error, test/yacc/err_syntax24.error,\
 test/yacc/err_syntax25.error, test/yacc/err_syntax26.error,\
 test/yacc/err_syntax27.error, test/yacc/err_syntax3.error,\
 test/yacc/err_syntax4.error, test/yacc/err_syntax5.error,\
 test/yacc/err_syntax6.error, test/yacc/err_syntax7.error,\
 test/yacc/err_syntax7a.error, test/yacc/err_syntax7b.error,\
 test/yacc/err_syntax8.error, test/yacc/err_syntax8a.error,\
 test/yacc/err_syntax9.error:
	regen

2014-05-27  Tom.Shields

	* main.c: remove obsolete -D option from usage message

2014-05-27  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION, package/byacc.spec, package/debian/changelog, test/yacc/big_b.out\
put, test/yacc/big_l.output, test/yacc/help.output, test/yacc/no_b_opt.output\
, test/yacc/no_output2.output, test/yacc/no_p_opt.output, test/yacc/nostdin.o\
utput:
	bump

2014-04-22  Thomas E. Dickey  <dickey@invisible-island.net>

	* mstring.c:
	use vsnprintf() to ensure that msprintf's buffer is large enough.

	* main.c, defs.h: add mstring_leaks()

	* configure: regen

	* output.c: fix a complementary warning

	* mstring.c: introduce vsnprintf

	* configure.in, config_h.in: add check for vsnprintf

	* output.c: quiet a type-conversion warning

	* mstring.c: fix a potential memory leak on ENOMEM
	quiet a couple of type-conversion warnings

	* defs.h: add/use GCC_PRINTFLIKE for msprintf()

2014-04-22  Tom.Shields

	* README.BTYACC:
	drop "NOTES-btyacc-Changes" and "NOTES-btyacc-Disposition", merging relevant
	content into README.BTYACC

2014-04-22  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/pkgsrc/Makefile, VERSION, package/byacc.spec, package/debian/chang\
elog, package/mingw-byacc.spec:
	bump

2014-04-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2014-04-03

	* config.guess: 2014-03-23

2014-04-09  Rick.Spates

	* main.c, defs.h: patch to allow DEBUG build with WIN32 system

2014-04-09  Thomas E. Dickey  <dickey@invisible-island.net>

	* output.c, reader.c: gcc warnings

	* reader.c: fix const-cast warnings

	* test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.\
tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/code_error.tab.c,\
 test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inh\
erit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax12.tab.c, test/btyacc/error.tab.c, test/btyacc/rename_\
debug.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.t\
ab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.tab.c, output.c:
	fix a few clang --analyze warnings; one was a case where output_ctable\
 emitted
	an empty table (which should be an error).

	* reader.c: appease clang --analyze

	* defs.h: mark two functions as no-return.

	* package/debian/changelog: reason for release

	* VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc\
.spec, package/pkgsrc/Makefile:
	bump

	* makefile.in: use $LINT_OPTS from environment via configure script

	* test/btyacc/ok_syntax1.output, test/btyacc/ok_syntax1.tab.c,\
 test/yacc/ok_syntax1.tab.c, test/ok_syntax1.y, test/yacc/ok_syntax1.output:
	tweaks to make generated files from ok_syntax1.y compile with check_make rule

	* test/btyacc/rename_debug.c, test/btyacc/rename_debug.error,\
 test/btyacc/rename_debug.h, test/btyacc/rename_debug.i, test/btyacc/rename_d\
ebug.output, test/yacc/rename_debug.c:
	reference output for testing

	* test/run_test.sh:
	retain the renaming done for code_debug.y so that check_make will work.

	* test/yacc/rename_debug.error, test/yacc/rename_debug.h,\
 test/yacc/rename_debug.i, test/yacc/rename_debug.output:
	reference output for testing

	* test/btyacc/ok_syntax1.error: RCS_BASE

	* test/yacc/quote_calc4-s.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.t\
ab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c,\
 test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c,\
 test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-\
s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, yaccpar.c:
	regen

	* yacc.1:
	clarify relationship of btyacc features to default configuration.

2014-04-08  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/yacc/ok_syntax1.output, test/yacc/ok_syntax1.tab.c,\
 test/yacc/ok_syntax1.tab.h, test/btyacc/ok_syntax1.output,\
 test/btyacc/ok_syntax1.tab.c, test/btyacc/ok_syntax1.tab.h:
	reference output for testing

	* test/ok_syntax1.y: RCS_BASE

	* test/yacc/ok_syntax1.error: reference output for testing

	* test/yacc/big_b.error, test/yacc/big_b.output, test/yacc/big_l.error,\
 test/yacc/big_l.output, test/btyacc/big_b.error, test/btyacc/big_b.output,\
 test/btyacc/big_l.error, test/btyacc/big_l.output, test/run_test.sh:
	exercise -L/-B options

	* test/yacc/code_debug.c, test/btyacc/code_debug.c, test/yacc/err_syntax15.t\
ab.c, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax17.tab.c,\
 test/yacc/err_syntax18.tab.c, test/yacc/err_syntax19.tab.c,\
 test/yacc/err_syntax2.tab.c, test/yacc/err_syntax20.tab.c,\
 test/yacc/err_syntax21.tab.c, test/yacc/err_syntax22.tab.c,\
 test/yacc/err_syntax23.tab.c, test/yacc/err_syntax24.tab.c,\
 test/yacc/err_syntax25.tab.c, test/yacc/err_syntax26.tab.c,\
 test/yacc/err_syntax27.tab.c, test/yacc/err_syntax3.tab.c,\
 test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c,\
 test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c,\
 test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c,\
 test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c,\
 test/yacc/err_syntax9.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c,\
 test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-\
s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code\
.c, test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax1\
0.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c,\
 test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c,\
 test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c,\
 test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax2.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c,\
 test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c,\
 test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax25.tab.c,\
 test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c,\
 test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c,\
 test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c,\
 test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c,\
 test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c,\
 test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab\
.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c,\
 test/btyacc/pure_error.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inhe\
rit1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c,\
 test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/btyacc_calc1.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.ta\
b.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.\
code.c, test/run_test.sh, test/yacc/no_b_opt1.output:
	use a better renaming of the YYPATCH definition (none of the test-cases rely
	upon it, but redefinition in the "make check_make" rule is a problem).

	* test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax13.tab.c,\
 test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax25.tab.c,\
 test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c,\
 test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c,\
 test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c,\
 test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c,\
 test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c,\
 test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c:
	undid temporary reordering in reader() by Tom Shields to align with byacc\
 outputs

	* test/run_test.sh: remove a repeated test-case

	* mstring.c: minor reformatting to make coverage analysis simpler

2014-04-07  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/run_test.sh: tidy

	* test/yacc/help.error, test/yacc/help.output, test/yacc/no_b_opt.error,\
 test/yacc/no_b_opt.output, test/yacc/no_b_opt1.error, test/yacc/no_b_opt1.ou\
tput, test/yacc/no_code_c.error, test/yacc/no_code_c.output,\
 test/yacc/no_defines.error, test/yacc/no_defines.output, test/yacc/no_graph.\
error, test/yacc/no_graph.output, test/yacc/no_include.error,\
 test/yacc/no_include.output, test/yacc/no_opts.error, test/yacc/no_opts.outp\
ut, test/yacc/no_output.error, test/yacc/no_output.output,\
 test/yacc/no_output1.error, test/yacc/no_output1.output, test/yacc/no_output\
2.error, test/yacc/no_output2.output, test/yacc/no_p_opt.error,\
 test/yacc/no_p_opt.output, test/yacc/no_p_opt1.error, test/yacc/no_p_opt1.ou\
tput, test/yacc/no_verbose.error, test/yacc/no_verbose.output,\
 test/yacc/nostdin.error, test/yacc/nostdin.output, test/yacc/test-no_b_opt1.\
output:
	reference output for testing

	* test/run_test.sh:
	add special checks for flags which depend on writable/existing files

	* test/btyacc/no_b_opt1.output, test/btyacc/no_p_opt1.output,\
 test/btyacc/no_b_opt.error, test/btyacc/no_b_opt.output, test/btyacc/no_b_op\
t1.error, test/btyacc/no_code_c.output, test/btyacc/no_p_opt.error,\
 test/btyacc/no_p_opt.output, test/btyacc/no_p_opt1.error,\
 test/btyacc/no_output2.output, test/btyacc/no_code_c.error,\
 test/btyacc/no_output2.error, test/btyacc/no_include.error,\
 test/btyacc/no_include.output, test/btyacc/no_defines.output,\
 test/btyacc/no_defines.error, test/btyacc/no_verbose.output,\
 test/btyacc/no_graph.output, test/btyacc/no_graph.error, test/btyacc/no_opts\
.error, test/btyacc/no_opts.output, test/btyacc/no_verbose.error,\
 test/btyacc/nostdin.error, test/btyacc/nostdin.output, test/btyacc/no_output\
.error, test/btyacc/no_output.output, test/btyacc/no_output1.error,\
 test/btyacc/no_output1.output:
	reference output for testing

	* main.c:
	change CREATE_FILE_NAMES() to use local function rather than inline code,
	to simplify coverage analysis.

	* test/btyacc/err_syntax27.error, test/btyacc/err_syntax27.output,\
 test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax27.tab.h,\
 test/btyacc/help.error, test/btyacc/help.output, test/yacc/err_syntax27.erro\
r, test/yacc/err_syntax27.output, test/yacc/err_syntax27.tab.c,\
 test/yacc/err_syntax27.tab.h:
	reference output for testing

	* test/err_syntax27.y: testcase for missing_brace()

	* error.c: ifdef'd non-btyacc function

	* lr0.c: ifdef'd debug-code

	* yaccpar.skel: use YYINT's to replace short's as in btyaccpar.skel

	* test/btyacc/code_debug.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax15.tab.c,\
 test/btyacc/err_syntax16.tab.c, test/btyacc/err_syntax17.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax19.tab.c,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c,\
 test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c,\
 test/btyacc/err_syntax24.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar\
.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c,\
 test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_er\
ror.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab\
.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.c\
ode.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c,\
 test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c,\
 test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c,\
 test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/yacc/err_syntax11.tab.c,\
 test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c\
, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc\
-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_debug.c,\
 test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.t\
ab.c, output.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax13.tab.c,\
 test/yacc/err_syntax14.tab.c, test/yacc/err_syntax15.tab.c,\
 test/yacc/err_syntax16.tab.c, test/yacc/err_syntax17.tab.c,\
 test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c,\
 test/yacc/err_syntax21.tab.c, test/yacc/err_syntax22.tab.c,\
 test/yacc/err_syntax23.tab.c, test/yacc/err_syntax24.tab.c,\
 test/yacc/err_syntax25.tab.c, test/yacc/err_syntax26.tab.c,\
 test/yacc/err_syntax3.tab.c, test/yacc/err_syntax4.tab.c,\
 test/yacc/err_syntax5.tab.c, test/yacc/err_syntax6.tab.c,\
 test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7a.tab.c,\
 test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax8.tab.c,\
 test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax9.tab.c, test/run_test.sh:
	2010/11/26 simplification of output.c using putc_code() and putl_code()
	omitted an adjustment of the #line value used for code-file.  Fix that.
	Also, amend 2005/05/04 change to run_test.sh to retain a dummy line for
	YYPATCH #define's to make test-outputs easier to compare #line's (report
	by Tom Shields)

2014-04-06  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: fix for valgrind
	(the calloc's are intentional - valgrind reported use of uninitialized\
 memory)

	* lr0.c, output.c: fix for valgrind

	* test/btyacc/code_debug.c, test/btyacc/code_debug.error,\
 test/btyacc/code_debug.h, test/btyacc/code_debug.i, test/btyacc/code_debug.o\
utput:
	RCS_BASE

	* test/yacc/code_debug.c, test/yacc/code_debug.h:
	exercise the -i option

	* test/yacc/code_debug.i: reference output for testing

	* test/run_test.sh: exercise the -i option

	* test/yacc/code_debug.c: reference output for testing

	* test/run_test.sh: exercise the "-o" option

	* test/yacc/code_debug.error, test/yacc/code_debug.h, test/yacc/code_debug.o\
utput:
	reference output for testing

	* output.c: don't call exit() without giving a chance to cleanup.

	* mstring.c: ifdef'd functions not used in byacc

	* btyaccpar.c: generated from btyaccpar.skel

	* yaccpar.c: generated from yaccpar.skel

	* skel2c:
	change the generated-by comment to show which version of this script (and
	which version of the given skeleton file) were used to produce the C-file.

	* configure: regen

	* makefile.in:
	add rules to generate byacc and btyacc parser skeleton files independently

	* aclocal.m4: CF_PROG_AWK - add to byacc's configure script
	CF_INTEL_COMPILER
		cleanup the -no-gcc option which was leftover from testing - prcs does
		not build with this option.
	CF_MAKE_DOCS
		protect $2 from substitution, for luit's "$(manext)"
	CF_XOPEN_SOURCE
		for Solaris (tested with gcc/g++ 3.4.3 on Solaris 10 and gcc/g++ 4.5.2
		on Solaris 11), suppress the followup check for defining _XOPEN_SOURCE
		because it is not needed, as well as because g++ 4.7.3 (no package,
		used in Sage for Solaris 10) has some unspecified header breakage which
		is triggered by the duplicate definition.

	* configure.in:
	modify so skeleton-source is determined by configure options rather than by
	having developer rename yaccpar.skel.old to yaccpar.skel

	* descrip.mms: rename skeleton

	* vmsbuild.com:
	fwiw, renamed the skeleton for consistency with makefile

	* skel2c, skeleton.c: resync skeleton and its generating files

	* yaccpar.skel:
	renamed yaccpar.skel.old to yaccpar.skel, to allow using makefile suffix\
 rules

	* yaccpar.skel.old: resync skeleton and its generating files

	* test/run_make.sh: improve cleanup after error recovery

	* test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code\
.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax\
11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c\
, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc\
-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, output.c,\
 skeleton.c, defs.h:
	use improvement from Tom Shield's btyacc changes, getting rid of special\
 cases for generating two yyerror calls in skeleton

	* output.c: simplify output_yyerror_decl()

	* test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c,\
 test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.tab.c, test/yacc/code_error.tab.c\
, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11\
.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c\
, test/yacc/pure_calc.tab.c, output.c:
	add second "const" to string-table declarations, from Tom Shield's btyacc\
 changes

	* test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c,\
 test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.\
tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c,\
 test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.t\
ab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c:
	discard unnecessary call on write_code_lineno() from Tom Shield's changes

	* test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c,\
 test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c,\
 test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c\
, test/yacc/code_error.code.c, test/yacc/code_error.tab.c,\
 test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.\
tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax20.tab.c, output.c:
	use YYINT typedef from Tom Shield's btyacc changes to replace explicit\
 "short"

	* test/yacc/code_calc.code.c, test/yacc/code_error.code.c, output.c:
	use fix from Tom Shield's btyacc changes: remove redundant\
 extern-declaration for YYPARSE_DECL()

	* test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab\
.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab\
.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.c\
ode.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c,\
 test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c,\
 test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax12.tab.c:
	discard unnecessary call on write_code_lineno() from Tom Shield's changes

	* output.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c,\
 test/yacc/code_calc.tab.c, test/yacc/code_error.tab.c:
	use fix from Tom Shield's btyacc changes: prefix-definitions went to the
	output (.tab.c) file in a case where they should have gone to the code
	(.code.c) file.  Remove now-redundant call to output_prefix().

	* main.c: do the same for help-message

	* main.c: use OUTPUT_SUFFIX symbol in an overlooked case

	* test/run_make.sh:
	modify to avoid use of VPATH, which has no standard implementation

2014-04-05  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit\
1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c,\
 test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_erro\
r.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c:
	discard a change which merged CountLines() with explicit comparisons against
	code_file because that adds extra to the #line values

	* test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_cal\
c-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/calc.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code\
.c, test/yacc/empty.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax\
12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/error.tab.c, output.c:
	add Tom Shield's change to allow definition of YYSTYPE_IS_DECLARED symbol to
	override fallback typedef for YYSTYPE when that symbol is undefined

	* test/btyacc/error.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/pure_calc\
.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc2.tab\
.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c,\
 test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_synt\
ax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c:
	minor tweak to coding style - use parenthesis for "defined" operator's\
 parameter

	* test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab\
.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c,\
 test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab\
.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.c\
ode.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c,\
 test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c,\
 test/btyacc/err_syntax10.tab.c:
	regen to make YYMAXTOKEN and YYUNDFTOKEN adjacent

	* test/yacc/err_syntax20.tab.c, test/yacc/grammar.tab.c, test/yacc/quote_cal\
c2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c\
, test/yacc/code_error.code.c, test/yacc/code_error.tab.c,\
 test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.\
tab.c, test/yacc/err_syntax12.tab.c:
	regen after adding the YYUNDFTOKEN symbol

	* output.c:
	integrate Tom Shield's btyacc changes which introduce the YYUNDFTOKEN symbol
	(I changed order of output to keep this adjacent to YYMAXTOKEN)

	* reader.c:
	merge all but one small change from Tom Shield's btyacc changes - that
	changes the order of code-file in the tests.

	* test/btyacc/btyacc_demo.tab.c: regen

	* test/btyacc_demo.y: fix prototypes

2014-04-04  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c, defs.h, main.c:
	more merging of Tom Shield's btyacc changes.  In the merge, I moved the
	symbol_pval inside the btyacc ifdef's and added some more btyacc ifdefs

2014-04-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c:
	merge-in 3/4 of btyacc's changes, deferring those which change test-outputs.
	Tom Shield's changes split-out copy_string() and copy_comment() functions
	to simplify some logic, as well as adding btyacc-only chunks

	* makefile.in: build mstring.o, needed for changes in reader.c

	* output.c:
	merge-in all of btyacc's changes which do not change byacc's test-output.
	Some of the merge uses ifdef-changes which I applied to ongoing resync,
	e.g., the introduction of PER_STATE.

2014-04-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c: regen

	* output.c: fix typo

	* output.c, reader.c:
	merge in some chunks of reader and output files which do not affect byacc\
 tests

	* test/yacc/calc2.tab.c, test/yacc/calc3.tab.c: regen

	* test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c,\
 test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c,\
 test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c,\
 test/yacc/err_syntax9.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c,\
 test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-\
s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code\
.c, test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax1\
0.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c,\
 test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c,\
 test/yacc/err_syntax17.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/err_syntax21.tab.c,\
 test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c,\
 test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c,\
 test/yacc/err_syntax26.tab.c, test/yacc/err_syntax3.tab.c,\
 test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c, skeleton.c:
	incorporate YYENOMEM and YYEOF symbols from btyacc

	* output.c: merge chunk from btyacc changes for header-guards

	* btyaccpar.skel: RCS_BASE

	* yaccpar.skel: comment-out yysccsid[], for FreeBSD build-issues
	remove GCC_UNUSED to reduce name-pollution as well as being simpler

	* main.c:
	move a btyacc symbol outside ifdef to work around current state of merge

	* defs.h:
	add USE_HEADER_GUARDS to defer whether to modify byacc's header-output

	* test/run_make.sh:
	do not try to compile files used for testing syntax-errors, since they are
	likely to be incomplete

2014-04-02  Tom.Shields

	* main.c: changes for btyacc

2014-04-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c:
	integrate change by Tom Shields to use bsearch rather than successive
	calls to matchec()

	* defs.h: typedef __compar_fn_t is unnecessary

	* test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c,\
 test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.\
tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c,\
 test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c,\
 test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c,\
 test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c,\
 test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c,\
 test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c,\
 test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c,\
 test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c,\
 test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_erro\
r.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax18.tab.c:
	omit the GCC_UNUSED, as noted by Tom Shields not really essential

2014-04-01  Tom.Shields

	* verbose.c: changes for btyacc, ifdef'd

2014-04-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* mkpar.c: eliminate most of the ifdef's using macros

2014-04-01  Tom.Shields

	* mkpar.c: merge btyacc changes (ifdef'd - no change to byacc)

	* error.c:
	new functions used for reporting errors from the btyacc configuration
	(I reordered some, and ifdef'd the new ones -TD)

2014-03-31  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c:
	omit the GCC_UNUSED, as noted by Tom Shields not really essential

	* test/btyacc/empty.tab.c, test/btyacc/err_inherit1.tab.c,\
 test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c,\
 test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax14.tab.c,\
 test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c,\
 test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax20.tab.c,\
 test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax22.tab.c,\
 test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax24.tab.c:
	regen

2014-03-29  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c,\
 test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c,\
 test/yacc/err_syntax26.tab.c, test/yacc/err_syntax3.tab.c,\
 test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c,\
 test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c,\
 test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c,\
 test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c,\
 test/yacc/err_syntax9.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c,\
 test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-\
s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c,\
 test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code\
.c, test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax1\
0.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c,\
 test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c,\
 test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c,\
 test/yacc/err_syntax17.tab.c, test/yacc/err_syntax18.tab.c,\
 test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c,\
 test/yacc/err_syntax20.tab.c, test/yacc/err_syntax21.tab.c, skeleton.c:
	comment-out yysccsid in the banner because it produces unnecessary compiler
	warnings.  The suggested alternative (using #pragma ident) in the preceding
	comment is also obsolete; remove that comment (request by Gleb Smirnoff).

	* test/run_test.sh:
	for yacc, ignore the inherit testcases, since they are btyacc-specific

2014-03-28  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/yacc/varsyntax_calc1.error, test/yacc/varsyntax_calc1.output,\
 test/yacc/varsyntax_calc1.tab.c, test/yacc/varsyntax_calc1.tab.h,\
 test/yacc/err_inherit3.error, test/yacc/err_inherit3.output,\
 test/yacc/err_inherit3.tab.c, test/yacc/err_inherit3.tab.h,\
 test/yacc/err_inherit4.error, test/yacc/err_inherit4.output,\
 test/yacc/err_inherit4.tab.c, test/yacc/err_inherit4.tab.h,\
 test/yacc/err_inherit5.error, test/yacc/err_inherit5.output,\
 test/yacc/err_inherit5.tab.c, test/yacc/err_inherit5.tab.h,\
 test/yacc/inherit0.error, test/yacc/inherit0.output, test/yacc/inherit0.tab.\
c, test/yacc/inherit0.tab.h, test/yacc/inherit1.error, test/yacc/inherit1.out\
put, test/yacc/inherit1.tab.c, test/yacc/inherit1.tab.h, test/yacc/inherit2.e\
rror, test/yacc/inherit2.output, test/yacc/inherit2.tab.c,\
 test/yacc/inherit2.tab.h, test/yacc/empty.error, test/yacc/empty.output,\
 test/yacc/empty.tab.c, test/yacc/empty.tab.h, test/yacc/err_inherit1.error,\
 test/yacc/err_inherit1.output, test/yacc/err_inherit1.tab.c,\
 test/yacc/err_inherit1.tab.h, test/yacc/err_inherit2.error,\
 test/yacc/err_inherit2.output, test/yacc/err_inherit2.tab.c,\
 test/yacc/err_inherit2.tab.h:
	reference output for testing

	* test/run_lint.sh, test/run_make.sh, test/run_test.sh:
	moving #define's out of makefile broke check for yacc vs btyacc (fix)

2014-03-28  Tom.Shields

	* test/btyacc/btyacc_demo.tab.c, test/btyacc/err_inherit3.error,\
 test/btyacc/err_inherit3.output, test/btyacc/err_inherit3.tab.c,\
 test/btyacc/err_inherit3.tab.h, test/btyacc/err_inherit2.error,\
 test/btyacc/err_inherit2.output, test/btyacc/err_inherit2.tab.c,\
 test/btyacc/err_inherit2.tab.h, test/btyacc/err_inherit4.error,\
 test/btyacc/err_inherit4.output, test/btyacc/err_inherit4.tab.c,\
 test/btyacc/err_inherit4.tab.h, test/btyacc/err_inherit5.error,\
 test/btyacc/err_inherit5.output, test/btyacc/err_inherit5.tab.c,\
 test/btyacc/err_inherit5.tab.h, test/btyacc/inherit0.error,\
 test/btyacc/inherit0.output, test/btyacc/inherit0.tab.c, test/btyacc/inherit\
0.tab.h, test/btyacc/inherit1.error, test/btyacc/inherit1.output,\
 test/btyacc/inherit1.tab.c, test/btyacc/inherit1.tab.h, test/btyacc/inherit2\
.error, test/btyacc/inherit2.output, test/btyacc/inherit2.tab.c,\
 test/btyacc/inherit2.tab.h, test/btyacc/calc.error, test/btyacc/err_inherit1\
.error, test/btyacc/err_inherit1.output, test/btyacc/err_inherit1.tab.c,\
 test/btyacc/err_inherit1.tab.h:
	reference output for testing

	* defs.h: new functions/variables for btyacc
	(I reordered and ifdef'd -TD)

	* test/inherit0.y, test/inherit1.y: testcase for btyacc

2014-03-27  Tom.Shields

	* test/err_inherit5.y, test/err_inherit4.y, test/err_inherit3.y,\
 test/err_inherit2.y, test/err_inherit1.y, test/inherit2.y:
	testcase for btyacc

2014-03-25  Tom.Shields

	* symtab.c: extra initialization needed for btyacc
	(I ifdef'd -TD)

	* yacc.1: document -L/-B features from btyacc

2014-03-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* yacc.1: typo

	* configure: regen

	* configure.in:
	modified new options to act like those in my other configure-scripts, e.g.,
	showing what option is being tested, and the resulting value.  Put the
	definitions in config.h rather than in the makefile.

2014-03-25  Tom.Shields

	* makefile.in: add/use LINTFLAGS variable
	make all of the objects (not just skeleton) rebuild if makefile changes
	modify check-rule to reflect updates to run_test.sh vs subdirectory

	* mstring.c: byacc-btyacc-20140323

2014-03-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/btyacc/RCS, test/yacc/RCS: PERMIT FILE

	* config_h.in: updated with autoheader-252

2014-03-25  Tom.Shields

	* README.BTYACC: byacc-btyacc-20140323

2014-03-24  Tom.Shields

	* test/btyacc/err_syntax1.output, test/btyacc/err_syntax1.tab.c,\
 test/btyacc/err_syntax1.tab.h, test/btyacc/err_syntax10.error,\
 test/btyacc/err_syntax10.output, test/btyacc/err_syntax10.tab.c,\
 test/btyacc/err_syntax10.tab.h, test/btyacc/err_syntax11.error,\
 test/btyacc/err_syntax11.output, test/btyacc/err_syntax11.tab.c,\
 test/btyacc/err_syntax11.tab.h, test/btyacc/err_syntax12.error,\
 test/btyacc/err_syntax12.output, test/btyacc/err_syntax12.tab.c,\
 test/btyacc/err_syntax12.tab.h, test/btyacc/err_syntax13.error,\
 test/btyacc/err_syntax13.output, test/btyacc/err_syntax13.tab.c,\
 test/btyacc/err_syntax13.tab.h, test/btyacc/err_syntax14.error,\
 test/btyacc/err_syntax14.output, test/btyacc/err_syntax14.tab.c,\
 test/btyacc/err_syntax14.tab.h, test/btyacc/err_syntax15.error,\
 test/btyacc/err_syntax15.output, test/btyacc/err_syntax15.tab.c,\
 test/btyacc/err_syntax15.tab.h, test/btyacc/err_syntax16.error,\
 test/btyacc/err_syntax16.output, test/btyacc/err_syntax16.tab.c,\
 test/btyacc/err_syntax16.tab.h, test/btyacc/err_syntax17.error,\
 test/btyacc/err_syntax17.output, test/btyacc/err_syntax17.tab.c,\
 test/btyacc/err_syntax17.tab.h, test/btyacc/err_syntax18.error,\
 test/btyacc/err_syntax18.output, test/btyacc/err_syntax18.tab.c,\
 test/btyacc/err_syntax18.tab.h, test/btyacc/err_syntax19.error,\
 test/btyacc/err_syntax19.output, test/btyacc/err_syntax19.tab.c,\
 test/btyacc/err_syntax19.tab.h, test/btyacc/err_syntax2.output,\
 test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax2.tab.h,\
 test/btyacc/err_syntax20.error, test/btyacc/err_syntax20.output,\
 test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax20.tab.h,\
 test/btyacc/err_syntax21.error, test/btyacc/err_syntax21.output,\
 test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax21.tab.h,\
 test/btyacc/err_syntax22.error, test/btyacc/err_syntax22.output,\
 test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax22.tab.h,\
 test/btyacc/err_syntax23.error, test/btyacc/err_syntax23.output,\
 test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax23.tab.h,\
 test/btyacc/err_syntax24.error, test/btyacc/err_syntax24.output,\
 test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax24.tab.h,\
 test/btyacc/err_syntax25.error, test/btyacc/err_syntax25.output,\
 test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax25.tab.h,\
 test/btyacc/err_syntax26.error, test/btyacc/err_syntax26.output,\
 test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax26.tab.h,\
 test/btyacc/err_syntax3.output, test/btyacc/err_syntax3.tab.c,\
 test/btyacc/err_syntax3.tab.h, test/btyacc/err_syntax4.output,\
 test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax4.tab.h,\
 test/btyacc/err_syntax5.output, test/btyacc/err_syntax5.tab.c,\
 test/btyacc/err_syntax5.tab.h, test/btyacc/err_syntax6.output,\
 test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax6.tab.h,\
 test/btyacc/err_syntax7.output, test/btyacc/err_syntax7.tab.c,\
 test/btyacc/err_syntax7.tab.h, test/btyacc/err_syntax7a.output,\
 test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7a.tab.h,\
 test/btyacc/err_syntax7b.output, test/btyacc/err_syntax7b.tab.c,\
 test/btyacc/err_syntax7b.tab.h, test/btyacc/err_syntax8.output,\
 test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8.tab.h,\
 test/btyacc/err_syntax8a.output, test/btyacc/err_syntax8a.tab.c,\
 test/btyacc/err_syntax8a.tab.h, test/btyacc/err_syntax9.output,\
 test/btyacc/err_syntax9.tab.c, test/btyacc/err_syntax9.tab.h:
	reference output for testing

2014-03-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* defs.h: fix compiler warnings due to mputc()

2014-03-23  Tom.Shields

	* test/btyacc_demo.y: testcase for btyacc

	* test/btyacc/varsyntax_calc1.error, test/btyacc/varsyntax_calc1.output,\
 test/btyacc/varsyntax_calc1.tab.c, test/btyacc/varsyntax_calc1.tab.h:
	reference output for testing

	* test/varsyntax_calc1.y, test/btyacc_calc1.y: testcase for btyacc

2014-03-23  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/err_syntax26.error, test/err_syntax26.output, test/err_syntax26.tab.c\
, test/err_syntax26.tab.h, test/yacc/err_syntax26.error, test/yacc/err_syntax\
26.output, test/yacc/err_syntax26.tab.c, test/yacc/err_syntax26.tab.h:
	reference output for testing

	* test/err_syntax26.y: testcase for missing_brace()

	* test/err_syntax25.error, test/err_syntax25.output, test/err_syntax25.tab.c\
, test/err_syntax25.tab.h, test/yacc/err_syntax25.error, test/yacc/err_syntax\
25.output, test/yacc/err_syntax25.tab.c, test/yacc/err_syntax25.tab.h:
	reference output for testing

	* test/err_syntax25.y: testcase for over_unionized()

	* test/err_syntax24.error, test/err_syntax24.output, test/err_syntax24.tab.c\
, test/err_syntax24.tab.h, test/yacc/err_syntax24.error, test/yacc/err_syntax\
24.output, test/yacc/err_syntax24.tab.c, test/yacc/err_syntax24.tab.h:
	reference output for testing

	* test/err_syntax24.y: testcase for default_action_warning()

2014-03-23  Tom.Shields

	* test/btyacc/quote_calc3-s.error, test/btyacc/quote_calc4-s.error,\
 test/btyacc/quote_calc4.error, test/btyacc/grammar.dot, test/btyacc/grammar.\
error, test/btyacc/pure_calc.error, test/btyacc/pure_error.error,\
 test/btyacc/quote_calc-s.error, test/btyacc/quote_calc.error,\
 test/btyacc/quote_calc2-s.error, test/btyacc/quote_calc2.error,\
 test/btyacc/quote_calc3.error, test/btyacc/err_syntax2.error,\
 test/btyacc/err_syntax3.error, test/btyacc/err_syntax4.error,\
 test/btyacc/err_syntax5.error, test/btyacc/err_syntax6.error,\
 test/btyacc/err_syntax7.error, test/btyacc/err_syntax7a.error,\
 test/btyacc/err_syntax7b.error, test/btyacc/err_syntax8.error,\
 test/btyacc/err_syntax8a.error, test/btyacc/err_syntax9.error,\
 test/btyacc/error.error, test/btyacc/calc1.error, test/btyacc/calc2.error,\
 test/btyacc/calc3.error, test/btyacc/code_calc.error, test/btyacc/code_error\
.error, test/btyacc/empty.error, test/btyacc/err_syntax1.error,\
 test/btyacc/btyacc_calc1.error, test/btyacc/btyacc_demo.error:
	reference output for testing

2014-03-23  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/err_syntax23.error, test/err_syntax23.output, test/err_syntax23.tab.c\
, test/err_syntax23.tab.h, test/yacc/err_syntax23.error, test/yacc/err_syntax\
23.output, test/yacc/err_syntax23.tab.c, test/yacc/err_syntax23.tab.h:
	reference output for testing

	* test/err_syntax23.y: testcase for untyped_lhs()

2014-03-23  Tom.Shields

	* test/run_test.sh:
	move test-outputs into subdirectories to keep btyacc/yacc results separate

2014-03-23  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/err_syntax22.error, test/err_syntax22.output, test/err_syntax22.tab.c\
, test/err_syntax22.tab.h, test/yacc/err_syntax22.error, test/yacc/err_syntax\
22.output, test/yacc/err_syntax22.tab.c, test/yacc/err_syntax22.tab.h:
	reference output for testing

	* test/err_syntax22.y: testcase for untyped_rhs()

	* test/err_syntax21.error, test/err_syntax21.output, test/err_syntax21.tab.c\
, test/err_syntax21.tab.h, test/yacc/err_syntax21.error, test/yacc/err_syntax\
21.output, test/yacc/err_syntax21.tab.c, test/yacc/err_syntax21.tab.h,\
 test/err_syntax20.error, test/err_syntax20.output, test/err_syntax20.tab.c,\
 test/err_syntax20.tab.h, test/yacc/err_syntax20.error, test/yacc/err_syntax2\
0.output, test/yacc/err_syntax20.tab.c, test/yacc/err_syntax20.tab.h:
	reference output for testing

	* test/err_syntax20.y: testcase for undefined_symbol_warning()

	* test/err_syntax21.y: testcase for unknown_rhs()

	* test/err_syntax19.error, test/err_syntax19.output, test/err_syntax19.tab.c\
, test/err_syntax19.tab.h, test/yacc/err_syntax19.error, test/yacc/err_syntax\
19.output, test/yacc/err_syntax19.tab.c, test/yacc/err_syntax19.tab.h:
	reference output for testing

	* test/err_syntax19.y: testcase for dollar_error()

	* test/err_syntax18.error, test/err_syntax18.output, test/err_syntax18.tab.c\
, test/err_syntax18.tab.h, test/yacc/err_syntax18.error, test/yacc/err_syntax\
18.output, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax18.tab.h:
	reference output for testing

	* test/err_syntax18.y: testcase for dollar_warning()

	* test/err_syntax17.error, test/err_syntax17.output, test/err_syntax17.tab.c\
, test/err_syntax17.tab.h, test/yacc/err_syntax17.error, test/yacc/err_syntax\
17.output, test/yacc/err_syntax17.tab.c, test/yacc/err_syntax17.tab.h:
	reference output for testing

	* test/err_syntax17.y: testcase for unterminated_action()

2014-03-22  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/err_syntax16.error, test/err_syntax16.output, test/err_syntax16.tab.c\
, test/err_syntax16.tab.h, test/yacc/err_syntax16.error, test/yacc/err_syntax\
16.output, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax16.tab.h:
	reference output for testing

	* test/err_syntax16.y: testcase for terminal_lhs()

	* test/err_syntax15.error, test/err_syntax15.output, test/err_syntax15.tab.c\
, test/err_syntax15.tab.h, test/yacc/err_syntax15.error, test/yacc/err_syntax\
15.output, test/yacc/err_syntax15.tab.c, test/yacc/err_syntax15.tab.h:
	reference output for testing

	* test/err_syntax15.y: testcase for no_grammar()

	* test/err_syntax14.error, test/err_syntax14.output, test/err_syntax14.tab.c\
, test/err_syntax14.tab.h, test/yacc/err_syntax14.error, test/yacc/err_syntax\
14.output, test/yacc/err_syntax14.tab.c, test/yacc/err_syntax14.tab.h:
	reference output for testing

	* test/err_syntax14.y:
	testcase for restarted_warning() and undefined_goal()

	* test/err_syntax13.error, test/err_syntax13.output, test/err_syntax13.tab.c\
, test/err_syntax13.tab.h, test/yacc/err_syntax13.error, test/yacc/err_syntax\
13.output, test/yacc/err_syntax13.tab.c, test/yacc/err_syntax13.tab.h:
	reference output for testing

	* test/err_syntax13.y: testcase for terminal_start()

	* test/err_syntax12.error, test/err_syntax12.output, test/err_syntax12.tab.c\
, test/err_syntax12.tab.h, test/yacc/err_syntax12.error, test/yacc/err_syntax\
12.output, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax12.tab.h:
	reference output for testing

	* test/err_syntax12.y: testcase for revalued_warning()

	* test/err_syntax11.error, test/err_syntax11.output, test/err_syntax11.tab.c\
, test/err_syntax11.tab.h, test/yacc/err_syntax11.error, test/yacc/err_syntax\
11.output, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax11.tab.h:
	reference output for testing

	* test/err_syntax11.y: testcase for reprec_warning()

	* test/err_syntax10.error, test/err_syntax10.output, test/err_syntax10.tab.c\
, test/err_syntax10.tab.h, test/yacc/err_syntax10.error, test/yacc/err_syntax\
10.output, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax10.tab.h:
	reference output for testing

	* test/err_syntax10.y: testcase for retyped_warning()

2014-03-21  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/err_syntax9.error, test/err_syntax9.output, test/err_syntax9.tab.c,\
 test/err_syntax9.tab.h, test/yacc/err_syntax9.error, test/yacc/err_syntax9.o\
utput, test/yacc/err_syntax9.tab.c, test/yacc/err_syntax9.tab.h:
	reference output for testing

	* test/err_syntax9.y: testcase for tokenized_start()

	* test/err_syntax8.error, test/err_syntax8.output, test/err_syntax8.tab.c,\
 test/err_syntax8.tab.h, test/err_syntax8a.error, test/err_syntax8a.output,\
 test/err_syntax8a.tab.c, test/err_syntax8a.tab.h, test/yacc/err_syntax8.erro\
r, test/yacc/err_syntax8.output, test/yacc/err_syntax8.tab.c,\
 test/yacc/err_syntax8.tab.h, test/yacc/err_syntax8a.error,\
 test/yacc/err_syntax8a.output, test/yacc/err_syntax8a.tab.c,\
 test/yacc/err_syntax8a.tab.h:
	reference output for testing

	* test/err_syntax8a.y, test/err_syntax8.y: testcase for used_reserved()

	* test/err_syntax7.error, test/err_syntax7.output, test/err_syntax7.tab.c,\
 test/err_syntax7.tab.h, test/err_syntax7a.error, test/err_syntax7a.output,\
 test/err_syntax7a.tab.c, test/err_syntax7a.tab.h, test/err_syntax7b.error,\
 test/err_syntax7b.output, test/err_syntax7b.tab.c, test/err_syntax7b.tab.h,\
 test/yacc/err_syntax7.error, test/yacc/err_syntax7.output,\
 test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7.tab.h,\
 test/yacc/err_syntax7a.error, test/yacc/err_syntax7a.output,\
 test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7a.tab.h,\
 test/yacc/err_syntax7b.error, test/yacc/err_syntax7b.output,\
 test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax7b.tab.h:
	reference output for testing

	* test/err_syntax7b.y, test/err_syntax7a.y, test/err_syntax7.y:
	testcase for illegal_character()

	* test/err_syntax6.error, test/err_syntax6.output, test/err_syntax6.tab.c,\
 test/err_syntax6.tab.h, test/yacc/err_syntax6.error, test/yacc/err_syntax6.o\
utput, test/yacc/err_syntax6.tab.c, test/yacc/err_syntax6.tab.h:
	reference output for testing

	* test/err_syntax6.y: testcase for illegal_tag()

	* test/err_syntax5.error, test/err_syntax5.output, test/err_syntax5.tab.c,\
 test/err_syntax5.tab.h, test/yacc/err_syntax5.error, test/yacc/err_syntax5.o\
utput, test/yacc/err_syntax5.tab.c, test/yacc/err_syntax5.tab.h:
	reference output for testing

	* test/err_syntax5.y: testcase for unterminated_union()

	* test/err_syntax4.error, test/err_syntax4.output, test/err_syntax4.tab.c,\
 test/err_syntax4.tab.h, test/yacc/err_syntax4.error, test/yacc/err_syntax4.o\
utput, test/yacc/err_syntax4.tab.c, test/yacc/err_syntax4.tab.h:
	reference output for testing

	* test/err_syntax4.y: testcase for unterminated_text()

	* test/err_syntax3.error, test/err_syntax3.output, test/err_syntax3.tab.c,\
 test/err_syntax3.tab.h, test/yacc/err_syntax3.error, test/yacc/err_syntax3.o\
utput, test/yacc/err_syntax3.tab.c, test/yacc/err_syntax3.tab.h:
	reference output for testing

	* test/err_syntax3.y: testcase for unterminated_string()

	* test/err_syntax2.error, test/err_syntax2.output, test/err_syntax2.tab.c,\
 test/err_syntax2.tab.h, test/yacc/err_syntax2.error, test/yacc/err_syntax2.o\
utput, test/yacc/err_syntax2.tab.c, test/yacc/err_syntax2.tab.h:
	reference output for testing

	* test/err_syntax2.y: testcase for unterminated_comment()

	* test/err_syntax1.error, test/yacc/err_syntax1.error:
	reference output for testing

	* test/err_syntax1.y:
	test-case with syntax error (and nonprinting character)

	* test/calc.error, test/calc1.error, test/calc2.error, test/calc3.error,\
 test/code_calc.error, test/code_error.error, test/err_syntax1.error,\
 test/error.error, test/grammar.error, test/pure_calc.error,\
 test/pure_error.error, test/quote_calc-s.error, test/quote_calc.error,\
 test/quote_calc2-s.error, test/quote_calc2.error, test/quote_calc3-s.error,\
 test/quote_calc3.error, test/quote_calc4-s.error, test/quote_calc4.error,\
 test/yacc/calc.error, test/yacc/calc1.error, test/yacc/calc2.error,\
 test/yacc/calc3.error, test/yacc/code_calc.error, test/yacc/code_error.error\
, test/yacc/error.error, test/yacc/grammar.error, test/yacc/pure_calc.error,\
 test/yacc/pure_error.error, test/yacc/quote_calc-s.error,\
 test/yacc/quote_calc.error, test/yacc/quote_calc2-s.error,\
 test/yacc/quote_calc2.error, test/yacc/quote_calc3-s.error,\
 test/yacc/quote_calc3.error, test/yacc/quote_calc4-s.error,\
 test/yacc/quote_calc4.error:
	reference output for testing

	* test/run_test.sh:
	save stderr to reference files, to capture shift/reduce messages as well
	as syntax-error messages

	* test/err_syntax1.output, test/err_syntax1.tab.c, test/err_syntax1.tab.h,\
 test/yacc/err_syntax1.output, test/yacc/err_syntax1.tab.c,\
 test/yacc/err_syntax1.tab.h:
	reference output for testing

	* test/run_test.sh: generate a ".dot" file for the grammar file

	* test/grammar.dot: RCS_BASE

	* test/yacc/grammar.dot: reference output for testing

2014-03-19  Tom.Shields

	* output.c: rename MAXSHORT to MAXYYINT

2014-03-18  Tom.Shields

	* yaccpar.skel: skeleton with btyacc additions

	* NOTES-btyacc-Changes: byacc-btyacc-20140323

	* test/btyacc/btyacc_calc1.output, test/btyacc/btyacc_calc1.tab.c,\
 test/btyacc/btyacc_calc1.tab.h:
	reference output for testing

	* test/run_make.sh:
	move test-outputs into subdirectories to keep btyacc/yacc results separate

	* test/btyacc/pure_calc.tab.c, test/btyacc/pure_calc.tab.h,\
 test/btyacc/pure_error.output, test/btyacc/pure_error.tab.c,\
 test/btyacc/pure_error.tab.h, test/btyacc/quote_calc-s.output,\
 test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc-s.tab.h,\
 test/btyacc/quote_calc.output, test/btyacc/quote_calc.tab.c,\
 test/btyacc/quote_calc.tab.h, test/btyacc/quote_calc2-s.output,\
 test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2-s.tab.h,\
 test/btyacc/quote_calc2.output, test/btyacc/quote_calc2.tab.c,\
 test/btyacc/quote_calc2.tab.h, test/btyacc/quote_calc3-s.output,\
 test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3-s.tab.h,\
 test/btyacc/quote_calc3.output, test/btyacc/quote_calc3.tab.c,\
 test/btyacc/quote_calc3.tab.h, test/btyacc/quote_calc4-s.output,\
 test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4-s.tab.h,\
 test/btyacc/quote_calc4.output, test/btyacc/quote_calc4.tab.c,\
 test/btyacc/quote_calc4.tab.h, test/btyacc/calc1.output, test/btyacc/calc1.t\
ab.c, test/btyacc/calc1.tab.h, test/btyacc/calc2.output, test/btyacc/calc2.ta\
b.c, test/btyacc/calc2.tab.h, test/btyacc/calc3.output, test/btyacc/calc3.tab\
.c, test/btyacc/calc3.tab.h, test/btyacc/code_calc.code.c,\
 test/btyacc/code_calc.output, test/btyacc/code_calc.tab.c,\
 test/btyacc/code_calc.tab.h, test/btyacc/code_error.code.c,\
 test/btyacc/code_error.output, test/btyacc/code_error.tab.c,\
 test/btyacc/code_error.tab.h, test/btyacc/empty.output, test/btyacc/empty.ta\
b.c, test/btyacc/empty.tab.h, test/btyacc/error.output, test/btyacc/error.tab\
.c, test/btyacc/error.tab.h, test/btyacc/grammar.output, test/btyacc/grammar.\
tab.c, test/btyacc/grammar.tab.h, test/btyacc/pure_calc.output,\
 test/btyacc/btyacc_demo.output, test/btyacc/btyacc_demo.tab.h,\
 test/btyacc/calc.output, test/btyacc/calc.tab.c, test/btyacc/calc.tab.h:
	reference output for testing

	* defs.h:
	several changes to help decouple the use of 'short' as the type of value
	used in yacc parsers.

	* NOTES-btyacc-Disposition: byacc-btyacc-20140323

2014-03-17  Tom.Shields

	* skel2c, yaccpar.skel, yaccpar.skel.old: RCS_BASE

	* test/run_lint.sh:
	move test-outputs into subdirectories to keep btyacc/yacc results separate

	* configure.in: add --with-max-table-size and --enable-btyacc options

2014-03-16  Tom.Shields

	* main.c: use Value_t rather than short

2014-03-11  Tom.Shields

	* test/empty.y: testcase for btyacc

2014-03-10  Tom.Shields

	* test/calc3.y, test/calc2.y: fix unused-variable warning

2014-02-18  Tom.Shields

	* lr0.c, graph.c: use Value_t rather than short

	* closure.c: use Value_t rather than short
	ifdef'd forward-reference prototypes to match ifdef'ing of the actual\
 functions

	* lalr.c: rename MAXSHORT to MAXYYINT

2014-01-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* yacc.1: document %token-table, improve presentation of double-quotes

	* VERSION, package/byacc.spec, package/debian/changelog: bump

	* test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c,\
 test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c\
, test/yacc/code_error.code.c, test/yacc/code_error.tab.c,\
 test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c,\
 test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c,\
 test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c,\
 test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c,\
 test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c,\
 test/yacc/quote_calc4.tab.c:
	reference output for testing

	* test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c,\
 test/code_calc.code.c, test/code_calc.tab.c, test/code_error.code.c,\
 test/code_error.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c,\
 test/pure_calc.tab.c, test/pure_error.tab.c, test/quote_calc-s.tab.c,\
 test/quote_calc.tab.c, test/quote_calc2-s.tab.c, test/quote_calc2.tab.c,\
 test/quote_calc3-s.tab.c, test/quote_calc3.tab.c, test/quote_calc4-s.tab.c,\
 test/quote_calc4.tab.c:
	regen

	* output.c, skeleton.c:
	amend the last change so that yytname is #define'd as needed rather than
	permanent - to avoid breaking cproto for instance.

2014-01-01  Christos.Zoulas

	* output.c, defs.h, main.c, reader.c, skeleton.c:
	changes to build ntpd using byacc:
	- rename yyname[] to yytname[]
	- add YYTRANSLATE() macro
	- recognize bison's %token-table declaration

2014-01-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* yacc.1: s/EE/XE/ to work around groff bug on Debian 6

	* makefile.in: use CF_MAKE_DOCS

	* aclocal.m4: add CF_MAKE_DOCS

	* configure.in: use CF_MAKE_DOCS

2013-12-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: 2013-11-29

2013-11-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* aclocal.m4: resync with my-autoconf (fixes for clang and mingw)

2013-10-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: 2013-10-01

2013-09-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: fix two loop-limits found by clang 3.3 --analyze

	* configure: regen

	* aclocal.m4:
	tweaks to CF_MIXEDCASE_FILENAMES and CF_XOPEN_SOURCE for msys from ncurses

	* package/mingw-byacc.spec: RCS_BASE

	* test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c,\
 test/code_calc.code.c, test/code_error.code.c, test/error.tab.c,\
 test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c,\
 test/pure_error.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c,\
 test/quote_calc2-s.tab.c, test/quote_calc2.tab.c, test/quote_calc3-s.tab.c,\
 test/quote_calc3.tab.c, test/quote_calc4-s.tab.c, test/quote_calc4.tab.c:
	regen

	* skeleton.c:
	Increase default stack-size to match FreeBSD version noted as from
	"BSD 4.4 Lite Usr.bin Sources".  See

		http://svnweb.freebsd.org/base/vendor/CSRG/dist/usr.bin/yacc/
		http://svnweb.freebsd.org/base/head/usr.bin/yacc/
		http://svnweb.freebsd.org/base/vendor/byacc/

	The original 1.9 sources (on which I based development) used 500 for
	stacksize; the BSD Lite sources (a year or two later) used 10000.

	This is a change to default values; the YYMAXDEPTH and YYSTACKSIZE
	symbols have "always" been overridable by applications, but rarely
	needed to do this.  RedHat began using the FreeBSD source in 2000,
	and switched to this source in 2007 using the 20050813 snapshot.

	RedHat #743343 misattributed the change in default stacksize to
	a regression in byacc, but did not report the issue upstream.

	* package/debian/changelog, VERSION, package/byacc.spec: bump

2013-09-07  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2013-09-15

	* config.guess: update to 2013-06-10

2013-03-04  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, VERSION, package/byacc.spec: bump

	* aclocal.m4:
	adapt tweak from Dave Beckett to work around long-ago breakage in "new"\
 autoconf.

	* output.c:
	fix bogus #include if "-i" is given but not "-d" (report by Richard Mitton).
	also while testing that, found a case where the union_file is unused; added
	a check for address that.

	* test/ftp.output, test/ftp.tab.c, test/ftp.tab.h: regen

	* test/ftp.y: fix most compiler warnings for "make check_make"

	* test/calc1.tab.c: regen

	* test/calc1.y: fix most compiler warnings for "make check_make"

	* test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c,\
 test/code_calc.code.c, test/code_error.code.c, test/error.tab.c,\
 test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c,\
 test/pure_error.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c,\
 test/quote_calc2-s.tab.c, test/quote_calc2.tab.c, test/quote_calc3-s.tab.c,\
 test/quote_calc3.tab.c, test/quote_calc4-s.tab.c, test/quote_calc4.tab.c:
	regen

	* skeleton.c: quiet a gcc conversion-warning in yygrowstack()

	* configure: regen

	* aclocal.m4:
	another fix for CF_GCC_VERSION to handle Debian's modification of gcc\
 message.

2013-02-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub, config.guess: update to 2013-02-04

2012-10-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, package/byacc.spec, VERSION: bump

	* configure: regen

	* configure.in: moved AC_PROG_CC_STDC call into CF_PROG_CC

	* aclocal.m4:
	moved AC_PROG_CC_STDC call into CF_PROG_CC and (for other uses than byacc)
	the CF_PROG_CC macro provides the CF_ANSI_CC_REQD for the 2.13 flavor.

	* aclocal.m4, configure.in:
	Arian's change dropped my check for misused $CC variable - restore that with
	alternate macro CF_PROG_CC.

2012-10-03  Adrian.Bunk

	* aclocal.m4:
	suggested patch: drop CF_ANSI_CC_REQD, CF_ANSI_CC_CHECK, CF_PROG_EXT since
	they are not needed.

2012-10-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* aclocal.m4:
	split-out CF_CC_ENV_FLAGS from CF_ANSI_CC_CHECK to avoid losing it in
	Adrian's suggested changes.

	* aclocal.m4:
	CF_CLANG_COMPILER - check if the given compiler is really clang.

	* aclocal.m4:
	add check for clang to CF_GCC_WARNINGS.  modify CF_GCC_WARNINGS to work\
 around
	old gcc warning:  ncurses change to (try to) use gnatgcc exposed gnatgcc\
 2.8.1
	on my Sarge system (versus 3.3.5 for the normal gcc).  The 2.8.1's
	pointer-arithmetic checks fell afoul of gcc's misuse of void* in string.h;\
 work
	around by excluding that check for pre-3.x compilers.

	* aclocal.m4:
	modify CF_GCC_ATTRIBUTES so that autoheader is able to see the definitions
	provided by this macro.  use AC_DEFINE_UNQUOTED() in CF_GCC_ATTRIBUTES rather
	than appending to confdefs.h, since long-ago concern about the ability to
	pass-through parameterized macros appears to be not a problem, testing with
	2.13 and 2.52

2012-10-03  Adrian.Bunk

	* aclocal.m4:
	add parameter to AC_DEFINE_UNQUOTED() to allow it to be recognized by
	autoheader, updated macros:
		CF_CHECK_CACHE
		CF_DISABLE_LEAKS
		CF_MKSTEMP
		CF_MIXEDCASE_FILENAMES
		CF_NO_LEAKS_OPTION

2012-10-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* aclocal.m4:
	move existence-check for mkstemp out of the AC_TRY_RUN, to help with
	cross-compiles

2012-10-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* config_h.in:
	Adrian Bunk request - replace this with the output from autoheader

2012-09-29  Adrian.Bunk

	* configure.in:
	suggested change: replace CF_ANSI_CC_REQD by AC_PROG_CC_STDC (since no
	check is needed anymore for standard C compilers), drop AC_CONST (same
	reason), modify AC_OUTPUT to rely upon template generated by autoheader.
	bump requirement to autoconf 2.52.20011201 and drop check for CF_PROG_EXT
	as being obsolete with autoconf 2.52x

	* configure.in, main.c: drop check for atexit, because it is standard C

	* makefile.in: add assignment for datarootdir variable.

2012-05-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, package/byacc.spec, VERSION: bump

	* reader.c:
	some versions of gcc may warn that bp is not set in mark_symbol, e.g.,
	if GCC_NORETURN is not handled; appease the compiler.

	* reader.c:
	use the declared types Assoc_t and Value_t in some places where compiler only
	cared about char versus short.

	* reader.c:
	use TMALLOC() and TREALLOC() macros to simplify allocation/reallocation
	(no object change)

	* defs.h:
	add fallbacks for GCC_NORETURN and GCC_UNUSED to make it simpler for *BSD
	packagers to build without configure script.  Also remove duplicate\
 declaration
	of pure_parser variable (prompted by patch by Baptiste Daroussin).

	Also define new TMALLOC and TREALLOC macros to simplify/replace MALLOC and
	REALLOC macros.

	* symtab.c:
	use TMALLOC() and TREALLOC() macros to simplify allocation/reallocation
	(no object change)

2012-05-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* output.c, main.c, verbose.c, mkpar.c, lr0.c:
	use TMALLOC() and TREALLOC() macros to simplify allocation/reallocation
	(no object change)

2012-01-15  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/copyright: bump

	* test/run_make.sh: workaround for breakage due to GNU make 3.82

	* test/run_make.sh:
	tested with Solaris 10 (bison 1.875) and added scripting to exercise
	the /usr/ccs/bin/yacc executable

	* test/grammar.tab.c: regen

	* test/grammar.y: modify to also build with Solaris yacc

	* VERSION, package/debian/changelog, package/byacc.spec: bump

	* test/yacc/calc1.output: reference output for testing

	* test/calc1.output, test/calc1.tab.c: regen

	* test/calc1.y:
	undo the change made to appease bison, since it was only a warning.

	* test/pure_calc.tab.c, test/pure_error.tab.c: regen

	* test/run_make.sh: another fix for running from top-level directory

	* makefile.in:
	ensure that check_make rule depends on having byacc built.

	* test/run_make.sh: fixes for building from parent directory

	* test/pure_error.y, test/pure_calc.y: bison-fixes

	* test/calc2.tab.c, test/calc3.tab.c, test/code_error.code.c,\
 test/ftp.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c:
	regen

	* test/code_debug.y: RCS_BASE

	* test/calc2.y, test/calc3.y, test/code_error.y, test/ftp.y:
	byacc already declares yyerror

	* test/pure_error.y, test/pure_calc.y:
	modified to help make the files build with bison

	* test/run_make.sh:
	supply a "%pure-parser" directive when bison needs it.

	* test/code_calc.code.c: regen

	* test/code_calc.y: modified to help make the files build with bison

	* yacc.1:
	in testing, found that %expect did not work as documented for bison.
	do not recommend it for portable code.

	* test/run_make.sh: workaround breakage in bison's %expect directive

	* test/grammar.y: modified to help make the files build with bison

	* test/calc1.output, test/calc1.tab.c, test/grammar.tab.c: regen

	* test/calc1.y: quiet a spurious warning from bison 2.3

	* test/calc1.tab.c: regen

	* test/calc1.y: modified to help make the files build with bison

	* yacc.1: comment on "-y" and "-P" options.

	* yacc.1: comment on portability

	* test/ftp.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c,\
 test/quote_calc2-s.tab.c, test/quote_calc3-s.tab.c:
	regen

	* test/ftp.y: modified to help make the files build with bison
	(bison's "-y" option is of no use in providing "yacc" compatibility)

	* test/quote_calc2.tab.c, test/quote_calc3.tab.c, test/quote_calc4-s.tab.c,\
 test/quote_calc4.tab.c:
	regen

	* test/code_calc.y, test/quote_calc2.y, test/quote_calc.y,\
 test/quote_calc4.y, test/quote_calc3.y:
	modified to help make the files build with bison

	* test/calc.tab.c: regen

	* test/calc.y: modified to help make the files build with bison

	* test/error.tab.c: regen

	* test/error.y: modified to help make the files build with bison

	* test/calc2.tab.c, test/calc3.tab.c, test/code_error.code.c: regen

	* test/run_make.sh:
	check for older bisons which (2.3 for instance) do not support pure parsers

	* test/code_error.y, test/calc3.y, test/calc2.y:
	modified to help make the files build with bison

	* test/run_test.sh: use $opt2 in filenames of the generated files

	* test/quote_calc2-s.tab.c, test/quote_calc3-s.tab.c, test/quote_calc4-s.tab\
.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2.tab.c,\
 test/quote_calc3.tab.c, test/quote_calc4.tab.c:
	regen

2012-01-14  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/calc2.tab.c, test/code_calc.code.c, test/code_error.code.c,\
 test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c,\
 test/calc1.tab.c:
	regen

	* output.c: Several changes:
		a) add YYLEX_PARAM_TYPE, like YYPARSE_PARAM_TYPE, but for yylex.
		b) modify definitions for YYLEX_DECL to be more like YYPARSE_DECL,
		   using YYLEX_PARAM_TYPE and YYLEX_PARAM.
		c) add ifdef's around #define's for YYERROR_DECL and YYERROR_CALL,
		   to help with redefinitions.

	* test/pure_calc.tab.c:
	modified to help make the files build with bison

	* test/run_make.sh:
	start work on followup, to check if the generated files build with bison.

	* test/pure_calc.y, test/pure_error.tab.c:
	modified to help make the files build with bison

	* test/calc3.tab.c: regen

	* test/quote_calc-s.output, test/quote_calc-s.tab.c, test/quote_calc-s.tab.h\
, test/quote_calc2-s.output, test/quote_calc2-s.tab.c, test/quote_calc2-s.tab\
.h, test/quote_calc3-s.output, test/quote_calc3-s.tab.c, test/quote_calc3-s.t\
ab.h, test/quote_calc4-s.output, test/quote_calc4-s.tab.c,\
 test/quote_calc4-s.tab.h:
	RCS_BASE

	* test/yacc/quote_calc-s.output, test/yacc/quote_calc-s.tab.h,\
 test/yacc/quote_calc2-s.output, test/yacc/quote_calc2-s.tab.h,\
 test/yacc/quote_calc3-s.output, test/yacc/quote_calc3-s.tab.h,\
 test/yacc/quote_calc4-s.output, test/yacc/quote_calc4-s.tab.h:
	reference output for testing

	* test/run_test.sh: generate/test with "-s" option applied.

2012-01-13  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, package/byacc.spec, VERSION: bump

	* yacc.1: improve documentation of -s option

	* yacc.1: note that yacc ignores -y

	* main.c: add -s option to usage message.

	* test/quote_calc3.output, test/quote_calc3.tab.c, test/quote_calc4.output,\
 test/quote_calc4.tab.c, test/quote_calc4.tab.h:
	RCS_BASE

	* test/yacc/quote_calc3.output, test/yacc/quote_calc4.output,\
 test/yacc/quote_calc4.tab.h:
	reference output for testing

	* test/quote_calc3.y, test/quote_calc.tab.h: RCS_BASE

	* test/yacc/quote_calc.tab.h: reference output for testing

	* test/quote_calc.output, test/quote_calc.tab.c, test/quote_calc2.output,\
 test/quote_calc2.tab.c, test/quote_calc2.tab.h, test/quote_calc3.tab.h:
	RCS_BASE

	* test/yacc/quote_calc.output, test/yacc/quote_calc2.output,\
 test/yacc/quote_calc2.tab.h, test/yacc/quote_calc3.tab.h:
	reference output for testing

	* test/quote_calc4.y, test/quote_calc.y, test/quote_calc2.y: RCS_BASE

	* configure: regen

	* aclocal.m4: resync with my-autoconf, i.e., fixes for CF_XOPEN_SOURCE

2011-12-19  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, package/byacc.spec, VERSION: bump

	* yacc.1, output.c, main.c, defs.h:
	add "-s" option to suppress generating #define's based on string contents
	in a %token statement.  For instance
		%token EQLS "Equals"
	would generate
		#define EQLS 256
		#define Equals 257
	Simply suppressing the second #define makes the behavior closer to yacc.
	(report by Paulo Andrade).

2011-09-08  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, package/byacc.spec, VERSION: bump

	* output.c:
	fix some more interaction between -i and -d flags to ensure YYERRCODE
	and YYSTYPE are declared, tested with cproto.

2011-09-07  Thomas E. Dickey  <dickey@invisible-island.net>

	* yacc.1: document "-i" option.

	* package/debian/changelog, package/byacc.spec, VERSION: bump

	* output.c: fix an interaction between -i and -d

	* test/code_error.code.c, test/error.tab.c, test/ftp.tab.c,\
 test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c,\
 test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c,\
 test/code_calc.code.c:
	regen - changes for "-i" option move the global/impure variables near the
	macros that may add a prefix, etc.

	* skeleton.c, output.c, defs.h: changes to support "-i" option.

2011-09-06  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: pass explicit file-pointer to write_section()

	* main.c:
	add "-i" option, to generate interface-file (suggested by Denis M. Wilson)

2011-09-05  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen

	* aclocal.m4:
	resync with my-autoconf: CF_ANSI_CC_CHECK (check for $CFLAGS in $CC)
	and CF_XOPEN_SOURCE (update aix, cygwin and netbsd checks)

	* defs.h, error.c, reader.c:
	add check for missing "}" on %parse-param and %lex-param lines (report by\
 Denis M Wilson)

2011-04-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2011-04-01

2011-02-02  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: update to 2011-01-01

2010-12-29  Thomas E. Dickey  <dickey@invisible-island.net>

	* defs.h, skeleton.c:
	add const qualifier to skeleton data, per NetBSD changes (report by Christos\
 Zoulas)

	* defs.h:
	mark all of the error-functions as non-returning (report by Christos Zoulas)

	* test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c,\
 test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c,\
 test/code_calc.code.c, test/code_error.code.c, test/error.tab.c,\
 test/ftp.tab.c:
	regen

	* skeleton.c:
	use only realloc() rather than realloc+malloc, agree that systems needing\
 this
	are very rare (prompted by NetBSD change).

	* test/ftp.tab.c: regen

2010-12-29  Christos.Zoulas

	* test/ftp.y:
	improve example, which was stuck in 19XX and assumed file sizes were longs.

2010-12-29  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c,\
 test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c,\
 test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c,\
 test/error.tab.c:
	regen

	* test/pure_error.y, test/pure_calc.y, test/ftp.y, test/error.y,\
 test/code_error.y, test/code_calc.y, test/calc.y, test/calc3.y,\
 test/calc2.y, test/calc1.y:
	use byacc's YYLEX_DECL/YYERROR_DECL symbols to prototype yylex/yyerror

	* skeleton.c:
	remove explicit prototype for yylex() via YYLEX_DECL() macro, since that
	would prevent declaring yylex() static (request by Christos Zoulas).

	* test/calc2.tab.c, test/calc3.tab.c: regen

2010-12-29  Christos.Zoulas

	* output.c: correct definition for YYERROR_DECL()

2010-12-29  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, package/byacc.spec, VERSION: bump

2010-12-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* defs.h, main.c:
	change return-type of allocate() to avoid warnings of alignment problems

	* main.c: Solaris declares chmod() in <sys/stat.h>

	* configure: regen

	* main.c: ifdef'd use of fcntl.h

	* configure.in: add configure checks for fcntl.h, atexit and mkstemp

	* main.c: for cases where mkstemp() is not available, use tempnam/open

	* aclocal.m4: add CF_MKSTEMP

	* aclocal.m4:
	improve quoting, deprecate ${name-value} in favor of standard ${name:-value}

2010-12-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c:
	start revising use of tmpfile(), to make this work with MinGW.  Start by
	implementing a mkstemp() alternative - noting that mkstemp() also is broken
	for MinGW.

	* package/debian/changelog, package/byacc.spec, VERSION: bump

2010-11-27  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/byacc.spec, package/debian/changelog, VERSION: bump

	* test/calc2.tab.c, test/calc3.tab.c: regen

	* output.c:
	corrected use of %parse-param value in yyerror(); it doesn't use &yylval
	(report by Clifford Yapp)

2010-11-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* skeleton.c: typo

	* output.c:
	correct line-numbering when "-r" option is used; the 'outline' variable
	should only be incremented when writing to the code-file.

	* test/code_calc.code.c, test/code_error.code.c: regen

	* yacc.1: bump date

	* yacc.1: comment on -b option vs -r

	* test/calc2.tab.c, test/calc2.y, test/calc3.tab.c, test/calc3.y,\
 test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c,\
 test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c,\
 test/code_calc.code.c, test/code_error.code.c, test/error.tab.c:
	regen

	* output.c:
	improve on YYERROR_DECL(), adding dummy params which can be used for the
	actual function declaration.  Also add YYERROR_CALL().  The two macros
	simplify maintaining sets of grammars which may/may not be pure.

	* test/calc1.y, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c,\
 test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c,\
 test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c,\
 test/error.tab.c:
	regen

	* output.c: generate yyerror() calls in output.c
	This is for compatibility with bison, which passes the yylval to yyerror
	when the %parse-param feature is used.

	* skeleton.c, defs.h: generate yyerror() calls in output.c

	* output.c: simplified a little, using putc_code() and putl_code()

	* test/yacc/calc1.tab.h: reference output for testing

	* test/calc1.tab.h: regen

	* reader.c:
	improve ifdef for YYSTYPE union declaration (report by Clifford Yapp)

	* reader.c:
	accept underscore as a replacement for dash in command names, e.g.,
	"%pure_parser" vs "%pure-parser".

	* test/calc1.tab.c: regen

	* output.c, reader.c:
	also ifdef YYSTYPE declaration in the generated code (report by Clifford\
 Yapp)

	* package/debian/changelog, package/byacc.spec, VERSION: bump

2010-11-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c, defs.h, symtab.c, error.c: reduce global variables

	* package/debian/changelog, package/byacc.spec, VERSION: bump

	* reader.c:
	amend fix for Redhat #112617 to still call default_action_warning() for
	empty rules (report by Bruce Cran).

2010-11-22  Thomas E. Dickey  <dickey@invisible-island.net>

	* output.c:
	add ifdef to guard against redefinition of YYSTYPE union (request by\
 Clifford Yapp).

	* test/calc1.tab.c: regen

	* test/calc1.y: cleanup compiler warnings

	* test/grammar.y: add "%expect"

	* test/calc1.tab.h: regen

	* test/calc1.output, test/calc1.tab.c, test/calc1.tab.h: RCS_BASE

	* test/calc2.tab.c, test/calc3.tab.c: regen

	* test/calc1.y:
	advanced example from Steve Johnson's paper, uses unions

	* test/calc3.y, test/calc2.y: init 'base', so examples can run

	* test/ftp.tab.c, test/ftp.y: tweaks to compile with g++

	* output.c: compensate for fix in reader.c

	* reader.c:
	add/use putc_both() and puts_both(), incidentally fixing a place where
	a union copied to the union_file may be missing the end of the last line.

	* package/debian/changelog, package/byacc.spec, VERSION: bump

2010-09-28  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: update to 2010-09-24

2010-09-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2010-09-11

2010-06-10  Thomas E. Dickey  <dickey@invisible-island.net>

	* yacc.1, package/debian/changelog, package/byacc.spec, VERSION:
	bump to 2010/06/10

2010-06-09  Thomas E. Dickey  <dickey@invisible-island.net>

	* reader.c: free declarations in leak-testing code.

	* main.c: close code_file if -r option used, for leak-testing

	* defs.h, reader.c:
	improve %lex-param / %parse-param implementation by allowing for arrays to
	be passed as parameters, e.g., "int regs[26]".

	* test/calc3.tab.c, test/calc3.y, test/calc3.output, test/calc3.tab.h:
	RCS_BASE

	* test/yacc/calc3.output, test/yacc/calc3.tab.h:
	reference output for testing

	* test/calc2.tab.c, test/calc2.y, test/calc2.tab.h: RCS_BASE

	* test/yacc/calc2.tab.h: reference output for testing

	* test/calc2.output: RCS_BASE

	* test/yacc/calc2.output: reference output for testing

	* output.c:
	improve %lex-param / %parse-param implementation by allowing for arrays to
	be passed as parameters, e.g., "int regs[26]".

	* test/calc.tab.c, test/calc.y:
	test-cases and reference files for %lex-param / %parse-param

	* makefile.in: add docs-rule, for html/pdf/txt form of manpage

	* configure: regen

	* aclocal.m4: add CF_XOPEN_SOURCE, etc.

	* configure.in:
	use CF_XOPEN_SOURCE check to ensure that strdup is in scope, e.g., for c89

	* test/ftp.tab.c, test/ftp.y, reader.c, symtab.c, verbose.c, lr0.c, main.c,\
 mkpar.c, output.c, defs.h, closure.c:
	fix warnings from clang --analyze

2010-06-08  Thomas E. Dickey  <dickey@invisible-island.net>

	* output.c: fix to build with c89, etc.

	* reader.c: gcc warning

	* test/ftp.tab.c, test/ftp.y, test/calc.tab.c, test/code_calc.code.c,\
 test/code_error.code.c, test/code_error.y, test/code_calc.y, test/calc.y,\
 test/pure_error.tab.c, test/error.tab.c, test/error.y, test/pure_error.y,\
 test/pure_calc.tab.c, test/pure_calc.y:
	modified test-cases to allow them to compile, to validate pure-parser\
 changes.
	updated reference files to match.

	* output.c:
	move call for output_stype() earlier since it is used in pure-parser\
 declarations

	* test/grammar.tab.c, test/grammar.y:
	modified test-cases to allow them to compile, to validate pure-parser\
 changes.
	updated reference files to match.

	* test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
	regen

	* yacc.1: document %lex-param and %parse-param

	* test/run_lint.sh, test/run_make.sh: RCS_BASE

	* test/run_test.sh:
	further modify to allow build-directory to be in a different location by
	passing this directory's location as a parameter to the script.

	* makefile.in:
	add check_make and check_lint rules to help validate the generated files
	in the test-directory

2010-06-07  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/pure_calc.tab.c, test/pure_error.tab.c: RCS_BASE

	* test/run_test.sh:
	provide for testing -r and -P options by checking if the ".y" filename
	begins with "code_" or "pure_", respectively.

	* test/code_error.code.c, test/code_error.tab.c, test/code_error.tab.h:
	RCS_BASE

	* test/yacc/code_error.tab.h: reference output for testing

	* test/code_calc.code.c, test/code_calc.tab.c, test/code_calc.tab.h:
	RCS_BASE

	* test/yacc/code_calc.tab.h: reference output for testing

	* test/pure_calc.output, test/pure_calc.tab.h, test/pure_error.output,\
 test/pure_error.tab.h:
	RCS_BASE

	* test/yacc/pure_calc.output, test/yacc/pure_calc.tab.h, test/yacc/pure_erro\
r.output, test/yacc/pure_error.tab.h:
	reference output for testing

	* test/code_calc.output, test/code_error.output: RCS_BASE

	* test/yacc/code_calc.output, test/yacc/code_error.output:
	reference output for testing

	* test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: regen

	* test/run_test.sh:
	changes to support running "make check" in a separate build-tree

	* main.c: add "-P" to usage message

	* reader.c: use UCH() macro to hide casts.

2010-06-07  Andres.Mejia

	* main.c, output.c, reader.c, defs.h, skeleton.c:
	Fix the output order of the generated parse code file.  This allows for
	the use of YYPARSE_PARAM, by having the output that checks for
	YYPARSE_PARAM to be defined come after the C code block in the
	definitions section of a yacc file.

	Implement support for YYLEX_PARAM, similar to bison.  This is useful for
	support for building reentrant lexers with flex.

	Fix a compatibility issue with bison's pure-parser option.  Bison
	defines yylex as sending at least one parameter, &yylval, as the first
	parameter and doesn't seem to have an easy way to remove that parameter.
	This on the other hand is rather convenient to support saving to yylval
	from flex when building reentrant lexers and parsers.

	Add support for the %parse-param and %lex-param directives used in
	bison.  This change bears some similarity to NetBSD's changes to byacc
	at http://www.mail-archive.com/source-changes-full@netbsd.org/msg08143.html

	Bison allows for POSIX yacc emulation via a yacc directive in the yacc
	file, and also via a command line switch.  Implement this feature as a
	no-op for byacc, since byacc is designed to be POSIX yacc compatible
	anyway.  This allows for better compatibility with yacc sources written
	for bison.

2010-06-07  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION: bump to 2010/06/07

2010-06-06  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/calc.tab.c, configure: regen

	* skeleton.c:
	move #include's down into the generated code, to allow user-defined code
	to override feature definitions, particularly with stdlib.h (request by
	Marcus Kool).

	* lr0.c, error.c, reader.c, defs.h:
	strict gcc 3.4.6 warnings on 64-bit platform

	* aclocal.m4, configure.in: add check for lint

	* makefile.in: add lint rule

	* defs.h, closure.c, lr0.c, warshall.c, main.c:
	fix gcc warnings, mostly for 64-bit platform

	* aclocal.m4:
	add macros for checking ctags/etags, e.g., to work with NetBSD pkgsrc

	* makefile.in: add etags/TAGS if available

	* configure.in: add configure check for actual ctags and etags programs

	* package/debian/copyright: add copyright notices for non-PD files

	* package/debian/changelog:
	incorporated scripts in upstream to use for test-builds

	* makefile.in: drop mkdirs.sh, just use "mkdir -p"

	* AUTHORS: nicknames for some contributors (see CHANGES for details)

	* package/byacc.spec: RPM file for byacc

	* VERSION: bump to 2010/06/06

	* aclocal.m4: add copyright notice, from "my-autoconf" macros
		http://invisible-island.net/autoconf/autoconf.html

	* package/RCS, package/debian/RCS, package/debian/source/RCS,\
 package/pkgsrc/RCS:
	PERMIT FILE

	* aclocal.m4: resync with my-autoconf.  summary of changes:
		a) CF_ADD_CFLAGS, etc., improve quoting of ifelse() parameter
		b) CF_DISABLE_ECHO, change indent-convention for substituted makefile
		c) CF_GCC_VERSION, ignore stderr
		d) CF_GCC_WARNINGS, adjust options to work with c89 wrapper of gcc

2010-04-20  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/changelog, package/debian/compat, package/debian/control,\
 package/debian/copyright, package/debian/docs, package/debian/postinst,\
 package/debian/prerm, package/debian/rules, package/debian/watch:
	scripts from Debian package

2010-02-16  Thomas E. Dickey  <dickey@invisible-island.net>

	* yacc.1: document -P and bison-extensions

	* test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c:
	regen

	* output.c: implement %pure-parser

	* skeleton.c:
	implement %pure-parser, like bison.  To help with this, changed the stack
	variables, putting them into a struct.

	* reader.c: implement %pure-parser

	* defs.h: modified skeleton to support %pure-parser feature

	* main.c: add -P option to set %pure-parser

	* output.c:
	make -r and -p options work together.  The -r option splits the generated
	parser into code/table files; for this case we cannot use static data.
	Also, we have to repeat the #define's used for prefix (-p) as well as the
	redeclaration of yyparse().  Finally, allow any of the prefixed names to
	be overridden, e.g., by passing a -D option to the compiler.  Make that
	a little more readable by putting a blank line before each chunk.

	* defs.h: add definitions for %pure-parser

	* skeleton.c:
	put blank line before/after the redeclaration of yyparse()

	* output.c: allow for other program redefining yylex()

	* skeleton.c:
	split-off xdecls[] array, to move declaration of yyparse() after #define's

	* defs.h: split-out xdecls[]

	* VERSION: bump

	* configure: regen

	* aclocal.m4: add CF_REMOVE_DEFINE, needed by CF_ADD_CFLAGS

	* aclocal.m4:
	resync with my-autoconf CF_ADD_CFLAGS and CF_DISABLE_ECHO changes.

2010-02-16  Ostap.Cherkashi

	* skeleton.c: fix a memory leak in the generated skeleton

2010-01-01  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/debian/source/format: scripts from Debian package

2009-12-31  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: update to 2009-12-30

	* config.sub: update to 2009-12-31

2009-10-27  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION: 20091027

	* output.c, mkpar.c, defs.h, lalr.c, closure.c, graph.c, lr0.c, verbose.c,\
 main.c, reader.c:
	strict compiler warnings

2009-10-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c:
	resync

	* main.c, defs.h: introduce some typedefs for portability, etc.

	* makefile.in:
	don't remove "*.log" in mostlyclean rule since it interferes with regression
	script.

	* configure: regen

	* aclocal.m4: resync with my-autoconf

2009-08-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess, config.sub: update to 2009-08-19

2009-02-21  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION: bump

	* output.c: restore "yylval" symbol, omitted in cleanup on 2008/8/25

2008-12-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regen with autoconf-2.52 (patched)

2008-12-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c:
	regenerated

2008-12-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION: bump

	* skeleton.c:
	remove ifdef-lint from goto yyerrlab, to quiet gcc warning

2008-11-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* verbose.c, main.c, defs.h, mkpar.c, reader.c:
	completed implementation of "%expect" (report by Perry E. Metzger).
	add "%expect-rr", which is (unlike bison) allowable in LALR parsers.

2008-11-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* closure.c, defs.h, error.c, graph.c, lalr.c, lr0.c, main.c, mkpar.c,\
 output.c, reader.c, skeleton.c, symtab.c, verbose.c, warshall.c:
	change indent-style (request by Perry E. Metzger)

2008-08-27  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
	better implementation of YYPARSE_PARAM, using YYPARSE_DECL() macro

	* VERSION: bump

	* skeleton.c:
	better implementation of YYPARSE_PARAM, using YYPARSE_DECL() macro

	* test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c,\
 skeleton.c:
	change YYRECOVERING to YYRECOVERING(), for compatibility with other yacc's.

	* configure: regen'd

	* configure.in: add -Wwrite-strings to warnings

	* test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c:
	add YYPARSE_PARAM and YYPARSE_PARAM_TYPE

	* skeleton.c:
	add YYPARSE_PARAM (bison) and YYPARSE_PARAM_TYPE (FreeBSD) features.

	* main.c, defs.h, output.c, skeleton.c, symtab.c, error.c, reader.c:
	fixes for gcc -Wwrite-strings

	* test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
	generate the tables as static-const (this is an interface change)

	* output.c: realign columns in start_table()

	* output.c:
	generate the tables as static-const (this is an interface change)

	* output.c: reorder functions to eliminate forward-references

	* test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
	remove 'register' keywords

2008-08-26  Thomas E. Dickey  <dickey@invisible-island.net>

	* warshall.c, verbose.c, symtab.c, skeleton.c, reader.c, output.c, mkpar.c,\
 main.c, lr0.c, lalr.c, graph.c, error.c, closure.c:
	remove 'register' keywords

2008-08-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/ftp.tab.c: regen'd

	* reader.c:
	improve the left-curly fix by testing after blanks, to avoid having a
	" {" at the beginning of a line.

	* test/error.tab.c, test/grammar.tab.c: regen'd

	* output.c:
	move the remaining newline-counting into write_XXX functions.

	* test/calc.tab.c: regen'd

	* output.c:
	simplify part of the output_file formatting using new functions, e.g.,
	start_int_table(), output_newline().

	* reader.c:
	modify copy_action() to indent the first character, it if is is left-curly
	brace.  That makes the output look more like the original, as well as makes
	it simpler to edit (not confuse editors which look for a left-curly in the
	first column as if it were the beginning of a function).

	* skeleton.c: minor fixes to avoid gcc -Wconversion warnings

	* output.c: align the #define's produced for "-p" option

	* test/run_test.sh: use the "-p" option for better coverage.

	* output.c: simplify output_prefix() with new define_prefixed()

	* skeleton.c: include string.h, for memset()
	change stack size to unsigned to fix gcc -Wconversion warnings.

	* VERSION: bump to 2008/8/25

	* makefile.in: add dependency on VERSION file.

2008-08-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* VERSION: bump

	* lalr.c: improved memory-leak checking by freeing data in includes[]

	* test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c:
	update to match skeleton-change

	* configure: regen'd

	* skeleton.c: Add fix for stack discussed
		http://undeadly.org/cgi?action=article&sid=20080708155228
	and applied
		http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/yacc/skeleton.c.diff?r1=1\
.28&r2=1.29

	* aclocal.m4: resync with my-autoconf (no major changes)

2008-07-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/pkgsrc/Makefile, package/pkgsrc/distinfo:
	scripts from NetBSD pkgsrc, for test-builds

2008-03-14  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2008-03-08

	* config.guess: update to 2008-03-12

2007-05-09  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c: close graph, verbose files if opened, on exit.

	* main.c:
	audit memory leaks - valgrind reported some memory still in use on exit.

	* lalr.c, output.c, reader.c, mkpar.c, lr0.c:
	add hook for auditing memory leaks

	* defs.h: add hooks for auditing memory leaks

	* configure: regen'd

	* configure.in:
	use CF_DISABLE_LEAKS, which combines --disable-leaks, --with-valgrind,
	--with-dbmalloc and --with-dmalloc

	* aclocal.m4: add CF_DISABLE_LEAKS and CF_WITH_VALGRIND

	* aclocal.m4: improve version-checking in CF_GCC_VERSION
	rework dbmalloc/dmalloc options using CF_NO_LEAKS_OPTION macro

	* VERSION: 2007/5/9

	* main.c: file_prefix did not always have a trailing null.

2007-03-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* mkdirs.sh: improved version for "make -j"

2006-12-22  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: update to 2006/12/22

2006-12-08  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2006/12/08

2005-08-13  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c: add -V to usage message

	* makefile.in: remove -t option from ctags

	* VERSION: 2005/8/13

2005-08-13  schmitz

	* main.c: Sylvain Schmitz:
	modify the '-o' option to work like bison's, which sets the file-prefix.

2005-08-13  Matt.Kraai

	* output.c:
	Debian #322858 (don't close union_file, which contained data).
	This feature is used in groff.

2005-08-13  Thomas E. Dickey  <dickey@invisible-island.net>

	* configure: regenerated

	* aclocal.m4: improve checks for Intel compiler warnings

2005-06-25  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2005/6/2

	* config.guess: update to 2005/5/27

2005-05-05  Thomas E. Dickey  <dickey@invisible-island.net>

	* defs.h: add a fallback for GCC_UNUSED

2005-05-04  Thomas E. Dickey  <dickey@invisible-island.net>

	* makefile.in: add "." to include-path to pickup config.h

	* reader.c:
	apply fix suggested by Steve Dum for end_rule() in Redhat Bugzilla #112617.

	* output.c:
	correct a limit check in pack_vector() - report/analysis by William Evans

	* main.c:
	exit after printing version.  Otherwise "yacc -V" will exit with an erro
	after printing the usage message.

	* test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
	regenerated after skeleton-changes

	* skeleton.c: replace a few -1's with YYEMPTY

	* skeleton.c:
	delete yynewerror (no one uses it any more, and it just makes compiler\
 warnings)

	* skeleton.c: adapt yygrowstack() and related definitions from FreeBSD

	* test/run_test.sh:
	filter out lines with YYPATCH, since that will change with each update

	* yacc.1: add -V option

	* main.c: add -V option to print the version.
	simplify option-parsing by moving the duplicate logic for setting flags into
	new function setflag().

	* skeleton.c:
	move the actual definition of YYMAJOR and YYMINOR to defs.h (as numbers).
	add YYPATCH here so it can be tested by applications.

	* defs.h:
	add macros to define VERSION in terms of the (numeric) YYMAJOR, YYMINOR and
	YYPATCH symbols.

	* lalr.c, lr0.c, mkpar.c, defs.h, closure.c, warshall.c, output.c,\
 verbose.c, graph.c, reader.c, main.c, symtab.c:
	reduce externs by making static the procedures that are not referenced\
 outside
	the module in which they are defined.

	* makefile.in:
	the VERSION file holds the patch-date.  Define YYPATCH, so this will be
	compiled into the skeleton.

	* VERSION: patch-level for byacc

	* main.c:
	add "-o" to usage message.  It is too long for a single line; rewrite usage()
	to show one option per line.

2005-05-03  Thomas E. Dickey  <dickey@invisible-island.net>

	* main.c: add -o option, to work with scripts that assume bison.
	simplify create_file_names() with a macro.
	simplify done() with a macro.
	adapt fix from FreeBSD for signal race, e.g., if done() is interrupted by
	onintr(), do not flush output via exit(), but use _exit() instead.

	* defs.h: remove unnecessary externs for main.c

	* yacc.1: add -o option

	* graph.c: remove unused parameter

	* mkpar.c, defs.h, reader.c:
	add support for "%expect", a bison feature from FreeBSD sources

	* lr0.c, reader.c, main.c, skeleton.c, graph.c, symtab.c, closure.c,\
 mkpar.c, lalr.c, error.c, warshall.c, verbose.c, output.c:
	indent'd

	* configure: regenerated for 2005/5/5

	* aclocal.m4: miscellaneous updates (adds CF_INTEL_COMPILER)

2005-04-27  schmitz

	* defs.h, graph.c, lr0.c, main.c, makefile.in, reader.c, yacc.1:
	Sylvain Schmitz <schmitz@i3s.unice.fr>:
	add graphical output of the LALR(1) automaton for graphviz,
	associated with command-line option `-g'

2005-04-16  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: update to 2005/2/10

	* config.guess: update to 2005/3/24

2005-04-13  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/pkgsrc/PLIST: scripts from NetBSD pkgsrc, for test-builds

2005-03-21  Thomas E. Dickey  <dickey@invisible-island.net>

	* package/pkgsrc/DESCR: scripts from NetBSD pkgsrc, for test-builds

2004-03-28  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
	updates due to adding yyparse() prototype

	* configure: RCS_BASE

	* configure.in:
	add AC_ARG_PROGRAM to make --program-prefix, etc., work.

	* makefile.in: first cut of script to support --program-prefix

	* configure.in:
	reorder AC_INIT/AC_CONFIG_HEADER to make this "work" with autoconf 2.52

	* makefile.in: modify so DESTDIR works

	* makefile.in: use EXEEXT and OBJEXT

	* configure.in: use CF_PROG_EXT
	generate a config.h

	* defs.h: make this use the generated config.h

	* skeleton.c: add a forward-reference for yyparse()

	* aclocal.m4: add CF_CHECK_CACHE, needed for CF_PROG_EXT

	* yacc.1: remove the discussion of TMPDIR since it is obsolete

	* skeleton.c: fix a couple of minor compiler-warnings in the skeleton

	* defs.h: remove action_file_name, etc., since we use tmpfile() now.

	* main.c:
	use tmpfile() for opening the working files.  This quiets a warning
	advising the use of mkstemp().

	* output.c:
	Do not close temporary-files here, since they are opened with tmpfile().
	Just rewind them, and they're ready to read back the data stored in them.

	* test/grammar.output, test/grammar.tab.c, test/grammar.tab.h: RCS_BASE

	* test/yacc/grammar.output, test/yacc/grammar.tab.h:
	reference output for testing

	* makefile.in: turn on "make check" rule

	* test/calc.output: RCS_BASE

	* test/yacc/calc.output: reference output for testing

	* test/run_test.sh, test/calc.tab.h: RCS_BASE

	* test/yacc/calc.tab.h: reference output for testing

	* test/ftp.tab.c: yyparse() is now yyparse(void)

	* test/calc.tab.c: RCS_BASE

	* test/error.tab.c: yyparse() is now yyparse(void)

	* test/README: RCS_BASE

	* yacc.1: various typography fixes prompted by Debian #100947

	* aclocal.m4, makefile.in, configure.in: RCS_BASE

	* README: updated to note that this is not the original

2004-03-24  Thomas E. Dickey  <dickey@invisible-island.net>

	* test/grammar.y: RCS_BASE

2004-02-23  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.sub: RCS_BASE

2004-02-17  Thomas E. Dickey  <dickey@invisible-island.net>

	* config.guess: RCS_BASE

2003-11-29  Thomas E. Dickey  <dickey@invisible-island.net>

	* install-sh: improved quoting

2002-06-29  Thomas E. Dickey  <dickey@invisible-island.net>

	* mkdirs.sh:
	don't use character range, since some locales don't work as expected

2001-06-22  Thomas E. Dickey  <dickey@clark.net>

	* install-sh: RCS_BASE

2000-11-20  Thomas E. Dickey  <dickey@clark.net>

	* test/calc.y: RCS_BASE

	* test/code_calc.y, test/pure_calc.y: copy of calc.y

	* vmsbuild.com: original version

2000-02-23  Thomas E. Dickey  <dickey@clark.net>

	* test/RCS, RCS: PERMIT FILE

2000-02-14  Thomas E. Dickey  <dickey@clark.net>

	* main.c: fix for VMS port - making pathname for temp-file

	* descrip.mms: original version

2000-02-13  Thomas E. Dickey  <dickey@clark.net>

	* defs.h, verbose.c, reader.c, main.c, skeleton.c, warshall.c, symtab.c,\
 closure.c, mkpar.c, lalr.c, lr0.c, output.c, error.c:
	ansify

1999-11-30  Thomas E. Dickey  <dickey@clark.net>

	* mkdirs.sh: RCS_BASE

1995-01-01  Thomas E. Dickey  <dickey@clark.net>

	* config_h.in: RCS_BASE

1993-12-23  unknown

	* README.DOS, main.c: MSDOS-port

1993-12-22  unknown

	* reader.c, defs.h: MSDOS-port

1993-03-02  unknown

	* README: original version

1993-02-22  unknown

	* test/ftp.output, test/ftp.tab.c, test/ftp.tab.h: RCS_BASE

1993-02-22  dickey@software.org

	* test/yacc/error.output, test/yacc/error.tab.h:
	reference output for testing

1993-02-22  unknown

	* test/error.output, test/error.tab.c, test/error.tab.h: RCS_BASE

	* skeleton.c, warshall.c, main.c, output.c, reader.c, closure.c, NOTES:
	original version

1992-10-12  unknown

	* yacc.1: original version

1992-10-11  unknown

	* defs.h: original version

1991-01-20  unknown

	* mkpar.c, verbose.c: original version

1991-01-14  unknown

	* lr0.c, Makefile, Makefile.old: original version

1990-07-16  unknown

	* NEW_FEATURES: original version

1990-06-03  unknown

	* ACKNOWLEDGEMENTS: original version

1990-02-05  unknown

	* symtab.c, lalr.c, error.c: original version

1990-01-16  dickey@software.org

	* test/code_error.y, test/pure_error.y: RCS_BASE

1990-01-16  unknown

	* test/error.y: RCS_BASE

1989-11-22  unknown

	* NO_WARRANTY: original version

1989-09-23  unknown

	* test/ftp.y: RCS_BASE


\
changes-type: text/plain
url: https://invisible-island.net/byacc/byacc.html
package-url: https://github.com/build2-packaging/byacc
package-email: boris@codesynthesis.com
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: host
bootstrap-build:
\
project = byacc
version = $process.run(sed -n -e 's/^version: (.+)/\1/p' $src_root/manifest)

dist.package = $project-$version

using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS \\
-D_CRT_NONSTDC_NO_WARNINGS

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: byacc/byacc-20210808.tar.gz
sha256sum: f4f016f4d9d6e3c16416911a28d0d21118671d7f461db4ab8d304544d74c119b
:
name: bzip2
version: 1.0.8+1
summary: bzip2 is a freely available, patent free, high-quality data\
 compressor.
license: other: BSD
description:
\

This is the README for bzip2/libzip2.
This version is fully compatible with the previous public releases.

------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.

bzip2/libbzip2 version 1.0.8 of 13 July 2019
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>

Please read the WARNING, DISCLAIMER and PATENTS sections in this file.

This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------

Complete documentation is available in Postscript form (manual.ps),
PDF (manual.pdf) or html (manual.html).  A plain-text version of the
manual page is available as bzip2.txt.


HOW TO BUILD -- UNIX

Type 'make'.  This builds the library libbz2.a and then the programs
bzip2 and bzip2recover.  Six self-tests are run.  If the self-tests
complete ok, carry on to installation:

To install in /usr/local/bin, /usr/local/lib, /usr/local/man and
/usr/local/include, type

   make install

To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type

   make install PREFIX=/xxx/yyy

If you are (justifiably) paranoid and want to see what 'make install'
is going to do, you can first do

   make -n install                      or
   make -n install PREFIX=/xxx/yyy      respectively.

The -n instructs make to show the commands it would execute, but not
actually execute them.


HOW TO BUILD -- UNIX, shared library libbz2.so.

Do 'make -f Makefile-libbz2_so'.  This Makefile seems to work for
Linux-ELF (RedHat 7.2 on an x86 box), with gcc.  I make no claims
that it works for any other platform, though I suspect it probably
will work for most platforms employing both ELF and gcc.

bzip2-shared, a client of the shared library, is also built, but not
self-tested.  So I suggest you also build using the normal Makefile,
since that conducts a self-test.  A second reason to prefer the
version statically linked to the library is that, on x86 platforms,
building shared objects makes a valuable register (%ebx) unavailable
to gcc, resulting in a slowdown of 10%-20%, at least for bzip2.

Important note for people upgrading .so's from 0.9.0/0.9.5 to version
1.0.X.  All the functions in the library have been renamed, from (eg)
bzCompress to BZ2_bzCompress, to avoid namespace pollution.
Unfortunately this means that the libbz2.so created by
Makefile-libbz2_so will not work with any program which used an older
version of the library.  I do encourage library clients to make the
effort to upgrade to use version 1.0, since it is both faster and more
robust than previous versions.


HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc.

It's difficult for me to support compilation on all these platforms.
My approach is to collect binaries for these platforms, and put them
on the master web site (https://sourceware.org/bzip2/).  Look there.  However
(FWIW), bzip2-1.0.X is very standard ANSI C and should compile
unmodified with MS Visual C.  If you have difficulties building, you
might want to read README.COMPILATION.PROBLEMS.

At least using MS Visual C++ 6, you can build from the unmodified
sources by issuing, in a command shell: 

   nmake -f makefile.msc

(you may need to first run the MSVC-provided script VCVARS32.BAT
 so as to set up paths to the MSVC tools correctly).


VALIDATION

Correct operation, in the sense that a compressed file can always be
decompressed to reproduce the original, is obviously of paramount
importance.  To validate bzip2, I used a modified version of Mark
Nelson's churn program.  Churn is an automated test driver which
recursively traverses a directory structure, using bzip2 to compress
and then decompress each file it encounters, and checking that the
decompressed data is the same as the original.



Please read and be aware of the following:

WARNING:

   This program and library (attempts to) compress data by 
   performing several non-trivial transformations on it.  
   Unless you are 100% familiar with *all* the algorithms 
   contained herein, and with the consequences of modifying them, 
   you should NOT meddle with the compression or decompression 
   machinery.  Incorrect changes can and very likely *will* 
   lead to disastrous loss of data.


DISCLAIMER:

   I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE
   USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED.

   Every compression of a file implies an assumption that the
   compressed file can be decompressed to reproduce the original.
   Great efforts in design, coding and testing have been made to
   ensure that this program works correctly.  However, the complexity
   of the algorithms, and, in particular, the presence of various
   special cases in the code which occur with very low but non-zero
   probability make it impossible to rule out the possibility of bugs
   remaining in the program.  DO NOT COMPRESS ANY DATA WITH THIS
   PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER
   SMALL, THAT THE DATA WILL NOT BE RECOVERABLE.

   That is not to say this program is inherently unreliable.  
   Indeed, I very much hope the opposite is true.  bzip2/libbzip2 
   has been carefully constructed and extensively tested.


PATENTS:

   To the best of my knowledge, bzip2/libbzip2 does not use any 
   patented algorithms.  However, I do not have the resources 
   to carry out a patent search.  Therefore I cannot give any 
   guarantee of the above statement.



WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ?

   * Approx 10% faster compression, 30% faster decompression
   * -t (test mode) is a lot quicker
   * Can decompress concatenated compressed files
   * Programming interface, so programs can directly read/write .bz2 files
   * Less restrictive (BSD-style) licensing
   * Flag handling more compatible with GNU gzip
   * Much more documentation, i.e., a proper user manual
   * Hopefully, improved portability (at least of the library)

WHAT'S NEW IN 0.9.5 ?

   * Compression speed is much less sensitive to the input
     data than in previous versions.  Specifically, the very
     slow performance caused by repetitive data is fixed.
   * Many small improvements in file and flag handling.
   * A Y2K statement.

WHAT'S NEW IN 1.0.x ?

   See the CHANGES file.

I hope you find bzip2 useful.  Feel free to contact the developers at
   bzip2-devel@sourceware.org
if you have any suggestions or queries.  Many people mailed me with
comments, suggestions and patches after the releases of bzip-0.15,
bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1,
1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this
feedback.  I thank you for your comments.

bzip2's "home" is https://sourceware.org/bzip2/

Julian Seward
jseward@acm.org
Cambridge, UK.

18     July 1996 (version 0.15)
25   August 1996 (version 0.21)
 7   August 1997 (bzip2, version 0.1)
29   August 1997 (bzip2, version 0.1pl2)
23   August 1998 (bzip2, version 0.9.0)
 8     June 1999 (bzip2, version 0.9.5)
 4     Sept 1999 (bzip2, version 0.9.5d)
 5      May 2000 (bzip2, version 1.0pre8)
30 December 2001 (bzip2, version 1.0.2pre1)
15 February 2005 (bzip2, version 1.0.3)
20 December 2006 (bzip2, version 1.0.4)
10 December 2007 (bzip2, version 1.0.5)
 6     Sept 2010 (bzip2, version 1.0.6)
27     June 2019 (bzip2, version 1.0.7)
13     July 2019 (bzip2, version 1.0.8)

\
description-type: text/plain
url: https://www.sourceware.org/bzip2/
src-url: https://sourceware.org/git/?p=bzip2.git
package-url: https://github.com/build2-packaging/bzip2/
email: bzip2-devel@sourceware.org
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: libbzip2 == 1.0.8
bootstrap-build:
\
project = bzip2

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: bzip2/bzip2-1.0.8+1.tar.gz
sha256sum: 25e2a42d831a136cf89a733e1022225770b8efefb2e6dd6f6539e477653b839e
:
name: catch2
version: 2.13.6+2
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.6/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
tests: catch2-tests == 2.13.6
examples: catch2-examples == 2.13.6
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
h{*}: extension = h
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-2.13.6+2.tar.gz
sha256sum: be9c1b2ef87d3e719e3c8c83e9bef969dc188392fb3034cfde051ec5f3bad66f
:
name: catch2
version: 2.13.7
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.7/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
tests: catch2-tests == 2.13.7
examples: catch2-examples == 2.13.7
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
h{*}: extension = h
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-2.13.7.tar.gz
sha256sum: 8e064e7efe3875606efc69a72ffadf30df7d10da7865144f155ff26aed2d370b
:
name: catch2
version: 2.13.8
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.8/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
tests: catch2-tests == 2.13.8
examples: catch2-examples == 2.13.8
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
h{*}: extension = h
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-2.13.8.tar.gz
sha256sum: 5edb97122676f13f606e0fb5a408836cf09b8a765deae9ace1694c115eb2c60f
:
name: catch2
version: 2.13.9+1
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.9/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
tests: catch2-tests == 2.13.9
examples: catch2-examples == 2.13.9
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
h{*}: extension = h
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Define new config variable to set default reporter
config [string] config.catch2.default_reporter ?= ""

\
location: catch2/catch2-2.13.9+1.tar.gz
sha256sum: dd14c9b904c1e99158bb90d662f40d362495bbe2d464d2c506f3d17bacdb3fb7
:
name: catch2
version: 3.0.1
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/9x9qoM)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What's the Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Tests autoregister themselves and do not have to be named with valid
identifiers, assertions look like normal C++ code, and sections provide
a nice way to share set-up and tear-down code in tests.


## Catch2 v3 is being developed!

You are on the `devel` branch, where the next major version, v3, of
Catch2 is being developed. As it is a significant rework, you will
find that parts of this documentation are likely still stuck on v2.

For stable (and documentation-matching) version of Catch2, [go to the
`v2.x` branch](https://github.com/catchorg/Catch2/tree/v2.x).

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
tests: catch2-tests == 3.0.1
examples: catch2-examples == 3.0.1
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using in

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Configuration variables

config [bool] config.catch2.android_logwrite ?= [null]
config [bool] config.catch2.colour_win32 ?= [null]
config [bool] config.catch2.counter ?= [null]
config [bool] config.catch2.cpp11_to_string ?= [null]
config [bool] config.catch2.cpp17_byte ?= [null]
config [bool] config.catch2.cpp17_optional ?= [null]
config [bool] config.catch2.cpp17_string_view ?= [null]
config [bool] config.catch2.cpp17_uncaught_exceptions ?= [null]
config [bool] config.catch2.cpp17_variant ?= [null]
config [bool] config.catch2.global_nextafter ?= [null]
config [bool] config.catch2.posix_signals ?= [null]
config [bool] config.catch2.use_async ?= [null]
config [bool] config.catch2.wchar ?= [null]
config [bool] config.catch2.windows_seh ?= [null]


# Bi state config variables
config [bool] config.catch2.disable_exceptions ?= false
config [bool] config.catch2.disable_exceptions_custom_handler ?= false
config [bool] config.catch2.disable ?= false
config [bool] config.catch2.disable_stringification ?= false
config [bool] config.catch2.enable_all_stringmakers ?= false
config [bool] config.catch2.enable_optional_stringmaker ?= false
config [bool] config.catch2.enable_pair_stringmaker ?= false
config [bool] config.catch2.enable_tuple_stringmaker ?= false
config [bool] config.catch2.enable_variant_stringmaker ?= false
config [bool] config.catch2.experimental_redirect ?= false
config [bool] config.catch2.fast_compile ?= false
config [bool] config.catch2.nostdout ?= false
config [bool] config.catch2.prefix_all ?= false
config [bool] config.catch2.windows_crtdbg ?= false

# Valued configurations
config [string] config.catch2.default_reporter ?= "console"
config [string] config.catch2.console_width ?= "80"
config [string] config.catch2.fallback_stringifier ?= [null]

switch $config.catch2.android_logwrite
{
  case [null]
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = ""
  case true
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_ANDROID_LOGWRIT\
E"
  case false
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_NO_ANDROID_LOGW\
RITE"
}

switch $config.catch2.colour_win32
{
  case [null]
    CATCH_CONFIG_COLOUR_WIN32_STR = ""
  case true
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_COLOUR_WIN32"
  case false
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_NO_COLOUR_WIN32"
}

switch $config.catch2.counter
{
  case [null]
    CATCH_CONFIG_COUNTER_STR = ""
  case true
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_COUNTER"
  case false
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_NO_COUNTER"
}

switch $config.catch2.cpp11_to_string
{
  case [null]
    CATCH_CONFIG_CPP11_TO_STRING_STR = ""
  case true
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_CPP11_TO_STRING"
  case false
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_NO_CPP11_TO_STRI\
NG"
}

switch $config.catch2.cpp17_byte
{
  case [null]
    CATCH_CONFIG_CPP17_BYTE_STR = ""
  case true
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_CPP17_BYTE"
  case false
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_NO_CPP17_BYTE"
}

switch $config.catch2.cpp17_optional
{
  case [null]
    CATCH_CONFIG_CPP17_OPTIONAL_STR = ""
  case true
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_CPP17_OPTIONAL"
  case false
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_NO_CPP17_OPTIONAL"
}

switch $config.catch2.cpp17_string_view
{
  case [null]
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = ""
  case true
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_CPP17_STRING_V\
IEW"
  case false
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_NO_CPP17_STRIN\
G_VIEW"
}

switch $config.catch2.cpp17_uncaught_exceptions
{
  case [null]
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = ""
  case true
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_CPP17_\
UNCAUGHT_EXCEPTIONS"
  case false
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_NO_CPP\
17_UNCAUGHT_EXCEPTIONS"
}

switch $config.catch2.cpp17_variant
{
  case [null]
    CATCH_CONFIG_CPP17_VARIANT_STR = ""
  case true
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_CPP17_VARIANT"
  case false
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_NO_CPP17_VARIANT"
}

switch $config.catch2.global_nextafter
{
  case [null]
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = ""
  case true
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_GLOBAL_NEXTAFTE\
R"
  case false
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_NO_GLOBAL_NEXTA\
FTER"
}

switch $config.catch2.posix_signals
{
  case [null]
    CATCH_CONFIG_POSIX_SIGNALS_STR = ""
  case true
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_POSIX_SIGNALS"
  case false
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_NO_POSIX_SIGNALS"
}

switch $config.catch2.use_async
{
  case [null]
    CATCH_CONFIG_USE_ASYNC_STR = ""
  case true
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_USE_ASYNC"
  case false
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_NO_USE_ASYNC"
}

switch $config.catch2.wchar
{
  case [null]
    CATCH_CONFIG_WCHAR_STR = ""
  case true
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_WCHAR"
  case false
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_NO_WCHAR"
}


switch $config.catch2.windows_seh
{
  case [null]
    CATCH_CONFIG_WINDOWS_SEH_STR = ""
  case true
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_WINDOWS_SEH"
  case false
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_NO_WINDOWS_SEH"
}

# Bi-State config strings
if ($config.catch2.disable_exceptions)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = "#define CATCH_CONFIG_DISABLE_EXCEPTI\
ONS"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = ""


if ($config.catch2.disable_exceptions_custom_handler)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = "#define\
 CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = ""

if ($config.catch2.disable)
  CATCH_CONFIG_DISABLE_STR = "#define CATCH_CONFIG_DISABLE"
else
  CATCH_CONFIG_DISABLE_STR = ""

if ($config.catch2.disable_stringification)
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = "#define CATCH_CONFIG_DISABLE_ST\
RINGIFICATION"
else
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = ""

if ($config.catch2.enable_all_stringmakers)
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = "#define CATCH_CONFIG_ENABLE_ALL\
_STRINGMAKERS"
else
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = ""

if ($config.catch2.enable_pair_stringmaker)
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_PAI\
R_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = ""

if ($config.catch2.enable_optional_stringmaker)
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE\
_OPTIONAL_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = ""

if ($config.catch2.enable_tuple_stringmaker)
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_TU\
PLE_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = ""

if ($config.catch2.enable_variant_stringmaker)
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_\
VARIANT_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = ""

if ($config.catch2.experimental_redirect)
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = "#define CATCH_CONFIG_EXPRIMENTAL_\
REDIRECT"
else
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = ""

if ($config.catch2.fast_compile)
  CATCH_CONFIG_FAST_COMPILE_STR = "#define CATCH_CONFIG_FAST_COMPILE"
else
  CATCH_CONFIG_FAST_COMPILE_STR = ""

if ($config.catch2.nostdout)
  CATCH_CONFIG_NOSTDOUT_STR = "#define CATCH_CONFIG_NOSTDOUT"
else
  CATCH_CONFIG_NOSTDOUT_STR = ""

if ($config.catch2.prefix_all)
  CATCH_CONFIG_PREFIX_ALL_STR = "#define CATCH_CONFIG_PREFIX_ALL"
else
  CATCH_CONFIG_PREFIX_ALL_STR = ""


if ($config.catch2.windows_crtdbg)
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = "#define CATCH_CONFIG_WINDOWS_CRTDBG"
else
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = ""

if ($config.catch2.fallback_stringifier != [null])
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = "#define CATCH_CONFIG_FALLBACK_STRI\
NGIFIER $config.catch2.fallback_stringifier"
else
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = ""

\
location: catch2/catch2-3.0.1.tar.gz
sha256sum: d3c9c2c069eaf805dd1fef62c414582d16c54285cadcd27949c124da8e1c4d0f
:
name: catch2
version: 3.1.0
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What's the Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Tests autoregister themselves and do not have to be named with valid
identifiers, assertions look like normal C++ code, and sections provide
a nice way to share set-up and tear-down code in tests.


## Catch2 v3 is being developed!

You are on the `devel` branch, where the next major version, v3, of
Catch2 is being developed. As it is a significant rework, you will
find that parts of this documentation are likely still stuck on v2.

For stable (and documentation-matching) version of Catch2, [go to the
`v2.x` branch](https://github.com/catchorg/Catch2/tree/v2.x).

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
tests: catch2-tests == 3.1.0
examples: catch2-examples == 3.1.0
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using in

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

if($cxx.target.system == 'win32-msvc' && $bin.lib != static)
  warn "Catch2's support for building and linking as dlls with msvc is not\
 complete with this release. See https://github.com/catchorg/Catch2/issues/24\
82#issue-1313643759"

# Configuration variables

config [bool] config.catch2.android_logwrite ?= [null]
config [bool] config.catch2.colour_win32 ?= [null]
config [bool] config.catch2.counter ?= [null]
config [bool] config.catch2.cpp11_to_string ?= [null]
config [bool] config.catch2.cpp17_byte ?= [null]
config [bool] config.catch2.cpp17_optional ?= [null]
config [bool] config.catch2.cpp17_string_view ?= [null]
config [bool] config.catch2.cpp17_uncaught_exceptions ?= [null]
config [bool] config.catch2.cpp17_variant ?= [null]
config [bool] config.catch2.global_nextafter ?= [null]
config [bool] config.catch2.posix_signals ?= [null]
config [bool] config.catch2.use_async ?= [null]
config [bool] config.catch2.wchar ?= [null]
config [bool] config.catch2.windows_seh ?= [null]


# Bi state config variables
config [bool] config.catch2.disable_exceptions ?= false
config [bool] config.catch2.disable_exceptions_custom_handler ?= false
config [bool] config.catch2.disable ?= false
config [bool] config.catch2.disable_stringification ?= false
config [bool] config.catch2.enable_all_stringmakers ?= false
config [bool] config.catch2.enable_optional_stringmaker ?= false
config [bool] config.catch2.enable_pair_stringmaker ?= false
config [bool] config.catch2.enable_tuple_stringmaker ?= false
config [bool] config.catch2.enable_variant_stringmaker ?= false
config [bool] config.catch2.experimental_redirect ?= false
config [bool] config.catch2.fast_compile ?= false
config [bool] config.catch2.nostdout ?= false
config [bool] config.catch2.prefix_all ?= false
config [bool] config.catch2.windows_crtdbg ?= false

# Valued configurations
config [string] config.catch2.default_reporter ?= "console"
config [string] config.catch2.console_width ?= "80"
config [string] config.catch2.fallback_stringifier ?= [null]

switch $config.catch2.android_logwrite
{
  case [null]
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = ""
  case true
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_ANDROID_LOGWRIT\
E"
  case false
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_NO_ANDROID_LOGW\
RITE"
}

switch $config.catch2.colour_win32
{
  case [null]
    CATCH_CONFIG_COLOUR_WIN32_STR = ""
  case true
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_COLOUR_WIN32"
  case false
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_NO_COLOUR_WIN32"
}

switch $config.catch2.counter
{
  case [null]
    CATCH_CONFIG_COUNTER_STR = ""
  case true
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_COUNTER"
  case false
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_NO_COUNTER"
}

switch $config.catch2.cpp11_to_string
{
  case [null]
    CATCH_CONFIG_CPP11_TO_STRING_STR = ""
  case true
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_CPP11_TO_STRING"
  case false
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_NO_CPP11_TO_STRI\
NG"
}

switch $config.catch2.cpp17_byte
{
  case [null]
    CATCH_CONFIG_CPP17_BYTE_STR = ""
  case true
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_CPP17_BYTE"
  case false
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_NO_CPP17_BYTE"
}

switch $config.catch2.cpp17_optional
{
  case [null]
    CATCH_CONFIG_CPP17_OPTIONAL_STR = ""
  case true
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_CPP17_OPTIONAL"
  case false
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_NO_CPP17_OPTIONAL"
}

switch $config.catch2.cpp17_string_view
{
  case [null]
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = ""
  case true
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_CPP17_STRING_V\
IEW"
  case false
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_NO_CPP17_STRIN\
G_VIEW"
}

switch $config.catch2.cpp17_uncaught_exceptions
{
  case [null]
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = ""
  case true
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_CPP17_\
UNCAUGHT_EXCEPTIONS"
  case false
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_NO_CPP\
17_UNCAUGHT_EXCEPTIONS"
}

switch $config.catch2.cpp17_variant
{
  case [null]
    CATCH_CONFIG_CPP17_VARIANT_STR = ""
  case true
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_CPP17_VARIANT"
  case false
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_NO_CPP17_VARIANT"
}

switch $config.catch2.global_nextafter
{
  case [null]
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = ""
  case true
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_GLOBAL_NEXTAFTE\
R"
  case false
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_NO_GLOBAL_NEXTA\
FTER"
}

switch $config.catch2.posix_signals
{
  case [null]
    CATCH_CONFIG_POSIX_SIGNALS_STR = ""
  case true
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_POSIX_SIGNALS"
  case false
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_NO_POSIX_SIGNALS"
}

switch $config.catch2.use_async
{
  case [null]
    CATCH_CONFIG_USE_ASYNC_STR = ""
  case true
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_USE_ASYNC"
  case false
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_NO_USE_ASYNC"
}

switch $config.catch2.wchar
{
  case [null]
    CATCH_CONFIG_WCHAR_STR = ""
  case true
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_WCHAR"
  case false
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_NO_WCHAR"
}


switch $config.catch2.windows_seh
{
  case [null]
    CATCH_CONFIG_WINDOWS_SEH_STR = ""
  case true
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_WINDOWS_SEH"
  case false
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_NO_WINDOWS_SEH"
}

# Bi-State config strings
if ($config.catch2.disable_exceptions)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = "#define CATCH_CONFIG_DISABLE_EXCEPTI\
ONS"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = ""


if ($config.catch2.disable_exceptions_custom_handler)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = "#define\
 CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = ""

if ($config.catch2.disable)
  CATCH_CONFIG_DISABLE_STR = "#define CATCH_CONFIG_DISABLE"
else
  CATCH_CONFIG_DISABLE_STR = ""

if ($config.catch2.disable_stringification)
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = "#define CATCH_CONFIG_DISABLE_ST\
RINGIFICATION"
else
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = ""

if ($config.catch2.enable_all_stringmakers)
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = "#define CATCH_CONFIG_ENABLE_ALL\
_STRINGMAKERS"
else
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = ""

if ($config.catch2.enable_pair_stringmaker)
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_PAI\
R_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = ""

if ($config.catch2.enable_optional_stringmaker)
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE\
_OPTIONAL_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = ""

if ($config.catch2.enable_tuple_stringmaker)
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_TU\
PLE_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = ""

if ($config.catch2.enable_variant_stringmaker)
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_\
VARIANT_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = ""

if ($config.catch2.experimental_redirect)
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = "#define CATCH_CONFIG_EXPRIMENTAL_\
REDIRECT"
else
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = ""

if ($config.catch2.fast_compile)
  CATCH_CONFIG_FAST_COMPILE_STR = "#define CATCH_CONFIG_FAST_COMPILE"
else
  CATCH_CONFIG_FAST_COMPILE_STR = ""

if ($config.catch2.nostdout)
  CATCH_CONFIG_NOSTDOUT_STR = "#define CATCH_CONFIG_NOSTDOUT"
else
  CATCH_CONFIG_NOSTDOUT_STR = ""

if ($config.catch2.prefix_all)
  CATCH_CONFIG_PREFIX_ALL_STR = "#define CATCH_CONFIG_PREFIX_ALL"
else
  CATCH_CONFIG_PREFIX_ALL_STR = ""


if ($config.catch2.windows_crtdbg)
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = "#define CATCH_CONFIG_WINDOWS_CRTDBG"
else
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = ""

if ($config.catch2.fallback_stringifier != [null])
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = "#define CATCH_CONFIG_FALLBACK_STRI\
NGIFIER $config.catch2.fallback_stringifier"
else
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = ""

\
location: catch2/catch2-3.1.0.tar.gz
sha256sum: 68e11bc613418089e1cbe78366ea612c9faacfd4630d663aa5ba350ecfeca734
:
name: catch2
version: 3.3.2
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
tests: catch2-tests == 3.3.2
examples: catch2-examples == 3.3.2
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using in

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# if($cxx.target.system == 'win32-msvc' && $bin.lib != static)
#   warn "Catch2's support for building and linking as dlls with msvc is not\
 complete with this release. See https://github.com/catchorg/Catch2/issues/24\
82#issue-1313643759"

# Configuration variables

config [bool] config.catch2.android_logwrite ?= [null]
config [bool] config.catch2.colour_win32 ?= [null]
config [bool] config.catch2.counter ?= [null]
config [bool] config.catch2.cpp11_to_string ?= [null]
config [bool] config.catch2.cpp17_byte ?= [null]
config [bool] config.catch2.cpp17_optional ?= [null]
config [bool] config.catch2.cpp17_string_view ?= [null]
config [bool] config.catch2.cpp17_uncaught_exceptions ?= [null]
config [bool] config.catch2.cpp17_variant ?= [null]
config [bool] config.catch2.global_nextafter ?= [null]
config [bool] config.catch2.posix_signals ?= [null]
config [bool] config.catch2.use_async ?= [null]
config [bool] config.catch2.wchar ?= [null]
config [bool] config.catch2.windows_seh ?= [null]


# Bi state config variables
config [bool] config.catch2.disable_exceptions ?= false
config [bool] config.catch2.disable_exceptions_custom_handler ?= false
config [bool] config.catch2.disable ?= false
config [bool] config.catch2.disable_stringification ?= false
config [bool] config.catch2.enable_all_stringmakers ?= false
config [bool] config.catch2.enable_optional_stringmaker ?= false
config [bool] config.catch2.enable_pair_stringmaker ?= false
config [bool] config.catch2.enable_tuple_stringmaker ?= false
config [bool] config.catch2.enable_variant_stringmaker ?= false
config [bool] config.catch2.experimental_redirect ?= false
config [bool] config.catch2.fast_compile ?= false
config [bool] config.catch2.nostdout ?= false
config [bool] config.catch2.prefix_all ?= false
config [bool] config.catch2.windows_crtdbg ?= false

# Valued configurations
config [string] config.catch2.default_reporter ?= "console"
config [string] config.catch2.console_width ?= "80"
config [string] config.catch2.fallback_stringifier ?= [null]

switch $config.catch2.android_logwrite
{
  case [null]
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = ""
  case true
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_ANDROID_LOGWRIT\
E"
  case false
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_NO_ANDROID_LOGW\
RITE"
}

switch $config.catch2.colour_win32
{
  case [null]
    CATCH_CONFIG_COLOUR_WIN32_STR = ""
  case true
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_COLOUR_WIN32"
  case false
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_NO_COLOUR_WIN32"
}

switch $config.catch2.counter
{
  case [null]
    CATCH_CONFIG_COUNTER_STR = ""
  case true
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_COUNTER"
  case false
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_NO_COUNTER"
}

switch $config.catch2.cpp11_to_string
{
  case [null]
    CATCH_CONFIG_CPP11_TO_STRING_STR = ""
  case true
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_CPP11_TO_STRING"
  case false
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_NO_CPP11_TO_STRI\
NG"
}

switch $config.catch2.cpp17_byte
{
  case [null]
    CATCH_CONFIG_CPP17_BYTE_STR = ""
  case true
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_CPP17_BYTE"
  case false
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_NO_CPP17_BYTE"
}

switch $config.catch2.cpp17_optional
{
  case [null]
    CATCH_CONFIG_CPP17_OPTIONAL_STR = ""
  case true
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_CPP17_OPTIONAL"
  case false
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_NO_CPP17_OPTIONAL"
}

switch $config.catch2.cpp17_string_view
{
  case [null]
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = ""
  case true
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_CPP17_STRING_V\
IEW"
  case false
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_NO_CPP17_STRIN\
G_VIEW"
}

switch $config.catch2.cpp17_uncaught_exceptions
{
  case [null]
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = ""
  case true
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_CPP17_\
UNCAUGHT_EXCEPTIONS"
  case false
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_NO_CPP\
17_UNCAUGHT_EXCEPTIONS"
}

switch $config.catch2.cpp17_variant
{
  case [null]
    CATCH_CONFIG_CPP17_VARIANT_STR = ""
  case true
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_CPP17_VARIANT"
  case false
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_NO_CPP17_VARIANT"
}

switch $config.catch2.global_nextafter
{
  case [null]
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = ""
  case true
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_GLOBAL_NEXTAFTE\
R"
  case false
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_NO_GLOBAL_NEXTA\
FTER"
}

switch $config.catch2.posix_signals
{
  case [null]
    CATCH_CONFIG_POSIX_SIGNALS_STR = ""
  case true
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_POSIX_SIGNALS"
  case false
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_NO_POSIX_SIGNALS"
}

switch $config.catch2.use_async
{
  case [null]
    CATCH_CONFIG_USE_ASYNC_STR = ""
  case true
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_USE_ASYNC"
  case false
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_NO_USE_ASYNC"
}

switch $config.catch2.wchar
{
  case [null]
    CATCH_CONFIG_WCHAR_STR = ""
  case true
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_WCHAR"
  case false
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_NO_WCHAR"
}


switch $config.catch2.windows_seh
{
  case [null]
    CATCH_CONFIG_WINDOWS_SEH_STR = ""
  case true
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_WINDOWS_SEH"
  case false
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_NO_WINDOWS_SEH"
}

# Bi-State config strings
if ($config.catch2.disable_exceptions)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = "#define CATCH_CONFIG_DISABLE_EXCEPTI\
ONS"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = ""


if ($config.catch2.disable_exceptions_custom_handler)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = "#define\
 CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = ""

if ($config.catch2.disable)
  CATCH_CONFIG_DISABLE_STR = "#define CATCH_CONFIG_DISABLE"
else
  CATCH_CONFIG_DISABLE_STR = ""

if ($config.catch2.disable_stringification)
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = "#define CATCH_CONFIG_DISABLE_ST\
RINGIFICATION"
else
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = ""

if ($config.catch2.enable_all_stringmakers)
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = "#define CATCH_CONFIG_ENABLE_ALL\
_STRINGMAKERS"
else
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = ""

if ($config.catch2.enable_pair_stringmaker)
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_PAI\
R_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = ""

if ($config.catch2.enable_optional_stringmaker)
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE\
_OPTIONAL_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = ""

if ($config.catch2.enable_tuple_stringmaker)
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_TU\
PLE_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = ""

if ($config.catch2.enable_variant_stringmaker)
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_\
VARIANT_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = ""

if ($config.catch2.experimental_redirect)
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = "#define CATCH_CONFIG_EXPRIMENTAL_\
REDIRECT"
else
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = ""

if ($config.catch2.fast_compile)
  CATCH_CONFIG_FAST_COMPILE_STR = "#define CATCH_CONFIG_FAST_COMPILE"
else
  CATCH_CONFIG_FAST_COMPILE_STR = ""

if ($config.catch2.nostdout)
  CATCH_CONFIG_NOSTDOUT_STR = "#define CATCH_CONFIG_NOSTDOUT"
else
  CATCH_CONFIG_NOSTDOUT_STR = ""

if ($config.catch2.prefix_all)
  CATCH_CONFIG_PREFIX_ALL_STR = "#define CATCH_CONFIG_PREFIX_ALL"
else
  CATCH_CONFIG_PREFIX_ALL_STR = ""


if ($config.catch2.windows_crtdbg)
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = "#define CATCH_CONFIG_WINDOWS_CRTDBG"
else
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = ""

if ($config.catch2.fallback_stringifier != [null])
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = "#define CATCH_CONFIG_FALLBACK_STRI\
NGIFIER $config.catch2.fallback_stringifier"
else
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = ""

\
location: catch2/catch2-3.3.2.tar.gz
sha256sum: 874f50b20b11b5b9faef01b92a6789da322689b3d1d941cc76882bd6ae6b7b46
:
name: catch2
version: 3.5.1+1
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
tests: catch2-tests == 3.5.1
examples: catch2-examples == 3.5.1
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using in

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# if($cxx.target.system == 'win32-msvc' && $bin.lib != static)
#   warn "Catch2's support for building and linking as dlls with msvc is not\
 complete with this release. See https://github.com/catchorg/Catch2/issues/24\
82#issue-1313643759"

# Configuration variables

config [bool] config.catch2.android_logwrite ?= [null]
config [bool] config.catch2.colour_win32 ?= [null]
config [bool] config.catch2.counter ?= [null]
config [bool] config.catch2.cpp11_to_string ?= [null]
config [bool] config.catch2.cpp17_byte ?= [null]
config [bool] config.catch2.cpp17_optional ?= [null]
config [bool] config.catch2.cpp17_string_view ?= [null]
config [bool] config.catch2.cpp17_uncaught_exceptions ?= [null]
config [bool] config.catch2.cpp17_variant ?= [null]
config [bool] config.catch2.global_nextafter ?= [null]
config [bool] config.catch2.posix_signals ?= [null]
config [bool] config.catch2.getenv ?= [null]
config [bool] config.catch2.use_async ?= [null]
config [bool] config.catch2.wchar ?= [null]
config [bool] config.catch2.windows_seh ?= [null]


# Bi state config variables
config [bool] config.catch2.disable_exceptions ?= false
config [bool] config.catch2.disable_exceptions_custom_handler ?= false
config [bool] config.catch2.disable ?= false
config [bool] config.catch2.disable_stringification ?= false
config [bool] config.catch2.enable_all_stringmakers ?= false
config [bool] config.catch2.enable_optional_stringmaker ?= false
config [bool] config.catch2.enable_pair_stringmaker ?= false
config [bool] config.catch2.enable_tuple_stringmaker ?= false
config [bool] config.catch2.enable_variant_stringmaker ?= false
config [bool] config.catch2.experimental_redirect ?= false
config [bool] config.catch2.fast_compile ?= false
config [bool] config.catch2.nostdout ?= false
config [bool] config.catch2.prefix_all ?= false
config [bool] config.catch2.windows_crtdbg ?= false
config [bool] config.catch2.prefix_messages ?= false

# Valued configurations
config [string] config.catch2.default_reporter ?= "console"
config [string] config.catch2.console_width ?= "80"
config [string] config.catch2.fallback_stringifier ?= [null]

switch $config.catch2.android_logwrite
{
  case [null]
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = ""
  case true
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_ANDROID_LOGWRIT\
E"
  case false
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_NO_ANDROID_LOGW\
RITE"
}

switch $config.catch2.colour_win32
{
  case [null]
    CATCH_CONFIG_COLOUR_WIN32_STR = ""
  case true
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_COLOUR_WIN32"
  case false
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_NO_COLOUR_WIN32"
}

switch $config.catch2.counter
{
  case [null]
    CATCH_CONFIG_COUNTER_STR = ""
  case true
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_COUNTER"
  case false
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_NO_COUNTER"
}

switch $config.catch2.cpp11_to_string
{
  case [null]
    CATCH_CONFIG_CPP11_TO_STRING_STR = ""
  case true
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_CPP11_TO_STRING"
  case false
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_NO_CPP11_TO_STRI\
NG"
}

switch $config.catch2.cpp17_byte
{
  case [null]
    CATCH_CONFIG_CPP17_BYTE_STR = ""
  case true
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_CPP17_BYTE"
  case false
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_NO_CPP17_BYTE"
}

switch $config.catch2.cpp17_optional
{
  case [null]
    CATCH_CONFIG_CPP17_OPTIONAL_STR = ""
  case true
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_CPP17_OPTIONAL"
  case false
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_NO_CPP17_OPTIONAL"
}

switch $config.catch2.cpp17_string_view
{
  case [null]
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = ""
  case true
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_CPP17_STRING_V\
IEW"
  case false
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_NO_CPP17_STRIN\
G_VIEW"
}

switch $config.catch2.cpp17_uncaught_exceptions
{
  case [null]
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = ""
  case true
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_CPP17_\
UNCAUGHT_EXCEPTIONS"
  case false
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_NO_CPP\
17_UNCAUGHT_EXCEPTIONS"
}

switch $config.catch2.cpp17_variant
{
  case [null]
    CATCH_CONFIG_CPP17_VARIANT_STR = ""
  case true
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_CPP17_VARIANT"
  case false
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_NO_CPP17_VARIANT"
}

switch $config.catch2.global_nextafter
{
  case [null]
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = ""
  case true
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_GLOBAL_NEXTAFTE\
R"
  case false
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_NO_GLOBAL_NEXTA\
FTER"
}

switch $config.catch2.posix_signals
{
  case [null]
    CATCH_CONFIG_POSIX_SIGNALS_STR = ""
  case true
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_POSIX_SIGNALS"
  case false
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_NO_POSIX_SIGNALS"
}

switch $config.catch2.getenv
{
  case [null]
    CATCH_CONFIG_GETENV_STR = ""
  case true
    CATCH_CONFIG_GETENV_STR = "#define CATCH_CONFIG_GETENV"
  case false
    CATCH_CONFIG_GETENV_STR = "#define CATCH_CONFIG_NO_GETENV"
}

switch $config.catch2.use_async
{
  case [null]
    CATCH_CONFIG_USE_ASYNC_STR = ""
  case true
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_USE_ASYNC"
  case false
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_NO_USE_ASYNC"
}

switch $config.catch2.wchar
{
  case [null]
    CATCH_CONFIG_WCHAR_STR = ""
  case true
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_WCHAR"
  case false
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_NO_WCHAR"
}


switch $config.catch2.windows_seh
{
  case [null]
    CATCH_CONFIG_WINDOWS_SEH_STR = ""
  case true
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_WINDOWS_SEH"
  case false
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_NO_WINDOWS_SEH"
}

# Bi-State config strings
if ($config.catch2.disable_exceptions)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = "#define CATCH_CONFIG_DISABLE_EXCEPTI\
ONS"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = ""


if ($config.catch2.disable_exceptions_custom_handler)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = "#define\
 CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = ""

if ($config.catch2.disable)
  CATCH_CONFIG_DISABLE_STR = "#define CATCH_CONFIG_DISABLE"
else
  CATCH_CONFIG_DISABLE_STR = ""

if ($config.catch2.disable_stringification)
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = "#define CATCH_CONFIG_DISABLE_ST\
RINGIFICATION"
else
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = ""

if ($config.catch2.enable_all_stringmakers)
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = "#define CATCH_CONFIG_ENABLE_ALL\
_STRINGMAKERS"
else
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = ""

if ($config.catch2.enable_pair_stringmaker)
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_PAI\
R_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = ""

if ($config.catch2.enable_optional_stringmaker)
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE\
_OPTIONAL_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = ""

if ($config.catch2.enable_tuple_stringmaker)
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_TU\
PLE_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = ""

if ($config.catch2.enable_variant_stringmaker)
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_\
VARIANT_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = ""

if ($config.catch2.experimental_redirect)
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = "#define CATCH_CONFIG_EXPRIMENTAL_\
REDIRECT"
else
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = ""

if ($config.catch2.fast_compile)
  CATCH_CONFIG_FAST_COMPILE_STR = "#define CATCH_CONFIG_FAST_COMPILE"
else
  CATCH_CONFIG_FAST_COMPILE_STR = ""

if ($config.catch2.nostdout)
  CATCH_CONFIG_NOSTDOUT_STR = "#define CATCH_CONFIG_NOSTDOUT"
else
  CATCH_CONFIG_NOSTDOUT_STR = ""

if ($config.catch2.prefix_all)
  CATCH_CONFIG_PREFIX_ALL_STR = "#define CATCH_CONFIG_PREFIX_ALL"
else
  CATCH_CONFIG_PREFIX_ALL_STR = ""


if ($config.catch2.windows_crtdbg)
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = "#define CATCH_CONFIG_WINDOWS_CRTDBG"
else
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = ""

if ($config.catch2.fallback_stringifier != [null])
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = "#define CATCH_CONFIG_FALLBACK_STRI\
NGIFIER $config.catch2.fallback_stringifier"
else
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = ""

if ($config.catch2.prefix_messages)
  CATCH_CONFIG_PREFIX_MESSAGES_STR = "#define CATCH_CONFIG_PREFIX_MESSAGES"
else
  CATCH_CONFIG_PREFIX_MESSAGES_STR = ""


\
location: catch2/catch2-3.5.1+1.tar.gz
sha256sum: 02b088fd79b379671d151835ff9eda68a8d0a9ba3273785c21013dff41e833cd
:
name: catch2
version: 3.7.1
summary: Catch2 is a multi-paradigm test framework for C++. which also\
 supports Objective-C (and maybe C). It is primarily distributed as a single\
 header file, although certain extensions may require additional headers.
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
tests: catch2-tests == 3.7.1
examples: catch2-examples == 3.7.1
bootstrap-build:
\
project = catch2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using in

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# if($cxx.target.system == 'win32-msvc' && $bin.lib != static)
#   warn "Catch2's support for building and linking as dlls with msvc is not\
 complete with this release. See https://github.com/catchorg/Catch2/issues/24\
82#issue-1313643759"

# Configuration variables

config [bool] config.catch2.android_logwrite ?= [null]
config [bool] config.catch2.colour_win32 ?= [null]
config [bool] config.catch2.counter ?= [null]
config [bool] config.catch2.cpp11_to_string ?= [null]
config [bool] config.catch2.cpp17_byte ?= [null]
config [bool] config.catch2.cpp17_optional ?= [null]
config [bool] config.catch2.cpp17_string_view ?= [null]
config [bool] config.catch2.cpp17_uncaught_exceptions ?= [null]
config [bool] config.catch2.cpp17_variant ?= [null]
config [bool] config.catch2.global_nextafter ?= [null]
config [bool] config.catch2.posix_signals ?= [null]
config [bool] config.catch2.getenv ?= [null]
config [bool] config.catch2.use_async ?= [null]
config [bool] config.catch2.wchar ?= [null]
config [bool] config.catch2.windows_seh ?= [null]


# Bi state config variables
config [bool] config.catch2.disable_exceptions ?= false
config [bool] config.catch2.disable_exceptions_custom_handler ?= false
config [bool] config.catch2.disable ?= false
config [bool] config.catch2.disable_stringification ?= false
config [bool] config.catch2.enable_all_stringmakers ?= false
config [bool] config.catch2.enable_optional_stringmaker ?= false
config [bool] config.catch2.enable_pair_stringmaker ?= false
config [bool] config.catch2.enable_tuple_stringmaker ?= false
config [bool] config.catch2.enable_variant_stringmaker ?= false
config [bool] config.catch2.experimental_redirect ?= false
config [bool] config.catch2.fast_compile ?= false
config [bool] config.catch2.nostdout ?= false
config [bool] config.catch2.prefix_all ?= false
config [bool] config.catch2.windows_crtdbg ?= false
config [bool] config.catch2.prefix_messages ?= false

# Valued configurations
config [string] config.catch2.default_reporter ?= "console"
config [string] config.catch2.console_width ?= "80"
config [string] config.catch2.fallback_stringifier ?= [null]

switch $config.catch2.android_logwrite
{
  case [null]
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = ""
  case true
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_ANDROID_LOGWRIT\
E"
  case false
    CATCH_CONFIG_ANDROID_LOGWRITE_STR = "#define CATCH_CONFIG_NO_ANDROID_LOGW\
RITE"
}

switch $config.catch2.colour_win32
{
  case [null]
    CATCH_CONFIG_COLOUR_WIN32_STR = ""
  case true
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_COLOUR_WIN32"
  case false
    CATCH_CONFIG_COLOUR_WIN32_STR = "#define CATCH_CONFIG_NO_COLOUR_WIN32"
}

switch $config.catch2.counter
{
  case [null]
    CATCH_CONFIG_COUNTER_STR = ""
  case true
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_COUNTER"
  case false
    CATCH_CONFIG_COUNTER_STR = "#define CATCH_CONFIG_NO_COUNTER"
}

switch $config.catch2.cpp11_to_string
{
  case [null]
    CATCH_CONFIG_CPP11_TO_STRING_STR = ""
  case true
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_CPP11_TO_STRING"
  case false
    CATCH_CONFIG_CPP11_TO_STRING_STR = "#define CATCH_CONFIG_NO_CPP11_TO_STRI\
NG"
}

switch $config.catch2.cpp17_byte
{
  case [null]
    CATCH_CONFIG_CPP17_BYTE_STR = ""
  case true
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_CPP17_BYTE"
  case false
    CATCH_CONFIG_CPP17_BYTE_STR = "#define CATCH_CONFIG_NO_CPP17_BYTE"
}

switch $config.catch2.cpp17_optional
{
  case [null]
    CATCH_CONFIG_CPP17_OPTIONAL_STR = ""
  case true
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_CPP17_OPTIONAL"
  case false
    CATCH_CONFIG_CPP17_OPTIONAL_STR = "#define CATCH_CONFIG_NO_CPP17_OPTIONAL"
}

switch $config.catch2.cpp17_string_view
{
  case [null]
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = ""
  case true
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_CPP17_STRING_V\
IEW"
  case false
    CATCH_CONFIG_CPP17_STRING_VIEW_STR = "#define CATCH_CONFIG_NO_CPP17_STRIN\
G_VIEW"
}

switch $config.catch2.cpp17_uncaught_exceptions
{
  case [null]
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = ""
  case true
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_CPP17_\
UNCAUGHT_EXCEPTIONS"
  case false
    CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS_STR = "#define CATCH_CONFIG_NO_CPP\
17_UNCAUGHT_EXCEPTIONS"
}

switch $config.catch2.cpp17_variant
{
  case [null]
    CATCH_CONFIG_CPP17_VARIANT_STR = ""
  case true
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_CPP17_VARIANT"
  case false
    CATCH_CONFIG_CPP17_VARIANT_STR = "#define CATCH_CONFIG_NO_CPP17_VARIANT"
}

switch $config.catch2.global_nextafter
{
  case [null]
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = ""
  case true
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_GLOBAL_NEXTAFTE\
R"
  case false
    CATCH_CONFIG_GLOBAL_NEXTAFTER_STR = "#define CATCH_CONFIG_NO_GLOBAL_NEXTA\
FTER"
}

switch $config.catch2.posix_signals
{
  case [null]
    CATCH_CONFIG_POSIX_SIGNALS_STR = ""
  case true
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_POSIX_SIGNALS"
  case false
    CATCH_CONFIG_POSIX_SIGNALS_STR = "#define CATCH_CONFIG_NO_POSIX_SIGNALS"
}

switch $config.catch2.getenv
{
  case [null]
    CATCH_CONFIG_GETENV_STR = ""
  case true
    CATCH_CONFIG_GETENV_STR = "#define CATCH_CONFIG_GETENV"
  case false
    CATCH_CONFIG_GETENV_STR = "#define CATCH_CONFIG_NO_GETENV"
}

switch $config.catch2.use_async
{
  case [null]
    CATCH_CONFIG_USE_ASYNC_STR = ""
  case true
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_USE_ASYNC"
  case false
    CATCH_CONFIG_USE_ASYNC_STR = "#define CATCH_CONFIG_NO_USE_ASYNC"
}

switch $config.catch2.wchar
{
  case [null]
    CATCH_CONFIG_WCHAR_STR = ""
  case true
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_WCHAR"
  case false
    CATCH_CONFIG_WCHAR_STR = "#define CATCH_CONFIG_NO_WCHAR"
}


switch $config.catch2.windows_seh
{
  case [null]
    CATCH_CONFIG_WINDOWS_SEH_STR = ""
  case true
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_WINDOWS_SEH"
  case false
    CATCH_CONFIG_WINDOWS_SEH_STR = "#define CATCH_CONFIG_NO_WINDOWS_SEH"
}

# Bi-State config strings
if ($config.catch2.disable_exceptions)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = "#define CATCH_CONFIG_DISABLE_EXCEPTI\
ONS"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_STR = ""


if ($config.catch2.disable_exceptions_custom_handler)
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = "#define\
 CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER"
else
  CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER_STR = ""

if ($config.catch2.disable)
  CATCH_CONFIG_DISABLE_STR = "#define CATCH_CONFIG_DISABLE"
else
  CATCH_CONFIG_DISABLE_STR = ""

if ($config.catch2.disable_stringification)
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = "#define CATCH_CONFIG_DISABLE_ST\
RINGIFICATION"
else
  CATCH_CONFIG_DISABLE_STRINGIFICATION_STR = ""

if ($config.catch2.enable_all_stringmakers)
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = "#define CATCH_CONFIG_ENABLE_ALL\
_STRINGMAKERS"
else
  CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS_STR = ""

if ($config.catch2.enable_pair_stringmaker)
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_PAI\
R_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER_STR = ""

if ($config.catch2.enable_optional_stringmaker)
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE\
_OPTIONAL_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER_STR = ""

if ($config.catch2.enable_tuple_stringmaker)
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_TU\
PLE_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER_STR = ""

if ($config.catch2.enable_variant_stringmaker)
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = "#define CATCH_CONFIG_ENABLE_\
VARIANT_STRINGMAKER"
else
  CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER_STR = ""

if ($config.catch2.experimental_redirect)
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = "#define CATCH_CONFIG_EXPRIMENTAL_\
REDIRECT"
else
  CATCH_CONFIG_EXPERIMENTAL_REDIRECT_STR = ""

if ($config.catch2.fast_compile)
  CATCH_CONFIG_FAST_COMPILE_STR = "#define CATCH_CONFIG_FAST_COMPILE"
else
  CATCH_CONFIG_FAST_COMPILE_STR = ""

if ($config.catch2.nostdout)
  CATCH_CONFIG_NOSTDOUT_STR = "#define CATCH_CONFIG_NOSTDOUT"
else
  CATCH_CONFIG_NOSTDOUT_STR = ""

if ($config.catch2.prefix_all)
  CATCH_CONFIG_PREFIX_ALL_STR = "#define CATCH_CONFIG_PREFIX_ALL"
else
  CATCH_CONFIG_PREFIX_ALL_STR = ""


if ($config.catch2.windows_crtdbg)
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = "#define CATCH_CONFIG_WINDOWS_CRTDBG"
else
  CATCH_CONFIG_WINDOWS_CRTDBG_STR = ""

if ($config.catch2.fallback_stringifier != [null])
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = "#define CATCH_CONFIG_FALLBACK_STRI\
NGIFIER $config.catch2.fallback_stringifier"
else
  CATCH_CONFIG_FALLBACK_STRINGIFIER_STR = ""

if ($config.catch2.prefix_messages)
  CATCH_CONFIG_PREFIX_MESSAGES_STR = "#define CATCH_CONFIG_PREFIX_MESSAGES"
else
  CATCH_CONFIG_PREFIX_MESSAGES_STR = ""


\
location: catch2/catch2-3.7.1.tar.gz
sha256sum: 1542950f7d0376938841218a41cb5b1fc138f6262603e07d0062226012fbd577
:
name: catch2-examples
version: 2.13.6+2
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.6/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = 14

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target
\
location: catch2/catch2-examples-2.13.6+2.tar.gz
sha256sum: 9959b7c6399a56dbcdef0979ea45bd5ac7c00bc8e4c02bd8878cd27dbef65fc3
:
name: catch2-examples
version: 2.13.7
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.7/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = 14

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target
\
location: catch2/catch2-examples-2.13.7.tar.gz
sha256sum: b81a42f31eac8b8a5f03406fcad1596484590e17d7e1e6cbd1f9936c63f9504b
:
name: catch2-examples
version: 2.13.8
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.8/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = 14

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target
\
location: catch2/catch2-examples-2.13.8.tar.gz
sha256sum: ad4ecc8a3195d41088db66a932b45dcb50a5c6b8d2478c1fb0869027eefe60ba
:
name: catch2-examples
version: 2.13.9+1
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.9/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = 14

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target
\
location: catch2/catch2-examples-2.13.9+1.tar.gz
sha256sum: 998bc0841b15509eb1110cd48e8e83d4fc7908bdfa69acdcfa7d1dbe18c6c90b
:
name: catch2-examples
version: 3.0.1
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/9x9qoM)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What's the Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Tests autoregister themselves and do not have to be named with valid
identifiers, assertions look like normal C++ code, and sections provide
a nice way to share set-up and tear-down code in tests.


## Catch2 v3 is being developed!

You are on the `devel` branch, where the next major version, v3, of
Catch2 is being developed. As it is a significant rework, you will
find that parts of this documentation are likely still stuck on v2.

For stable (and documentation-matching) version of Catch2, [go to the
`v2.x` branch](https://github.com/catchorg/Catch2/tree/v2.x).

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = 14

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target
\
location: catch2/catch2-examples-3.0.1.tar.gz
sha256sum: 643f4186c96d0211e24e167fb6fc0fc92bfcba5acb3f36c7bade0f2a9c94a904
:
name: catch2-examples
version: 3.1.0
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What's the Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Tests autoregister themselves and do not have to be named with valid
identifiers, assertions look like normal C++ code, and sections provide
a nice way to share set-up and tear-down code in tests.


## Catch2 v3 is being developed!

You are on the `devel` branch, where the next major version, v3, of
Catch2 is being developed. As it is a significant rework, you will
find that parts of this documentation are likely still stuck on v2.

For stable (and documentation-matching) version of Catch2, [go to the
`v2.x` branch](https://github.com/catchorg/Catch2/tree/v2.x).

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-examples-3.1.0.tar.gz
sha256sum: fe1cbd3e60684f4051a84b13ec2c88b4d7ea2dc6c4b81349678aebe64ae8c3d2
:
name: catch2-examples
version: 3.3.2
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-examples-3.3.2.tar.gz
sha256sum: 1a358931421bd11b44cdfc542aa35df7453022240942d8e46415a2bbb63ce4b3
:
name: catch2-examples
version: 3.5.1+1
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-examples-3.5.1+1.tar.gz
sha256sum: b65be2ba39a8ce88bafeaaaa9e0c214694e42189233d274b52dfd07e247790b7
:
name: catch2-examples
version: 3.7.1
project: catch2
summary: Catch2 Examples
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-examples

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-examples-3.7.1.tar.gz
sha256sum: cd2d6ab0a526092758c23e4b5799cf4d2dc6534bca8ef17b81218a860d522303
:
name: catch2-tests
version: 2.13.6+2
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.6/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
# C++14 required as the latest c++ version.
# C++17 deprecates and C++20 removes some std types
cxx.std = 14
using c
using cxx

h{*}  : extension = h
hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-2.13.6+2.tar.gz
sha256sum: a9ddc3f29d08e2c5df70270a7e26e38225ccb354594800b1e05c4df1ee8b9f2c
:
name: catch2-tests
version: 2.13.7
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.7/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
# C++14 required as the latest c++ version.
# C++17 deprecates and C++20 removes some std types
cxx.std = 14
using c
using cxx

h{*}  : extension = h
hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-2.13.7.tar.gz
sha256sum: 791aece3c0810f93575ccf1dee0c34d5d418131c1444828083fb7815bd576851
:
name: catch2-tests
version: 2.13.8
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.8/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
# C++14 required as the latest c++ version.
# C++17 deprecates and C++20 removes some std types
cxx.std = 14
using c
using cxx

h{*}  : extension = h
hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-2.13.8.tar.gz
sha256sum: 59a7efb0828153ad650706bf63a14a3accb7ba012a774ee2f01786c2e29e495f
:
name: catch2-tests
version: 2.13.9+1
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![catch logo](artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=v2.x)](http\
s://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/v2.x/graph/badge.svg\
)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wan\
dbox.org/permlink/6JUH8Eybx4CtvkJS)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


<a href="https://github.com/catchorg/Catch2/releases/download/v2.13.9/catch.h\
pp">The latest version of the single header can be downloaded directly using\
 this link</a>

## Catch2 is released!

If you've been using an earlier version of Catch, please see the
Breaking Changes section of [the release notes](https://github.com/catchorg/C\
atch2/releases/tag/v2.0.1)
before moving to Catch2. You might also like to read [this blog\
 post](https://levelofindirection.com/blog/catch2-released.html) for more\
 details.

## What's the Catch?

Catch2 is a multi-paradigm test framework for C++. which also supports
Objective-C (and maybe C).
It is primarily distributed as a single header file, although certain
extensions may require additional headers.

## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details

## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [the dedicated Google Groups\
 forum](https://groups.google.com/forum/?fromgroups#!forum/catch-forum) or\
 our [Discord](https://discord.gg/4CWS9zD)
* See [who else is using Catch2](docs/opensource-users.md#top)

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
# C++14 required as the latest c++ version.
# C++17 deprecates and C++20 removes some std types
cxx.std = 14
using c
using cxx

h{*}  : extension = h
hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-2.13.9+1.tar.gz
sha256sum: bf2a893730822e9d3b1ede453a4b8dc3e8af51f886c5c24f1e6ba8d618b4d2c9
:
name: catch2-tests
version: 3.0.1
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/9x9qoM)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What's the Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Tests autoregister themselves and do not have to be named with valid
identifiers, assertions look like normal C++ code, and sections provide
a nice way to share set-up and tear-down code in tests.


## Catch2 v3 is being developed!

You are on the `devel` branch, where the next major version, v3, of
Catch2 is being developed. As it is a significant rework, you will
find that parts of this documentation are likely still stuck on v2.

For stable (and documentation-matching) version of Catch2, [go to the
`v2.x` branch](https://github.com/catchorg/Catch2/tree/v2.x).

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
build-exclude: **mingw**; Issue with upstream when compiling SelfTest with\
 MinGW see upstream issue #2447
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
# C++14 required as the latest c++ version.
# C++17 deprecates and C++20 removes some std types
cxx.std = 14
using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-3.0.1.tar.gz
sha256sum: 595c51d1807ea10aa5edfcbd9e0064f03fa59e20ae5ca0fd1c8eba31db476521
:
name: catch2-tests
version: 3.1.0
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What's the Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Tests autoregister themselves and do not have to be named with valid
identifiers, assertions look like normal C++ code, and sections provide
a nice way to share set-up and tear-down code in tests.


## Catch2 v3 is being developed!

You are on the `devel` branch, where the next major version, v3, of
Catch2 is being developed. As it is a significant rework, you will
find that parts of this documentation are likely still stuck on v2.

For stable (and documentation-matching) version of Catch2, [go to the
`v2.x` branch](https://github.com/catchorg/Catch2/tree/v2.x).

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
build-include: *-msvc*-static*
build-exclude: *-*msvc**; Builds only as static lib with msvc. See\
 https://github.com/catchorg/Catch2/issues/2482#issue-1313643759
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-3.1.0.tar.gz
sha256sum: ef648ae77ba40561aef84bac45f77e697d7ca56639d4081722a2fcbb3c80ddc8
:
name: catch2-tests
version: 3.3.2
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-3.3.2.tar.gz
sha256sum: 33a955ca92cd5e1c44247fd256f7c11703560b879ca8af509a11e8db24098ae4
:
name: catch2-tests
version: 3.5.1+1
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
requires: ? ; c++2b option doesn't work with clang
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-3.5.1+1.tar.gz
sha256sum: f76fa958ad00ff0681495fced1f6623f4deeca3e3ceb6821e575c9d9fc78f378
:
name: catch2-tests
version: 3.7.1
project: catch2
summary: Catch2 test package
license: BSL-1.0
description:
\
<a id="top"></a>
![Catch2 logo](data/artwork/catch2-logo-small-with-background.png)

[![Github Releases](https://img.shields.io/github/release/catchorg/catch2.svg\
)](https://github.com/catchorg/catch2/releases)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-simple-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions\
/workflows/linux-simple-builds.yml)
[![Linux build status](https://github.com/catchorg/Catch2/actions/workflows/l\
inux-other-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/\
workflows/linux-other-builds.yml)
[![MacOS build status](https://github.com/catchorg/Catch2/actions/workflows/m\
ac-builds.yml/badge.svg)](https://github.com/catchorg/Catch2/actions/workflow\
s/mac-builds.yml)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/catchorg/\
Catch2?svg=true&branch=devel)](https://ci.appveyor.com/project/catchorg/catch\
2)
[![Code Coverage](https://codecov.io/gh/catchorg/Catch2/branch/devel/graph/ba\
dge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://god\
bolt.org/z/EdoY15q9G)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)


## What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also
provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural.
Test names do not have to be valid identifiers, assertions look like
normal C++ boolean expressions, and sections provide a nice and local way
to share set-up and tear-down code in tests.

**Example unit test**
```cpp
#include <catch2/catch_test_macros.hpp>

#include <cstdint>

uint32_t factorial( uint32_t number ) {
    return number <= 1 ? number : factorial(number-1) * number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( factorial( 1) == 1 );
    REQUIRE( factorial( 2) == 2 );
    REQUIRE( factorial( 3) == 6 );
    REQUIRE( factorial(10) == 3'628'800 );
}
```

**Example microbenchmark**
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>

#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number -\
 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);

    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
```

_Note that benchmarks are not run by default, so you need to run it explicitly
with the `[!benchmark]` tag._


## Catch2 v3 has been released!

You are on the `devel` branch, where the v3 version is being developed.
v3 brings a bunch of significant changes, the big one being that Catch2
is no longer a single-header library. Catch2 now behaves as a normal
library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into
account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at [our
documentation](docs/migrate-v2-to-v3.md#top). It provides a simple
guidelines on getting started, and collects most common migration
problems.

For the previous major version of Catch2 [look into the `v2.x` branch
here on GitHub](https://github.com/catchorg/Catch2/tree/v2.x).


## How to use it
This documentation comprises these three parts:

* [Why do we need yet another C++ Test Framework?](docs/why-catch.md#top)
* [Tutorial](docs/tutorial.md#top) - getting started
* [Reference section](docs/Readme.md#top) - all the details


## More
* Issues and bugs can be raised on the [Issue tracker on GitHub](https://gith\
ub.com/catchorg/Catch2/issues)
* For discussion or questions please use [our Discord](https://discord.gg/4CW\
S9zD)
* See who else is using Catch2 in [Open Source Software](docs/opensource-user\
s.md#top)
or [commercially](docs/commercial-users.md#top).

\
description-type: text/markdown;variant=GFM
url: https://github.com/catchorg/Catch2
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
requires: ? ; VC15 or later if targeting windows
requires: ? ; c++2b option doesn't work with clang
bootstrap-build:
\
project = catch2-tests

using config
using version
using dist
using test
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: catch2/catch2-tests-3.7.1.tar.gz
sha256sum: 609ef81ce416b4355f6b122a68dda56a3e5705541e628e326940b8b1d5134d6d
:
name: cli
version: 1.2.0
summary: Command line interface (CLI) compiler for C++
license: MIT
topics: C++, command line interface, source code generation, documentation\
 generation
description:
\
CLI is a Command Line Interface definition language for C++. This package
contains the compiler implementation for this language.

See the NEWS file for the user-visible changes from the previous release.

See the LICENSE file for distribution conditions.

See the INSTALL file for prerequisites and installation instructions.

See the doc/ directory for documentation.

The project page is at https://www.codesynthesis.com/projects/cli/.

Send questions, bug reports, or any other feedback to
cli-users@codesynthesis.com.

\
description-type: text/plain
changes:
\
Version 1.2.0

  * New option, --generate-merge, triggers the generation of the merge()
    function which can be used to merge several already parsed options class
    instances, for example, to implement option appending/overriding.

  * New option, --generate-specifier, triggers the generation of functions for
    determining whether the option was specified on the command line.

  * New option, --suppress-undocumented, suppresses the generation of
    documentation entries for undocumented options.

  * New option, --cli-namespace, allows changing of the namespace for the
    generated CLI support types.

  * The argv_file_scanner now supports double and single-quoting option values
    in option files. This is useful to preserve leading and trailing
    whitespaces as well as to specify empty values.

  * The argv_file_scanner now supports multiple file options as well as file
    search callbacks.

  * New option, --generate-dep, triggers the generation of the make dependency
    information. Other related new options: --dep-suffix, --dep-file.

  * Support for std::multimap as an option type in addition to std::map.

Version 1.1.0

  * Support for option documentation. Option documentation is used to print
    the usage information as well as to generate the program documentation in
    the HTML and man page formats. For details, see Sections 2.5, "Adding
    Documentation" and 3.3, "Option Documentation" in the Getting Started
    Guide. New CLI compiler command line options related to this feature:

    --suppress-usage
    --long-usage
    --option-length
    --generate-cxx
    --generate-man
    --generate-html
    --man-prologue
    --man-epilogue
    --html-prologue
    --html-epilogue
    --man-suffix
    --html-suffix
    --class
    --stdout

    The CLI compiler usage, HTML documentation, and man page are\
 auto-generated
    using this feature.

  * New option, --generate-modifier, triggers the generation of the option
    value modifiers in addition to the accessors.

  * Support for erasing the parsed elements from the argc/argv array. See
    Section 3.1, "Option Class Definition" in the Getting Started Guide for
    more information.

  * New scanner interface. Starting with this version, the option class has
    a new constructor which accepts an abstract scanner interface. See Section
    3.1, "Option Class Definition" in the Getting Started Guide for more
    information.

  * New option, --generate-file-scanner, triggers the generation of the
    argv_file_scanner scanner implementation which provides support for
    reading command line arguments from the argv array as well as files
    specified with command line options. For more information see Section
    3.1, "Option Class Definition" in the Getting Started Guide as well as
    the 'file' example.

  * New option, --options-file, allows additional CLI command line options
    to be provided in files (implemented using argv_file_scanner).

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/projects/cli/
doc-url: https://www.codesynthesis.com/projects/cli/doc/guide/
src-url: https://git.codesynthesis.com/cgit/cli/cli/tree/cli/
email: cli-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libcutl ^1.11.0-
requires: c++14
requires: host
tests: * cli-tests == 1.2.0
examples: * cli-examples == 1.2.0
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = cli

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

# Note that we cannot install the development build. This is due to both the
# bootstrap cli (which we need to run) and the final cli (which we need to
# install) depending on libcutl (so we need it to be both "for-install" and
# "for-run"). Nor can we run such final cli to generate the man pages.
#
config [bool] config.cli.develop ?= false

develop = $config.cli.develop

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

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $cxx.target

# Extract the copyright notice from the LICENSE file.
#
# Note that cat is a builtin which means this is both portable and fast.
#
if ($build.mode != 'skeleton')
  copyright = $process.run_regex(cat $src_root/LICENSE,    \\
                                 'Copyright \(c\) (.+)\.', \\
                                 '\1')

\
location: cli/cli-1.2.0.tar.gz
sha256sum: 86f79382b61269915b204e30b8e13d66634eb1dd4034c42bf7015d18ab50b572
:
name: cli
version: 1.2.1
summary: Command line interface (CLI) compiler for C++
license: MIT
topics: C++, command line interface, source code generation, documentation\
 generation
description:
\
CLI is a Command Line Interface definition language for C++. This package
contains the compiler implementation for this language.

See the NEWS file for the user-visible changes from the previous release.

See the LICENSE file for distribution conditions.

See the INSTALL file for prerequisites and installation instructions.

See the doc/ directory for documentation.

The project page is at https://www.codesynthesis.com/projects/cli/.

Send questions, bug reports, or any other feedback to
cli-users@codesynthesis.com.

\
description-type: text/plain
changes:
\
Version 1.2.0

  * New option, --generate-merge, triggers the generation of the merge()
    function which can be used to merge several already parsed options class
    instances, for example, to implement option appending/overriding.

  * New option, --generate-specifier, triggers the generation of functions for
    determining whether the option was specified on the command line.

  * New option, --suppress-undocumented, suppresses the generation of
    documentation entries for undocumented options.

  * New option, --cli-namespace, allows changing of the namespace for the
    generated CLI support types.

  * The argv_file_scanner now supports double and single-quoting option values
    in option files. This is useful to preserve leading and trailing
    whitespaces as well as to specify empty values.

  * The argv_file_scanner now supports multiple file options as well as file
    search callbacks.

  * New option, --generate-dep, triggers the generation of the make dependency
    information. Other related new options: --dep-suffix, --dep-file.

  * Support for std::multimap as an option type in addition to std::map.

Version 1.1.0

  * Support for option documentation. Option documentation is used to print
    the usage information as well as to generate the program documentation in
    the HTML and man page formats. For details, see Sections 2.5, "Adding
    Documentation" and 3.3, "Option Documentation" in the Getting Started
    Guide. New CLI compiler command line options related to this feature:

    --suppress-usage
    --long-usage
    --option-length
    --generate-cxx
    --generate-man
    --generate-html
    --man-prologue
    --man-epilogue
    --html-prologue
    --html-epilogue
    --man-suffix
    --html-suffix
    --class
    --stdout

    The CLI compiler usage, HTML documentation, and man page are\
 auto-generated
    using this feature.

  * New option, --generate-modifier, triggers the generation of the option
    value modifiers in addition to the accessors.

  * Support for erasing the parsed elements from the argc/argv array. See
    Section 3.1, "Option Class Definition" in the Getting Started Guide for
    more information.

  * New scanner interface. Starting with this version, the option class has
    a new constructor which accepts an abstract scanner interface. See Section
    3.1, "Option Class Definition" in the Getting Started Guide for more
    information.

  * New option, --generate-file-scanner, triggers the generation of the
    argv_file_scanner scanner implementation which provides support for
    reading command line arguments from the argv array as well as files
    specified with command line options. For more information see Section
    3.1, "Option Class Definition" in the Getting Started Guide as well as
    the 'file' example.

  * New option, --options-file, allows additional CLI command line options
    to be provided in files (implemented using argv_file_scanner).

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/projects/cli/
doc-url: https://www.codesynthesis.com/projects/cli/doc/guide/
src-url: https://git.codesynthesis.com/cgit/cli/cli/tree/cli/
email: cli-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
depends: libcutl ^1.11.0-
requires: c++14
requires: host
tests: * cli-tests == 1.2.1
examples: * cli-examples == 1.2.1
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = cli

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

# Note that we cannot install the development build. This is due to both the
# bootstrap cli (which we need to run) and the final cli (which we need to
# install) depending on libcutl (so we need it to be both "for-install" and
# "for-run"). Nor can we run such final cli to generate the man pages.
#
config [bool] config.cli.develop ?= false

develop = $config.cli.develop

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

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $cxx.target

# Extract the copyright notice from the LICENSE file.
#
# Note that cat is a builtin which means this is both portable and fast.
#
if ($build.mode != 'skeleton')
  copyright = $process.run_regex(cat $src_root/LICENSE,    \\
                                 'Copyright \(c\) (.+)\.', \\
                                 '\1')

\
location: cli/cli-1.2.1.tar.gz
sha256sum: c0cbd5abfc888b00142429c3091b07d9f9108b6a05926a1f6d049f27ba55b540
:
name: cli-examples
version: 1.2.0
project: cli
summary: Examples of using the CLI language and compiler for C++
license: MIT
description:
\
This package contains a number of examples that show how to use the CLI
language and compiler to implement command line interface parsing in C++.
The following list gives an overview of each example. See the README files
in example directories for more information on each example.

hello
  A simple "Hello, world!" example that shows how to implement a very basic
  command line interface using CLI.

features
  Shows how to use various features of the CLI language.

file
  Shows how to allow the users of your application to supply options in 
  files in addition to the command line.

\
description-type: text/plain
url: https://www.codesynthesis.com/projects/cli/
doc-url: https://www.codesynthesis.com/projects/cli/doc/guide/
src-url: https://git.codesynthesis.com/cgit/cli/cli/tree/cli-examples/
email: cli-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
requires: c++14
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = cli-examples

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

if ($build.mode != 'skeleton')
  using cli

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# Specify the test target for cross-testing.
#
test.target = $cxx.target

\
location: cli/cli-examples-1.2.0.tar.gz
sha256sum: 68575c4a925f878fb23bd86536acee5fcc3ec88122d362480882f1b6f1f31c70
:
name: cli-examples
version: 1.2.1
project: cli
summary: Examples of using the CLI language and compiler for C++
license: MIT
description:
\
This package contains a number of examples that show how to use the CLI
language and compiler to implement command line interface parsing in C++.
The following list gives an overview of each example. See the README files
in example directories for more information on each example.

hello
  A simple "Hello, world!" example that shows how to implement a very basic
  command line interface using CLI.

features
  Shows how to use various features of the CLI language.

file
  Shows how to allow the users of your application to supply options in 
  files in addition to the command line.

\
description-type: text/plain
url: https://www.codesynthesis.com/projects/cli/
doc-url: https://www.codesynthesis.com/projects/cli/doc/guide/
src-url: https://git.codesynthesis.com/cgit/cli/cli/tree/cli-examples/
email: cli-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
requires: c++14
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = cli-examples

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

if ($build.mode != 'skeleton')
  using cli

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# Specify the test target for cross-testing.
#
test.target = $cxx.target

\
location: cli/cli-examples-1.2.1.tar.gz
sha256sum: 90183ef498d9bb39b73c43ad6d4383f4d3712e7f978f3bb798a545201d9a032d
:
name: cli-tests
version: 1.2.0
project: cli
summary: Tests for the CLI compiler for C++
license: MIT
description:
\
This package contains tests for the CLI compiler for C++.

See the LICENSE file for distribution conditions.

The project page is at http://codesynthesis.com/projects/cli/.

Send questions, bug reports, or any other feedback to
cli-users@codesynthesis.com.

\
description-type: text/plain
url: https://www.codesynthesis.com/projects/cli/
doc-url: https://www.codesynthesis.com/projects/cli/doc/guide/
src-url: https://git.codesynthesis.com/cgit/cli/cli/tree/cli-tests/
email: cli-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
requires: c++14
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = cli-tests

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

if ($build.mode != 'skeleton')
  using cli

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# Specify the test target for cross-testing.
#
test.target = $cxx.target

\
location: cli/cli-tests-1.2.0.tar.gz
sha256sum: 07f517dc41937b72238538bf729b94a1aba2da1c8e3548a68510040af5363152
:
name: cli-tests
version: 1.2.1
project: cli
summary: Tests for the CLI compiler for C++
license: MIT
description:
\
This package contains tests for the CLI compiler for C++.

See the LICENSE file for distribution conditions.

The project page is at http://codesynthesis.com/projects/cli/.

Send questions, bug reports, or any other feedback to
cli-users@codesynthesis.com.

\
description-type: text/plain
url: https://www.codesynthesis.com/projects/cli/
doc-url: https://www.codesynthesis.com/projects/cli/doc/guide/
src-url: https://git.codesynthesis.com/cgit/cli/cli/tree/cli-tests/
email: cli-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
requires: c++14
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = cli-tests

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

if ($build.mode != 'skeleton')
  using cli

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# Specify the test target for cross-testing.
#
test.target = $cxx.target

\
location: cli/cli-tests-1.2.1.tar.gz
sha256sum: caffddf1129b8f914821f3a03a31d601b9ca43d62ca3c37a344cfb4ebfc78bbe
:
name: cli11
version: 2.2.0
summary: CLI11 is a command line parser for C++11 and beyond that provides a\
 rich feature set with a simple and intuitive interface.
license: BSD-3-Clause
description:
\
# CLI11: Command line parser for C++11

![CLI11 Logo](./docs/CLI11_300.png)

[![Build Status Azure][azure-badge]][azure]
[![Actions Status][actions-badge]][actions-link]
[![Build Status AppVeyor][appveyor-badge]][appveyor]
[![Code Coverage][codecov-badge]][codecov]
[![Codacy Badge][codacy-badge]][codacy-link]
[![License: BSD][license-badge]](./LICENSE)
[![DOI][doi-badge]][doi-link]

[![Gitter chat][gitter-badge]][gitter]
[![Latest GHA release][releases-badge]][github releases]
[![Latest release][repology-badge]][repology]
[![Conan.io][conan-badge]][conan-link]
[![Conda Version][conda-badge]][conda-link]
[![Try CLI11 2.1 online][wandbox-badge]][wandbox-link]

[What's new](./CHANGELOG.md) •
[Documentation][gitbook] •
[API Reference][api-docs]

CLI11 is a command line parser for C++11 and beyond that provides a rich\
 feature set with a simple and intuitive interface.

## Table of Contents

* [Background](#background)
  * [Introduction](#introduction)
  * [Why write another CLI parser?](#why-write-another-cli-parser)
  * [Other parsers](#other-parsers)
  * [Features not supported by this library](#features-not-supported-by-this-\
library)
* [Install](#install)
* [Usage](#usage)
  * [Adding options](#adding-options)
    * [Option types](#option-types)
    * [Example](#example)
    * [Option options](#option-options)
    * [Validators](#validators)
      * [Transforming Validators](#transforming-validators)
      * [Validator operations](#validator-operations)
      * [Custom Validators](#custom-validators)
      * [Querying Validators](#querying-validators)
      * [Getting Results](#getting-results)
  * [Subcommands](#subcommands)
    * [Subcommand options](#subcommand-options)
    * [Option groups](#option-groups)
    * [Callbacks](#callbacks)
  * [Configuration file](#configuration-file)
  * [Inheriting defaults](#inheriting-defaults)
  * [Formatting](#formatting)
  * [Subclassing](#subclassing)
  * [How it works](#how-it-works)
  * [Utilities](#utilities)
  * [Other libraries](#other-libraries)
* [API](#api)
* [Examples](#Examples)
* [Contribute](#contribute)
* [License](#license)

Features that were added in the last released minor version are marked with\
 "🆕". Features only available in main are marked with "🚧".

## Background

### Introduction

CLI11 provides all the features you expect in a powerful command line parser,\
 with a beautiful, minimal syntax and no dependencies beyond C++11. It is\
 header only, and comes in a single file form for easy inclusion in projects.\
 It is easy to use for small projects, but powerful enough for complex\
 command line projects, and can be customized for frameworks.
It is tested on [Azure][] and [GitHub Actions][actions-link], and was\
 originally used by the [GooFit GPU fitting framework][goofit]. It was\
 inspired by [`plumbum.cli`][plumbum] for Python. CLI11 has a user friendly\
 introduction in this README, a more in-depth tutorial [GitBook][], as well\
 as [API documentation][api-docs] generated by Travis.
See the [changelog](./CHANGELOG.md) or [GitHub Releases][] for details for\
 current and past releases. Also see the [Version 1.0 post][], [Version 1.3\
 post][], [Version 1.6 post][], or [Version 2.0 post][] for more information.

You can be notified when new releases are made by subscribing to\
 <https://github.com/CLIUtils/CLI11/releases.atom> on an RSS reader, like\
 Feedly, or use the releases mode of the GitHub watching tool.

### Why write another CLI parser?

An acceptable CLI parser library should be all of the following:

* Easy to include (i.e., header only, one file if possible, **no external\
 requirements**).
* Short, simple syntax: This is one of the main reasons to use a CLI parser,\
 it should make variables from the command line nearly as easy to define as\
 any other variables. If most of your program is hidden in CLI parsing, this\
 is a problem for readability.
* C++11 or better: Should work with GCC 4.8+ (default on CentOS/RHEL 7),\
 Clang 3.4+, AppleClang 7+, NVCC 7.0+, or MSVC 2015+.
* Work on Linux, macOS, and Windows.
* Well tested on all common platforms and compilers. "Well" is defined as\
 having good coverage measured by [CodeCov][].
* Clear help printing.
* Nice error messages.
* Standard shell idioms supported naturally, like grouping flags, a\
 positional separator, etc.
* Easy to execute, with help, parse errors, etc. providing correct exit and\
 details.
* Easy to extend as part of a framework that provides "applications" to users.
* Usable subcommand syntax, with support for multiple subcommands, nested\
 subcommands, option groups, and optional fallthrough (explained later).
* Ability to add a configuration file (`TOML`, `INI`, or custom format), and\
 produce it as well.
* Produce real values that can be used directly in code, not something you\
 have pay compute time to look up, for HPC applications.
* Work with common types, simple custom types, and extensible to exotic types.
* Permissively licensed.

### Other parsers

<details><summary>The major CLI parsers for C++ include, with my biased\
 opinions: (click to expand)</summary><p>

| Library                             | My biased opinion                    \
                                                                             \
                                                                             \
                                                                             \
                                                                             \
                                                                          |
| ----------------------------------- | -------------------------------------\
-----------------------------------------------------------------------------\
-----------------------------------------------------------------------------\
-----------------------------------------------------------------------------\
-----------------------------------------------------------------------------\
------------------------------------------------------------------------- |
| [Boost Program Options][]           | A great library if you already depend\
 on Boost, but its pre-C++11 syntax is really odd and setting up the correct\
 call in the main function is poorly documented (and is nearly a page of\
 code). A simple wrapper for the Boost library was originally developed, but\
 was discarded as CLI11 became more powerful. The idea of capturing a value\
 and setting it originated with Boost PO. [See this comparison.][cli11-po-com\
pare] |
| [The Lean Mean C++ Option Parser][] | One header file is great, but the\
 syntax is atrocious, in my opinion. It was quite impractical to wrap the\
 syntax or to use in a complex project. It seems to handle standard parsing\
 quite well.                                                                 \
                                                                             \
                                                                             \
       |
| [TCLAP][]                           | The not-quite-standard command line\
 parsing causes common shortcuts to fail. It also seems to be poorly\
 supported, with only minimal bugfixes accepted. Header only, but in quite a\
 few files. Has not managed to get enough support to move to GitHub yet. No\
 subcommands. Produces wrapped values.                                       \
                                                                             \
           |
| [Cxxopts][]                         | C++11, single file, and nice CMake\
 support, but requires regex, therefore GCC 4.8 (CentOS 7 default) does not\
 work. Syntax closely based on Boost PO, so not ideal but familiar.          \
                                                                             \
                                                                             \
                                                                             \
  |
| [DocOpt][]                          | Completely different approach to\
 program options in C++11, you write the docs and the interface is generated.\
 Too fragile and specialized.                                                \
                                                                             \
                                                                             \
                                                                             \
  |

After I wrote this, I also found the following libraries:

| Library                 | My biased opinion                                \
                                                                             \
                                                       |
| ----------------------- | -------------------------------------------------\
-----------------------------------------------------------------------------\
------------------------------------------------------ |
| [GFlags][]              | The Google Commandline Flags library. Uses macros\
 heavily, and is limited in scope, missing things like subcommands. It\
 provides a simple syntax and supports config files/env vars. |
| [GetOpt][]              | Very limited C solution with long, convoluted\
 syntax. Does not support much of anything, like help generation. Always\
 available on UNIX, though (but in different flavors).          |
| [ProgramOptions.hxx][]  | Interesting library, less powerful and no\
 subcommands. Nice callback system.                                          \
                                                               |
| [Args][]                | Also interesting, and supports subcommands. I\
 like the optional-like design, but CLI11 is cleaner and provides direct\
 value access, and is less verbose.                             |
| [Argument Aggregator][] | I'm a big fan of the [fmt][] library, and the\
 try-catch statement looks familiar.  :thumbsup: Doesn't seem to support\
 subcommands.                                                   |
| [Clara][]               | Simple library built for the excellent [Catch][]\
 testing framework. Unique syntax, limited scope.                            \
                                                        |
| [Argh!][]               | Very minimalistic C++11 parser, single header.\
 Don't have many features. No help generation?!?! At least it's\
 exception-free.                                                        |
| [CLI][]                 | Custom language and parser. Huge build-system\
 overkill for very little benefit. Last release in 2009, but still\
 occasionally active.                                                 |
| [argparse][]            | C++17 single file argument parser. Design seems\
 similar to CLI11 in some ways. The author has several other interesting\
 projects.                                                    |
| [lyra][]                | a simple header only parser with composable\
 options.  Might work well for simple standardized parsing                   \
  |

See [Awesome C++][] for a less-biased list of parsers. You can also find\
 other single file libraries at [Single file libs][].

</p></details>
<br/>

None of these libraries fulfill all the above requirements, or really even\
 come close. As you probably have already guessed, CLI11 does.
So, this library was designed to provide a great syntax, good compiler\
 compatibility, and minimal installation fuss.

### Features not supported by this library

There are some other possible "features" that are intentionally not supported\
 by this library:

* Non-standard variations on syntax, like `-long` options. This is\
 non-standard and should be avoided, so that is enforced by this library.
* Completion of partial options, such as Python's `argparse` supplies for\
 incomplete arguments. It's better not to guess. Most third party command\
 line parsers for python actually reimplement command line parsing rather\
 than using argparse because of this perceived design flaw (recent versions\
 do have an option to disable it).
* Autocomplete: This might eventually be added to both Plumbum and CLI11, but\
 it is not supported yet.
* Wide strings / unicode: Since this uses the standard library only, it might\
 be hard to properly implement, but I would be open to suggestions in how to\
 do this.

## Install

To use, there are several methods:

* All-in-one local header: Copy `CLI11.hpp` from the [most recent\
 release][github releases] into your include directory, and you are set. This\
 is combined from the source files  for every release. This includes the\
 entire command parser library, but does not include separate utilities (like\
 `Timer`, `AutoTimer`). The utilities are completely self contained and can\
 be copied separately.
* All-in-one global header: Like above, but copying the file to a shared\
 folder location like `/opt/CLI11`. Then, the C++ include path has to be\
 extended to point at this folder. With CMake, use `include_directories(/opt/\
CLI11)`
* Local headers and target: Use `CLI/*.hpp` files. You could check out the\
 repository as a git submodule, for example. With CMake, you can use\
 `add_subdirectory` and the `CLI11::CLI11` interface target when linking. If\
 not using a submodule, you must ensure that the copied files are located\
 inside the same tree directory than your current project, to prevent an\
 error with CMake and `add_subdirectory`.
* Global headers: Use `CLI/*.hpp` files stored in a shared folder. You could\
 check out the git repository to a system-wide folder, for example `/opt/`.\
 With CMake, you could add to the include path via:

```bash
if(NOT DEFINED CLI11_DIR)
set (CLI11_DIR "/opt/CLI11" CACHE STRING "CLI11 git repository")
endif()
include_directories(${CLI11_DIR}/include)
```

And then in the source code (adding several headers might be needed to\
 prevent linker errors):

```cpp
#include "CLI/App.hpp"
#include "CLI/Formatter.hpp"
#include "CLI/Config.hpp"
```

* Global headers and target: configuring and installing the project is\
 required for linking CLI11 to your project in the same way as you would do\
 with any other external library. With CMake, this step allows using\
 `find_package(CLI11 CONFIG REQUIRED)` and then using the `CLI11::CLI11`\
 target when linking. If `CMAKE_INSTALL_PREFIX` was changed during install to\
 a specific folder like `/opt/CLI11`, then you have to pass\
 `-DCLI11_DIR=/opt/CLI11` when building your current project. You can also\
 use [Conan.io][conan-link] or [Hunter][].
    (These are just conveniences to allow you to use your favorite method of\
 managing packages; it's just header only so including the correct path and
    using C++11 is all you really need.)
* Via FetchContent in CMake 3.14+ (or 3.11+ with more work): you can add this\
 with fetch-content, then use the `CLI11::CLI11` target as above, and CMake\
 will download the project in the configure stage:

```cmake
include(FetchContent)
FetchContent_Declare(
  cli11
  GIT_REPOSITORY https://github.com/CLIUtils/CLI11
  GIT_TAG        v2.2.0
)

FetchContent_MakeAvailable(cli11)
```

It is highly recommended that you use the git hash for `GIT_TAG` instead of a\
 tag or branch, as that will both be more secure, as well as faster to\
 reconfigure - CMake will not have to reach out to the internet to see if the\
 tag moved. You can also download just the single header file from the\
 releases using `file(DOWNLOAD`.

To build the tests, checkout the repository and use CMake:

```bash
cmake -S . -B build
cmake --build build
CTEST_OUTPUT_ON_FAILURE=1 cmake --build build -t test
```

<details><summary>Note: Special instructions for GCC 8</summary><p>

If you are using GCC 8 and using it in C++17 mode with CLI11.  CLI11 makes\
 use of the `<filesystem>` header if available, but specifically for this\
 compiler, the `filesystem` library is separate from the standard library and\
 needs to be linked separately. So it is available but CLI11 doesn't use it\
 by default.

Specifically `libstdc++fs` needs to be added to the linking list and\
 `CLI11_HAS_FILESYSTEM=1` has to be defined.  Then the filesystem variant of\
 the Validators could be used on GCC 8.  GCC 9+ does not have this issue so\
 the `<filesystem>` is used by default.

There may also be other cases where a specific library needs to be linked.

Defining `CLI11_HAS_FILESYSTEM=0`  which will remove the usage and hence any\
 linking issue.

In some cases certain clang compilations may require linking against\
 `libc++fs`.  These situations have not been encountered so the specific\
 situations requiring them are unknown yet.

</p></details>
</br>

## Usage

### Adding options

To set up, add options, and run, your main function will look something like\
 this:

```cpp
int main(int argc, char** argv) {
    CLI::App app{"App description"};

    std::string filename = "default";
    app.add_option("-f,--file", filename, "A help string");

    CLI11_PARSE(app, argc, argv);
    return 0;
}
```

<details><summary>Note: If you don't like macros, this is what that macro\
 expands to: (click to expand)</summary><p>

```cpp
try {
    app.parse(argc, argv);
} catch (const CLI::ParseError &e) {
    return app.exit(e);
}
```

The try/catch block ensures that `-h,--help` or a parse error will exit with\
 the correct return code (selected from `CLI::ExitCodes`). (The return here\
 should be inside `main`). You should not assume that the option values have\
 been set inside the catch block; for example, help flags intentionally\
 short-circuit all other processing for speed and to ensure required options\
 and the like do not interfere.

</p></details>
</br>

The initialization is just one line, adding options is just two each. The\
 parse macro is just one line (or 5 for the contents of the macro).  After\
 the app runs, the filename will be set to the correct value if it was\
 passed, otherwise it will be set to the default. You can check to see if\
 this was passed on the command line with `app.count("--file")`.

#### Option types

While all options internally are the same type, there are several ways to add\
 an option depending on what you need. The supported values are:

```cpp
// Add options
app.add_option(option_name, help_str="")

app.add_option(option_name,
               variable_to_bind_to, // bool, char(see note), int, float,\
 vector, enum, std::atomic, or string-like, or anything with a defined\
 conversion from a string or that takes an int, double, or string in a\
 constructor. Also allowed are tuples, std::array or std::pair. Also\
 supported are complex numbers, wrapper types, and containers besides vectors\
 of any other supported type.
               help_string="")

app.add_option_function<type>(option_name,
               function <void(const type &value)>, // type can be any type\
 supported by add_option
               help_string="")

// char as an option type is supported before 2.0 but in 2.0 it defaulted to\
 allowing single non numerical characters in addition to the numeric values.

// There is a template overload which takes two template parameters the first\
 is the type of object to assign the value to, the second is the conversion\
 type.  The conversion type should have a known way to convert from a string,\
 such as any of the types that work in the non-template version.  If XC is a\
 std::pair and T is some non pair type.  Then a two argument constructor for\
 T is called to assign the value.  For tuples or other multi element types,\
 XC must be a single type or a tuple like object of the same size as the\
 assignment type
app.add_option<typename T, typename XC>(option_name,
               T &output, // output must be assignable or constructible from\
 a value of type XC
               help_string="")

// Add flags
app.add_flag(option_name,
             help_string="")

app.add_flag(option_name,
             variable_to_bind_to, // bool, int, float, complex, containers,\
 enum, std::atomic, or string-like, or any singular object with a defined\
 conversion from a string like add_option
             help_string="")

app.add_flag_function(option_name,
             function <void(std::int64_t count)>,
             help_string="")

app.add_flag_callback(option_name,function<void(void)>,help_string="")

// Add subcommands
App* subcom = app.add_subcommand(name, description);

Option_group *app.add_option_group(name,description);
```

An option name may start with any character except ('-', ' ', '\n', and '!').\
 For long options, after the first character all characters are allowed\
 except ('=',':','{',' ', '\n'). For the `add_flag*` functions '{' and '!'\
 have special meaning which is why they are not allowed. Names are given as a\
 comma separated string, with the dash or dashes. An option or flag can have\
 as many names as you want, and afterward, using `count`, you can use any of\
 the names, with dashes as needed, to count the options. One of the names is\
 allowed to be given without proceeding dash(es); if present the option is a\
 positional option, and that name will be used on the help line for its\
 positional form.

The `add_option_function<type>(...` function will typically require the\
 template parameter be given unless a `std::function` object with an exact\
 match is passed.  The type can be any type supported by the `add_option`\
 function. The function should throw an error (`CLI::ConversionError` or\
 `CLI::ValidationError` possibly) if the value is not valid.

The two parameter template overload can be used in cases where you want to\
 restrict the input such as

```cpp
double val
app.add_option<double,unsigned int>("-v",val);
```

which would first verify the input is convertible to an `unsigned int` before\
 assigning it.  Or using some variant type

```cpp
using vtype=std::variant<int, double, std::string>;
 vtype v1;
app.add_option<vtype,std:string>("--vs",v1);
app.add_option<vtype,int>("--vi",v1);
app.add_option<vtype,double>("--vf",v1);
```

otherwise the output would default to a string.  The `add_option` can be used\
 with any integral or floating point types, enumerations, or strings.  Or any\
 type that takes an int, double, or std\::string in an assignment operator or\
 constructor.  If an object can take multiple varieties of those, std::string\
 takes precedence, then double then int.    To better control which one is\
 used or to use another type for the underlying conversions use the two\
 parameter template to directly specify the conversion type.

Types such as (std or boost) `optional<int>`, `optional<double>`, and\
 `optional<string>` and any other wrapper types are supported directly. For\
 purposes of CLI11 wrapper types are those which `value_type` definition. \
 See [CLI11 Advanced Topics/Custom Converters][] for information on how you\
 can add your own converters for additional types.

Vector types can also be used in the two parameter template overload

```cpp
std::vector<double> v1;
app.add_option<std::vector<double>,int>("--vs",v1);
```

would load a vector of doubles but ensure all values can be represented as\
 integers.

Automatic direct capture of the default string is disabled when using the two\
 parameter template.  Use `set_default_str(...)` or `->default_function(std::\
string())` to set the default string or capture function directly for these\
 cases.

Flag options specified through the `add_flag*` functions allow a syntax for\
 the option names to default particular options to a false value or any other\
 value if some flags are passed.  For example:

```cpp
app.add_flag("--flag,!--no-flag",result,"help for flag");
```

specifies that if `--flag` is passed on the command line result will be true\
 or contain a value of 1. If `--no-flag` is
passed `result` will contain false or -1 if `result` is a signed integer\
 type, or 0 if it is an unsigned type.  An
alternative form of the syntax is more explicit: `"--flag,--no-flag{false}"`;\
 this is equivalent to the previous
example.  This also works for short form options `"-f,!-n"` or\
 `"-f,-n{false}"`. If `variable_to_bind_to` is anything but an integer value\
 the
default behavior is to take the last value given, while if\
 `variable_to_bind_to` is an integer type the behavior will be to sum
all the given arguments and return the result.  This can be modified if\
 needed by changing the `multi_option_policy` on each flag (this is not\
 inherited).
The default value can be any value. For example if you wished to define a\
 numerical flag:

```cpp
app.add_flag("-1{1},-2{2},-3{3}",result,"numerical flag")
```

Using any of those flags on the command line will result in the specified\
 number in the output.  Similar things can be done for string values, and\
 enumerations, as long as the default value can be converted to the given\
 type.

On a `C++14` compiler, you can pass a callback function directly to\
 `.add_flag`, while in C++11 mode you'll need to use `.add_flag_function` if\
 you want a callback function. The function will be given the number of times\
 the flag was passed. You can throw a relevant `CLI::ParseError` to signal a\
 failure.

#### Example

* `"one,-o,--one"`: Valid as long as not a flag, would create an option that\
 can be specified positionally, or with `-o` or `--one`
* `"this"` Can only be passed positionally
* `"-a,-b,-c"` No limit to the number of non-positional option names

The add commands return a pointer to an internally stored `Option`.
This option can be used directly to check for the count (`->count()`) after\
 parsing to avoid a string based lookup.

#### Option options

Before parsing, you can set the following options:

* `->required()`: The program will quit if this option is not present. This\
 is `mandatory` in Plumbum, but required options seems to be a more standard\
 term. For compatibility, `->mandatory()` also works.
* `->expected(N)`: Take `N` values instead of as many as possible, only for\
 vector args. If negative, require at least `-N`; end with `--` or another\
 recognized option or subcommand.
* `->expected(MIN,MAX)`: Set a range of expected values to accompany an\
 option.  `expected(0,1)` is the equivalent of making a flag.
* `->type_name(typename)`: Set the name of an Option's type (`type_name_fn`\
 allows a function instead)
* `->type_size(N)`: Set the intrinsic size of an option value. The parser\
 will require multiples of this number if negative. Most of the time this is\
 detected automatically though can be modified for specific use cases.
* `->type_size(MIN,MAX)`: Set the intrinsic size of an option to a range.
* `->needs(opt)`: This option requires another option to also be present, opt\
 is an `Option` pointer. Options can be removed from the `needs` with\
 `remove_needs(opt)`. The option can also be specified with a string\
 containing the name of the option
* `->excludes(opt)`: This option cannot be given with `opt` present, opt is\
 an `Option` pointer.  Can also be given as a string containing the name of\
 the option.  Options can be removed from the excludes list with\
 `->remove_excludes(opt)`
* `->envname(name)`: Gets the value from the environment if present and not\
 passed on the command line.
* `->group(name)`: The help group to put the option in. No effect for\
 positional options. Defaults to `"Options"`. `""` will not show up in the\
 help print (hidden).
* `->ignore_case()`: Ignore the case on the command line (also works on\
 subcommands, does not affect arguments).
* `->ignore_underscore()`: Ignore any underscores in the options names (also\
 works on subcommands, does not affect arguments). For example "option_one"\
 will match with "optionone".  This does not apply to short form options\
 since they only have one character
* `->disable_flag_override()`: From the command line long form flag options\
 can be assigned a value on the command line using the `=` notation\
 `--flag=value`. If this behavior is not desired, the `disable_flag_override(\
)` disables it and will generate an exception if it is done on the command\
 line.  The `=` does not work with short form flag options.
* `->allow_extra_args(true/false)`: If set to true the option will take an\
 unlimited number of arguments like a vector, if false it will limit the\
 number of arguments to the size of the type used in the option.  Default\
 value depends on the nature of the type use, containers default to true,\
 others default to false.
* `->delimiter(char)`: Allows specification of a custom delimiter for\
 separating single arguments into vector arguments, for example specifying\
 `->delimiter(',')` on an option would result in `--opt=1,2,3` producing 3\
 elements of a vector and the equivalent of --opt 1 2 3 assuming opt is a\
 vector value.
* `->description(str)`: Set/change the description.
* `->multi_option_policy(CLI::MultiOptionPolicy::Throw)`: Set the\
 multi-option policy. Shortcuts available: `->take_last()`,\
 `->take_first()`,`->take_all()`, and `->join()`. This will only affect\
 options expecting 1 argument or bool flags (which do not inherit their\
 default but always start with a specific policy). `->join(delim)` can also\
 be used to join with a specific delimiter. This equivalent to calling\
 `->delimiter(delim)` and `->join()`.  Valid values are `CLI::MultiOptionPoli\
cy::Throw`, `CLI::MultiOptionPolicy::Throw`, `CLI::MultiOptionPolicy::TakeLas\
t`, `CLI::MultiOptionPolicy::TakeFirst`, `CLI::MultiOptionPolicy::Join`,\
 `CLI::MultiOptionPolicy::TakeAll`, and `CLI::MultiOptionPolicy::Sum` 🚧.
* `->check(std::string(const std::string &), validator_name="",validator_desc\
ription="")`: Define a check function.  The function should return a non\
 empty string with the error message if the check fails
* `->check(Validator)`: Use a Validator object to do the check see\
 [Validators](#validators) for a description of available Validators and how\
 to create new ones.
* `->transform(std::string(std::string &), validator_name="",validator_descri\
ption=")`: Converts the input string into the output string, in-place in the\
 parsed options.
* `->transform(Validator)`: Uses a Validator object to do the transformation\
 see [Validators](#validators) for a description of available Validators and\
 how to create new ones.
* `->each(void(const std::string &)>`: Run this function on each value\
 received, as it is received. It should throw a `ValidationError` if an error\
 is encountered.
* `->configurable(false)`: Disable this option from being in a configuration\
 file.
* `->capture_default_str()`: Store the current value attached and display it\
 in the help string.
* `->default_function(std::string())`: Advanced: Change the function that\
 `capture_default_str()` uses.
* `->always_capture_default()`: Always run `capture_default_str()` when\
 creating new options. Only useful on an App's `option_defaults`.
* `->default_str(string)`:  Set the default string directly (NO VALIDATION OR\
 CALLBACKS).  This string will also be used as a default value if no\
 arguments are passed and the value is requested.
* `->default_val(value)`: Generate the default string from a value and\
 validate that the value is also valid.  For options that assign directly to\
 a value type the value in that type is also updated.  Value must be\
 convertible to a string(one of known types or have a stream operator). The\
 callback may be triggered if the `run_callback_for_default` is set.
* `->run_callback_for_default()`: This will force the option callback to be\
 executed or the variable set when the `default_val` is set.
* `->option_text(string)`: Sets the text between the option name and\
 description.
* `->force_callback()`: Causes the option callback or value set to be\
 triggered even if the option was not present in parsing.
* `->trigger_on_parse()`: If set, causes the callback and all associated\
 validation checks for the option to be executed when the option value is\
 parsed vs. at the end of all parsing. This could cause the callback to be\
 executed multiple times. Also works with positional options 🆕.

These options return the `Option` pointer, so you can chain them together,\
 and even skip storing the pointer entirely. The `each` function takes any\
 function that has the signature `void(const std::string&)`; it should throw\
 a `ValidationError` when validation fails. The help message will have the\
 name of the parent option prepended. Since `each`, `check` and `transform`\
 use the same underlying mechanism, you can chain as many as you want, and\
 they will be executed in order. Operations added through `transform` are\
 executed first in reverse order of addition, and `check` and `each` are run\
 following the transform functions in order of addition. If you just want to\
 see the unconverted values, use `.results()` to get the `std::vector<std::st\
ring>` of results.

On the command line, options can be given as:

* `-a` (flag)
* `-abc` (flags can be combined)
* `-f filename` (option)
* `-ffilename` (no space required)
* `-abcf filename` (flags and option can be combined)
* `--long` (long flag)
* `--long_flag=true` (long flag with equals to override default value)
* `--file filename` (space)
* `--file=filename` (equals)

If `allow_windows_style_options()` is specified in the application or\
 subcommand options can also be given as:

* `/a` (flag)
* `/f filename` (option)
* `/long` (long flag)
* `/file filename` (space)
* `/file:filename` (colon)
* `/long_flag:false` (long flag with : to override the default value)
  * Windows style options do not allow combining short options or values not\
 separated from the short option like with `-` options

Long flag options may be given with an `=<value>` to allow specifying a false\
 value, or some other value to the flag. See [config files](#configuration-fi\
le) for details on the values supported.  NOTE: only the `=` or `:` for\
 windows-style options may be used for this, using a space will result in the\
 argument being interpreted as a positional argument.  This syntax can\
 override the default values, and can be disabled by using\
 `disable_flag_override()`.

Extra positional arguments will cause the program to exit, so at least one\
 positional option with a vector is recommended if you want to allow\
 extraneous arguments.
If you set `.allow_extras()` on the main `App`, you will not get an error.\
 You can access the missing options using `remaining` (if you have\
 subcommands, `app.remaining(true)` will get all remaining options,\
 subcommands included).
If the remaining arguments are to processed by another `App` then the\
 function `remaining_for_passthrough()` can be used to get the remaining\
 arguments in reverse order such that `app.parse(vector)` works directly and\
 could even be used inside a subcommand callback.

You can access a vector of pointers to the parsed options in the original\
 order using `parse_order()`.
If `--` is present in the command line that does not end an unlimited option,\
 then
everything after that is positional only.

#### Validators
Validators are structures to check or modify inputs, they can be used to\
 verify that an input meets certain criteria or transform it into another\
 value.  They are added through the `check` or `transform` functions.  The\
 differences between the two function are that checks do not modify the input\
 whereas transforms can and are executed before any Validators added through\
 `check`.

CLI11 has several Validators built-in that perform some common checks

* `CLI::IsMember(...)`: Require an option be a member of a given set. See\
 [Transforming Validators](#transforming-validators) for more details.
* `CLI::Transformer(...)`: Modify the input using a map. See [Transforming\
 Validators](#transforming-validators) for more details.
* `CLI::CheckedTransformer(...)`: Modify the input using a map, and require\
 that the input is either in the set or already one of the outputs of the\
 set. See [Transforming Validators](#transforming-validators) for more\
 details.
* `CLI::AsNumberWithUnit(...)`: Modify the `<NUMBER> <UNIT>` pair by matching\
 the unit and multiplying the number by the corresponding factor. It can be\
 used as a base for transformers, that accept things like size values (`1\
 KB`) or durations (`0.33 ms`).
* `CLI::AsSizeValue(...)`: Convert inputs like `100b`, `42 KB`, `101 Mb`, `11\
 Mib` to absolute values. `KB` can be configured to be interpreted as 10^3 or\
 2^10.
* `CLI::ExistingFile`: Requires that the file exists if given.
* `CLI::ExistingDirectory`: Requires that the directory exists.
* `CLI::ExistingPath`: Requires that the path (file or directory) exists.
* `CLI::NonexistentPath`: Requires that the path does not exist.
* `CLI::FileOnDefaultPath`: 🆕 Best used as a transform, Will check that a\
 file exists either directly or in a default path and update the path\
 appropriately.  See [Transforming Validators](#transforming-validators) for\
 more details
* `CLI::Range(min,max)`: Requires that the option be between min and max\
 (make sure to use floating point if needed). Min defaults to 0.
* `CLI::Bounded(min,max)`: Modify the input such that it is always between\
 min and max (make sure to use floating point if needed). Min defaults to 0. \
 Will produce an error if conversion is not possible.
* `CLI::PositiveNumber`: Requires the number be greater than 0
* `CLI::NonNegativeNumber`: Requires the number be greater or equal to 0
* `CLI::Number`: Requires the input be a number.
* `CLI::ValidIPV4`: Requires that the option be a valid IPv4 string e.g.\
 `'255.255.255.255'`, `'10.1.1.7'`.
* `CLI::TypeValidator<TYPE>`:Requires that the option be convertible to the\
 specified type e.g.  `CLI::TypeValidator<unsigned int>()` would require that\
 the input be convertible to an `unsigned int` regardless of the end\
 conversion.

These Validators can be used by simply passing the name into the `check` or\
 `transform` methods on an option

```cpp
->check(CLI::ExistingFile);
->check(CLI::Range(0,10));
```

Validators can be merged using `&` and `|` and inverted using `!`. For\
 example:

```cpp
->check(CLI::Range(0,10)|CLI::Range(20,30));
```

will produce a check to ensure a value is between 0 and 10 or 20 and 30.

```cpp
->check(!CLI::PositiveNumber);
```

will produce a check for a number less than or equal to 0.

##### Transforming Validators

There are a few built in Validators that let you transform values if used\
 with the `transform` function.  If they also do some checks then they can be\
 used `check` but some may do nothing in that case.

* `CLI::Bounded(min,max)` will bound values between min and max and values\
 outside of that range are limited to min or max,  it will fail if the value\
 cannot be converted and produce a `ValidationError`
* The `IsMember` Validator lets you specify a set of predefined options. You\
 can pass any container or copyable pointer (including `std::shared_ptr`) to\
 a container to this Validator; the container just needs to be iterable and\
 have a `::value_type`. The key type should be convertible from a string, \
 You can use an initializer list directly if you like. If you need to modify\
 the set later, the pointer form lets you do that; the type message and check\
 will correctly refer to the current version of the set.  The container\
 passed in can be a set, vector, or a map like structure. If used in the\
 `transform` method the output value will be the matching key as it could be\
 modified by filters.

After specifying a set of options, you can also specify "filter" functions of\
 the form `T(T)`, where `T` is the type of the values. The most common\
 choices probably will be `CLI::ignore_case` an `CLI::ignore_underscore`, and\
 `CLI::ignore_space`.  These all work on strings but it is possible to define\
 functions that work on other types. Here are some examples of `IsMember`:

* `CLI::IsMember({"choice1", "choice2"})`: Select from exact match to choices.
* `CLI::IsMember({"choice1", "choice2"}, CLI::ignore_case,\
 CLI::ignore_underscore)`: Match things like `Choice_1`, too.
* `CLI::IsMember(std::set<int>({2,3,4}))`: Most containers and types work;\
 you just need `std::begin`, `std::end`, and `::value_type`.
* `CLI::IsMember(std::map<std::string, TYPE>({{"one", 1}, {"two", 2}}))`: You\
 can use maps; in `->transform()` these replace the matched value with the\
 matched key.  The value member of the map is not used in `IsMember`, so it\
 can be any type.
* `auto p = std::make_shared<std::vector<std::string>>(std::initializer_list<\
std::string>("one", "two")); CLI::IsMember(p)`: You can modify `p` later.
* The `Transformer` and `CheckedTransformer` Validators transform one value\
 into another. Any container or copyable pointer (including\
 `std::shared_ptr`) to a container that generates pairs of values can be\
 passed to these `Validator's`; the container just needs to be iterable and\
 have a `::value_type` that consists of pairs. The key type should be\
 convertible from a string, and the value type should be convertible to a\
 string  You can use an initializer list directly if you like. If you need to\
 modify the map later, the pointer form lets you do that; the description\
 message will correctly refer to the current version of the map. \
 `Transformer` does not do any checking so values not in the map are ignored.\
  `CheckedTransformer` takes an extra step of verifying that the value is\
 either one of the map key values, in which case it is transformed, or one of\
 the expected output values, and if not will generate a `ValidationError`.  A\
 Transformer placed using `check` will not do anything.

After specifying a map of options, you can also specify "filter" just like in\
 `CLI::IsMember`.
Here are some examples (`Transformer` and `CheckedTransformer` are\
 interchangeable in the examples)
of `Transformer`:

* `CLI::Transformer({{"key1", "map1"},{"key2","map2"}})`: Select from key\
 values and produce map values.
* `CLI::Transformer(std::map<std::string,int>({"two",2},{"three",3},{"four",4\
}}))`: most maplike containers work,  the `::value_type` needs to produce a\
 pair of some kind.
* `CLI::CheckedTransformer(std::map<std::string, int>({{"one", 1}, {"two",\
 2}}))`: You can use maps; in `->transform()` these replace the matched key\
 with the value.  `CheckedTransformer` also requires that the value either\
 match one of the keys or match one of known outputs.
* `auto p = std::make_shared<CLI::TransformPairs<std::string>>(std::initializ\
er_list<std::pair<std::string,std::string>>({"key1", "map1"},{"key2","map2"})\
); CLI::Transformer(p)`: You can modify `p` later. `TransformPairs<T>` is an\
 alias for `std::vector<std::pair<<std::string,T>>`

NOTES:  If the container used in `IsMember`, `Transformer`, or\
 `CheckedTransformer` has a `find` function like `std::unordered_map`  or\
 `std::map` then that function is used to do the searching. If it does not\
 have a `find` function a linear search is performed.  If there are filters\
 present, the fast search is performed first, and if that fails a linear\
 search with the filters on the key values is performed.

* `CLI::FileOnDefaultPath(default_path)`: 🆕 can be used to check for files in\
 a default path.  If used as a transform it will first check that a file\
 exists, if it does nothing further is done,  if it does not it tries to add\
 a default Path to the file and search there again.  If the file does not\
 exist an error is returned normally but this can be disabled using\
 CLI::FileOnDefaultPath(default_path, false).  This allows multiple paths to\
 be chained using multiple transform calls.

##### Validator operations

Validators are copyable and have a few operations that can be performed on\
 them to alter settings.  Most of the built in Validators have a default\
 description that is displayed in the help.  This can be altered via\
 `.description(validator_description)`.
The name of a Validator, which is useful for later reference from the\
 `get_validator(name)` method of an `Option` can be set via\
 `.name(validator_name)`
The operation function of a Validator can be set via
`.operation(std::function<std::string(std::string &>)`.  The `.active()`\
 function can activate or deactivate a Validator from the operation.  A\
 validator can be set to apply only to a specific element of the output.  For\
 example in a pair option `std::pair<int, std::string>` the first element may\
 need to be a positive integer while the second may need to be a valid file. \
 The `.application_index(int)` function can specify this.  It is zero based\
 and negative indices apply to all values.

```cpp
opt->check(CLI::Validator(CLI::PositiveNumber).application_index(0));
opt->check(CLI::Validator(CLI::ExistingFile).application_index(1));
```

All the validator operation functions return a Validator reference allowing\
 them to be chained.  For example

```cpp
opt->check(CLI::Range(10,20).description("range is limited to sensible\
 values").active(false).name("range"));
```

will specify a check on an option with a name "range", but deactivate it for\
 the time being.
The check can later be activated through

```cpp
opt->get_validator("range")->active();
```

##### Custom Validators

A validator object with a custom function can be created via

```cpp
CLI::Validator(std::function<std::string(std::string &)>,validator_descriptio\
n,validator_name="");
```

or if the operation function is set later they can be created with

```cpp
CLI::Validator(validator_description);
```

 It is also possible to create a subclass of `CLI::Validator`, in which case\
 it can also set a custom description function, and operation function.

##### Querying Validators

Once loaded into an Option, a pointer to a named Validator can be retrieved\
 via

```cpp
opt->get_validator(name);
```

This will retrieve a Validator with the given name or throw a\
 `CLI::OptionNotFound` error.  If no name is given or name is empty the first\
 unnamed Validator will be returned or the first Validator if there is only\
 one.

or

```cpp
opt->get_validator(index);
```

Which will return a validator in the index it is applied which isn't\
 necessarily the order in which was defined.  The pointer can be `nullptr` if\
 an invalid index is given.
Validators have a few functions to query the current values:

* `get_description()`: Will return a description string
* `get_name()`: Will return the Validator name
* `get_active()`: Will return the current active state, true if the Validator\
 is active.
* `get_application_index()`: Will return the current application index.
* `get_modifying()`: Will return true if the Validator is allowed to modify\
 the input, this can be controlled via the `non_modifying()` method, though\
 it is recommended to let `check` and `transform` option methods manipulate\
 it if needed.

#### Getting results

In most cases, the fastest and easiest way is to return the results through a\
 callback or variable specified in one of the `add_*` functions.  But there\
 are situations where this is not possible or desired.  For these cases the\
 results may be obtained through one of the following functions. Please note\
 that these functions will do any type conversions and processing during the\
 call so should not used in performance critical code:

* `->results()`: Retrieves a vector of strings with all the results in the\
 order they were given.
* `->results(variable_to_bind_to)`: Gets the results according to the\
 MultiOptionPolicy and converts them just like the `add_option_function` with\
 a variable.
* `Value=opt->as<type>()`: Returns the result or default value directly as\
 the specified type if possible, can be vector to return all results, and a\
 non-vector to get the result according to the MultiOptionPolicy in place.

### Subcommands

Subcommands are supported, and can be nested infinitely. To add a subcommand,\
 call the `add_subcommand` method with a name and an optional description.\
 This gives a pointer to an `App` that behaves just like the main app, and\
 can take options or further subcommands. Add `->ignore_case()` to a\
 subcommand to allow any variation of caps to also be accepted.\
 `->ignore_underscore()` is similar, but for underscores. Children inherit\
 the current setting from the parent. You cannot add multiple matching\
 subcommand names at the same level (including `ignore_case` and\
 `ignore_underscore`).

If you want to require that at least one subcommand is given, use\
 `.require_subcommand()` on the parent app. You can optionally give an exact\
 number of subcommands to require, as well. If you give two arguments, that\
 sets the min and max number allowed.
0 for the max number allowed will allow an unlimited number of subcommands.\
 As a handy shortcut, a single negative value N will set "up to N" values.\
 Limiting the maximum number allows you to keep arguments that match a\
 previous
subcommand name from matching.

If an `App` (main or subcommand) has been parsed on the command line,\
 `->parsed` will be true (or convert directly to bool).
All `App`s have a `get_subcommands()` method, which returns a list of\
 pointers to the subcommands passed on the command line. A\
 `got_subcommand(App_or_name)` method is also provided that will check to see\
 if an `App` pointer or a string name was collected on the command line.

For many cases, however, using an app's callback capabilities may be easier.\
 Every app has a set of callbacks that can be executed at various stages of\
 parsing; a `C++` lambda function (with capture to get parsed values) can be\
 used as input to the callback definition function. If you throw\
 `CLI::Success` or `CLI::RuntimeError(return_value)`, you can
even exit the program through the callback.

Multiple subcommands are allowed, to allow [`Click`][click] like series of\
 commands (order is preserved).  The same subcommand can be triggered\
 multiple times but all positional arguments will take precedence over the\
 second and future calls of the subcommand.  `->count()` on the subcommand\
 will return the number of times the subcommand was called.  The subcommand\
 callback will only be triggered once unless the `.immediate_callback()` \
 flag is set or the callback is specified through the `parse_complete_callbac\
k()` function. The `final_callback()` is triggered only once.  In which case\
 the callback executes on completion of the subcommand arguments but after\
 the arguments for that subcommand have been parsed, and can be triggered\
 multiple times.

Subcommands may also have an empty name either by calling `add_subcommand`\
 with an empty string for the name or with no arguments.
Nameless subcommands function a similarly to groups in the main `App`. See\
 [Option groups](#option-groups) to see how this might work.  If an option is\
 not defined in the main App, all nameless subcommands are checked as well. \
 This allows for the options to be defined in a composable group.  The\
 `add_subcommand` function has an overload for adding a `shared_ptr<App>` so\
 the subcommand(s) could be defined in different components and merged into a\
 main `App`, or possibly multiple `Apps`.  Multiple nameless subcommands are\
 allowed.  Callbacks for nameless subcommands are only triggered if any\
 options from the subcommand were parsed. Subcommand names given through the\
 `add_subcommand` method have the same restrictions as option names.

#### Subcommand options

There are several options that are supported on the main app and subcommands\
 and option_groups. These are:

* `.ignore_case()`: Ignore the case of this subcommand. Inherited by added\
 subcommands, so is usually used on the main `App`.
* `.ignore_underscore()`: Ignore any underscores in the subcommand name.\
 Inherited by added subcommands, so is usually used on the main `App`.
* `.allow_windows_style_options()`: Allow command line options to be parsed\
 in the form of `/s /long /file:file_name.ext`  This option does not change\
 how options are specified in the `add_option` calls or the ability to\
 process options in the form of `-s --long --file=file_name.ext`.
* `.fallthrough()`: Allow extra unmatched options and positionals to "fall\
 through" and be matched on a parent option. Subcommands always are allowed\
 to "fall through" as in they will first attempt to match on the current\
 subcommand and if they fail will progressively check parents for matching\
 subcommands.
* `.configurable()`: Allow the subcommand to be triggered from a\
 configuration file. By default subcommand options in a configuration file do\
 not trigger a subcommand but will just update default values.
* `.disable()`: Specify that the subcommand is disabled, if given with a bool\
 value it will enable or disable the subcommand or option group.
* `.disabled_by_default()`: Specify that at the start of parsing the\
 subcommand/option_group should be disabled. This is useful for allowing some\
 Subcommands to trigger others.
* `.enabled_by_default()`: Specify that at the start of each parse the\
 subcommand/option_group should be enabled.  This is useful for allowing some\
 Subcommands to disable others.
* `.silent()`: Specify that the subcommand is silent meaning that if used it\
 won't show up in the subcommand list.  This allows the use of subcommands as\
 modifiers
* `.validate_positionals()`: Specify that positionals should pass validation\
 before matching.  Validation is specified through `transform`, `check`, and\
 `each` for an option.  If an argument fails validation it is not an error\
 and matching proceeds to the next available positional or extra arguments.
* `.validate_optional_arguments()`:🆕 Specify that optional arguments should\
 pass validation before being assigned to an option.  Validation is specified\
 through `transform`, `check`, and `each` for an option.  If an argument\
 fails validation it is not an error and matching proceeds to the next\
 available positional subcommand or extra arguments.
* `.excludes(option_or_subcommand)`: If given an option pointer or pointer to\
 another subcommand, these subcommands cannot be given together.  In the case\
 of options, if the option is passed the subcommand cannot be used and will\
 generate an error.
* `.needs(option_or_subcommand)`: If given an option pointer or pointer to\
 another subcommand, the subcommands will require the given option to have\
 been given before this subcommand is validated which occurs prior to\
 execution of any callback or after parsing is completed.
* `.require_option()`: Require 1 or more options or option groups be used.
* `.require_option(N)`: Require `N` options or option groups, if `N>0`, or up\
 to `N` if `N<0`. `N=0` resets to the default to 0 or more.
* `.require_option(min, max)`: Explicitly set min and max allowed options or\
 option groups. Setting `max` to 0 implies unlimited options.
* `.require_subcommand()`: Require 1 or more subcommands.
* `.require_subcommand(N)`: Require `N` subcommands if `N>0`, or up to `N` if\
 `N<0`. `N=0` resets to the default to 0 or more.
* `.require_subcommand(min, max)`: Explicitly set min and max allowed\
 subcommands. Setting `max` to 0 is unlimited.
* `.add_subcommand(name="", description="")`: Add a subcommand, returns a\
 pointer to the internally stored subcommand.
* `.add_subcommand(shared_ptr<App>)`: Add a subcommand by shared_ptr, returns\
 a pointer to the internally stored subcommand.
* `.remove_subcommand(App)`: Remove a subcommand from the app or subcommand.
* `.got_subcommand(App_or_name)`: Check to see if a subcommand was received\
 on the command line.
* `.get_subcommands(filter)`: The list of subcommands that match a particular\
 filter function.
* `.add_option_group(name="", description="")`: Add an [option\
 group](#option-groups) to an App,  an option group is specialized subcommand\
 intended for containing groups of options or other groups for controlling\
 how options interact.
* `.get_parent()`: Get the parent App or `nullptr` if called on main App.
* `.get_option(name)`: Get an option pointer by option name will throw if the\
 specified option is not available,  nameless subcommands are also searched
* `.get_option_no_throw(name)`: Get an option pointer by option name. This\
 function will return a `nullptr` instead of throwing if the option is not\
 available.
* `.get_options(filter)`: Get the list of all defined option pointers (useful\
 for processing the app for custom output formats).
* `.parse_order()`: Get the list of option pointers in the order they were\
 parsed (including duplicates).
* `.formatter(fmt)`: Set a formatter, with signature `std::string(const App*,\
 std::string, AppFormatMode)`. See Formatting for more details.
* `.description(str)`: Set/change the description.
* `.get_description()`: Access the description.
* `.alias(str)`: set an alias for the subcommand, this allows subcommands to\
 be called by more than one name.
* `.parsed()`: True if this subcommand was given on the command line.
* `.count()`: Returns the number of times the subcommand was called.
* `.count(option_name)`: Returns the number of times a particular option was\
 called.
* `.count_all()`: Returns the total number of arguments a particular\
 subcommand processed, on the main App it returns the total number of\
 processed commands.
* `.name(name)`: Add or change the name.
* `.callback(void() function)`: Set the callback for an app. Either sets the\
 `pre_parse_callback` or the `final_callback` depending on the value of\
 `immediate_callback`. See [Subcommand callbacks](#callbacks) for some\
 additional details.
* `.parse_complete_callback(void() function)`: Set the callback that runs at\
 the completion of parsing. For subcommands this is executed at the\
 completion of the single subcommand and can be executed multiple times. See\
 [Subcommand callbacks](#callbacks) for some additional details.
* `.final_callback(void() function)`: Set the callback that runs at the end\
 of all processing. This is the last thing that is executed before returning.\
 See [Subcommand callbacks](#callbacks) for some additional details.
* `.immediate_callback()`: Specifies whether the callback for a subcommand\
 should be run as a `parse_complete_callback`(true) or `final_callback`(false\
). When used on the main app it will execute the main app callback prior to\
 the callbacks for a subcommand if they do not also have the\
 `immediate_callback` flag set. It is preferable to use the\
 `parse_complete_callback` or `final_callback` directly instead of the\
 `callback` and `immediate_callback` if one wishes to control the ordering\
 and timing of callback.  Though `immediate_callback` can be used to swap\
 them if that is needed.
* `.pre_parse_callback(void(std::size_t) function)`: Set a callback that\
 executes after the first argument of an application is processed.  See\
 [Subcommand callbacks](#callbacks) for some additional details.
* `.allow_extras()`: Do not throw an error if extra arguments are left over.
* `.positionals_at_end()`: Specify that positional arguments occur as the\
 last arguments and throw an error if an unexpected positional is encountered.
* `.prefix_command()`: Like `allow_extras`, but stop immediately on the first\
 unrecognized item. It is ideal for allowing your app or subcommand to be a\
 "prefix" to calling another app.
* `.footer(message)`: Set text to appear at the bottom of the help string.
* `.footer(std::string())`: Set a callback to generate a string that will\
 appear at the end of the help string.
* `.set_help_flag(name, message)`: Set the help flag name and message,\
 returns a pointer to the created option.
* `.set_version_flag(name, versionString or callback, help_message)`: Set the\
 version flag name and version string or callback and optional help message,\
 returns a pointer to the created option.
* `.set_help_all_flag(name, message)`: Set the help all flag name and\
 message, returns a pointer to the created option. Expands subcommands.
* `.failure_message(func)`: Set the failure message function. Two provided:\
 `CLI::FailureMessage::help` and `CLI::FailureMessage::simple` (the default).
* `.group(name)`: Set a group name, defaults to `"Subcommands"`. Setting `""`\
 will be hide the subcommand.
* `[option_name]`: retrieve a const pointer to an option given by\
 `option_name` for Example `app["--flag1"]` will get a pointer to the option\
 for the "--flag1" value,  `app["--flag1"]->as<bool>()` will get the results\
 of the command line for a flag. The operation will throw an exception if the\
 option name is not valid.

> Note: if you have a fixed number of required positional options, that will\
 match before subcommand names. `{}` is an empty filter function, and any\
 positional argument will match before repeated subcommand names.

#### Callbacks

A subcommand has three optional callbacks that are executed at different\
 stages of processing.  The `preparse_callback` is executed once after the\
 first argument of a subcommand or application is processed and gives an\
 argument for the number of remaining arguments to process.  For the main app\
 the first argument is considered the program name,  for subcommands the\
 first argument is the subcommand name.  For Option groups and nameless\
 subcommands the first argument is after the first argument or subcommand is\
 processed from that group.
The second callback is executed after parsing.  This is known as the\
 `parse_complete_callback`. For subcommands this is executed immediately\
 after parsing and can be executed multiple times if a subcommand is called\
 multiple times.    On the main app this callback is executed after all the\
 `parse_complete_callback`s for the subcommands are executed but prior to any\
 `final_callback` calls in the subcommand or option groups. If the main app\
 or subcommand has a config file, no data from the config file will be\
 reflected in `parse_complete_callback` on named subcommands.  For\
 `option_group`s the `parse_complete_callback` is executed prior to the\
 `parse_complete_callback` on the main app but after the `config_file` is\
 loaded (if specified).  The `final_callback` is executed after all\
 processing is complete.  After the `parse_complete_callback` is executed on\
 the main app, the used subcommand `final_callback` are executed followed by\
 the "final callback" for option groups.  The last thing to execute is the\
 `final_callback` for the `main_app`.
For example say an application was set up like

```cpp
app.parse_complete_callback(ac1);
app.final_callback(ac2);
auto sub1=app.add_subcommand("sub1")->parse_complete_callback(c1)->preparse_c\
allback(pc1);
auto sub2=app.add_subcommand("sub2")->final_callback(c2)->preparse_callback(p\
c2);
app.preparse_callback( pa);

... A bunch of other options
```

Then the command line is given as

```bash
program --opt1 opt1_val  sub1 --sub1opt --sub1optb val sub2 --sub2opt sub1\
 --sub1opt2 sub2 --sub2opt2 val
```

* `pa` will be called prior to parsing any values with an argument of 13.
* `pc1` will be called immediately after processing the `sub1` command with a\
 value of 10.
* `c1` will be called when the `sub2` command is encountered.
* `pc2` will be called with value of 6 after the `sub2` command is\
 encountered.
* `c1` will be called again after the second `sub2` command is encountered.
* `ac1` will be called after processing of all arguments
* `c2` will be called once after processing all arguments.
* `ac2` will be called last after completing  all lower level callbacks have\
 been executed.

A subcommand is considered terminated when one of the following conditions\
 are met.

1. There are no more arguments to process
2. Another subcommand is encountered that would not fit in an optional slot\
 of the subcommand
3. The `positional_mark` (`--`) is encountered and there are no available\
 positional slots in the subcommand.
4. The `subcommand_terminator` mark (`++`) is encountered

Prior to executed a `parse_complete_callback` all contained options are\
 processed before the callback is triggered.  If a subcommand with a\
 `parse_complete_callback` is called again, then the contained options are\
 reset, and can be triggered again.

#### Option groups

The subcommand method

```cpp
.add_option_group(name,description)
```

Will create an option group, and return a pointer to it. The argument for\
 `description` is optional and can be omitted.  An option group allows\
 creation of a collection of options, similar to the groups function on\
 options, but with additional controls and requirements.  They allow specific\
 sets of options to be composed and controlled as a collective.  For an\
 example see [range example](https://github.com/CLIUtils/CLI11/blob/main/exam\
ples/ranges.cpp).  Option groups are a specialization of an App so all\
 [functions](#subcommand-options) that work with an App or subcommand also\
 work on option groups.  Options can be created as part of an option group\
 using the add functions just like a subcommand, or previously created\
 options can be added through.  The name given in an option group must not\
 contain newlines or null characters.

```cpp
ogroup->add_option(option_pointer);
ogroup->add_options(option_pointer);
ogroup->add_options(option1,option2,option3,...);
```

The option pointers used in this function must be options defined in the\
 parent application of the option group otherwise an error will be generated.\
  Subcommands can also be added via

```cpp
ogroup->add_subcommand(subcom_pointer);
```

This results in the subcommand being moved from its parent into the option\
 group.

Options in an option group are searched for a command line match after any\
 options in the main app, so any positionals in the main app would be matched\
 first.  So care must be taken to make sure of the order when using\
 positional arguments and option groups.
Option groups work well with `excludes` and `require_options` methods, as an\
 application will treat an option group as a single option for the purpose of\
 counting and requirements, and an option group will be considered used if\
 any of the options or subcommands contained in it are used.  Option groups\
 allow specifying requirements such as requiring 1 of 3 options in one group\
 and 1 of 3 options in a different group. Option groups can contain other\
 groups as well.   Disabling an option group will turn off all options within\
 the group.

The `CLI::TriggerOn` and `CLI::TriggerOff` methods are helper functions to\
 allow the use of options/subcommands from one group to trigger another group\
 on or off.

```cpp
CLI::TriggerOn(group1_pointer, triggered_group);
CLI::TriggerOff(group2_pointer, disabled_group);
```

These functions make use of `preparse_callback`, `enabled_by_default()` and\
 `disabled_by_default`.  The triggered group may be a vector of group\
 pointers.  These methods should only be used once per group and will\
 override any previous use of the underlying functions.  More complex\
 arrangements can be accomplished using similar methodology with a custom\
 `preparse_callback` function that does more.

Additional helper functions `deprecate_option` and `retire_option` are\
 available to deprecate or retire options

```cpp
CLI::deprecate_option(option *, replacement_name="");
CLI::deprecate_option(App,option_name,replacement_name="");
```

will specify that the option is deprecated which will display a message in\
 the help and a warning on first usage.  Deprecated options function normally\
 but will add a message in the help and display a warning on first use.

```cpp
CLI::retire_option(App,option *);
CLI::retire_option(App,option_name);
```

will create an option that does nothing by default and will display a warning\
 on first usage that the option is retired and has no effect.  If the option\
 exists it is replaces with a dummy option that takes the same arguments.

If an empty string is passed the option group name the entire group will be\
 hidden in the help results.  For example.

```cpp
auto hidden_group=app.add_option_group("");
```

will create a group such that no options in that group are displayed in the\
 help string.

### Configuration file

```cpp
app.set_config(option_name="",
               default_file_name="",
               help_string="Read an ini file",
               required=false)
```

If this is called with no arguments, it will remove the configuration file\
 option (like `set_help_flag`). Setting a configuration option is special. If\
 it is present, it will be read along with the normal command line arguments.\
 The file will be read if it exists, and does not throw an error unless\
 `required` is `true`. Configuration files are in [TOML][] format by default,\
 though the default reader can also accept files in INI format as well. It\
 should be noted that CLI11 does not contain a full TOML parser but can read\
 strings from most TOML file and run them through the CLI11 parser. Other\
 formats can be added by an adept user, some variations are available through\
 customization points in the default formatter. An example of a TOML file:

```toml
# Comments are supported, using a #
# The default section is [default], case insensitive

value = 1
str = "A string"
vector = [1,2,3]
str_vector = ["one","two","and three"]

# Sections map to subcommands
[subcommand]
in_subcommand = Wow
sub.subcommand = true
```

or equivalently in INI format

```ini
; Comments are supported, using a ;
; The default section is [default], case insensitive

value = 1
str = "A string"
vector = 1 2 3
str_vector = "one" "two" "and three"

; Sections map to subcommands
[subcommand]
in_subcommand = Wow
sub.subcommand = true
```

Spaces before and after the name and argument are ignored. Multiple arguments\
 are separated by spaces. One set of quotes will be removed, preserving\
 spaces (the same way the command line works). Boolean options can be `true`,\
 `on`, `1`, `yes`, `enable`; or `false`, `off`, `0`, `no`, `disable` (case\
 insensitive). Sections (and `.` separated names) are treated as subcommands\
 (note: this does not necessarily mean that subcommand was passed, it just\
 sets the "defaults"). You cannot set positional-only arguments.  Subcommands\
 can be triggered from configuration files if the `configurable` flag was set\
 on the subcommand.  Then the use of `[subcommand]` notation will trigger a\
 subcommand and cause it to act as if it were on the command line.

To print a configuration file from the passed
arguments, use `.config_to_str(default_also=false, write_description=false)`,\
 where `default_also` will also show any defaulted arguments, and\
 `write_description` will include the app and option descriptions.  See\
 [Config files](https://cliutils.github.io/CLI11/book/chapters/config.html)\
 for some additional details and customization points.

If it is desired that multiple configuration be allowed.  Use

```cpp
app.set_config("--config")->expected(1, X);
```

Where X is some positive number and will allow up to `X` configuration files\
 to be specified by separate `--config` arguments.  Value strings with quote\
 characters in it will be printed with a single quote. All other arguments\
 will use double quote.  Empty strings will use a double quoted argument.\
 Numerical or boolean values are not quoted.

For options or flags which allow 0 arguments to be passed using an empty\
 string in the config file, `{}`, or `[]` will convert the result to the\
 default value specified via `default_str` or `default_val` on the option\
 🆕.  If no user specified default is given the result is an empty string or\
 the converted value of an empty string.

NOTE:  Transforms and checks can be used with the option pointer returned\
 from set_config like any other option to validate the input if needed.  It\
 can also be used with the built in transform `CLI::FileOnDefaultPath` to\
 look in a default path as well as the current one.  For example

```cpp
app.set_config("--config")->transform(CLI::FileOnDefaultPath("/to/default/pat\
h/"));
```

See [Transforming Validators](#transforming-validators) for additional\
 details on this validator. Multiple transforms or validators can be used\
 either by multiple calls or using `|` operations with the transform.

### Inheriting defaults

Many of the defaults for subcommands and even options are inherited from\
 their creators. The inherited default values for subcommands are\
 `allow_extras`, `prefix_command`, `ignore_case`, `ignore_underscore`,\
 `fallthrough`, `group`, `footer`,`immediate_callback` and maximum number of\
 required subcommands. The help flag existence, name, and description are\
 inherited, as well.

Options have defaults for `group`, `required`, `multi_option_policy`,\
 `ignore_case`, `ignore_underscore`, `delimiter`, and `disable_flag_override`\
. To set these defaults, you should set the `option_defaults()` object, for\
 example:

```cpp
app.option_defaults()->required();
// All future options will be required
```

The default settings for options are inherited to subcommands, as well.

### Formatting

The job of formatting help printouts is delegated to a formatter callable\
 object on Apps and Options. You are free to replace either formatter by\
 calling `formatter(fmt)` on an `App`, where fmt is any copyable callable\
 with the correct signature.
CLI11 comes with a default App formatter functional, `Formatter`. It is\
 customizable; you can set `label(key, value)` to replace the default labels\
 like `REQUIRED`, and `column_width(n)` to set the width of the columns\
 before you add the functional to the app or option. You can also override\
 almost any stage of the formatting process in a subclass of either\
 formatter. If you want to make a new formatter from scratch, you can do
that too; you just need to implement the correct signature. The first\
 argument is a const pointer to the in question. The formatter will get a\
 `std::string` usage name as the second option, and a `AppFormatMode` mode\
 for the final option. It should return a `std::string`.

The `AppFormatMode` can be `Normal`, `All`, or `Sub`, and it indicates the\
 situation the help was called in. `Sub` is optional, but the default\
 formatter uses it to make sure expanded subcommands are called with
their own formatter since you can't access anything but the call operator\
 once a formatter has been set.

### Subclassing

The App class was designed allow toolkits to subclass it, to provide preset\
 default options (see above) and setup/teardown code. Subcommands remain an\
 unsubclassed `App`, since those are not expected to need setup and teardown.\
 The default `App` only adds a help flag, `-h,--help`, than can\
 removed/replaced using `.set_help_flag(name, help_string)`. You can also set\
 a help-all flag with `.set_help_all_flag(name, help_string)`; this will\
 expand the subcommands (one level only). You can remove options if you have\
 pointers to them using `.remove_option(opt)`. You can add a `pre_callback`\
 override to customize the after parse
but before run behavior, while
still giving the user freedom to `callback` on the main app.

The most important parse function is `parse(std::vector<std::string>)`, which\
 takes a reversed list of arguments (so that `pop_back` processes the args in\
 the correct order). `get_help_ptr` and `get_config_ptr` give you access to\
 the help/config option pointers. The standard `parse` manually sets the name\
 from the first argument, so it should not be in this vector. You can also\
 use `parse(string, bool)` to split up and parse a single string; the\
 optional boolean should be set to true if you are
including the program name in the string, and false otherwise.  The program\
 name can contain spaces if it is an existing file,  otherwise can be\
 enclosed in quotes(single quote, double quote or backtick).  Embedded quote\
 characters can be escaped with `\`.

Also, in a related note, the `App` you get a pointer to is stored in the\
 parent `App` in a `shared_ptr`s (similar to `Option`s) and are deleted when\
 the main `App` goes out of scope unless the object has another owner.

### How it works

Every `add_` option you have seen so far depends on one method that takes a\
 lambda function. Each of these methods is just making a different lambda\
 function with capture to populate the option. The function has full access\
 to the vector of strings, so it knows how many times an option was passed or\
 how many arguments it received. The lambda returns `true` if it could\
 validate the option strings, and
`false` if it failed.

Other values can be added as long as they support `operator>>` (and defaults\
 can be printed if they support `operator<<`). To add a new type, for\
 example, provide a custom `operator>>` with an `istream` (inside the CLI\
 namespace is fine if you don't want to interfere with an existing\
 `operator>>`).

If you wanted to extend this to support a completely new type, use a lambda\
 or add a specialization of the `lexical_cast` function template in the\
 namespace of the type you need to convert to. Some examples of some new\
 parsers for `complex<double>` that support all of the features of a standard\
 `add_options` call are in [one of the tests](./tests/NewParseTest.cpp). A\
 simpler example is shown below:

#### Example

```cpp
app.add_option("--fancy-count", [](std::vector<std::string> val){
    std::cout << "This option was given " << val.size() << " times." <<\
 std::endl;
    return true;
    });
```

### Utilities

There are a few other utilities that are often useful in CLI programming.\
 These are in separate headers, and do not appear in `CLI11.hpp`, but are\
 completely independent and can be used as needed. The `Timer`/`AutoTimer`\
 class allows you to easily time a block of code, with custom print output.

```cpp
{
CLI::AutoTimer timer {"My Long Process", CLI::Timer::Big};
some_long_running_process();
}
```

This will create a timer with a title (default: `Timer`), and will customize\
 the output using the predefined `Big` output (default: `Simple`). Because it\
 is an `AutoTimer`, it will print out the time elapsed when the timer is\
 destroyed at the end of the block. If you use `Timer` instead, you can use\
 `to_string` or `std::cout << timer << std::endl;` to print the time. The\
 print function can be any function that takes two strings, the title and the\
 time, and returns a formatted
string for printing.

### Other libraries

If you use the excellent [Rang][] library to add color to your terminal in a\
 safe, multi-platform way, you can combine it with CLI11 nicely:

```cpp
std::atexit([](){std::cout << rang::style::reset;});
try {
    app.parse(argc, argv);
} catch (const CLI::ParseError &e) {
    std::cout << (e.get_exit_code()==0 ? rang::fg::blue : rang::fg::red);
    return app.exit(e);
}
```

This will print help in blue, errors in red, and will reset before returning\
 the terminal to the user.

If you are on a Unix-like system, and you'd like to handle control-c and\
 color, you can add:

```cpp
 #include <csignal>
 void signal_handler(int s) {
     std::cout << std::endl << rang::style::reset << rang::fg::red <<\
 rang::fg::bold;
     std::cout << "Control-C detected, exiting..." << rang::style::reset <<\
 std::endl;
     std::exit(1); // will call the correct exit func, no unwinding of the\
 stack though
 }
```

And, in your main function:

```cpp
     // Nice Control-C
     struct sigaction sigIntHandler;
     sigIntHandler.sa_handler = signal_handler;
     sigemptyset(&sigIntHandler.sa_mask);
     sigIntHandler.sa_flags = 0;
     sigaction(SIGINT, &sigIntHandler, nullptr);
```

## API

The API is [documented here][api-docs]. Also see the [CLI11 tutorial\
 GitBook][gitbook].

## Examples

Several short examples of different features are included in the repository.\
 A brief description of each is included here

* [callback_passthrough](https://github.com/CLIUtils/CLI11/blob/main/examples\
/callback_passthrough.cpp): Example of directly passing remaining arguments\
 through to a callback function which generates a CLI11 application based on\
 existing arguments.
* [custom_parse](https://github.com/CLIUtils/CLI11/blob/main/examples/custom_\
parse.cpp): Based on [Issue #566](https://github.com/CLIUtils/CLI11/issues/56\
6), example of custom parser
* [digit_args](https://github.com/CLIUtils/CLI11/blob/main/examples/digit_arg\
s.cpp): Based on [Issue #123](https://github.com/CLIUtils/CLI11/issues/123),\
 uses digit flags to pass a value
* [enum](https://github.com/CLIUtils/CLI11/blob/main/examples/enum.cpp):\
 Using enumerations in an option, and the use of [CheckedTransformer](#transf\
orming-validators)
* [enum_ostream](https://github.com/CLIUtils/CLI11/blob/main/examples/enum_os\
tream.cpp): In addition to the contents of example enum.cpp, this example\
 shows how a custom ostream operator overrides CLI11's enum streaming.
* [formatter](https://github.com/CLIUtils/CLI11/blob/main/examples/formatter.\
cpp): Illustrating usage of a custom formatter
* [groups](https://github.com/CLIUtils/CLI11/blob/main/examples/groups.cpp):\
 Example using groups of options for help grouping and a the timer helper\
 class
* [inter_argument_order](https://github.com/CLIUtils/CLI11/blob/main/examples\
/inter_argument_order.cpp): An app to practice mixing unlimited arguments,\
 but still recover the original order.
* [json](https://github.com/CLIUtils/CLI11/blob/main/examples/json.cpp):\
 Using JSON as a config file parser
* [modhelp](https://github.com/CLIUtils/CLI11/blob/main/examples/modhelp.cpp)\
: How to modify the help flag to do something other than default
* [nested](https://github.com/CLIUtils/CLI11/blob/main/examples/nested.cpp):\
 Nested subcommands
* [option_groups](https://github.com/CLIUtils/CLI11/blob/main/examples/option\
_groups.cpp): Illustrating the use of option groups and a required number of\
 options. Based on [Issue #88](https://github.com/CLIUtils/CLI11/issues/88)\
 to set interacting groups of options
* [positional_arity](https://github.com/CLIUtils/CLI11/blob/main/examples/pos\
itional_arity.cpp): Illustrating use of `preparse_callback` to handle\
 situations where the number of arguments can determine which should get\
 parsed,  Based on [Issue #166](https://github.com/CLIUtils/CLI11/issues/166)
* [positional_validation](https://github.com/CLIUtils/CLI11/blob/main/example\
s/positional_validation.cpp): Example of how positional arguments are\
 validated using the `validate_positional` flag, also based on [Issue\
 #166](https://github.com/CLIUtils/CLI11/issues/166)
* [prefix_command](https://github.com/CLIUtils/CLI11/blob/main/examples/prefi\
x_command.cpp): Illustrating use of the `prefix_command` flag.
* [ranges](https://github.com/CLIUtils/CLI11/blob/main/examples/ranges.cpp):\
 App to demonstrate exclusionary option groups based on [Issue\
 #88](https://github.com/CLIUtils/CLI11/issues/88)
* [shapes](https://github.com/CLIUtils/CLI11/blob/main/examples/shapes.cpp):\
 Illustrating how to set up repeated subcommands Based on [gitter\
 discussion](https://gitter.im/CLI11gitter/Lobby?at=5c7af6b965ffa019ea788cd5)
* [simple](https://github.com/CLIUtils/CLI11/blob/main/examples/simple.cpp):\
 A simple example of how to set up a CLI11 Application with different flags\
 and options
* [subcom_help](https://github.com/CLIUtils/CLI11/blob/main/examples/subcom_h\
elp.cpp): Configuring help for subcommands
* [subcom_partitioned](https://github.com/CLIUtils/CLI11/blob/main/examples/s\
ubcom_partitioned.cpp): Example with a timer and subcommands generated\
 separately and added to the main app later.
* [subcommands](https://github.com/CLIUtils/CLI11/blob/main/examples/subcomma\
nds.cpp): Short example of subcommands
* [validators](https://github.com/CLIUtils/CLI11/blob/main/examples/validator\
s.cpp): Example illustrating use of validators

## Contribute

To contribute, open an [issue][github issues] or [pull request][github pull\
 requests] on GitHub, or ask a question on [gitter][]. There is also a short\
 note to contributors [here](./.github/CONTRIBUTING.md).
This readme roughly follows the [Standard Readme Style][] and includes a\
 mention of almost every feature of the library. More complex features are\
 documented in more detail in the [CLI11 tutorial GitBook][gitbook].

This project was created by [Henry Schreiner](https://github.com/henryiii)\
 and major features were added by  [Philip Top](https://github.com/phlptp).\
 Special thanks to all the contributors ([emoji key](https://allcontributors.\
org/docs/en/emoji-key)):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tr>
    <td align="center"><a href="http://iscinumpy.gitlab.io"><img\
 src="https://avatars1.githubusercontent.com/u/4616906?v=4" width="100px;"\
 alt=""/><br /><sub><b>Henry Schreiner</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Ahenryiii"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=henryiii" title="Documentation">📖</a> <a href="https://github.com/CLI\
Utils/CLI11/commits?author=henryiii" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/phlptp"><img\
 src="https://avatars0.githubusercontent.com/u/20667153?v=4" width="100px;"\
 alt=""/><br /><sub><b>Philip Top</b></sub></a><br /><a href="https://github.\
com/CLIUtils/CLI11/issues?q=author%3Aphlptp" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=phlptp"\
 title="Documentation">📖</a> <a href="https://github.com/CLIUtils/CLI11/commi\
ts?author=phlptp" title="Code">💻</a></td>
    <td align="center"><a href="https://www.linkedin.com/in/cbachhuber/"><img\
 src="https://avatars0.githubusercontent.com/u/27212661?v=4" width="100px;"\
 alt=""/><br /><sub><b>Christoph Bachhuber</b></sub></a><br /><a\
 href="#example-cbachhuber" title="Examples">💡</a> <a href="https://github.co\
m/CLIUtils/CLI11/commits?author=cbachhuber" title="Code">💻</a></td>
    <td align="center"><a href="https://lambdafu.net/"><img\
 src="https://avatars1.githubusercontent.com/u/1138455?v=4" width="100px;"\
 alt=""/><br /><sub><b>Marcus Brinkmann</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Alambdafu"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=lambdafu" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/SkyToGround"><img\
 src="https://avatars1.githubusercontent.com/u/58835?v=4" width="100px;"\
 alt=""/><br /><sub><b>Jonas Nilsson</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3ASkyToGround"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=SkyToGround" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dvj"><img\
 src="https://avatars2.githubusercontent.com/u/77217?v=4" width="100px;"\
 alt=""/><br /><sub><b>Doug Johnston</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Advj" title="Bug\
 reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits?author=dvj\
" title="Code">💻</a></td>
    <td align="center"><a href="http://lucas-czech.de"><img\
 src="https://avatars0.githubusercontent.com/u/4741887?v=4" width="100px;"\
 alt=""/><br /><sub><b>Lucas Czech</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/issues?q=author%3Alczech" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=lczech"\
 title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/rafiw"><img\
 src="https://avatars3.githubusercontent.com/u/3034707?v=4" width="100px;"\
 alt=""/><br /><sub><b>Rafi Wiener</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/issues?q=author%3Arafiw" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=rafiw"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/mensinda"><img\
 src="https://avatars3.githubusercontent.com/u/3407462?v=4" width="100px;"\
 alt=""/><br /><sub><b>Daniel Mensinger</b></sub></a><br /><a\
 href="#platform-mensinda" title="Packaging/porting to new\
 platform">📦</a></td>
    <td align="center"><a href="https://github.com/jbriales"><img\
 src="https://avatars1.githubusercontent.com/u/6850478?v=4" width="100px;"\
 alt=""/><br /><sub><b>Jesus Briales</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=jbriales"\
 title="Code">💻</a> <a href="https://github.com/CLIUtils/CLI11/issues?q=autho\
r%3Ajbriales" title="Bug reports">🐛</a></td>
    <td align="center"><a href="https://seanfisk.com/"><img\
 src="https://avatars0.githubusercontent.com/u/410322?v=4" width="100px;"\
 alt=""/><br /><sub><b>Sean Fisk</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/issues?q=author%3Aseanfisk" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=seanfisk"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/fpeng1985"><img\
 src="https://avatars1.githubusercontent.com/u/87981?v=4" width="100px;"\
 alt=""/><br /><sub><b>fpeng1985</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/commits?author=fpeng1985" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/almikhayl"><img\
 src="https://avatars2.githubusercontent.com/u/6747040?v=4" width="100px;"\
 alt=""/><br /><sub><b>almikhayl</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/commits?author=almikhayl" title="Code">💻</a> <a\
 href="#platform-almikhayl" title="Packaging/porting to new\
 platform">📦</a></td>
    <td align="center"><a href="https://github.com/andrew-hardin"><img\
 src="https://avatars0.githubusercontent.com/u/16496326?v=4" width="100px;"\
 alt=""/><br /><sub><b>Andrew Hardin</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=andrew-hardin"\
 title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/SX91"><img\
 src="https://avatars2.githubusercontent.com/u/754754?v=4" width="100px;"\
 alt=""/><br /><sub><b>Anton</b></sub></a><br /><a href="https://github.com/C\
LIUtils/CLI11/commits?author=SX91" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/helmesjo"><img\
 src="https://avatars0.githubusercontent.com/u/2501070?v=4" width="100px;"\
 alt=""/><br /><sub><b>Fred Helmesjö</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Ahelmesjo"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=helmesjo" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/skannan89"><img\
 src="https://avatars0.githubusercontent.com/u/11918764?v=4" width="100px;"\
 alt=""/><br /><sub><b>Kannan</b></sub></a><br /><a href="https://github.com/\
CLIUtils/CLI11/issues?q=author%3Askannan89" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=skannan89"\
 title="Code">💻</a></td>
    <td align="center"><a href="http://himvis.com"><img src="https://avatars3\
.githubusercontent.com/u/465279?v=4" width="100px;" alt=""/><br\
 /><sub><b>Khem Raj</b></sub></a><br /><a href="https://github.com/CLIUtils/C\
LI11/commits?author=kraj" title="Code">💻</a></td>
    <td align="center"><a href="https://www.mogigoma.com/"><img\
 src="https://avatars2.githubusercontent.com/u/130862?v=4" width="100px;"\
 alt=""/><br /><sub><b>Mak Kolybabi</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=mogigoma" title="Documentation">📖</a></td>
    <td align="center"><a href="http://msoeken.github.io"><img\
 src="https://avatars0.githubusercontent.com/u/1998245?v=4" width="100px;"\
 alt=""/><br /><sub><b>Mathias Soeken</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=msoeken"\
 title="Documentation">📖</a></td>
    <td align="center"><a href="https://github.com/nathanhourt"><img\
 src="https://avatars2.githubusercontent.com/u/271977?v=4" width="100px;"\
 alt=""/><br /><sub><b>Nathan Hourt</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/issues?q=author%3Anathanhourt" title="Bug\
 reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits?author=nat\
hanhourt" title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/pleroux0"><img\
 src="https://avatars2.githubusercontent.com/u/39619854?v=4" width="100px;"\
 alt=""/><br /><sub><b>Paul le Roux</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=pleroux0" title="Code">💻</a> <a\
 href="#platform-pleroux0" title="Packaging/porting to new\
 platform">📦</a></td>
    <td align="center"><a href="https://github.com/chfast"><img\
 src="https://avatars1.githubusercontent.com/u/573380?v=4" width="100px;"\
 alt=""/><br /><sub><b>Paweł Bylica</b></sub></a><br /><a href="#platform-chf\
ast" title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://github.com/peterazmanov"><img\
 src="https://avatars0.githubusercontent.com/u/15322318?v=4" width="100px;"\
 alt=""/><br /><sub><b>Peter Azmanov</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=peterazmanov"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/delpinux"><img\
 src="https://avatars0.githubusercontent.com/u/35096584?v=4" width="100px;"\
 alt=""/><br /><sub><b>Stéphane Del Pino</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=delpinux"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/metopa"><img\
 src="https://avatars2.githubusercontent.com/u/3974178?v=4" width="100px;"\
 alt=""/><br /><sub><b>Viacheslav Kroilov</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=metopa"\
 title="Code">💻</a></td>
    <td align="center"><a href="http://cs.odu.edu/~ctsolakis"><img\
 src="https://avatars0.githubusercontent.com/u/6725596?v=4" width="100px;"\
 alt=""/><br /><sub><b>christos</b></sub></a><br /><a href="https://github.co\
m/CLIUtils/CLI11/commits?author=ChristosT" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/deining"><img\
 src="https://avatars3.githubusercontent.com/u/18169566?v=4" width="100px;"\
 alt=""/><br /><sub><b>deining</b></sub></a><br /><a href="https://github.com\
/CLIUtils/CLI11/commits?author=deining" title="Documentation">📖</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/elszon"><img\
 src="https://avatars0.githubusercontent.com/u/2971495?v=4" width="100px;"\
 alt=""/><br /><sub><b>elszon</b></sub></a><br /><a href="https://github.com/\
CLIUtils/CLI11/commits?author=elszon" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/ncihnegn"><img\
 src="https://avatars3.githubusercontent.com/u/12021721?v=4" width="100px;"\
 alt=""/><br /><sub><b>ncihnegn</b></sub></a><br /><a href="https://github.co\
m/CLIUtils/CLI11/commits?author=ncihnegn" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/nurelin"><img\
 src="https://avatars3.githubusercontent.com/u/5276274?v=4" width="100px;"\
 alt=""/><br /><sub><b>nurelin</b></sub></a><br /><a href="https://github.com\
/CLIUtils/CLI11/commits?author=nurelin" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/ryan4729"><img\
 src="https://avatars3.githubusercontent.com/u/40183301?v=4" width="100px;"\
 alt=""/><br /><sub><b>ryan4729</b></sub></a><br /><a href="https://github.co\
m/CLIUtils/CLI11/commits?author=ryan4729" title="Tests">⚠️</a></td>
    <td align="center"><a href="https://izzys.casa"><img src="https://avatars\
0.githubusercontent.com/u/63051?v=4" width="100px;" alt=""/><br\
 /><sub><b>Isabella Muerte</b></sub></a><br /><a href="#platform-slurps-mad-r\
ips" title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://github.com/KOLANICH"><img\
 src="https://avatars1.githubusercontent.com/u/240344?v=4" width="100px;"\
 alt=""/><br /><sub><b>KOLANICH</b></sub></a><br /><a href="#platform-KOLANIC\
H" title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://github.com/jgerityneurala"><img\
 src="https://avatars2.githubusercontent.com/u/57360646?v=4" width="100px;"\
 alt=""/><br /><sub><b>James Gerity</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=jgerityneurala" title="Documentation">📖</\
a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/jsoref"><img\
 src="https://avatars0.githubusercontent.com/u/2119212?v=4" width="100px;"\
 alt=""/><br /><sub><b>Josh Soref</b></sub></a><br /><a href="#tool-jsoref"\
 title="Tools">🔧</a></td>
    <td align="center"><a href="https://github.com/geir-t"><img\
 src="https://avatars3.githubusercontent.com/u/35292136?v=4" width="100px;"\
 alt=""/><br /><sub><b>geir-t</b></sub></a><br /><a href="#platform-geir-t"\
 title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://ondrejcertik.com/"><img\
 src="https://avatars3.githubusercontent.com/u/20568?v=4" width="100px;"\
 alt=""/><br /><sub><b>Ondřej Čertík</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Acertik" title="Bug\
 reports">🐛</a></td>
    <td align="center"><a href="http://sam.hocevar.net/"><img\
 src="https://avatars2.githubusercontent.com/u/245089?v=4" width="100px;"\
 alt=""/><br /><sub><b>Sam Hocevar</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/commits?author=samhocevar" title="Code">💻</a></td>
    <td align="center"><a href="http://www.ratml.org/"><img\
 src="https://avatars0.githubusercontent.com/u/1845039?v=4" width="100px;"\
 alt=""/><br /><sub><b>Ryan Curtin</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/commits?author=rcurtin" title="Documentation">📖</a></td>
    <td align="center"><a href="https://mbh.sh"><img src="https://avatars3.gi\
thubusercontent.com/u/20403931?v=4" width="100px;" alt=""/><br\
 /><sub><b>Michael Hall</b></sub></a><br /><a href="https://github.com/CLIUti\
ls/CLI11/commits?author=mbhall88" title="Documentation">📖</a></td>
    <td align="center"><a href="https://github.com/ferdymercury"><img\
 src="https://avatars3.githubusercontent.com/u/10653970?v=4" width="100px;"\
 alt=""/><br /><sub><b>ferdymercury</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=ferdymercury" title="Documentation">📖</a>\
</td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/jakoblover"><img\
 src="https://avatars0.githubusercontent.com/u/14160441?v=4" width="100px;"\
 alt=""/><br /><sub><b>Jakob Lover</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/commits?author=jakoblover" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/ZeeD26"><img\
 src="https://avatars2.githubusercontent.com/u/2487468?v=4" width="100px;"\
 alt=""/><br /><sub><b>Dominik Steinberger</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=ZeeD26"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dfleury2"><img\
 src="https://avatars1.githubusercontent.com/u/4805384?v=4" width="100px;"\
 alt=""/><br /><sub><b>D. Fleury</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/commits?author=dfleury2" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dbarowy"><img\
 src="https://avatars3.githubusercontent.com/u/573142?v=4" width="100px;"\
 alt=""/><br /><sub><b>Dan Barowy</b></sub></a><br /><a href="https://github.\
com/CLIUtils/CLI11/commits?author=dbarowy" title="Documentation">📖</a></td>
    <td align="center"><a href="https://github.com/paddy-hack"><img\
 src="https://avatars.githubusercontent.com/u/6804372?v=4" width="100px;"\
 alt=""/><br /><sub><b>Olaf Meeuwissen</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=paddy-hack"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dryleev"><img\
 src="https://avatars.githubusercontent.com/u/83670813?v=4" width="100px;"\
 alt=""/><br /><sub><b>dryleev</b></sub></a><br /><a href="https://github.com\
/CLIUtils/CLI11/commits?author=dryleev" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/AnticliMaxtic"><img\
 src="https://avatars.githubusercontent.com/u/43995389?v=4" width="100px;"\
 alt=""/><br /><sub><b>Max</b></sub></a><br /><a href="https://github.com/CLI\
Utils/CLI11/commits?author=AnticliMaxtic" title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://profiles.sussex.ac.uk/p281168-alex-de\
war/publications"><img src="https://avatars.githubusercontent.com/u/23149834?\
v=4" width="100px;" alt=""/><br /><sub><b>Alex Dewar</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=alexdewar"\
 title="Code">💻</a></td>
  </tr>
</table>

<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the [all-contributors](https://github.com/all-contributo\
rs/all-contributors) specification. Contributions of any kind welcome!

## License

As of version 1.0, this library is available under a 3-Clause BSD license.\
 See the [LICENSE](./LICENSE) file for details.

CLI11 was developed at the [University of Cincinnati][] to support of the\
 [GooFit][] library under [NSF Award 1414736][]. Version 0.9 was featured in\
 a [DIANA/HEP][] meeting at CERN ([see the slides][diana slides]). Please\
 give it a try! Feedback is always welcome.

[doi-badge]: https://zenodo.org/badge/80064252.svg
[doi-link]: https://zenodo.org/badge/latestdoi/80064252
[azure-badge]: https://dev.azure.com/CLIUtils/CLI11/_apis/build/status/CLIUti\
ls.CLI11?branchName=main
[azure]: https://dev.azure.com/CLIUtils/CLI11
[actions-link]: https://github.com/CLIUtils/CLI11/actions
[actions-badge]: https://github.com/CLIUtils/CLI11/actions/workflows/tests.ym\
l/badge.svg
[appveyor-badge]: https://ci.appveyor.com/api/projects/status/82niaxpaa28dwbm\
s/branch/main?svg=true
[appveyor]: https://ci.appveyor.com/project/HenrySchreiner/cli11
[repology-badge]: https://repology.org/badge/latest-versions/cli11.svg
[repology]: https://repology.org/project/cli11/versions
[codecov-badge]: https://codecov.io/gh/CLIUtils/CLI11/branch/main/graph/badge\
.svg?token=2O4wfs8NJO
[codecov]: https://codecov.io/gh/CLIUtils/CLI11
[gitter-badge]: https://badges.gitter.im/CLI11gitter/Lobby.svg
[gitter]: https://gitter.im/CLI11gitter/Lobby
[license-badge]: https://img.shields.io/badge/License-BSD-blue.svg
[conan-badge]: https://img.shields.io/badge/conan-io-blue
[conan-link]: https://conan.io/center/cli11
[conda-badge]: https://img.shields.io/conda/vn/conda-forge/cli11.svg
[conda-link]: https://github.com/conda-forge/cli11-feedstock
[github releases]: https://github.com/CLIUtils/CLI11/releases
[github issues]: https://github.com/CLIUtils/CLI11/issues
[github pull requests]: https://github.com/CLIUtils/CLI11/pulls
[goofit]: https://GooFit.github.io
[plumbum]: https://plumbum.readthedocs.io/en/latest/
[click]: http://click.pocoo.org
[api-docs]: https://CLIUtils.github.io/CLI11/index.html
[rang]: https://github.com/agauniyal/rang
[boost program options]: http://www.boost.org/doc/libs/1_63_0/doc/html/progra\
m_options.html
[the lean mean c++ option parser]: http://optionparser.sourceforge.net
[tclap]: http://tclap.sourceforge.net
[cxxopts]: https://github.com/jarro2783/cxxopts
[docopt]: https://github.com/docopt/docopt.cpp
[gflags]: https://gflags.github.io/gflags
[getopt]: https://www.gnu.org/software/libc/manual/html_node/Getopt.html
[diana/hep]: http://diana-hep.org
[nsf award 1414736]: https://nsf.gov/awardsearch/showAward?AWD_ID=1414736
[university of cincinnati]: http://www.uc.edu
[gitbook]: https://cliutils.github.io/CLI11/book/
[cli11 advanced topics/custom converters]: https://cliutils.gitlab.io/CLI11Tu\
torial/chapters/advanced-topics.html#custom-converters
[programoptions.hxx]: https://github.com/Fytch/ProgramOptions.hxx
[argument aggregator]: https://github.com/vietjtnguyen/argagg
[args]: https://github.com/Taywee/args
[argh!]: https://github.com/adishavit/argh
[fmt]: https://github.com/fmtlib/fmt
[catch]: https://github.com/philsquared/Catch
[clara]: https://github.com/philsquared/Clara
[version 1.0 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-10/
[version 1.3 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-13/
[version 1.6 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-16/
[version 2.0 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-20/
[wandbox-badge]: https://img.shields.io/badge/try_2.1-online-blue.svg
[wandbox-link]: https://wandbox.org/permlink/CA5bymNHh0AczdeN
[releases-badge]: https://img.shields.io/github/release/CLIUtils/CLI11.svg
[cli11-po-compare]: https://iscinumpy.gitlab.io/post/comparing-cli11-and-boos\
tpo/
[diana slides]: https://indico.cern.ch/event/619465/contributions/2507949/att\
achments/1448567/2232649/20170424-diana-2.pdf
[awesome c++]: https://github.com/fffaraz/awesome-cpp/blob/master/README.md#c\
li
[cli]: https://codesynthesis.com/projects/cli/
[single file libs]: https://github.com/nothings/single_file_libs/blob/master/\
README.md
[codacy-badge]: https://app.codacy.com/project/badge/Grade/2796b969c1b54321a0\
2ad08affec0800
[codacy-link]: https://www.codacy.com/gh/CLIUtils/CLI11/dashboard?utm_source=\
github.com&amp;utm_medium=referral&amp;utm_content=CLIUtils/CLI11&amp;utm_cam\
paign=Badge_Grade
[hunter]: https://docs.hunter.sh/en/latest/packages/pkg/CLI11.html
[standard readme style]: https://github.com/RichardLitt/standard-readme
[argparse]: https://github.com/p-ranav/argparse
[toml]: https://toml.io
[lyra]: https://github.com/bfgroup/Lyra

\
description-type: text/markdown;variant=GFM
url: https://github.com/CLIUtils/CLI11
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++11
tests: cli11-tests == 2.2.0
bootstrap-build:
\
project = cli11

using version
using config
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

\
location: cli11/cli11-2.2.0.tar.gz
sha256sum: 40489bd7c2a7d09788315a3893e20c2f6f79bc78030c50b800dcff2b9a2a9c42
:
name: cli11-tests
version: 2.2.0
project: cli11
summary: Tests package for cli11 library
license: BSD-3-Clause
description:
\
# CLI11: Command line parser for C++11

![CLI11 Logo](./docs/CLI11_300.png)

[![Build Status Azure][azure-badge]][azure]
[![Actions Status][actions-badge]][actions-link]
[![Build Status AppVeyor][appveyor-badge]][appveyor]
[![Code Coverage][codecov-badge]][codecov]
[![Codacy Badge][codacy-badge]][codacy-link]
[![License: BSD][license-badge]](./LICENSE)
[![DOI][doi-badge]][doi-link]

[![Gitter chat][gitter-badge]][gitter]
[![Latest GHA release][releases-badge]][github releases]
[![Latest release][repology-badge]][repology]
[![Conan.io][conan-badge]][conan-link]
[![Conda Version][conda-badge]][conda-link]
[![Try CLI11 2.1 online][wandbox-badge]][wandbox-link]

[What's new](./CHANGELOG.md) •
[Documentation][gitbook] •
[API Reference][api-docs]

CLI11 is a command line parser for C++11 and beyond that provides a rich\
 feature set with a simple and intuitive interface.

## Table of Contents

* [Background](#background)
  * [Introduction](#introduction)
  * [Why write another CLI parser?](#why-write-another-cli-parser)
  * [Other parsers](#other-parsers)
  * [Features not supported by this library](#features-not-supported-by-this-\
library)
* [Install](#install)
* [Usage](#usage)
  * [Adding options](#adding-options)
    * [Option types](#option-types)
    * [Example](#example)
    * [Option options](#option-options)
    * [Validators](#validators)
      * [Transforming Validators](#transforming-validators)
      * [Validator operations](#validator-operations)
      * [Custom Validators](#custom-validators)
      * [Querying Validators](#querying-validators)
      * [Getting Results](#getting-results)
  * [Subcommands](#subcommands)
    * [Subcommand options](#subcommand-options)
    * [Option groups](#option-groups)
    * [Callbacks](#callbacks)
  * [Configuration file](#configuration-file)
  * [Inheriting defaults](#inheriting-defaults)
  * [Formatting](#formatting)
  * [Subclassing](#subclassing)
  * [How it works](#how-it-works)
  * [Utilities](#utilities)
  * [Other libraries](#other-libraries)
* [API](#api)
* [Examples](#Examples)
* [Contribute](#contribute)
* [License](#license)

Features that were added in the last released minor version are marked with\
 "🆕". Features only available in main are marked with "🚧".

## Background

### Introduction

CLI11 provides all the features you expect in a powerful command line parser,\
 with a beautiful, minimal syntax and no dependencies beyond C++11. It is\
 header only, and comes in a single file form for easy inclusion in projects.\
 It is easy to use for small projects, but powerful enough for complex\
 command line projects, and can be customized for frameworks.
It is tested on [Azure][] and [GitHub Actions][actions-link], and was\
 originally used by the [GooFit GPU fitting framework][goofit]. It was\
 inspired by [`plumbum.cli`][plumbum] for Python. CLI11 has a user friendly\
 introduction in this README, a more in-depth tutorial [GitBook][], as well\
 as [API documentation][api-docs] generated by Travis.
See the [changelog](./CHANGELOG.md) or [GitHub Releases][] for details for\
 current and past releases. Also see the [Version 1.0 post][], [Version 1.3\
 post][], [Version 1.6 post][], or [Version 2.0 post][] for more information.

You can be notified when new releases are made by subscribing to\
 <https://github.com/CLIUtils/CLI11/releases.atom> on an RSS reader, like\
 Feedly, or use the releases mode of the GitHub watching tool.

### Why write another CLI parser?

An acceptable CLI parser library should be all of the following:

* Easy to include (i.e., header only, one file if possible, **no external\
 requirements**).
* Short, simple syntax: This is one of the main reasons to use a CLI parser,\
 it should make variables from the command line nearly as easy to define as\
 any other variables. If most of your program is hidden in CLI parsing, this\
 is a problem for readability.
* C++11 or better: Should work with GCC 4.8+ (default on CentOS/RHEL 7),\
 Clang 3.4+, AppleClang 7+, NVCC 7.0+, or MSVC 2015+.
* Work on Linux, macOS, and Windows.
* Well tested on all common platforms and compilers. "Well" is defined as\
 having good coverage measured by [CodeCov][].
* Clear help printing.
* Nice error messages.
* Standard shell idioms supported naturally, like grouping flags, a\
 positional separator, etc.
* Easy to execute, with help, parse errors, etc. providing correct exit and\
 details.
* Easy to extend as part of a framework that provides "applications" to users.
* Usable subcommand syntax, with support for multiple subcommands, nested\
 subcommands, option groups, and optional fallthrough (explained later).
* Ability to add a configuration file (`TOML`, `INI`, or custom format), and\
 produce it as well.
* Produce real values that can be used directly in code, not something you\
 have pay compute time to look up, for HPC applications.
* Work with common types, simple custom types, and extensible to exotic types.
* Permissively licensed.

### Other parsers

<details><summary>The major CLI parsers for C++ include, with my biased\
 opinions: (click to expand)</summary><p>

| Library                             | My biased opinion                    \
                                                                             \
                                                                             \
                                                                             \
                                                                             \
                                                                          |
| ----------------------------------- | -------------------------------------\
-----------------------------------------------------------------------------\
-----------------------------------------------------------------------------\
-----------------------------------------------------------------------------\
-----------------------------------------------------------------------------\
------------------------------------------------------------------------- |
| [Boost Program Options][]           | A great library if you already depend\
 on Boost, but its pre-C++11 syntax is really odd and setting up the correct\
 call in the main function is poorly documented (and is nearly a page of\
 code). A simple wrapper for the Boost library was originally developed, but\
 was discarded as CLI11 became more powerful. The idea of capturing a value\
 and setting it originated with Boost PO. [See this comparison.][cli11-po-com\
pare] |
| [The Lean Mean C++ Option Parser][] | One header file is great, but the\
 syntax is atrocious, in my opinion. It was quite impractical to wrap the\
 syntax or to use in a complex project. It seems to handle standard parsing\
 quite well.                                                                 \
                                                                             \
                                                                             \
       |
| [TCLAP][]                           | The not-quite-standard command line\
 parsing causes common shortcuts to fail. It also seems to be poorly\
 supported, with only minimal bugfixes accepted. Header only, but in quite a\
 few files. Has not managed to get enough support to move to GitHub yet. No\
 subcommands. Produces wrapped values.                                       \
                                                                             \
           |
| [Cxxopts][]                         | C++11, single file, and nice CMake\
 support, but requires regex, therefore GCC 4.8 (CentOS 7 default) does not\
 work. Syntax closely based on Boost PO, so not ideal but familiar.          \
                                                                             \
                                                                             \
                                                                             \
  |
| [DocOpt][]                          | Completely different approach to\
 program options in C++11, you write the docs and the interface is generated.\
 Too fragile and specialized.                                                \
                                                                             \
                                                                             \
                                                                             \
  |

After I wrote this, I also found the following libraries:

| Library                 | My biased opinion                                \
                                                                             \
                                                       |
| ----------------------- | -------------------------------------------------\
-----------------------------------------------------------------------------\
------------------------------------------------------ |
| [GFlags][]              | The Google Commandline Flags library. Uses macros\
 heavily, and is limited in scope, missing things like subcommands. It\
 provides a simple syntax and supports config files/env vars. |
| [GetOpt][]              | Very limited C solution with long, convoluted\
 syntax. Does not support much of anything, like help generation. Always\
 available on UNIX, though (but in different flavors).          |
| [ProgramOptions.hxx][]  | Interesting library, less powerful and no\
 subcommands. Nice callback system.                                          \
                                                               |
| [Args][]                | Also interesting, and supports subcommands. I\
 like the optional-like design, but CLI11 is cleaner and provides direct\
 value access, and is less verbose.                             |
| [Argument Aggregator][] | I'm a big fan of the [fmt][] library, and the\
 try-catch statement looks familiar.  :thumbsup: Doesn't seem to support\
 subcommands.                                                   |
| [Clara][]               | Simple library built for the excellent [Catch][]\
 testing framework. Unique syntax, limited scope.                            \
                                                        |
| [Argh!][]               | Very minimalistic C++11 parser, single header.\
 Don't have many features. No help generation?!?! At least it's\
 exception-free.                                                        |
| [CLI][]                 | Custom language and parser. Huge build-system\
 overkill for very little benefit. Last release in 2009, but still\
 occasionally active.                                                 |
| [argparse][]            | C++17 single file argument parser. Design seems\
 similar to CLI11 in some ways. The author has several other interesting\
 projects.                                                    |
| [lyra][]                | a simple header only parser with composable\
 options.  Might work well for simple standardized parsing                   \
  |

See [Awesome C++][] for a less-biased list of parsers. You can also find\
 other single file libraries at [Single file libs][].

</p></details>
<br/>

None of these libraries fulfill all the above requirements, or really even\
 come close. As you probably have already guessed, CLI11 does.
So, this library was designed to provide a great syntax, good compiler\
 compatibility, and minimal installation fuss.

### Features not supported by this library

There are some other possible "features" that are intentionally not supported\
 by this library:

* Non-standard variations on syntax, like `-long` options. This is\
 non-standard and should be avoided, so that is enforced by this library.
* Completion of partial options, such as Python's `argparse` supplies for\
 incomplete arguments. It's better not to guess. Most third party command\
 line parsers for python actually reimplement command line parsing rather\
 than using argparse because of this perceived design flaw (recent versions\
 do have an option to disable it).
* Autocomplete: This might eventually be added to both Plumbum and CLI11, but\
 it is not supported yet.
* Wide strings / unicode: Since this uses the standard library only, it might\
 be hard to properly implement, but I would be open to suggestions in how to\
 do this.

## Install

To use, there are several methods:

* All-in-one local header: Copy `CLI11.hpp` from the [most recent\
 release][github releases] into your include directory, and you are set. This\
 is combined from the source files  for every release. This includes the\
 entire command parser library, but does not include separate utilities (like\
 `Timer`, `AutoTimer`). The utilities are completely self contained and can\
 be copied separately.
* All-in-one global header: Like above, but copying the file to a shared\
 folder location like `/opt/CLI11`. Then, the C++ include path has to be\
 extended to point at this folder. With CMake, use `include_directories(/opt/\
CLI11)`
* Local headers and target: Use `CLI/*.hpp` files. You could check out the\
 repository as a git submodule, for example. With CMake, you can use\
 `add_subdirectory` and the `CLI11::CLI11` interface target when linking. If\
 not using a submodule, you must ensure that the copied files are located\
 inside the same tree directory than your current project, to prevent an\
 error with CMake and `add_subdirectory`.
* Global headers: Use `CLI/*.hpp` files stored in a shared folder. You could\
 check out the git repository to a system-wide folder, for example `/opt/`.\
 With CMake, you could add to the include path via:

```bash
if(NOT DEFINED CLI11_DIR)
set (CLI11_DIR "/opt/CLI11" CACHE STRING "CLI11 git repository")
endif()
include_directories(${CLI11_DIR}/include)
```

And then in the source code (adding several headers might be needed to\
 prevent linker errors):

```cpp
#include "CLI/App.hpp"
#include "CLI/Formatter.hpp"
#include "CLI/Config.hpp"
```

* Global headers and target: configuring and installing the project is\
 required for linking CLI11 to your project in the same way as you would do\
 with any other external library. With CMake, this step allows using\
 `find_package(CLI11 CONFIG REQUIRED)` and then using the `CLI11::CLI11`\
 target when linking. If `CMAKE_INSTALL_PREFIX` was changed during install to\
 a specific folder like `/opt/CLI11`, then you have to pass\
 `-DCLI11_DIR=/opt/CLI11` when building your current project. You can also\
 use [Conan.io][conan-link] or [Hunter][].
    (These are just conveniences to allow you to use your favorite method of\
 managing packages; it's just header only so including the correct path and
    using C++11 is all you really need.)
* Via FetchContent in CMake 3.14+ (or 3.11+ with more work): you can add this\
 with fetch-content, then use the `CLI11::CLI11` target as above, and CMake\
 will download the project in the configure stage:

```cmake
include(FetchContent)
FetchContent_Declare(
  cli11
  GIT_REPOSITORY https://github.com/CLIUtils/CLI11
  GIT_TAG        v2.2.0
)

FetchContent_MakeAvailable(cli11)
```

It is highly recommended that you use the git hash for `GIT_TAG` instead of a\
 tag or branch, as that will both be more secure, as well as faster to\
 reconfigure - CMake will not have to reach out to the internet to see if the\
 tag moved. You can also download just the single header file from the\
 releases using `file(DOWNLOAD`.

To build the tests, checkout the repository and use CMake:

```bash
cmake -S . -B build
cmake --build build
CTEST_OUTPUT_ON_FAILURE=1 cmake --build build -t test
```

<details><summary>Note: Special instructions for GCC 8</summary><p>

If you are using GCC 8 and using it in C++17 mode with CLI11.  CLI11 makes\
 use of the `<filesystem>` header if available, but specifically for this\
 compiler, the `filesystem` library is separate from the standard library and\
 needs to be linked separately. So it is available but CLI11 doesn't use it\
 by default.

Specifically `libstdc++fs` needs to be added to the linking list and\
 `CLI11_HAS_FILESYSTEM=1` has to be defined.  Then the filesystem variant of\
 the Validators could be used on GCC 8.  GCC 9+ does not have this issue so\
 the `<filesystem>` is used by default.

There may also be other cases where a specific library needs to be linked.

Defining `CLI11_HAS_FILESYSTEM=0`  which will remove the usage and hence any\
 linking issue.

In some cases certain clang compilations may require linking against\
 `libc++fs`.  These situations have not been encountered so the specific\
 situations requiring them are unknown yet.

</p></details>
</br>

## Usage

### Adding options

To set up, add options, and run, your main function will look something like\
 this:

```cpp
int main(int argc, char** argv) {
    CLI::App app{"App description"};

    std::string filename = "default";
    app.add_option("-f,--file", filename, "A help string");

    CLI11_PARSE(app, argc, argv);
    return 0;
}
```

<details><summary>Note: If you don't like macros, this is what that macro\
 expands to: (click to expand)</summary><p>

```cpp
try {
    app.parse(argc, argv);
} catch (const CLI::ParseError &e) {
    return app.exit(e);
}
```

The try/catch block ensures that `-h,--help` or a parse error will exit with\
 the correct return code (selected from `CLI::ExitCodes`). (The return here\
 should be inside `main`). You should not assume that the option values have\
 been set inside the catch block; for example, help flags intentionally\
 short-circuit all other processing for speed and to ensure required options\
 and the like do not interfere.

</p></details>
</br>

The initialization is just one line, adding options is just two each. The\
 parse macro is just one line (or 5 for the contents of the macro).  After\
 the app runs, the filename will be set to the correct value if it was\
 passed, otherwise it will be set to the default. You can check to see if\
 this was passed on the command line with `app.count("--file")`.

#### Option types

While all options internally are the same type, there are several ways to add\
 an option depending on what you need. The supported values are:

```cpp
// Add options
app.add_option(option_name, help_str="")

app.add_option(option_name,
               variable_to_bind_to, // bool, char(see note), int, float,\
 vector, enum, std::atomic, or string-like, or anything with a defined\
 conversion from a string or that takes an int, double, or string in a\
 constructor. Also allowed are tuples, std::array or std::pair. Also\
 supported are complex numbers, wrapper types, and containers besides vectors\
 of any other supported type.
               help_string="")

app.add_option_function<type>(option_name,
               function <void(const type &value)>, // type can be any type\
 supported by add_option
               help_string="")

// char as an option type is supported before 2.0 but in 2.0 it defaulted to\
 allowing single non numerical characters in addition to the numeric values.

// There is a template overload which takes two template parameters the first\
 is the type of object to assign the value to, the second is the conversion\
 type.  The conversion type should have a known way to convert from a string,\
 such as any of the types that work in the non-template version.  If XC is a\
 std::pair and T is some non pair type.  Then a two argument constructor for\
 T is called to assign the value.  For tuples or other multi element types,\
 XC must be a single type or a tuple like object of the same size as the\
 assignment type
app.add_option<typename T, typename XC>(option_name,
               T &output, // output must be assignable or constructible from\
 a value of type XC
               help_string="")

// Add flags
app.add_flag(option_name,
             help_string="")

app.add_flag(option_name,
             variable_to_bind_to, // bool, int, float, complex, containers,\
 enum, std::atomic, or string-like, or any singular object with a defined\
 conversion from a string like add_option
             help_string="")

app.add_flag_function(option_name,
             function <void(std::int64_t count)>,
             help_string="")

app.add_flag_callback(option_name,function<void(void)>,help_string="")

// Add subcommands
App* subcom = app.add_subcommand(name, description);

Option_group *app.add_option_group(name,description);
```

An option name may start with any character except ('-', ' ', '\n', and '!').\
 For long options, after the first character all characters are allowed\
 except ('=',':','{',' ', '\n'). For the `add_flag*` functions '{' and '!'\
 have special meaning which is why they are not allowed. Names are given as a\
 comma separated string, with the dash or dashes. An option or flag can have\
 as many names as you want, and afterward, using `count`, you can use any of\
 the names, with dashes as needed, to count the options. One of the names is\
 allowed to be given without proceeding dash(es); if present the option is a\
 positional option, and that name will be used on the help line for its\
 positional form.

The `add_option_function<type>(...` function will typically require the\
 template parameter be given unless a `std::function` object with an exact\
 match is passed.  The type can be any type supported by the `add_option`\
 function. The function should throw an error (`CLI::ConversionError` or\
 `CLI::ValidationError` possibly) if the value is not valid.

The two parameter template overload can be used in cases where you want to\
 restrict the input such as

```cpp
double val
app.add_option<double,unsigned int>("-v",val);
```

which would first verify the input is convertible to an `unsigned int` before\
 assigning it.  Or using some variant type

```cpp
using vtype=std::variant<int, double, std::string>;
 vtype v1;
app.add_option<vtype,std:string>("--vs",v1);
app.add_option<vtype,int>("--vi",v1);
app.add_option<vtype,double>("--vf",v1);
```

otherwise the output would default to a string.  The `add_option` can be used\
 with any integral or floating point types, enumerations, or strings.  Or any\
 type that takes an int, double, or std\::string in an assignment operator or\
 constructor.  If an object can take multiple varieties of those, std::string\
 takes precedence, then double then int.    To better control which one is\
 used or to use another type for the underlying conversions use the two\
 parameter template to directly specify the conversion type.

Types such as (std or boost) `optional<int>`, `optional<double>`, and\
 `optional<string>` and any other wrapper types are supported directly. For\
 purposes of CLI11 wrapper types are those which `value_type` definition. \
 See [CLI11 Advanced Topics/Custom Converters][] for information on how you\
 can add your own converters for additional types.

Vector types can also be used in the two parameter template overload

```cpp
std::vector<double> v1;
app.add_option<std::vector<double>,int>("--vs",v1);
```

would load a vector of doubles but ensure all values can be represented as\
 integers.

Automatic direct capture of the default string is disabled when using the two\
 parameter template.  Use `set_default_str(...)` or `->default_function(std::\
string())` to set the default string or capture function directly for these\
 cases.

Flag options specified through the `add_flag*` functions allow a syntax for\
 the option names to default particular options to a false value or any other\
 value if some flags are passed.  For example:

```cpp
app.add_flag("--flag,!--no-flag",result,"help for flag");
```

specifies that if `--flag` is passed on the command line result will be true\
 or contain a value of 1. If `--no-flag` is
passed `result` will contain false or -1 if `result` is a signed integer\
 type, or 0 if it is an unsigned type.  An
alternative form of the syntax is more explicit: `"--flag,--no-flag{false}"`;\
 this is equivalent to the previous
example.  This also works for short form options `"-f,!-n"` or\
 `"-f,-n{false}"`. If `variable_to_bind_to` is anything but an integer value\
 the
default behavior is to take the last value given, while if\
 `variable_to_bind_to` is an integer type the behavior will be to sum
all the given arguments and return the result.  This can be modified if\
 needed by changing the `multi_option_policy` on each flag (this is not\
 inherited).
The default value can be any value. For example if you wished to define a\
 numerical flag:

```cpp
app.add_flag("-1{1},-2{2},-3{3}",result,"numerical flag")
```

Using any of those flags on the command line will result in the specified\
 number in the output.  Similar things can be done for string values, and\
 enumerations, as long as the default value can be converted to the given\
 type.

On a `C++14` compiler, you can pass a callback function directly to\
 `.add_flag`, while in C++11 mode you'll need to use `.add_flag_function` if\
 you want a callback function. The function will be given the number of times\
 the flag was passed. You can throw a relevant `CLI::ParseError` to signal a\
 failure.

#### Example

* `"one,-o,--one"`: Valid as long as not a flag, would create an option that\
 can be specified positionally, or with `-o` or `--one`
* `"this"` Can only be passed positionally
* `"-a,-b,-c"` No limit to the number of non-positional option names

The add commands return a pointer to an internally stored `Option`.
This option can be used directly to check for the count (`->count()`) after\
 parsing to avoid a string based lookup.

#### Option options

Before parsing, you can set the following options:

* `->required()`: The program will quit if this option is not present. This\
 is `mandatory` in Plumbum, but required options seems to be a more standard\
 term. For compatibility, `->mandatory()` also works.
* `->expected(N)`: Take `N` values instead of as many as possible, only for\
 vector args. If negative, require at least `-N`; end with `--` or another\
 recognized option or subcommand.
* `->expected(MIN,MAX)`: Set a range of expected values to accompany an\
 option.  `expected(0,1)` is the equivalent of making a flag.
* `->type_name(typename)`: Set the name of an Option's type (`type_name_fn`\
 allows a function instead)
* `->type_size(N)`: Set the intrinsic size of an option value. The parser\
 will require multiples of this number if negative. Most of the time this is\
 detected automatically though can be modified for specific use cases.
* `->type_size(MIN,MAX)`: Set the intrinsic size of an option to a range.
* `->needs(opt)`: This option requires another option to also be present, opt\
 is an `Option` pointer. Options can be removed from the `needs` with\
 `remove_needs(opt)`. The option can also be specified with a string\
 containing the name of the option
* `->excludes(opt)`: This option cannot be given with `opt` present, opt is\
 an `Option` pointer.  Can also be given as a string containing the name of\
 the option.  Options can be removed from the excludes list with\
 `->remove_excludes(opt)`
* `->envname(name)`: Gets the value from the environment if present and not\
 passed on the command line.
* `->group(name)`: The help group to put the option in. No effect for\
 positional options. Defaults to `"Options"`. `""` will not show up in the\
 help print (hidden).
* `->ignore_case()`: Ignore the case on the command line (also works on\
 subcommands, does not affect arguments).
* `->ignore_underscore()`: Ignore any underscores in the options names (also\
 works on subcommands, does not affect arguments). For example "option_one"\
 will match with "optionone".  This does not apply to short form options\
 since they only have one character
* `->disable_flag_override()`: From the command line long form flag options\
 can be assigned a value on the command line using the `=` notation\
 `--flag=value`. If this behavior is not desired, the `disable_flag_override(\
)` disables it and will generate an exception if it is done on the command\
 line.  The `=` does not work with short form flag options.
* `->allow_extra_args(true/false)`: If set to true the option will take an\
 unlimited number of arguments like a vector, if false it will limit the\
 number of arguments to the size of the type used in the option.  Default\
 value depends on the nature of the type use, containers default to true,\
 others default to false.
* `->delimiter(char)`: Allows specification of a custom delimiter for\
 separating single arguments into vector arguments, for example specifying\
 `->delimiter(',')` on an option would result in `--opt=1,2,3` producing 3\
 elements of a vector and the equivalent of --opt 1 2 3 assuming opt is a\
 vector value.
* `->description(str)`: Set/change the description.
* `->multi_option_policy(CLI::MultiOptionPolicy::Throw)`: Set the\
 multi-option policy. Shortcuts available: `->take_last()`,\
 `->take_first()`,`->take_all()`, and `->join()`. This will only affect\
 options expecting 1 argument or bool flags (which do not inherit their\
 default but always start with a specific policy). `->join(delim)` can also\
 be used to join with a specific delimiter. This equivalent to calling\
 `->delimiter(delim)` and `->join()`.  Valid values are `CLI::MultiOptionPoli\
cy::Throw`, `CLI::MultiOptionPolicy::Throw`, `CLI::MultiOptionPolicy::TakeLas\
t`, `CLI::MultiOptionPolicy::TakeFirst`, `CLI::MultiOptionPolicy::Join`,\
 `CLI::MultiOptionPolicy::TakeAll`, and `CLI::MultiOptionPolicy::Sum` 🚧.
* `->check(std::string(const std::string &), validator_name="",validator_desc\
ription="")`: Define a check function.  The function should return a non\
 empty string with the error message if the check fails
* `->check(Validator)`: Use a Validator object to do the check see\
 [Validators](#validators) for a description of available Validators and how\
 to create new ones.
* `->transform(std::string(std::string &), validator_name="",validator_descri\
ption=")`: Converts the input string into the output string, in-place in the\
 parsed options.
* `->transform(Validator)`: Uses a Validator object to do the transformation\
 see [Validators](#validators) for a description of available Validators and\
 how to create new ones.
* `->each(void(const std::string &)>`: Run this function on each value\
 received, as it is received. It should throw a `ValidationError` if an error\
 is encountered.
* `->configurable(false)`: Disable this option from being in a configuration\
 file.
* `->capture_default_str()`: Store the current value attached and display it\
 in the help string.
* `->default_function(std::string())`: Advanced: Change the function that\
 `capture_default_str()` uses.
* `->always_capture_default()`: Always run `capture_default_str()` when\
 creating new options. Only useful on an App's `option_defaults`.
* `->default_str(string)`:  Set the default string directly (NO VALIDATION OR\
 CALLBACKS).  This string will also be used as a default value if no\
 arguments are passed and the value is requested.
* `->default_val(value)`: Generate the default string from a value and\
 validate that the value is also valid.  For options that assign directly to\
 a value type the value in that type is also updated.  Value must be\
 convertible to a string(one of known types or have a stream operator). The\
 callback may be triggered if the `run_callback_for_default` is set.
* `->run_callback_for_default()`: This will force the option callback to be\
 executed or the variable set when the `default_val` is set.
* `->option_text(string)`: Sets the text between the option name and\
 description.
* `->force_callback()`: Causes the option callback or value set to be\
 triggered even if the option was not present in parsing.
* `->trigger_on_parse()`: If set, causes the callback and all associated\
 validation checks for the option to be executed when the option value is\
 parsed vs. at the end of all parsing. This could cause the callback to be\
 executed multiple times. Also works with positional options 🆕.

These options return the `Option` pointer, so you can chain them together,\
 and even skip storing the pointer entirely. The `each` function takes any\
 function that has the signature `void(const std::string&)`; it should throw\
 a `ValidationError` when validation fails. The help message will have the\
 name of the parent option prepended. Since `each`, `check` and `transform`\
 use the same underlying mechanism, you can chain as many as you want, and\
 they will be executed in order. Operations added through `transform` are\
 executed first in reverse order of addition, and `check` and `each` are run\
 following the transform functions in order of addition. If you just want to\
 see the unconverted values, use `.results()` to get the `std::vector<std::st\
ring>` of results.

On the command line, options can be given as:

* `-a` (flag)
* `-abc` (flags can be combined)
* `-f filename` (option)
* `-ffilename` (no space required)
* `-abcf filename` (flags and option can be combined)
* `--long` (long flag)
* `--long_flag=true` (long flag with equals to override default value)
* `--file filename` (space)
* `--file=filename` (equals)

If `allow_windows_style_options()` is specified in the application or\
 subcommand options can also be given as:

* `/a` (flag)
* `/f filename` (option)
* `/long` (long flag)
* `/file filename` (space)
* `/file:filename` (colon)
* `/long_flag:false` (long flag with : to override the default value)
  * Windows style options do not allow combining short options or values not\
 separated from the short option like with `-` options

Long flag options may be given with an `=<value>` to allow specifying a false\
 value, or some other value to the flag. See [config files](#configuration-fi\
le) for details on the values supported.  NOTE: only the `=` or `:` for\
 windows-style options may be used for this, using a space will result in the\
 argument being interpreted as a positional argument.  This syntax can\
 override the default values, and can be disabled by using\
 `disable_flag_override()`.

Extra positional arguments will cause the program to exit, so at least one\
 positional option with a vector is recommended if you want to allow\
 extraneous arguments.
If you set `.allow_extras()` on the main `App`, you will not get an error.\
 You can access the missing options using `remaining` (if you have\
 subcommands, `app.remaining(true)` will get all remaining options,\
 subcommands included).
If the remaining arguments are to processed by another `App` then the\
 function `remaining_for_passthrough()` can be used to get the remaining\
 arguments in reverse order such that `app.parse(vector)` works directly and\
 could even be used inside a subcommand callback.

You can access a vector of pointers to the parsed options in the original\
 order using `parse_order()`.
If `--` is present in the command line that does not end an unlimited option,\
 then
everything after that is positional only.

#### Validators
Validators are structures to check or modify inputs, they can be used to\
 verify that an input meets certain criteria or transform it into another\
 value.  They are added through the `check` or `transform` functions.  The\
 differences between the two function are that checks do not modify the input\
 whereas transforms can and are executed before any Validators added through\
 `check`.

CLI11 has several Validators built-in that perform some common checks

* `CLI::IsMember(...)`: Require an option be a member of a given set. See\
 [Transforming Validators](#transforming-validators) for more details.
* `CLI::Transformer(...)`: Modify the input using a map. See [Transforming\
 Validators](#transforming-validators) for more details.
* `CLI::CheckedTransformer(...)`: Modify the input using a map, and require\
 that the input is either in the set or already one of the outputs of the\
 set. See [Transforming Validators](#transforming-validators) for more\
 details.
* `CLI::AsNumberWithUnit(...)`: Modify the `<NUMBER> <UNIT>` pair by matching\
 the unit and multiplying the number by the corresponding factor. It can be\
 used as a base for transformers, that accept things like size values (`1\
 KB`) or durations (`0.33 ms`).
* `CLI::AsSizeValue(...)`: Convert inputs like `100b`, `42 KB`, `101 Mb`, `11\
 Mib` to absolute values. `KB` can be configured to be interpreted as 10^3 or\
 2^10.
* `CLI::ExistingFile`: Requires that the file exists if given.
* `CLI::ExistingDirectory`: Requires that the directory exists.
* `CLI::ExistingPath`: Requires that the path (file or directory) exists.
* `CLI::NonexistentPath`: Requires that the path does not exist.
* `CLI::FileOnDefaultPath`: 🆕 Best used as a transform, Will check that a\
 file exists either directly or in a default path and update the path\
 appropriately.  See [Transforming Validators](#transforming-validators) for\
 more details
* `CLI::Range(min,max)`: Requires that the option be between min and max\
 (make sure to use floating point if needed). Min defaults to 0.
* `CLI::Bounded(min,max)`: Modify the input such that it is always between\
 min and max (make sure to use floating point if needed). Min defaults to 0. \
 Will produce an error if conversion is not possible.
* `CLI::PositiveNumber`: Requires the number be greater than 0
* `CLI::NonNegativeNumber`: Requires the number be greater or equal to 0
* `CLI::Number`: Requires the input be a number.
* `CLI::ValidIPV4`: Requires that the option be a valid IPv4 string e.g.\
 `'255.255.255.255'`, `'10.1.1.7'`.
* `CLI::TypeValidator<TYPE>`:Requires that the option be convertible to the\
 specified type e.g.  `CLI::TypeValidator<unsigned int>()` would require that\
 the input be convertible to an `unsigned int` regardless of the end\
 conversion.

These Validators can be used by simply passing the name into the `check` or\
 `transform` methods on an option

```cpp
->check(CLI::ExistingFile);
->check(CLI::Range(0,10));
```

Validators can be merged using `&` and `|` and inverted using `!`. For\
 example:

```cpp
->check(CLI::Range(0,10)|CLI::Range(20,30));
```

will produce a check to ensure a value is between 0 and 10 or 20 and 30.

```cpp
->check(!CLI::PositiveNumber);
```

will produce a check for a number less than or equal to 0.

##### Transforming Validators

There are a few built in Validators that let you transform values if used\
 with the `transform` function.  If they also do some checks then they can be\
 used `check` but some may do nothing in that case.

* `CLI::Bounded(min,max)` will bound values between min and max and values\
 outside of that range are limited to min or max,  it will fail if the value\
 cannot be converted and produce a `ValidationError`
* The `IsMember` Validator lets you specify a set of predefined options. You\
 can pass any container or copyable pointer (including `std::shared_ptr`) to\
 a container to this Validator; the container just needs to be iterable and\
 have a `::value_type`. The key type should be convertible from a string, \
 You can use an initializer list directly if you like. If you need to modify\
 the set later, the pointer form lets you do that; the type message and check\
 will correctly refer to the current version of the set.  The container\
 passed in can be a set, vector, or a map like structure. If used in the\
 `transform` method the output value will be the matching key as it could be\
 modified by filters.

After specifying a set of options, you can also specify "filter" functions of\
 the form `T(T)`, where `T` is the type of the values. The most common\
 choices probably will be `CLI::ignore_case` an `CLI::ignore_underscore`, and\
 `CLI::ignore_space`.  These all work on strings but it is possible to define\
 functions that work on other types. Here are some examples of `IsMember`:

* `CLI::IsMember({"choice1", "choice2"})`: Select from exact match to choices.
* `CLI::IsMember({"choice1", "choice2"}, CLI::ignore_case,\
 CLI::ignore_underscore)`: Match things like `Choice_1`, too.
* `CLI::IsMember(std::set<int>({2,3,4}))`: Most containers and types work;\
 you just need `std::begin`, `std::end`, and `::value_type`.
* `CLI::IsMember(std::map<std::string, TYPE>({{"one", 1}, {"two", 2}}))`: You\
 can use maps; in `->transform()` these replace the matched value with the\
 matched key.  The value member of the map is not used in `IsMember`, so it\
 can be any type.
* `auto p = std::make_shared<std::vector<std::string>>(std::initializer_list<\
std::string>("one", "two")); CLI::IsMember(p)`: You can modify `p` later.
* The `Transformer` and `CheckedTransformer` Validators transform one value\
 into another. Any container or copyable pointer (including\
 `std::shared_ptr`) to a container that generates pairs of values can be\
 passed to these `Validator's`; the container just needs to be iterable and\
 have a `::value_type` that consists of pairs. The key type should be\
 convertible from a string, and the value type should be convertible to a\
 string  You can use an initializer list directly if you like. If you need to\
 modify the map later, the pointer form lets you do that; the description\
 message will correctly refer to the current version of the map. \
 `Transformer` does not do any checking so values not in the map are ignored.\
  `CheckedTransformer` takes an extra step of verifying that the value is\
 either one of the map key values, in which case it is transformed, or one of\
 the expected output values, and if not will generate a `ValidationError`.  A\
 Transformer placed using `check` will not do anything.

After specifying a map of options, you can also specify "filter" just like in\
 `CLI::IsMember`.
Here are some examples (`Transformer` and `CheckedTransformer` are\
 interchangeable in the examples)
of `Transformer`:

* `CLI::Transformer({{"key1", "map1"},{"key2","map2"}})`: Select from key\
 values and produce map values.
* `CLI::Transformer(std::map<std::string,int>({"two",2},{"three",3},{"four",4\
}}))`: most maplike containers work,  the `::value_type` needs to produce a\
 pair of some kind.
* `CLI::CheckedTransformer(std::map<std::string, int>({{"one", 1}, {"two",\
 2}}))`: You can use maps; in `->transform()` these replace the matched key\
 with the value.  `CheckedTransformer` also requires that the value either\
 match one of the keys or match one of known outputs.
* `auto p = std::make_shared<CLI::TransformPairs<std::string>>(std::initializ\
er_list<std::pair<std::string,std::string>>({"key1", "map1"},{"key2","map2"})\
); CLI::Transformer(p)`: You can modify `p` later. `TransformPairs<T>` is an\
 alias for `std::vector<std::pair<<std::string,T>>`

NOTES:  If the container used in `IsMember`, `Transformer`, or\
 `CheckedTransformer` has a `find` function like `std::unordered_map`  or\
 `std::map` then that function is used to do the searching. If it does not\
 have a `find` function a linear search is performed.  If there are filters\
 present, the fast search is performed first, and if that fails a linear\
 search with the filters on the key values is performed.

* `CLI::FileOnDefaultPath(default_path)`: 🆕 can be used to check for files in\
 a default path.  If used as a transform it will first check that a file\
 exists, if it does nothing further is done,  if it does not it tries to add\
 a default Path to the file and search there again.  If the file does not\
 exist an error is returned normally but this can be disabled using\
 CLI::FileOnDefaultPath(default_path, false).  This allows multiple paths to\
 be chained using multiple transform calls.

##### Validator operations

Validators are copyable and have a few operations that can be performed on\
 them to alter settings.  Most of the built in Validators have a default\
 description that is displayed in the help.  This can be altered via\
 `.description(validator_description)`.
The name of a Validator, which is useful for later reference from the\
 `get_validator(name)` method of an `Option` can be set via\
 `.name(validator_name)`
The operation function of a Validator can be set via
`.operation(std::function<std::string(std::string &>)`.  The `.active()`\
 function can activate or deactivate a Validator from the operation.  A\
 validator can be set to apply only to a specific element of the output.  For\
 example in a pair option `std::pair<int, std::string>` the first element may\
 need to be a positive integer while the second may need to be a valid file. \
 The `.application_index(int)` function can specify this.  It is zero based\
 and negative indices apply to all values.

```cpp
opt->check(CLI::Validator(CLI::PositiveNumber).application_index(0));
opt->check(CLI::Validator(CLI::ExistingFile).application_index(1));
```

All the validator operation functions return a Validator reference allowing\
 them to be chained.  For example

```cpp
opt->check(CLI::Range(10,20).description("range is limited to sensible\
 values").active(false).name("range"));
```

will specify a check on an option with a name "range", but deactivate it for\
 the time being.
The check can later be activated through

```cpp
opt->get_validator("range")->active();
```

##### Custom Validators

A validator object with a custom function can be created via

```cpp
CLI::Validator(std::function<std::string(std::string &)>,validator_descriptio\
n,validator_name="");
```

or if the operation function is set later they can be created with

```cpp
CLI::Validator(validator_description);
```

 It is also possible to create a subclass of `CLI::Validator`, in which case\
 it can also set a custom description function, and operation function.

##### Querying Validators

Once loaded into an Option, a pointer to a named Validator can be retrieved\
 via

```cpp
opt->get_validator(name);
```

This will retrieve a Validator with the given name or throw a\
 `CLI::OptionNotFound` error.  If no name is given or name is empty the first\
 unnamed Validator will be returned or the first Validator if there is only\
 one.

or

```cpp
opt->get_validator(index);
```

Which will return a validator in the index it is applied which isn't\
 necessarily the order in which was defined.  The pointer can be `nullptr` if\
 an invalid index is given.
Validators have a few functions to query the current values:

* `get_description()`: Will return a description string
* `get_name()`: Will return the Validator name
* `get_active()`: Will return the current active state, true if the Validator\
 is active.
* `get_application_index()`: Will return the current application index.
* `get_modifying()`: Will return true if the Validator is allowed to modify\
 the input, this can be controlled via the `non_modifying()` method, though\
 it is recommended to let `check` and `transform` option methods manipulate\
 it if needed.

#### Getting results

In most cases, the fastest and easiest way is to return the results through a\
 callback or variable specified in one of the `add_*` functions.  But there\
 are situations where this is not possible or desired.  For these cases the\
 results may be obtained through one of the following functions. Please note\
 that these functions will do any type conversions and processing during the\
 call so should not used in performance critical code:

* `->results()`: Retrieves a vector of strings with all the results in the\
 order they were given.
* `->results(variable_to_bind_to)`: Gets the results according to the\
 MultiOptionPolicy and converts them just like the `add_option_function` with\
 a variable.
* `Value=opt->as<type>()`: Returns the result or default value directly as\
 the specified type if possible, can be vector to return all results, and a\
 non-vector to get the result according to the MultiOptionPolicy in place.

### Subcommands

Subcommands are supported, and can be nested infinitely. To add a subcommand,\
 call the `add_subcommand` method with a name and an optional description.\
 This gives a pointer to an `App` that behaves just like the main app, and\
 can take options or further subcommands. Add `->ignore_case()` to a\
 subcommand to allow any variation of caps to also be accepted.\
 `->ignore_underscore()` is similar, but for underscores. Children inherit\
 the current setting from the parent. You cannot add multiple matching\
 subcommand names at the same level (including `ignore_case` and\
 `ignore_underscore`).

If you want to require that at least one subcommand is given, use\
 `.require_subcommand()` on the parent app. You can optionally give an exact\
 number of subcommands to require, as well. If you give two arguments, that\
 sets the min and max number allowed.
0 for the max number allowed will allow an unlimited number of subcommands.\
 As a handy shortcut, a single negative value N will set "up to N" values.\
 Limiting the maximum number allows you to keep arguments that match a\
 previous
subcommand name from matching.

If an `App` (main or subcommand) has been parsed on the command line,\
 `->parsed` will be true (or convert directly to bool).
All `App`s have a `get_subcommands()` method, which returns a list of\
 pointers to the subcommands passed on the command line. A\
 `got_subcommand(App_or_name)` method is also provided that will check to see\
 if an `App` pointer or a string name was collected on the command line.

For many cases, however, using an app's callback capabilities may be easier.\
 Every app has a set of callbacks that can be executed at various stages of\
 parsing; a `C++` lambda function (with capture to get parsed values) can be\
 used as input to the callback definition function. If you throw\
 `CLI::Success` or `CLI::RuntimeError(return_value)`, you can
even exit the program through the callback.

Multiple subcommands are allowed, to allow [`Click`][click] like series of\
 commands (order is preserved).  The same subcommand can be triggered\
 multiple times but all positional arguments will take precedence over the\
 second and future calls of the subcommand.  `->count()` on the subcommand\
 will return the number of times the subcommand was called.  The subcommand\
 callback will only be triggered once unless the `.immediate_callback()` \
 flag is set or the callback is specified through the `parse_complete_callbac\
k()` function. The `final_callback()` is triggered only once.  In which case\
 the callback executes on completion of the subcommand arguments but after\
 the arguments for that subcommand have been parsed, and can be triggered\
 multiple times.

Subcommands may also have an empty name either by calling `add_subcommand`\
 with an empty string for the name or with no arguments.
Nameless subcommands function a similarly to groups in the main `App`. See\
 [Option groups](#option-groups) to see how this might work.  If an option is\
 not defined in the main App, all nameless subcommands are checked as well. \
 This allows for the options to be defined in a composable group.  The\
 `add_subcommand` function has an overload for adding a `shared_ptr<App>` so\
 the subcommand(s) could be defined in different components and merged into a\
 main `App`, or possibly multiple `Apps`.  Multiple nameless subcommands are\
 allowed.  Callbacks for nameless subcommands are only triggered if any\
 options from the subcommand were parsed. Subcommand names given through the\
 `add_subcommand` method have the same restrictions as option names.

#### Subcommand options

There are several options that are supported on the main app and subcommands\
 and option_groups. These are:

* `.ignore_case()`: Ignore the case of this subcommand. Inherited by added\
 subcommands, so is usually used on the main `App`.
* `.ignore_underscore()`: Ignore any underscores in the subcommand name.\
 Inherited by added subcommands, so is usually used on the main `App`.
* `.allow_windows_style_options()`: Allow command line options to be parsed\
 in the form of `/s /long /file:file_name.ext`  This option does not change\
 how options are specified in the `add_option` calls or the ability to\
 process options in the form of `-s --long --file=file_name.ext`.
* `.fallthrough()`: Allow extra unmatched options and positionals to "fall\
 through" and be matched on a parent option. Subcommands always are allowed\
 to "fall through" as in they will first attempt to match on the current\
 subcommand and if they fail will progressively check parents for matching\
 subcommands.
* `.configurable()`: Allow the subcommand to be triggered from a\
 configuration file. By default subcommand options in a configuration file do\
 not trigger a subcommand but will just update default values.
* `.disable()`: Specify that the subcommand is disabled, if given with a bool\
 value it will enable or disable the subcommand or option group.
* `.disabled_by_default()`: Specify that at the start of parsing the\
 subcommand/option_group should be disabled. This is useful for allowing some\
 Subcommands to trigger others.
* `.enabled_by_default()`: Specify that at the start of each parse the\
 subcommand/option_group should be enabled.  This is useful for allowing some\
 Subcommands to disable others.
* `.silent()`: Specify that the subcommand is silent meaning that if used it\
 won't show up in the subcommand list.  This allows the use of subcommands as\
 modifiers
* `.validate_positionals()`: Specify that positionals should pass validation\
 before matching.  Validation is specified through `transform`, `check`, and\
 `each` for an option.  If an argument fails validation it is not an error\
 and matching proceeds to the next available positional or extra arguments.
* `.validate_optional_arguments()`:🆕 Specify that optional arguments should\
 pass validation before being assigned to an option.  Validation is specified\
 through `transform`, `check`, and `each` for an option.  If an argument\
 fails validation it is not an error and matching proceeds to the next\
 available positional subcommand or extra arguments.
* `.excludes(option_or_subcommand)`: If given an option pointer or pointer to\
 another subcommand, these subcommands cannot be given together.  In the case\
 of options, if the option is passed the subcommand cannot be used and will\
 generate an error.
* `.needs(option_or_subcommand)`: If given an option pointer or pointer to\
 another subcommand, the subcommands will require the given option to have\
 been given before this subcommand is validated which occurs prior to\
 execution of any callback or after parsing is completed.
* `.require_option()`: Require 1 or more options or option groups be used.
* `.require_option(N)`: Require `N` options or option groups, if `N>0`, or up\
 to `N` if `N<0`. `N=0` resets to the default to 0 or more.
* `.require_option(min, max)`: Explicitly set min and max allowed options or\
 option groups. Setting `max` to 0 implies unlimited options.
* `.require_subcommand()`: Require 1 or more subcommands.
* `.require_subcommand(N)`: Require `N` subcommands if `N>0`, or up to `N` if\
 `N<0`. `N=0` resets to the default to 0 or more.
* `.require_subcommand(min, max)`: Explicitly set min and max allowed\
 subcommands. Setting `max` to 0 is unlimited.
* `.add_subcommand(name="", description="")`: Add a subcommand, returns a\
 pointer to the internally stored subcommand.
* `.add_subcommand(shared_ptr<App>)`: Add a subcommand by shared_ptr, returns\
 a pointer to the internally stored subcommand.
* `.remove_subcommand(App)`: Remove a subcommand from the app or subcommand.
* `.got_subcommand(App_or_name)`: Check to see if a subcommand was received\
 on the command line.
* `.get_subcommands(filter)`: The list of subcommands that match a particular\
 filter function.
* `.add_option_group(name="", description="")`: Add an [option\
 group](#option-groups) to an App,  an option group is specialized subcommand\
 intended for containing groups of options or other groups for controlling\
 how options interact.
* `.get_parent()`: Get the parent App or `nullptr` if called on main App.
* `.get_option(name)`: Get an option pointer by option name will throw if the\
 specified option is not available,  nameless subcommands are also searched
* `.get_option_no_throw(name)`: Get an option pointer by option name. This\
 function will return a `nullptr` instead of throwing if the option is not\
 available.
* `.get_options(filter)`: Get the list of all defined option pointers (useful\
 for processing the app for custom output formats).
* `.parse_order()`: Get the list of option pointers in the order they were\
 parsed (including duplicates).
* `.formatter(fmt)`: Set a formatter, with signature `std::string(const App*,\
 std::string, AppFormatMode)`. See Formatting for more details.
* `.description(str)`: Set/change the description.
* `.get_description()`: Access the description.
* `.alias(str)`: set an alias for the subcommand, this allows subcommands to\
 be called by more than one name.
* `.parsed()`: True if this subcommand was given on the command line.
* `.count()`: Returns the number of times the subcommand was called.
* `.count(option_name)`: Returns the number of times a particular option was\
 called.
* `.count_all()`: Returns the total number of arguments a particular\
 subcommand processed, on the main App it returns the total number of\
 processed commands.
* `.name(name)`: Add or change the name.
* `.callback(void() function)`: Set the callback for an app. Either sets the\
 `pre_parse_callback` or the `final_callback` depending on the value of\
 `immediate_callback`. See [Subcommand callbacks](#callbacks) for some\
 additional details.
* `.parse_complete_callback(void() function)`: Set the callback that runs at\
 the completion of parsing. For subcommands this is executed at the\
 completion of the single subcommand and can be executed multiple times. See\
 [Subcommand callbacks](#callbacks) for some additional details.
* `.final_callback(void() function)`: Set the callback that runs at the end\
 of all processing. This is the last thing that is executed before returning.\
 See [Subcommand callbacks](#callbacks) for some additional details.
* `.immediate_callback()`: Specifies whether the callback for a subcommand\
 should be run as a `parse_complete_callback`(true) or `final_callback`(false\
). When used on the main app it will execute the main app callback prior to\
 the callbacks for a subcommand if they do not also have the\
 `immediate_callback` flag set. It is preferable to use the\
 `parse_complete_callback` or `final_callback` directly instead of the\
 `callback` and `immediate_callback` if one wishes to control the ordering\
 and timing of callback.  Though `immediate_callback` can be used to swap\
 them if that is needed.
* `.pre_parse_callback(void(std::size_t) function)`: Set a callback that\
 executes after the first argument of an application is processed.  See\
 [Subcommand callbacks](#callbacks) for some additional details.
* `.allow_extras()`: Do not throw an error if extra arguments are left over.
* `.positionals_at_end()`: Specify that positional arguments occur as the\
 last arguments and throw an error if an unexpected positional is encountered.
* `.prefix_command()`: Like `allow_extras`, but stop immediately on the first\
 unrecognized item. It is ideal for allowing your app or subcommand to be a\
 "prefix" to calling another app.
* `.footer(message)`: Set text to appear at the bottom of the help string.
* `.footer(std::string())`: Set a callback to generate a string that will\
 appear at the end of the help string.
* `.set_help_flag(name, message)`: Set the help flag name and message,\
 returns a pointer to the created option.
* `.set_version_flag(name, versionString or callback, help_message)`: Set the\
 version flag name and version string or callback and optional help message,\
 returns a pointer to the created option.
* `.set_help_all_flag(name, message)`: Set the help all flag name and\
 message, returns a pointer to the created option. Expands subcommands.
* `.failure_message(func)`: Set the failure message function. Two provided:\
 `CLI::FailureMessage::help` and `CLI::FailureMessage::simple` (the default).
* `.group(name)`: Set a group name, defaults to `"Subcommands"`. Setting `""`\
 will be hide the subcommand.
* `[option_name]`: retrieve a const pointer to an option given by\
 `option_name` for Example `app["--flag1"]` will get a pointer to the option\
 for the "--flag1" value,  `app["--flag1"]->as<bool>()` will get the results\
 of the command line for a flag. The operation will throw an exception if the\
 option name is not valid.

> Note: if you have a fixed number of required positional options, that will\
 match before subcommand names. `{}` is an empty filter function, and any\
 positional argument will match before repeated subcommand names.

#### Callbacks

A subcommand has three optional callbacks that are executed at different\
 stages of processing.  The `preparse_callback` is executed once after the\
 first argument of a subcommand or application is processed and gives an\
 argument for the number of remaining arguments to process.  For the main app\
 the first argument is considered the program name,  for subcommands the\
 first argument is the subcommand name.  For Option groups and nameless\
 subcommands the first argument is after the first argument or subcommand is\
 processed from that group.
The second callback is executed after parsing.  This is known as the\
 `parse_complete_callback`. For subcommands this is executed immediately\
 after parsing and can be executed multiple times if a subcommand is called\
 multiple times.    On the main app this callback is executed after all the\
 `parse_complete_callback`s for the subcommands are executed but prior to any\
 `final_callback` calls in the subcommand or option groups. If the main app\
 or subcommand has a config file, no data from the config file will be\
 reflected in `parse_complete_callback` on named subcommands.  For\
 `option_group`s the `parse_complete_callback` is executed prior to the\
 `parse_complete_callback` on the main app but after the `config_file` is\
 loaded (if specified).  The `final_callback` is executed after all\
 processing is complete.  After the `parse_complete_callback` is executed on\
 the main app, the used subcommand `final_callback` are executed followed by\
 the "final callback" for option groups.  The last thing to execute is the\
 `final_callback` for the `main_app`.
For example say an application was set up like

```cpp
app.parse_complete_callback(ac1);
app.final_callback(ac2);
auto sub1=app.add_subcommand("sub1")->parse_complete_callback(c1)->preparse_c\
allback(pc1);
auto sub2=app.add_subcommand("sub2")->final_callback(c2)->preparse_callback(p\
c2);
app.preparse_callback( pa);

... A bunch of other options
```

Then the command line is given as

```bash
program --opt1 opt1_val  sub1 --sub1opt --sub1optb val sub2 --sub2opt sub1\
 --sub1opt2 sub2 --sub2opt2 val
```

* `pa` will be called prior to parsing any values with an argument of 13.
* `pc1` will be called immediately after processing the `sub1` command with a\
 value of 10.
* `c1` will be called when the `sub2` command is encountered.
* `pc2` will be called with value of 6 after the `sub2` command is\
 encountered.
* `c1` will be called again after the second `sub2` command is encountered.
* `ac1` will be called after processing of all arguments
* `c2` will be called once after processing all arguments.
* `ac2` will be called last after completing  all lower level callbacks have\
 been executed.

A subcommand is considered terminated when one of the following conditions\
 are met.

1. There are no more arguments to process
2. Another subcommand is encountered that would not fit in an optional slot\
 of the subcommand
3. The `positional_mark` (`--`) is encountered and there are no available\
 positional slots in the subcommand.
4. The `subcommand_terminator` mark (`++`) is encountered

Prior to executed a `parse_complete_callback` all contained options are\
 processed before the callback is triggered.  If a subcommand with a\
 `parse_complete_callback` is called again, then the contained options are\
 reset, and can be triggered again.

#### Option groups

The subcommand method

```cpp
.add_option_group(name,description)
```

Will create an option group, and return a pointer to it. The argument for\
 `description` is optional and can be omitted.  An option group allows\
 creation of a collection of options, similar to the groups function on\
 options, but with additional controls and requirements.  They allow specific\
 sets of options to be composed and controlled as a collective.  For an\
 example see [range example](https://github.com/CLIUtils/CLI11/blob/main/exam\
ples/ranges.cpp).  Option groups are a specialization of an App so all\
 [functions](#subcommand-options) that work with an App or subcommand also\
 work on option groups.  Options can be created as part of an option group\
 using the add functions just like a subcommand, or previously created\
 options can be added through.  The name given in an option group must not\
 contain newlines or null characters.

```cpp
ogroup->add_option(option_pointer);
ogroup->add_options(option_pointer);
ogroup->add_options(option1,option2,option3,...);
```

The option pointers used in this function must be options defined in the\
 parent application of the option group otherwise an error will be generated.\
  Subcommands can also be added via

```cpp
ogroup->add_subcommand(subcom_pointer);
```

This results in the subcommand being moved from its parent into the option\
 group.

Options in an option group are searched for a command line match after any\
 options in the main app, so any positionals in the main app would be matched\
 first.  So care must be taken to make sure of the order when using\
 positional arguments and option groups.
Option groups work well with `excludes` and `require_options` methods, as an\
 application will treat an option group as a single option for the purpose of\
 counting and requirements, and an option group will be considered used if\
 any of the options or subcommands contained in it are used.  Option groups\
 allow specifying requirements such as requiring 1 of 3 options in one group\
 and 1 of 3 options in a different group. Option groups can contain other\
 groups as well.   Disabling an option group will turn off all options within\
 the group.

The `CLI::TriggerOn` and `CLI::TriggerOff` methods are helper functions to\
 allow the use of options/subcommands from one group to trigger another group\
 on or off.

```cpp
CLI::TriggerOn(group1_pointer, triggered_group);
CLI::TriggerOff(group2_pointer, disabled_group);
```

These functions make use of `preparse_callback`, `enabled_by_default()` and\
 `disabled_by_default`.  The triggered group may be a vector of group\
 pointers.  These methods should only be used once per group and will\
 override any previous use of the underlying functions.  More complex\
 arrangements can be accomplished using similar methodology with a custom\
 `preparse_callback` function that does more.

Additional helper functions `deprecate_option` and `retire_option` are\
 available to deprecate or retire options

```cpp
CLI::deprecate_option(option *, replacement_name="");
CLI::deprecate_option(App,option_name,replacement_name="");
```

will specify that the option is deprecated which will display a message in\
 the help and a warning on first usage.  Deprecated options function normally\
 but will add a message in the help and display a warning on first use.

```cpp
CLI::retire_option(App,option *);
CLI::retire_option(App,option_name);
```

will create an option that does nothing by default and will display a warning\
 on first usage that the option is retired and has no effect.  If the option\
 exists it is replaces with a dummy option that takes the same arguments.

If an empty string is passed the option group name the entire group will be\
 hidden in the help results.  For example.

```cpp
auto hidden_group=app.add_option_group("");
```

will create a group such that no options in that group are displayed in the\
 help string.

### Configuration file

```cpp
app.set_config(option_name="",
               default_file_name="",
               help_string="Read an ini file",
               required=false)
```

If this is called with no arguments, it will remove the configuration file\
 option (like `set_help_flag`). Setting a configuration option is special. If\
 it is present, it will be read along with the normal command line arguments.\
 The file will be read if it exists, and does not throw an error unless\
 `required` is `true`. Configuration files are in [TOML][] format by default,\
 though the default reader can also accept files in INI format as well. It\
 should be noted that CLI11 does not contain a full TOML parser but can read\
 strings from most TOML file and run them through the CLI11 parser. Other\
 formats can be added by an adept user, some variations are available through\
 customization points in the default formatter. An example of a TOML file:

```toml
# Comments are supported, using a #
# The default section is [default], case insensitive

value = 1
str = "A string"
vector = [1,2,3]
str_vector = ["one","two","and three"]

# Sections map to subcommands
[subcommand]
in_subcommand = Wow
sub.subcommand = true
```

or equivalently in INI format

```ini
; Comments are supported, using a ;
; The default section is [default], case insensitive

value = 1
str = "A string"
vector = 1 2 3
str_vector = "one" "two" "and three"

; Sections map to subcommands
[subcommand]
in_subcommand = Wow
sub.subcommand = true
```

Spaces before and after the name and argument are ignored. Multiple arguments\
 are separated by spaces. One set of quotes will be removed, preserving\
 spaces (the same way the command line works). Boolean options can be `true`,\
 `on`, `1`, `yes`, `enable`; or `false`, `off`, `0`, `no`, `disable` (case\
 insensitive). Sections (and `.` separated names) are treated as subcommands\
 (note: this does not necessarily mean that subcommand was passed, it just\
 sets the "defaults"). You cannot set positional-only arguments.  Subcommands\
 can be triggered from configuration files if the `configurable` flag was set\
 on the subcommand.  Then the use of `[subcommand]` notation will trigger a\
 subcommand and cause it to act as if it were on the command line.

To print a configuration file from the passed
arguments, use `.config_to_str(default_also=false, write_description=false)`,\
 where `default_also` will also show any defaulted arguments, and\
 `write_description` will include the app and option descriptions.  See\
 [Config files](https://cliutils.github.io/CLI11/book/chapters/config.html)\
 for some additional details and customization points.

If it is desired that multiple configuration be allowed.  Use

```cpp
app.set_config("--config")->expected(1, X);
```

Where X is some positive number and will allow up to `X` configuration files\
 to be specified by separate `--config` arguments.  Value strings with quote\
 characters in it will be printed with a single quote. All other arguments\
 will use double quote.  Empty strings will use a double quoted argument.\
 Numerical or boolean values are not quoted.

For options or flags which allow 0 arguments to be passed using an empty\
 string in the config file, `{}`, or `[]` will convert the result to the\
 default value specified via `default_str` or `default_val` on the option\
 🆕.  If no user specified default is given the result is an empty string or\
 the converted value of an empty string.

NOTE:  Transforms and checks can be used with the option pointer returned\
 from set_config like any other option to validate the input if needed.  It\
 can also be used with the built in transform `CLI::FileOnDefaultPath` to\
 look in a default path as well as the current one.  For example

```cpp
app.set_config("--config")->transform(CLI::FileOnDefaultPath("/to/default/pat\
h/"));
```

See [Transforming Validators](#transforming-validators) for additional\
 details on this validator. Multiple transforms or validators can be used\
 either by multiple calls or using `|` operations with the transform.

### Inheriting defaults

Many of the defaults for subcommands and even options are inherited from\
 their creators. The inherited default values for subcommands are\
 `allow_extras`, `prefix_command`, `ignore_case`, `ignore_underscore`,\
 `fallthrough`, `group`, `footer`,`immediate_callback` and maximum number of\
 required subcommands. The help flag existence, name, and description are\
 inherited, as well.

Options have defaults for `group`, `required`, `multi_option_policy`,\
 `ignore_case`, `ignore_underscore`, `delimiter`, and `disable_flag_override`\
. To set these defaults, you should set the `option_defaults()` object, for\
 example:

```cpp
app.option_defaults()->required();
// All future options will be required
```

The default settings for options are inherited to subcommands, as well.

### Formatting

The job of formatting help printouts is delegated to a formatter callable\
 object on Apps and Options. You are free to replace either formatter by\
 calling `formatter(fmt)` on an `App`, where fmt is any copyable callable\
 with the correct signature.
CLI11 comes with a default App formatter functional, `Formatter`. It is\
 customizable; you can set `label(key, value)` to replace the default labels\
 like `REQUIRED`, and `column_width(n)` to set the width of the columns\
 before you add the functional to the app or option. You can also override\
 almost any stage of the formatting process in a subclass of either\
 formatter. If you want to make a new formatter from scratch, you can do
that too; you just need to implement the correct signature. The first\
 argument is a const pointer to the in question. The formatter will get a\
 `std::string` usage name as the second option, and a `AppFormatMode` mode\
 for the final option. It should return a `std::string`.

The `AppFormatMode` can be `Normal`, `All`, or `Sub`, and it indicates the\
 situation the help was called in. `Sub` is optional, but the default\
 formatter uses it to make sure expanded subcommands are called with
their own formatter since you can't access anything but the call operator\
 once a formatter has been set.

### Subclassing

The App class was designed allow toolkits to subclass it, to provide preset\
 default options (see above) and setup/teardown code. Subcommands remain an\
 unsubclassed `App`, since those are not expected to need setup and teardown.\
 The default `App` only adds a help flag, `-h,--help`, than can\
 removed/replaced using `.set_help_flag(name, help_string)`. You can also set\
 a help-all flag with `.set_help_all_flag(name, help_string)`; this will\
 expand the subcommands (one level only). You can remove options if you have\
 pointers to them using `.remove_option(opt)`. You can add a `pre_callback`\
 override to customize the after parse
but before run behavior, while
still giving the user freedom to `callback` on the main app.

The most important parse function is `parse(std::vector<std::string>)`, which\
 takes a reversed list of arguments (so that `pop_back` processes the args in\
 the correct order). `get_help_ptr` and `get_config_ptr` give you access to\
 the help/config option pointers. The standard `parse` manually sets the name\
 from the first argument, so it should not be in this vector. You can also\
 use `parse(string, bool)` to split up and parse a single string; the\
 optional boolean should be set to true if you are
including the program name in the string, and false otherwise.  The program\
 name can contain spaces if it is an existing file,  otherwise can be\
 enclosed in quotes(single quote, double quote or backtick).  Embedded quote\
 characters can be escaped with `\`.

Also, in a related note, the `App` you get a pointer to is stored in the\
 parent `App` in a `shared_ptr`s (similar to `Option`s) and are deleted when\
 the main `App` goes out of scope unless the object has another owner.

### How it works

Every `add_` option you have seen so far depends on one method that takes a\
 lambda function. Each of these methods is just making a different lambda\
 function with capture to populate the option. The function has full access\
 to the vector of strings, so it knows how many times an option was passed or\
 how many arguments it received. The lambda returns `true` if it could\
 validate the option strings, and
`false` if it failed.

Other values can be added as long as they support `operator>>` (and defaults\
 can be printed if they support `operator<<`). To add a new type, for\
 example, provide a custom `operator>>` with an `istream` (inside the CLI\
 namespace is fine if you don't want to interfere with an existing\
 `operator>>`).

If you wanted to extend this to support a completely new type, use a lambda\
 or add a specialization of the `lexical_cast` function template in the\
 namespace of the type you need to convert to. Some examples of some new\
 parsers for `complex<double>` that support all of the features of a standard\
 `add_options` call are in [one of the tests](./tests/NewParseTest.cpp). A\
 simpler example is shown below:

#### Example

```cpp
app.add_option("--fancy-count", [](std::vector<std::string> val){
    std::cout << "This option was given " << val.size() << " times." <<\
 std::endl;
    return true;
    });
```

### Utilities

There are a few other utilities that are often useful in CLI programming.\
 These are in separate headers, and do not appear in `CLI11.hpp`, but are\
 completely independent and can be used as needed. The `Timer`/`AutoTimer`\
 class allows you to easily time a block of code, with custom print output.

```cpp
{
CLI::AutoTimer timer {"My Long Process", CLI::Timer::Big};
some_long_running_process();
}
```

This will create a timer with a title (default: `Timer`), and will customize\
 the output using the predefined `Big` output (default: `Simple`). Because it\
 is an `AutoTimer`, it will print out the time elapsed when the timer is\
 destroyed at the end of the block. If you use `Timer` instead, you can use\
 `to_string` or `std::cout << timer << std::endl;` to print the time. The\
 print function can be any function that takes two strings, the title and the\
 time, and returns a formatted
string for printing.

### Other libraries

If you use the excellent [Rang][] library to add color to your terminal in a\
 safe, multi-platform way, you can combine it with CLI11 nicely:

```cpp
std::atexit([](){std::cout << rang::style::reset;});
try {
    app.parse(argc, argv);
} catch (const CLI::ParseError &e) {
    std::cout << (e.get_exit_code()==0 ? rang::fg::blue : rang::fg::red);
    return app.exit(e);
}
```

This will print help in blue, errors in red, and will reset before returning\
 the terminal to the user.

If you are on a Unix-like system, and you'd like to handle control-c and\
 color, you can add:

```cpp
 #include <csignal>
 void signal_handler(int s) {
     std::cout << std::endl << rang::style::reset << rang::fg::red <<\
 rang::fg::bold;
     std::cout << "Control-C detected, exiting..." << rang::style::reset <<\
 std::endl;
     std::exit(1); // will call the correct exit func, no unwinding of the\
 stack though
 }
```

And, in your main function:

```cpp
     // Nice Control-C
     struct sigaction sigIntHandler;
     sigIntHandler.sa_handler = signal_handler;
     sigemptyset(&sigIntHandler.sa_mask);
     sigIntHandler.sa_flags = 0;
     sigaction(SIGINT, &sigIntHandler, nullptr);
```

## API

The API is [documented here][api-docs]. Also see the [CLI11 tutorial\
 GitBook][gitbook].

## Examples

Several short examples of different features are included in the repository.\
 A brief description of each is included here

* [callback_passthrough](https://github.com/CLIUtils/CLI11/blob/main/examples\
/callback_passthrough.cpp): Example of directly passing remaining arguments\
 through to a callback function which generates a CLI11 application based on\
 existing arguments.
* [custom_parse](https://github.com/CLIUtils/CLI11/blob/main/examples/custom_\
parse.cpp): Based on [Issue #566](https://github.com/CLIUtils/CLI11/issues/56\
6), example of custom parser
* [digit_args](https://github.com/CLIUtils/CLI11/blob/main/examples/digit_arg\
s.cpp): Based on [Issue #123](https://github.com/CLIUtils/CLI11/issues/123),\
 uses digit flags to pass a value
* [enum](https://github.com/CLIUtils/CLI11/blob/main/examples/enum.cpp):\
 Using enumerations in an option, and the use of [CheckedTransformer](#transf\
orming-validators)
* [enum_ostream](https://github.com/CLIUtils/CLI11/blob/main/examples/enum_os\
tream.cpp): In addition to the contents of example enum.cpp, this example\
 shows how a custom ostream operator overrides CLI11's enum streaming.
* [formatter](https://github.com/CLIUtils/CLI11/blob/main/examples/formatter.\
cpp): Illustrating usage of a custom formatter
* [groups](https://github.com/CLIUtils/CLI11/blob/main/examples/groups.cpp):\
 Example using groups of options for help grouping and a the timer helper\
 class
* [inter_argument_order](https://github.com/CLIUtils/CLI11/blob/main/examples\
/inter_argument_order.cpp): An app to practice mixing unlimited arguments,\
 but still recover the original order.
* [json](https://github.com/CLIUtils/CLI11/blob/main/examples/json.cpp):\
 Using JSON as a config file parser
* [modhelp](https://github.com/CLIUtils/CLI11/blob/main/examples/modhelp.cpp)\
: How to modify the help flag to do something other than default
* [nested](https://github.com/CLIUtils/CLI11/blob/main/examples/nested.cpp):\
 Nested subcommands
* [option_groups](https://github.com/CLIUtils/CLI11/blob/main/examples/option\
_groups.cpp): Illustrating the use of option groups and a required number of\
 options. Based on [Issue #88](https://github.com/CLIUtils/CLI11/issues/88)\
 to set interacting groups of options
* [positional_arity](https://github.com/CLIUtils/CLI11/blob/main/examples/pos\
itional_arity.cpp): Illustrating use of `preparse_callback` to handle\
 situations where the number of arguments can determine which should get\
 parsed,  Based on [Issue #166](https://github.com/CLIUtils/CLI11/issues/166)
* [positional_validation](https://github.com/CLIUtils/CLI11/blob/main/example\
s/positional_validation.cpp): Example of how positional arguments are\
 validated using the `validate_positional` flag, also based on [Issue\
 #166](https://github.com/CLIUtils/CLI11/issues/166)
* [prefix_command](https://github.com/CLIUtils/CLI11/blob/main/examples/prefi\
x_command.cpp): Illustrating use of the `prefix_command` flag.
* [ranges](https://github.com/CLIUtils/CLI11/blob/main/examples/ranges.cpp):\
 App to demonstrate exclusionary option groups based on [Issue\
 #88](https://github.com/CLIUtils/CLI11/issues/88)
* [shapes](https://github.com/CLIUtils/CLI11/blob/main/examples/shapes.cpp):\
 Illustrating how to set up repeated subcommands Based on [gitter\
 discussion](https://gitter.im/CLI11gitter/Lobby?at=5c7af6b965ffa019ea788cd5)
* [simple](https://github.com/CLIUtils/CLI11/blob/main/examples/simple.cpp):\
 A simple example of how to set up a CLI11 Application with different flags\
 and options
* [subcom_help](https://github.com/CLIUtils/CLI11/blob/main/examples/subcom_h\
elp.cpp): Configuring help for subcommands
* [subcom_partitioned](https://github.com/CLIUtils/CLI11/blob/main/examples/s\
ubcom_partitioned.cpp): Example with a timer and subcommands generated\
 separately and added to the main app later.
* [subcommands](https://github.com/CLIUtils/CLI11/blob/main/examples/subcomma\
nds.cpp): Short example of subcommands
* [validators](https://github.com/CLIUtils/CLI11/blob/main/examples/validator\
s.cpp): Example illustrating use of validators

## Contribute

To contribute, open an [issue][github issues] or [pull request][github pull\
 requests] on GitHub, or ask a question on [gitter][]. There is also a short\
 note to contributors [here](./.github/CONTRIBUTING.md).
This readme roughly follows the [Standard Readme Style][] and includes a\
 mention of almost every feature of the library. More complex features are\
 documented in more detail in the [CLI11 tutorial GitBook][gitbook].

This project was created by [Henry Schreiner](https://github.com/henryiii)\
 and major features were added by  [Philip Top](https://github.com/phlptp).\
 Special thanks to all the contributors ([emoji key](https://allcontributors.\
org/docs/en/emoji-key)):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tr>
    <td align="center"><a href="http://iscinumpy.gitlab.io"><img\
 src="https://avatars1.githubusercontent.com/u/4616906?v=4" width="100px;"\
 alt=""/><br /><sub><b>Henry Schreiner</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Ahenryiii"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=henryiii" title="Documentation">📖</a> <a href="https://github.com/CLI\
Utils/CLI11/commits?author=henryiii" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/phlptp"><img\
 src="https://avatars0.githubusercontent.com/u/20667153?v=4" width="100px;"\
 alt=""/><br /><sub><b>Philip Top</b></sub></a><br /><a href="https://github.\
com/CLIUtils/CLI11/issues?q=author%3Aphlptp" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=phlptp"\
 title="Documentation">📖</a> <a href="https://github.com/CLIUtils/CLI11/commi\
ts?author=phlptp" title="Code">💻</a></td>
    <td align="center"><a href="https://www.linkedin.com/in/cbachhuber/"><img\
 src="https://avatars0.githubusercontent.com/u/27212661?v=4" width="100px;"\
 alt=""/><br /><sub><b>Christoph Bachhuber</b></sub></a><br /><a\
 href="#example-cbachhuber" title="Examples">💡</a> <a href="https://github.co\
m/CLIUtils/CLI11/commits?author=cbachhuber" title="Code">💻</a></td>
    <td align="center"><a href="https://lambdafu.net/"><img\
 src="https://avatars1.githubusercontent.com/u/1138455?v=4" width="100px;"\
 alt=""/><br /><sub><b>Marcus Brinkmann</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Alambdafu"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=lambdafu" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/SkyToGround"><img\
 src="https://avatars1.githubusercontent.com/u/58835?v=4" width="100px;"\
 alt=""/><br /><sub><b>Jonas Nilsson</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3ASkyToGround"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=SkyToGround" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dvj"><img\
 src="https://avatars2.githubusercontent.com/u/77217?v=4" width="100px;"\
 alt=""/><br /><sub><b>Doug Johnston</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Advj" title="Bug\
 reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits?author=dvj\
" title="Code">💻</a></td>
    <td align="center"><a href="http://lucas-czech.de"><img\
 src="https://avatars0.githubusercontent.com/u/4741887?v=4" width="100px;"\
 alt=""/><br /><sub><b>Lucas Czech</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/issues?q=author%3Alczech" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=lczech"\
 title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/rafiw"><img\
 src="https://avatars3.githubusercontent.com/u/3034707?v=4" width="100px;"\
 alt=""/><br /><sub><b>Rafi Wiener</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/issues?q=author%3Arafiw" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=rafiw"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/mensinda"><img\
 src="https://avatars3.githubusercontent.com/u/3407462?v=4" width="100px;"\
 alt=""/><br /><sub><b>Daniel Mensinger</b></sub></a><br /><a\
 href="#platform-mensinda" title="Packaging/porting to new\
 platform">📦</a></td>
    <td align="center"><a href="https://github.com/jbriales"><img\
 src="https://avatars1.githubusercontent.com/u/6850478?v=4" width="100px;"\
 alt=""/><br /><sub><b>Jesus Briales</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=jbriales"\
 title="Code">💻</a> <a href="https://github.com/CLIUtils/CLI11/issues?q=autho\
r%3Ajbriales" title="Bug reports">🐛</a></td>
    <td align="center"><a href="https://seanfisk.com/"><img\
 src="https://avatars0.githubusercontent.com/u/410322?v=4" width="100px;"\
 alt=""/><br /><sub><b>Sean Fisk</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/issues?q=author%3Aseanfisk" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=seanfisk"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/fpeng1985"><img\
 src="https://avatars1.githubusercontent.com/u/87981?v=4" width="100px;"\
 alt=""/><br /><sub><b>fpeng1985</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/commits?author=fpeng1985" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/almikhayl"><img\
 src="https://avatars2.githubusercontent.com/u/6747040?v=4" width="100px;"\
 alt=""/><br /><sub><b>almikhayl</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/commits?author=almikhayl" title="Code">💻</a> <a\
 href="#platform-almikhayl" title="Packaging/porting to new\
 platform">📦</a></td>
    <td align="center"><a href="https://github.com/andrew-hardin"><img\
 src="https://avatars0.githubusercontent.com/u/16496326?v=4" width="100px;"\
 alt=""/><br /><sub><b>Andrew Hardin</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=andrew-hardin"\
 title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/SX91"><img\
 src="https://avatars2.githubusercontent.com/u/754754?v=4" width="100px;"\
 alt=""/><br /><sub><b>Anton</b></sub></a><br /><a href="https://github.com/C\
LIUtils/CLI11/commits?author=SX91" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/helmesjo"><img\
 src="https://avatars0.githubusercontent.com/u/2501070?v=4" width="100px;"\
 alt=""/><br /><sub><b>Fred Helmesjö</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Ahelmesjo"\
 title="Bug reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits\
?author=helmesjo" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/skannan89"><img\
 src="https://avatars0.githubusercontent.com/u/11918764?v=4" width="100px;"\
 alt=""/><br /><sub><b>Kannan</b></sub></a><br /><a href="https://github.com/\
CLIUtils/CLI11/issues?q=author%3Askannan89" title="Bug reports">🐛</a> <a\
 href="https://github.com/CLIUtils/CLI11/commits?author=skannan89"\
 title="Code">💻</a></td>
    <td align="center"><a href="http://himvis.com"><img src="https://avatars3\
.githubusercontent.com/u/465279?v=4" width="100px;" alt=""/><br\
 /><sub><b>Khem Raj</b></sub></a><br /><a href="https://github.com/CLIUtils/C\
LI11/commits?author=kraj" title="Code">💻</a></td>
    <td align="center"><a href="https://www.mogigoma.com/"><img\
 src="https://avatars2.githubusercontent.com/u/130862?v=4" width="100px;"\
 alt=""/><br /><sub><b>Mak Kolybabi</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=mogigoma" title="Documentation">📖</a></td>
    <td align="center"><a href="http://msoeken.github.io"><img\
 src="https://avatars0.githubusercontent.com/u/1998245?v=4" width="100px;"\
 alt=""/><br /><sub><b>Mathias Soeken</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=msoeken"\
 title="Documentation">📖</a></td>
    <td align="center"><a href="https://github.com/nathanhourt"><img\
 src="https://avatars2.githubusercontent.com/u/271977?v=4" width="100px;"\
 alt=""/><br /><sub><b>Nathan Hourt</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/issues?q=author%3Anathanhourt" title="Bug\
 reports">🐛</a> <a href="https://github.com/CLIUtils/CLI11/commits?author=nat\
hanhourt" title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/pleroux0"><img\
 src="https://avatars2.githubusercontent.com/u/39619854?v=4" width="100px;"\
 alt=""/><br /><sub><b>Paul le Roux</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=pleroux0" title="Code">💻</a> <a\
 href="#platform-pleroux0" title="Packaging/porting to new\
 platform">📦</a></td>
    <td align="center"><a href="https://github.com/chfast"><img\
 src="https://avatars1.githubusercontent.com/u/573380?v=4" width="100px;"\
 alt=""/><br /><sub><b>Paweł Bylica</b></sub></a><br /><a href="#platform-chf\
ast" title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://github.com/peterazmanov"><img\
 src="https://avatars0.githubusercontent.com/u/15322318?v=4" width="100px;"\
 alt=""/><br /><sub><b>Peter Azmanov</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=peterazmanov"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/delpinux"><img\
 src="https://avatars0.githubusercontent.com/u/35096584?v=4" width="100px;"\
 alt=""/><br /><sub><b>Stéphane Del Pino</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=delpinux"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/metopa"><img\
 src="https://avatars2.githubusercontent.com/u/3974178?v=4" width="100px;"\
 alt=""/><br /><sub><b>Viacheslav Kroilov</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=metopa"\
 title="Code">💻</a></td>
    <td align="center"><a href="http://cs.odu.edu/~ctsolakis"><img\
 src="https://avatars0.githubusercontent.com/u/6725596?v=4" width="100px;"\
 alt=""/><br /><sub><b>christos</b></sub></a><br /><a href="https://github.co\
m/CLIUtils/CLI11/commits?author=ChristosT" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/deining"><img\
 src="https://avatars3.githubusercontent.com/u/18169566?v=4" width="100px;"\
 alt=""/><br /><sub><b>deining</b></sub></a><br /><a href="https://github.com\
/CLIUtils/CLI11/commits?author=deining" title="Documentation">📖</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/elszon"><img\
 src="https://avatars0.githubusercontent.com/u/2971495?v=4" width="100px;"\
 alt=""/><br /><sub><b>elszon</b></sub></a><br /><a href="https://github.com/\
CLIUtils/CLI11/commits?author=elszon" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/ncihnegn"><img\
 src="https://avatars3.githubusercontent.com/u/12021721?v=4" width="100px;"\
 alt=""/><br /><sub><b>ncihnegn</b></sub></a><br /><a href="https://github.co\
m/CLIUtils/CLI11/commits?author=ncihnegn" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/nurelin"><img\
 src="https://avatars3.githubusercontent.com/u/5276274?v=4" width="100px;"\
 alt=""/><br /><sub><b>nurelin</b></sub></a><br /><a href="https://github.com\
/CLIUtils/CLI11/commits?author=nurelin" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/ryan4729"><img\
 src="https://avatars3.githubusercontent.com/u/40183301?v=4" width="100px;"\
 alt=""/><br /><sub><b>ryan4729</b></sub></a><br /><a href="https://github.co\
m/CLIUtils/CLI11/commits?author=ryan4729" title="Tests">⚠️</a></td>
    <td align="center"><a href="https://izzys.casa"><img src="https://avatars\
0.githubusercontent.com/u/63051?v=4" width="100px;" alt=""/><br\
 /><sub><b>Isabella Muerte</b></sub></a><br /><a href="#platform-slurps-mad-r\
ips" title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://github.com/KOLANICH"><img\
 src="https://avatars1.githubusercontent.com/u/240344?v=4" width="100px;"\
 alt=""/><br /><sub><b>KOLANICH</b></sub></a><br /><a href="#platform-KOLANIC\
H" title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://github.com/jgerityneurala"><img\
 src="https://avatars2.githubusercontent.com/u/57360646?v=4" width="100px;"\
 alt=""/><br /><sub><b>James Gerity</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=jgerityneurala" title="Documentation">📖</\
a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/jsoref"><img\
 src="https://avatars0.githubusercontent.com/u/2119212?v=4" width="100px;"\
 alt=""/><br /><sub><b>Josh Soref</b></sub></a><br /><a href="#tool-jsoref"\
 title="Tools">🔧</a></td>
    <td align="center"><a href="https://github.com/geir-t"><img\
 src="https://avatars3.githubusercontent.com/u/35292136?v=4" width="100px;"\
 alt=""/><br /><sub><b>geir-t</b></sub></a><br /><a href="#platform-geir-t"\
 title="Packaging/porting to new platform">📦</a></td>
    <td align="center"><a href="https://ondrejcertik.com/"><img\
 src="https://avatars3.githubusercontent.com/u/20568?v=4" width="100px;"\
 alt=""/><br /><sub><b>Ondřej Čertík</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/issues?q=author%3Acertik" title="Bug\
 reports">🐛</a></td>
    <td align="center"><a href="http://sam.hocevar.net/"><img\
 src="https://avatars2.githubusercontent.com/u/245089?v=4" width="100px;"\
 alt=""/><br /><sub><b>Sam Hocevar</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/commits?author=samhocevar" title="Code">💻</a></td>
    <td align="center"><a href="http://www.ratml.org/"><img\
 src="https://avatars0.githubusercontent.com/u/1845039?v=4" width="100px;"\
 alt=""/><br /><sub><b>Ryan Curtin</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/commits?author=rcurtin" title="Documentation">📖</a></td>
    <td align="center"><a href="https://mbh.sh"><img src="https://avatars3.gi\
thubusercontent.com/u/20403931?v=4" width="100px;" alt=""/><br\
 /><sub><b>Michael Hall</b></sub></a><br /><a href="https://github.com/CLIUti\
ls/CLI11/commits?author=mbhall88" title="Documentation">📖</a></td>
    <td align="center"><a href="https://github.com/ferdymercury"><img\
 src="https://avatars3.githubusercontent.com/u/10653970?v=4" width="100px;"\
 alt=""/><br /><sub><b>ferdymercury</b></sub></a><br /><a href="https://githu\
b.com/CLIUtils/CLI11/commits?author=ferdymercury" title="Documentation">📖</a>\
</td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/jakoblover"><img\
 src="https://avatars0.githubusercontent.com/u/14160441?v=4" width="100px;"\
 alt=""/><br /><sub><b>Jakob Lover</b></sub></a><br /><a href="https://github\
.com/CLIUtils/CLI11/commits?author=jakoblover" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/ZeeD26"><img\
 src="https://avatars2.githubusercontent.com/u/2487468?v=4" width="100px;"\
 alt=""/><br /><sub><b>Dominik Steinberger</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=ZeeD26"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dfleury2"><img\
 src="https://avatars1.githubusercontent.com/u/4805384?v=4" width="100px;"\
 alt=""/><br /><sub><b>D. Fleury</b></sub></a><br /><a href="https://github.c\
om/CLIUtils/CLI11/commits?author=dfleury2" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dbarowy"><img\
 src="https://avatars3.githubusercontent.com/u/573142?v=4" width="100px;"\
 alt=""/><br /><sub><b>Dan Barowy</b></sub></a><br /><a href="https://github.\
com/CLIUtils/CLI11/commits?author=dbarowy" title="Documentation">📖</a></td>
    <td align="center"><a href="https://github.com/paddy-hack"><img\
 src="https://avatars.githubusercontent.com/u/6804372?v=4" width="100px;"\
 alt=""/><br /><sub><b>Olaf Meeuwissen</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=paddy-hack"\
 title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/dryleev"><img\
 src="https://avatars.githubusercontent.com/u/83670813?v=4" width="100px;"\
 alt=""/><br /><sub><b>dryleev</b></sub></a><br /><a href="https://github.com\
/CLIUtils/CLI11/commits?author=dryleev" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/AnticliMaxtic"><img\
 src="https://avatars.githubusercontent.com/u/43995389?v=4" width="100px;"\
 alt=""/><br /><sub><b>Max</b></sub></a><br /><a href="https://github.com/CLI\
Utils/CLI11/commits?author=AnticliMaxtic" title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://profiles.sussex.ac.uk/p281168-alex-de\
war/publications"><img src="https://avatars.githubusercontent.com/u/23149834?\
v=4" width="100px;" alt=""/><br /><sub><b>Alex Dewar</b></sub></a><br /><a\
 href="https://github.com/CLIUtils/CLI11/commits?author=alexdewar"\
 title="Code">💻</a></td>
  </tr>
</table>

<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the [all-contributors](https://github.com/all-contributo\
rs/all-contributors) specification. Contributions of any kind welcome!

## License

As of version 1.0, this library is available under a 3-Clause BSD license.\
 See the [LICENSE](./LICENSE) file for details.

CLI11 was developed at the [University of Cincinnati][] to support of the\
 [GooFit][] library under [NSF Award 1414736][]. Version 0.9 was featured in\
 a [DIANA/HEP][] meeting at CERN ([see the slides][diana slides]). Please\
 give it a try! Feedback is always welcome.

[doi-badge]: https://zenodo.org/badge/80064252.svg
[doi-link]: https://zenodo.org/badge/latestdoi/80064252
[azure-badge]: https://dev.azure.com/CLIUtils/CLI11/_apis/build/status/CLIUti\
ls.CLI11?branchName=main
[azure]: https://dev.azure.com/CLIUtils/CLI11
[actions-link]: https://github.com/CLIUtils/CLI11/actions
[actions-badge]: https://github.com/CLIUtils/CLI11/actions/workflows/tests.ym\
l/badge.svg
[appveyor-badge]: https://ci.appveyor.com/api/projects/status/82niaxpaa28dwbm\
s/branch/main?svg=true
[appveyor]: https://ci.appveyor.com/project/HenrySchreiner/cli11
[repology-badge]: https://repology.org/badge/latest-versions/cli11.svg
[repology]: https://repology.org/project/cli11/versions
[codecov-badge]: https://codecov.io/gh/CLIUtils/CLI11/branch/main/graph/badge\
.svg?token=2O4wfs8NJO
[codecov]: https://codecov.io/gh/CLIUtils/CLI11
[gitter-badge]: https://badges.gitter.im/CLI11gitter/Lobby.svg
[gitter]: https://gitter.im/CLI11gitter/Lobby
[license-badge]: https://img.shields.io/badge/License-BSD-blue.svg
[conan-badge]: https://img.shields.io/badge/conan-io-blue
[conan-link]: https://conan.io/center/cli11
[conda-badge]: https://img.shields.io/conda/vn/conda-forge/cli11.svg
[conda-link]: https://github.com/conda-forge/cli11-feedstock
[github releases]: https://github.com/CLIUtils/CLI11/releases
[github issues]: https://github.com/CLIUtils/CLI11/issues
[github pull requests]: https://github.com/CLIUtils/CLI11/pulls
[goofit]: https://GooFit.github.io
[plumbum]: https://plumbum.readthedocs.io/en/latest/
[click]: http://click.pocoo.org
[api-docs]: https://CLIUtils.github.io/CLI11/index.html
[rang]: https://github.com/agauniyal/rang
[boost program options]: http://www.boost.org/doc/libs/1_63_0/doc/html/progra\
m_options.html
[the lean mean c++ option parser]: http://optionparser.sourceforge.net
[tclap]: http://tclap.sourceforge.net
[cxxopts]: https://github.com/jarro2783/cxxopts
[docopt]: https://github.com/docopt/docopt.cpp
[gflags]: https://gflags.github.io/gflags
[getopt]: https://www.gnu.org/software/libc/manual/html_node/Getopt.html
[diana/hep]: http://diana-hep.org
[nsf award 1414736]: https://nsf.gov/awardsearch/showAward?AWD_ID=1414736
[university of cincinnati]: http://www.uc.edu
[gitbook]: https://cliutils.github.io/CLI11/book/
[cli11 advanced topics/custom converters]: https://cliutils.gitlab.io/CLI11Tu\
torial/chapters/advanced-topics.html#custom-converters
[programoptions.hxx]: https://github.com/Fytch/ProgramOptions.hxx
[argument aggregator]: https://github.com/vietjtnguyen/argagg
[args]: https://github.com/Taywee/args
[argh!]: https://github.com/adishavit/argh
[fmt]: https://github.com/fmtlib/fmt
[catch]: https://github.com/philsquared/Catch
[clara]: https://github.com/philsquared/Clara
[version 1.0 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-10/
[version 1.3 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-13/
[version 1.6 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-16/
[version 2.0 post]: https://iscinumpy.gitlab.io/post/announcing-cli11-20/
[wandbox-badge]: https://img.shields.io/badge/try_2.1-online-blue.svg
[wandbox-link]: https://wandbox.org/permlink/CA5bymNHh0AczdeN
[releases-badge]: https://img.shields.io/github/release/CLIUtils/CLI11.svg
[cli11-po-compare]: https://iscinumpy.gitlab.io/post/comparing-cli11-and-boos\
tpo/
[diana slides]: https://indico.cern.ch/event/619465/contributions/2507949/att\
achments/1448567/2232649/20170424-diana-2.pdf
[awesome c++]: https://github.com/fffaraz/awesome-cpp/blob/master/README.md#c\
li
[cli]: https://codesynthesis.com/projects/cli/
[single file libs]: https://github.com/nothings/single_file_libs/blob/master/\
README.md
[codacy-badge]: https://app.codacy.com/project/badge/Grade/2796b969c1b54321a0\
2ad08affec0800
[codacy-link]: https://www.codacy.com/gh/CLIUtils/CLI11/dashboard?utm_source=\
github.com&amp;utm_medium=referral&amp;utm_content=CLIUtils/CLI11&amp;utm_cam\
paign=Badge_Grade
[hunter]: https://docs.hunter.sh/en/latest/packages/pkg/CLI11.html
[standard readme style]: https://github.com/RichardLitt/standard-readme
[argparse]: https://github.com/p-ranav/argparse
[toml]: https://toml.io
[lyra]: https://github.com/bfgroup/Lyra

\
description-type: text/markdown;variant=GFM
url: https://github.com/CLIUtils/CLI11
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: catch2 ^2.13.7
bootstrap-build:
\
project = cli11-tests

using version
using config
using test
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true
\
location: cli11/cli11-tests-2.2.0.tar.gz
sha256sum: 45a93e4ebf9207b0e578107f266fa54eb39687a0eb09ad91cb88dffe13390bbf
:
name: concurrentqueue
version: 1.0.3+7
summary: A fast multi-producer, multi-consumer lock-free concurrent queue for\
 C++11
license: BSD-2-Clause
description:
\
# moodycamel::ConcurrentQueue<T>

An industrial-strength lock-free queue for C++.

Note: If all you need is a single-producer, single-consumer queue, I have\
 [one of those too][spsc].

## Features

- Knock-your-socks-off [blazing fast performance][benchmarks].
- Single-header implementation. Just drop it in your project.
- Fully thread-safe lock-free queue. Use concurrently from any number of\
 threads.
- C++11 implementation -- elements are moved (instead of copied) where\
 possible.
- Templated, obviating the need to deal exclusively with pointers -- memory\
 is managed for you.
- No artificial limitations on element types or maximum count.
- Memory can be allocated once up-front, or dynamically as needed.
- Fully portable (no assembly; all is done through standard C++11 primitives).
- Supports super-fast bulk operations.
- Includes a low-overhead blocking version (BlockingConcurrentQueue).
- Exception safe.

## Reasons to use

There are not that many full-fledged lock-free queues for C++. Boost has one,\
 but it's limited to objects with trivial
assignment operators and trivial destructors, for example.
Intel's TBB queue isn't lock-free, and requires trivial constructors too.
There're many academic papers that implement lock-free queues in C++, but\
 usable source code is
hard to find, and tests even more so.

This queue not only has less limitations than others (for the most part), but\
 [it's also faster][benchmarks].
It's been fairly well-tested, and offers advanced features like **bulk\
 enqueueing/dequeueing**
(which, with my new design, is much faster than one element at a time,\
 approaching and even surpassing
the speed of a non-concurrent queue even under heavy contention).

In short, there was a lock-free queue shaped hole in the C++ open-source\
 universe, and I set out
to fill it with the fastest, most complete, and well-tested design and\
 implementation I could.
The result is `moodycamel::ConcurrentQueue` :-)

## Reasons *not* to use

The fastest synchronization of all is the kind that never takes place.\
 Fundamentally,
concurrent data structures require some synchronization, and that takes time.\
 Every effort
was made, of course, to minimize the overhead, but if you can avoid sharing\
 data between
threads, do so!

Why use concurrent data structures at all, then? Because they're gosh darn\
 convenient! (And, indeed,
sometimes sharing data concurrently is unavoidable.)

My queue is **not linearizable** (see the next section on high-level design).\
 The foundations of
its design assume that producers are independent; if this is not the case,\
 and your producers
co-ordinate amongst themselves in some fashion, be aware that the elements\
 won't necessarily
come out of the queue in the same order they were put in *relative to the\
 ordering formed by that co-ordination*
(but they will still come out in the order they were put in by any\
 *individual* producer). If this affects
your use case, you may be better off with another implementation; either way,\
 it's an important limitation
to be aware of.

My queue is also **not NUMA aware**, and does a lot of memory re-use\
 internally, meaning it probably doesn't
scale particularly well on NUMA architectures; however, I don't know of any\
 other lock-free queue that *is*
NUMA aware (except for [SALSA][salsa], which is very cool, but has no\
 publicly available implementation that I know of).

Finally, the queue is **not sequentially consistent**; there *is* a\
 happens-before relationship between when an element is put
in the queue and when it comes out, but other things (such as pumping the\
 queue until it's empty) require more thought
to get right in all eventualities, because explicit memory ordering may have\
 to be done to get the desired effect. In other words,
it can sometimes be difficult to use the queue correctly. This is why it's a\
 good idea to follow the [samples][samples.md] where possible.
On the other hand, the upside of this lack of sequential consistency is\
 better performance.

## High-level design

Elements are stored internally using contiguous blocks instead of linked\
 lists for better performance.
The queue is made up of a collection of sub-queues, one for each producer.\
 When a consumer
wants to dequeue an element, it checks all the sub-queues until it finds one\
 that's not empty.
All of this is largely transparent to the user of the queue, however -- it\
 mostly just works<sup>TM</sup>.

One particular consequence of this design, however, (which seems to be\
 non-intuitive) is that if two producers
enqueue at the same time, there is no defined ordering between the elements\
 when they're later dequeued.
Normally this is fine, because even with a fully linearizable queue there'd\
 be a race between the producer
threads and so you couldn't rely on the ordering anyway. However, if for some\
 reason you do extra explicit synchronization
between the two producer threads yourself, thus defining a total order\
 between enqueue operations, you might expect
that the elements would come out in the same total order, which is a\
 guarantee my queue does not offer. At that
point, though, there semantically aren't really two separate producers, but\
 rather one that happens to be spread
across multiple threads. In this case, you can still establish a total\
 ordering with my queue by creating
a single producer token, and using that from both threads to enqueue (taking\
 care to synchronize access to the token,
of course, but there was already extra synchronization involved anyway).

I've written a more detailed [overview of the internal design][blog], as well\
 as [the full
nitty-gritty details of the design][design], on my blog. Finally, the
[source][source] itself is available for perusal for those interested in its\
 implementation.

## Basic use

The entire queue's implementation is contained in **one header**,\
 [`concurrentqueue.h`][concurrentqueue.h].
Simply download and include that to use the queue. The blocking version is in\
 a separate header,
[`blockingconcurrentqueue.h`][blockingconcurrentqueue.h], that depends on\
 [`concurrentqueue.h`][concurrentqueue.h] and
[`lightweightsemaphore.h`][lightweightsemaphore.h]. The implementation makes\
 use of certain key C++11 features,
so it requires a fairly recent compiler (e.g. VS2012+ or g++ 4.8; note that\
 g++ 4.6 has a known bug with `std::atomic`
and is thus not supported). The algorithm implementations themselves are\
 platform independent.

Use it like you would any other templated queue, with the exception that you\
 can use
it from many threads at once :-)

Simple example:

    #include "concurrentqueue.h"
    
    moodycamel::ConcurrentQueue<int> q;
    q.enqueue(25);
    
    int item;
    bool found = q.try_dequeue(item);
    assert(found && item == 25);

Description of basic methods:
- `ConcurrentQueue(size_t initialSizeEstimate)`
      Constructor which optionally accepts an estimate of the number of\
 elements the queue will hold
- `enqueue(T&& item)`
      Enqueues one item, allocating extra space if necessary
- `try_enqueue(T&& item)`
      Enqueues one item, but only if enough memory is already allocated
- `try_dequeue(T& item)`
      Dequeues one item, returning true if an item was found or false if the\
 queue appeared empty

Note that it is up to the user to ensure that the queue object is completely\
 constructed before
being used by any other threads (this includes making the memory effects of\
 construction
visible, possibly via a memory barrier). Similarly, it's important that all\
 threads have
finished using the queue (and the memory effects have fully propagated)\
 before it is
destructed.

There's usually two versions of each method, one "explicit" version that\
 takes a user-allocated per-producer or
per-consumer token, and one "implicit" version that works without tokens.\
 Using the explicit methods is almost
always faster (though not necessarily by a huge factor). Apart from\
 performance, the primary distinction between them
is their sub-queue allocation behaviour for enqueue operations: Using the\
 implicit enqueue methods causes an
automatically-allocated thread-local producer sub-queue to be allocated (it\
 is marked for reuse once the thread exits).
Explicit producers, on the other hand, are tied directly to their tokens'\
 lifetimes (and are also recycled as needed).

Full API (pseudocode):

	# Allocates more memory if necessary
	enqueue(item) : bool
	enqueue(prod_token, item) : bool
	enqueue_bulk(item_first, count) : bool
	enqueue_bulk(prod_token, item_first, count) : bool
	
	# Fails if not enough memory to enqueue
	try_enqueue(item) : bool
	try_enqueue(prod_token, item) : bool
	try_enqueue_bulk(item_first, count) : bool
	try_enqueue_bulk(prod_token, item_first, count) : bool
	
	# Attempts to dequeue from the queue (never allocates)
	try_dequeue(item&) : bool
	try_dequeue(cons_token, item&) : bool
	try_dequeue_bulk(item_first, max) : size_t
	try_dequeue_bulk(cons_token, item_first, max) : size_t
	
	# If you happen to know which producer you want to dequeue from
	try_dequeue_from_producer(prod_token, item&) : bool
	try_dequeue_bulk_from_producer(prod_token, item_first, max) : size_t
	
	# A not-necessarily-accurate count of the total number of elements
	size_approx() : size_t

## Blocking version

As mentioned above, a full blocking wrapper of the queue is provided that adds
`wait_dequeue` and `wait_dequeue_bulk` methods in addition to the regular\
 interface.
This wrapper is extremely low-overhead, but slightly less fast than the\
 non-blocking
queue (due to the necessary bookkeeping involving a lightweight semaphore).

There are also timed versions that allow a timeout to be specified (either in\
 microseconds
or with a `std::chrono` object).

The only major caveat with the blocking version is that you must be careful\
 not to
destroy the queue while somebody is waiting on it. This generally means you\
 need to
know for certain that another element is going to come along before you call\
 one of
the blocking methods. (To be fair, the non-blocking version cannot be\
 destroyed while
in use either, but it can be easier to coordinate the cleanup.)

Blocking example:

    #include "blockingconcurrentqueue.h"
    
    moodycamel::BlockingConcurrentQueue<int> q;
    std::thread producer([&]() {
        for (int i = 0; i != 100; ++i) {
            std::this_thread::sleep_for(std::chrono::milliseconds(i % 10));
            q.enqueue(i);
        }
    });
    std::thread consumer([&]() {
        for (int i = 0; i != 100; ++i) {
            int item;
            q.wait_dequeue(item);
            assert(item == i);
            
            if (q.wait_dequeue_timed(item, std::chrono::milliseconds(5))) {
                ++i;
                assert(item == i);
            }
        }
    });
    producer.join();
    consumer.join();
    
    assert(q.size_approx() == 0);

## Advanced features

#### Tokens

The queue can take advantage of extra per-producer and per-consumer storage if
it's available to speed up its operations. This takes the form of "tokens":
You can create a consumer token and/or a producer token for each thread or\
 task
(tokens themselves are not thread-safe), and use the methods that accept a\
 token
as their first parameter:

    moodycamel::ConcurrentQueue<int> q;
    
    moodycamel::ProducerToken ptok(q);
    q.enqueue(ptok, 17);
    
    moodycamel::ConsumerToken ctok(q);
    int item;
    q.try_dequeue(ctok, item);
    assert(item == 17);

If you happen to know which producer you want to consume from (e.g. in
a single-producer, multi-consumer scenario), you can use the\
 `try_dequeue_from_producer`
methods, which accept a producer token instead of a consumer token, and cut\
 some overhead.

Note that tokens work with the blocking version of the queue too.

When producing or consuming many elements, the most efficient way is to:

1. Use the bulk methods of the queue with tokens
2. Failing that, use the bulk methods without tokens
3. Failing that, use the single-item methods with tokens
4. Failing that, use the single-item methods without tokens

Having said that, don't create tokens willy-nilly -- ideally there would be
one token (of each kind) per thread. The queue will work with what it is
given, but it performs best when used with tokens.

Note that tokens aren't actually tied to any given thread; it's not\
 technically
required that they be local to the thread, only that they be used by a single
producer/consumer at a time.

#### Bulk operations

Thanks to the [novel design][blog] of the queue, it's just as easy to\
 enqueue/dequeue multiple
items as it is to do one at a time. This means that overhead can be cut\
 drastically for
bulk operations. Example syntax:

    moodycamel::ConcurrentQueue<int> q;

    int items[] = { 1, 2, 3, 4, 5 };
    q.enqueue_bulk(items, 5);
    
    int results[5];     // Could also be any iterator
    size_t count = q.try_dequeue_bulk(results, 5);
    for (size_t i = 0; i != count; ++i) {
        assert(results[i] == items[i]);
    }

#### Preallocation (correctly using `try_enqueue`)

`try_enqueue`, unlike just plain `enqueue`, will never allocate memory. If\
 there's not enough room in the
queue, it simply returns false. The key to using this method properly, then,\
 is to ensure enough space is
pre-allocated for your desired maximum element count.

The constructor accepts a count of the number of elements that it should\
 reserve space for. Because the
queue works with blocks of elements, however, and not individual elements\
 themselves, the value to pass
in order to obtain an effective number of pre-allocated element slots is\
 non-obvious.

First, be aware that the count passed is rounded up to the next multiple of\
 the block size. Note that the
default block size is 32 (this can be changed via the traits). Second, once a\
 slot in a block has been
enqueued to, that slot cannot be re-used until the rest of the block has\
 completely been completely filled
up and then completely emptied. This affects the number of blocks you need in\
 order to account for the
overhead of partially-filled blocks. Third, each producer (whether implicit\
 or explicit) claims and recycles
blocks in a different manner, which again affects the number of blocks you\
 need to account for a desired number of
usable slots.

Suppose you want the queue to be able to hold at least `N` elements at any\
 given time. Without delving too
deep into the rather arcane implementation details, here are some simple\
 formulas for the number of elements
to request for pre-allocation in such a case. Note the division is intended\
 to be arithmetic division and not
integer division (in order for `ceil()` to work).

For explicit producers (using tokens to enqueue):

    (ceil(N / BLOCK_SIZE) + 1) * MAX_NUM_PRODUCERS * BLOCK_SIZE

For implicit producers (no tokens):

    (ceil(N / BLOCK_SIZE) - 1 + 2 * MAX_NUM_PRODUCERS) * BLOCK_SIZE

When using mixed producer types:

    ((ceil(N / BLOCK_SIZE) - 1) * (MAX_EXPLICIT_PRODUCERS + 1) + 2 *\
 (MAX_IMPLICIT_PRODUCERS + MAX_EXPLICIT_PRODUCERS)) * BLOCK_SIZE

If these formulas seem rather inconvenient, you can use the constructor\
 overload that accepts the minimum
number of elements (`N`) and the maximum number of explicit and implicit\
 producers directly, and let it do the
computation for you.

Finally, it's important to note that because the queue is only eventually\
 consistent and takes advantage of
weak memory ordering for speed, there's always a possibility that under\
 contention `try_enqueue` will fail
even if the queue is correctly pre-sized for the desired number of elements.\
 (e.g. A given thread may think that
the queue's full even when that's no longer the case.) So no matter what, you\
 still need to handle the failure
case (perhaps looping until it succeeds), unless you don't mind dropping\
 elements.

#### Exception safety

The queue is exception safe, and will never become corrupted if used with a\
 type that may throw exceptions.
The queue itself never throws any exceptions (operations fail gracefully\
 (return false) if memory allocation
fails instead of throwing `std::bad_alloc`).

It is important to note that the guarantees of exception safety only hold if\
 the element type never throws
from its destructor, and that any iterators passed into the queue (for bulk\
 operations) never throw either.
Note that in particular this means `std::back_inserter` iterators must be\
 used with care, since the vector
being inserted into may need to allocate and throw a `std::bad_alloc`\
 exception from inside the iterator;
so be sure to reserve enough capacity in the target container first if you do\
 this.

The guarantees are presently as follows:
- Enqueue operations are rolled back completely if an exception is thrown\
 from an element's constructor.
  For bulk enqueue operations, this means that elements are copied instead of\
 moved (in order to avoid
  having only some of the objects be moved in the event of an exception).\
 Non-bulk enqueues always use
  the move constructor if one is available.
- If the assignment operator throws during a dequeue operation (both single\
 and bulk), the element(s) are
  considered dequeued regardless. In such a case, the dequeued elements are\
 all properly destructed before
  the exception is propagated, but there's no way to get the elements\
 themselves back.
- Any exception that is thrown is propagated up the call stack, at which\
 point the queue is in a consistent
  state.

Note: If any of your type's copy constructors/move constructors/assignment\
 operators don't throw, be sure
to annotate them with `noexcept`; this will avoid the exception-checking\
 overhead in the queue where possible
(even with zero-cost exceptions, there's still a code size impact that has to\
 be taken into account).

#### Traits

The queue also supports a traits template argument which defines various\
 types, constants,
and the memory allocation and deallocation functions that are to be used by\
 the queue. The typical pattern
to providing your own traits is to create a class that inherits from the\
 default traits
and override only the values you wish to change. Example:

    struct MyTraits : public moodycamel::ConcurrentQueueDefaultTraits
    {
    	static const size_t BLOCK_SIZE = 256;		// Use bigger blocks
    };
    
    moodycamel::ConcurrentQueue<int, MyTraits> q;

#### How to dequeue types without calling the constructor

The normal way to dequeue an item is to pass in an existing object by\
 reference, which
is then assigned to internally by the queue (using the move-assignment\
 operator if possible).
This can pose a problem for types that are
expensive to construct or don't have a default constructor; fortunately,\
 there is a simple
workaround: Create a wrapper class that copies the memory contents of the\
 object when it
is assigned by the queue (a poor man's move, essentially). Note that this\
 only works if
the object contains no internal pointers. Example:

    struct MyObjectMover {
        inline void operator=(MyObject&& obj) {
            std::memcpy(data, &obj, sizeof(MyObject));
            
            // TODO: Cleanup obj so that when it's destructed by the queue
            // it doesn't corrupt the data of the object we just moved it into
        }

        inline MyObject& obj() { return *reinterpret_cast<MyObject*>(data); }

    private:
        align(alignof(MyObject)) char data[sizeof(MyObject)];
    };

A less dodgy alternative, if moves are cheap but default construction is not,\
 is to use a
wrapper that defers construction until the object is assigned, enabling use\
 of the move
constructor:

    struct MyObjectMover {
        inline void operator=(MyObject&& x) {
            new (data) MyObject(std::move(x));
            created = true;
        }

        inline MyObject& obj() {
            assert(created);
            return *reinterpret_cast<MyObject*>(data);
        }

        ~MyObjectMover() {
            if (created)
                obj().~MyObject();
        }

    private:
        align(alignof(MyObject)) char data[sizeof(MyObject)];
        bool created = false;
    };

## Samples

There are some more detailed samples [here][samples.md]. The source of
the [unit tests][unittest-src] and [benchmarks][benchmark-src] are available\
 for reference as well.

## Benchmarks

See my blog post for some [benchmark results][benchmarks] (including versus\
 `boost::lockfree::queue` and `tbb::concurrent_queue`),
or run the benchmarks yourself (requires MinGW and certain GnuWin32 utilities\
 to build on Windows, or a recent
g++ on Linux):

    cd build
    make benchmarks
    bin/benchmarks

The short version of the benchmarks is that it's so fast (especially the bulk\
 methods), that if you're actually
using the queue to *do* anything, the queue won't be your bottleneck.

## Tests (and bugs)

I've written quite a few unit tests as well as a randomized long-running fuzz\
 tester. I also ran the
core queue algorithm through the [CDSChecker][cdschecker] C++11 memory model\
 model checker. Some of the
inner algorithms were tested separately using the [Relacy][relacy] model\
 checker, and full integration
tests were also performed with Relacy.
I've tested
on Linux (Fedora 19) and Windows (7), but only on x86 processors so far\
 (Intel and AMD). The code was
written to be platform-independent, however, and should work across all\
 processors and OSes.

Due to the complexity of the implementation and the difficult-to-test nature\
 of lock-free code in general,
there may still be bugs. If anyone is seeing buggy behaviour, I'd like to\
 hear about it! (Especially if
a unit test for it can be cooked up.) Just open an issue on GitHub.

## License

I'm releasing the source of this repository (with the exception of\
 third-party code, i.e. the Boost queue
(used in the benchmarks for comparison), Intel's TBB library (ditto),\
 CDSChecker, Relacy, and Jeff Preshing's
cross-platform semaphore, which all have their own licenses)
under a simplified BSD license. I'm also dual-licensing under the Boost\
 Software License.
See the [LICENSE.md][license] file for more details.

Note that lock-free programming is a patent minefield, and this code may very
well violate a pending patent (I haven't looked), though it does not to my\
 present knowledge.
I did design and implement this queue from scratch.

## Diving into the code

If you're interested in the source code itself, it helps to have a rough idea\
 of how it's laid out. This
section attempts to describe that.

The queue is formed of several basic parts (listed here in roughly the order\
 they appear in the source). There's the
helper functions (e.g. for rounding to a power of 2). There's the default\
 traits of the queue, which contain the
constants and malloc/free functions used by the queue. There's the producer\
 and consumer tokens. Then there's the queue's
public API itself, starting with the constructor, destructor, and\
 swap/assignment methods. There's the public enqueue methods,
which are all wrappers around a small set of private enqueue methods found\
 later on. There's the dequeue methods, which are
defined inline and are relatively straightforward.

Then there's all the main internal data structures. First, there's a\
 lock-free free list, used for recycling spent blocks (elements
are enqueued to blocks internally). Then there's the block structure itself,\
 which has two different ways of tracking whether
it's fully emptied or not (remember, given two parallel consumers, there's no\
 way to know which one will finish first) depending on where it's used.
Then there's a small base class for the two types of internal SPMC producer\
 queues (one for explicit producers that holds onto memory
but attempts to be faster, and one for implicit ones which attempt to recycle\
 more memory back into the parent but is a little slower).
The explicit producer is defined first, then the implicit one. They both\
 contain the same general four methods: One to enqueue, one to
dequeue, one to enqueue in bulk, and one to dequeue in bulk. (Obviously they\
 have constructors and destructors too, and helper methods.)
The main difference between them is how the block handling is done (they both\
 use the same blocks, but in different ways, and map indices
to them in different ways).

Finally, there's the miscellaneous internal methods: There's the ones that\
 handle the initial block pool (populated when the queue is constructed),
and an abstract block pool that comprises the initial pool and any blocks on\
 the free list. There's ones that handle the producer list
(a lock-free add-only linked list of all the producers in the system).\
 There's ones that handle the implicit producer lookup table (which
is really a sort of specialized TLS lookup). And then there's some helper\
 methods for allocating and freeing objects, and the data members
of the queue itself, followed lastly by the free-standing swap functions.


[blog]: http://moodycamel.com/blog/2014/a-fast-general-purpose-lock-free-queu\
e-for-c++
[design]: http://moodycamel.com/blog/2014/detailed-design-of-a-lock-free-queue
[samples.md]: https://github.com/cameron314/concurrentqueue/blob/master/sampl\
es.md
[source]: https://github.com/cameron314/concurrentqueue
[concurrentqueue.h]: https://github.com/cameron314/concurrentqueue/blob/maste\
r/concurrentqueue.h
[blockingconcurrentqueue.h]: https://github.com/cameron314/concurrentqueue/bl\
ob/master/blockingconcurrentqueue.h
[unittest-src]: https://github.com/cameron314/concurrentqueue/tree/master/tes\
ts/unittests
[benchmarks]: http://moodycamel.com/blog/2014/a-fast-general-purpose-lock-fre\
e-queue-for-c++#benchmarks
[benchmark-src]: https://github.com/cameron314/concurrentqueue/tree/master/be\
nchmarks
[license]: https://github.com/cameron314/concurrentqueue/blob/master/LICENSE.\
md
[cdschecker]: http://demsky.eecs.uci.edu/c11modelchecker.html
[relacy]: http://www.1024cores.net/home/relacy-race-detector
[spsc]: https://github.com/cameron314/readerwriterqueue
[salsa]: http://webee.technion.ac.il/~idish/ftp/spaa049-gidron.pdf

\
description-type: text/markdown;variant=GFM
url: https://github.com/cameron314/concurrentqueue
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = concurrentqueue

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h

using c

\
location: concurrentqueue/concurrentqueue-1.0.3+7.tar.gz
sha256sum: 39d5074402b0276adc4fe69dae96ef9087c3470b0f060ffda9964a7aed5d9ac0
:
name: cryptopp
version: 8.6.0+8
summary: free C++ class library of cryptographic schemes
license: other
description:
\
Crypto++: free C++ Class Library of Cryptographic Schemes
Version 8.6 - TBD

Crypto++ Library is a free C++ class library of cryptographic schemes.
Currently the library contains the following algorithms:

                   algorithm type  name

 authenticated encryption schemes  GCM, CCM, EAX, ChaCha20Poly1305 and
                                   XChaCha20Poly1305

        high speed stream ciphers  ChaCha (8/12/20), ChaCha (IETF), Panama,\
 Salsa20,
                                   Sosemanuk, XSalsa20, XChaCha20

           AES and AES candidates  AES (Rijndael), RC6, MARS, Twofish,\
 Serpent,
                                   CAST-256

                                   ARIA, Blowfish, Camellia, CHAM, HIGHT,\
 IDEA,
                                   Kalyna (128/256/512), LEA, SEED, RC5,\
 SHACAL-2,
              other block ciphers  SIMON (64/128), Skipjack, SPECK (64/128),
                                   Simeck, SM4, Threefish (256/512/1024),
                                   Triple-DES (DES-EDE2 and DES-EDE3), TEA,\
 XTEA

  block cipher modes of operation  ECB, CBC, CBC ciphertext stealing (CTS),
                                   CFB, OFB, counter mode (CTR), XTS

     message authentication codes  BLAKE2s, BLAKE2b, CMAC, CBC-MAC, DMAC,\
 GMAC, HMAC,
                                   Poly1305, Poly1305 (IETF), SipHash,\
 Two-Track-MAC,
                                   VMAC

                                   BLAKE2s, BLAKE2b, Keccack (F1600), LSH\
 (256/512),
                   hash functions  SHA-1, SHA-2 (224/256/384/512), SHA-3\
 (224/256),
                                   SHA-3 (384/512), SHAKE (128/256), SipHash,\
 SM3, Tiger,
                                   RIPEMD (128/160/256/320), WHIRLPOOL

                                   RSA, DSA, Deterministic DSA, ElGamal,
          public-key cryptography  Nyberg-Rueppel (NR), Rabin-Williams (RW),\
 LUC,
                                   LUCELG, EC-based German Digital Signature\
 (ECGDSA),
                                   DLIES (variants of DHAES), ESIGN

   padding schemes for public-key  PKCS#1 v2.0, OAEP, PSS, PSSR, IEEE P1363
                          systems  EMSA2 and EMSA5

                                   Diffie-Hellman (DH), Unified\
 Diffie-Hellman (DH2),
            key agreement schemes  Menezes-Qu-Vanstone (MQV), Hashed MQV\
 (HMQV),
                                   Fully Hashed MQV (FHMQV), LUCDIF, XTR-DH

      elliptic curve cryptography  ECDSA, Deterministic ECDSA, ed25519, ECNR,\
 ECIES,
                                   ECDH, ECMQV, x25519

          insecure or obsolescent  MD2, MD4, MD5, Panama Hash, DES, ARC4, SEAL
algorithms retained for backwards  3.0, WAKE-OFB, DESX (DES-XEX3), RC2,
     compatibility and historical  SAFER, 3-WAY, GOST, SHARK, CAST-128, Square
                            value

Other features include:

  * pseudo random number generators (PRNG): ANSI X9.17 appendix C, RandomPool,
    DARN, VIA Padlock, RDRAND, RDSEED, NIST Hash and HMAC DRBGs
  * password based key derivation functions: PBKDF1 and PBKDF2 from PKCS #5,
    PBKDF from PKCS #12 appendix B, HKDF from RFC 5869, Scrypt from RFC 7914
  * Shamir's secret sharing scheme and Rabin's information dispersal algorithm
    (IDA)
  * fast multi-precision integer (bignum) and polynomial operations
  * finite field arithmetics, including GF(p) and GF(2^n)
  * prime number generation and verification
  * useful non-cryptographic algorithms
      + DEFLATE (RFC 1951) compression/decompression with gzip (RFC 1952) and
        zlib (RFC 1950) format support
      + Hex, base-32, base-64, URL safe base-64 encoding and decoding
      + 32-bit CRC, CRC-C and Adler32 checksum
  * class wrappers for these platform and operating system features\
 (optional):
      + high resolution timers on Windows, Unix, and Mac OS
      + /dev/random, /dev/urandom, /dev/srandom
      + Microsoft's CryptGenRandom or BCryptGenRandom on Windows
  * A high level interface for most of the above, using a filter/pipeline
    metaphor
  * benchmarks and validation testing
  * x86, x64 (x86-64), x32 (ILP32), ARM-32, Aarch32, Aarch64 and Power8
    in-core code for the commonly used algorithms
      + run-time CPU feature detection and code selection
      + supports GCC-style and MSVC-style inline assembly, and MASM for x64
      + x86, x64 (x86-64), x32 provides MMX, SSE2, and SSE4 implementations
      + ARM-32, Aarch32 and Aarch64 provides NEON, ASIMD and ARMv8\
 implementations
      + Power8 provides in-core AES using NX Crypto Acceleration

The Crypto++ library was originally written by Wei Dai. The library is now
maintained by several team members and the community. You are welcome to use\
 it
for any purpose without paying anyone, but see License.txt for the fine print.

The following compilers are supported for this release. Please visit
http://www.cryptopp.com the most up to date build instructions and porting\
 notes.

  * Visual Studio 2003 - 2019
  * GCC 3.3 - 10.1
  * Apple Clang 4.3 - 12.0
  * LLVM Clang 2.9 - 11.0
  * C++ Builder 2015
  * Intel C++ Compiler 9 - 16.0
  * Sun Studio 12u1 - 12.6
  * IBM XL C/C++ 10.0 - 14.0

*** Important Usage Notes ***

1. If a constructor for A takes a pointer to an object B (except primitive
types such as int and char), then A owns B and will delete B at A's
destruction.  If a constructor for A takes a reference to an object B,
then the caller retains ownership of B and should not destroy it until
A no longer needs it.

2. Crypto++ is thread safe at the class level. This means you can use
Crypto++ safely in a multithreaded application, but you must provide
synchronization when multiple threads access a common Crypto++ object.

*** MSVC-Specific Information ***

To compile Crypto++ with MSVC, open "cryptest.sln" (for MSVC 2003 - 2015)
and build one or more of the following projects:

cryptest Non-DLL-Import Configuration - This builds the full static library
  along with a full test driver.
cryptest DLL-Import Configuration - This builds a static library containing
  only algorithms not in the DLL, along with a full test driver that uses
  both the DLL and the static library.
cryptdll - This builds the DLL. Please note that if you wish to use Crypto++
  as a FIPS validated module, you must use a pre-built DLL that has undergone
  the FIPS validation process instead of building your own.
dlltest - This builds a sample application that only uses the DLL.

The DLL used to provide FIPS validated cryptography. The library was moved
to the CMVP's [Historical Validation List](http://csrc.nist.gov/groups/STM/cm\
vp/documents/140-1/140val-historical.htm).
The library and the DLL are no longer considered
validated. You should no longer use the DLL.

To use the Crypto++ DLL in your application, #include "dll.h" before including
any other Crypto++ header files, and place the DLL in the same directory as
your .exe file. dll.h includes the line #pragma comment(lib, "cryptopp")
so you don't have to explicitly list the import library in your project
settings. To use a static library form of Crypto++, make the "cryptlib"
project a dependency of your application project, or specify it as
an additional library to link with in your project settings.
In either case you should check the compiler options to
make sure that the library and your application are using the same C++
run-time libraries and calling conventions.

*** DLL Memory Management ***

Because it's possible for the Crypto++ DLL to delete objects allocated
by the calling application, they must use the same C++ memory heap. Three
methods are provided to achieve this.
1.  The calling application can tell Crypto++ what heap to use. This method
    is required when the calling application uses a non-standard heap.
2.  Crypto++ can tell the calling application what heap to use. This method
    is required when the calling application uses a statically linked C++ Run
    Time Library. (Method 1 does not work in this case because the Crypto++\
 DLL
    is initialized before the calling application's heap is initialized.)
3.  Crypto++ can automatically use the heap provided by the calling\
 application's
    dynamically linked C++ Run Time Library. The calling application must
    make sure that the dynamically linked C++ Run Time Library is initialized
    before Crypto++ is loaded. (At this time it is not clear if it is possible
    to control the order in which DLLs are initialized on Windows 9x machines,
    so it might be best to avoid using this method.)

When Crypto++ attaches to a new process, it searches all modules loaded
into the process space for exported functions "GetNewAndDeleteForCryptoPP"
and "SetNewAndDeleteFromCryptoPP". If one of these functions is found,
Crypto++ uses methods 1 or 2, respectively, by calling the function.
Otherwise, method 3 is used.

*** Linux and Unix-like Specific Information ***

A makefile is included for you to compile Crypto++ with GCC and compatibles.
Make sure you are using GNU Make and GNU ld. The make process will produce
two files, libcryptopp.a and cryptest.exe. Run "cryptest.exe v" for the
validation suite and "cryptest.exe tv all" for additional test vectors.

The makefile uses '-DNDEBUG -g2 -O2' CXXFLAGS by default. If you use an
alternate build system, like Autotools or CMake, then ensure the build system
includes '-DNDEBUG' for production or release builds. The Crypto++ library\
 uses
asserts for debugging and diagnostics during development; it does not
rely on them to crash a program at runtime.

If an assert triggers in production software, then unprotected sensitive
information could be egressed from the program to the filesystem or the
platform's error reporting program, like Apport on Ubuntu or CrashReporter
on Apple.

The makefile orders object files to help remediate problems associated with
C++ static initialization order. The library does not use custom linker\
 scripts.
If you use an alternate build system, like Autotools or CMake, and collect\
 source
files into a list, then ensure these three are at the head of the list:\
 'cryptlib.cpp
cpu.cpp integer.cpp <other sources>'. They should be linked in the same order:
'cryptlib.o cpu.o integer.o <other objects>'.

If your linker supports initialization attributes, like init_priority, then\
 you can
define CRYPTOPP_INIT_PRIORITY to control object initialization order. Set it\
 to a
value like 250. User programs can use CRYPTOPP_USER_PRIORITY to avoid\
 conflicts with
library values. Initialization attributes are more reliable than object file\
 ordering,
but its not ubiquitously supported by linkers.

The makefile links to the static version of the Crypto++ library to avoid\
 binary
planting and other LD_PRELOAD tricks. You should use the static version of the
library in your programs to help avoid unwanted redirections.

*** Side Channel Attacks ***

Crypto++ attempts to resist side channel attacks using various remediations.
The remdiations are applied as a best effort but are probably incomplete. They
are incomplete due to cpu speculation bugs like Spectre, Meltdown, Foreshadow.
The attacks target both cpu caches and internal buffers. Intel generally\
 refers
to internal buffer attacks as "Microarchitectural Data Sampling" (MDS).

The library uses hardware instructions when possible for block ciphers, hashes
and other operations. The hardware acceleration remediates some timing
attacks. The library also uses cache-aware algorithms and access patterns
to minimize leakage cache evictions.

Elliptic curves over binary fields are believed to leak information. The task\
 is a
work in progress. We don't believe binary fields are used in production, so\
 we feel it
is a low risk at the moment.

Crypto++ does not engage Specter remediations at this time. The GCC options
for Specter are -mfunction-return=thunk and -mindirect-branch=thunk, and the
library uses them during testing. If you want the Specter workarounds then add
the GCC options to your CXXFLAGS when building the library.

To help resist attacks you should disable hyperthreading on cpus. If you
suspect or find an information leak then please report it.

*** Documentation and Support ***

Crypto++ is documented through inline comments in header files, which are
processed through Doxygen to produce an HTML reference manual. You can find
a link to the manual from http://www.cryptopp.com. Also at that site is
the Crypto++ FAQ, which you should browse through before attempting to
use this library, because it will likely answer many of questions that
may come up. Finally, the site provide the wiki which has many topics
and code examples.

If you run into any problems, please try the Crypto++ mailing list.
The subscription information and the list archive are available on
http://www.cryptopp.com.

*** Source Code and Contributing ***

The source code and its planned changes are available at the following\
 locations.

  * The Crypto++ GitHub repository allows you to view the latest (unreleased)
    Crypto++ source code via the Linux kernel's git beginning around June\
 2015.
    Its also serves as an incubator to nurture and grow the library.
  * The former Crypto++ SourceForge repository allows you to view the Crypto++
    source code via Apache's subversion until about July 2015. At that time,
    SourceForge had infrastructure problems and a cutover to GutHub was\
 performed.
  * The Roadmap on the wiki provides the general direction the library is\
 heading.
    It includes planned features and releases, and even some wishlist items.

Contributions of all types are welcomed. Contributions include the following.

  * Bug finding and fixes
  * Features and enhancements
  * Test scripts and test cases
  * Branch and release testing
  * Documentation and updates

If you think you have found a bug in the library, then you should discuss it\
 on the
Users mailing list. Discussing it will help bring the issue to the attention\
 of folks
who can help resolve the issue. If you want to contribute a bug fix to the\
 library,
then make a Pull Request or make a Diff available somewhere. Also see Bug\
 Reports on
the wiki.

Features and enhancements are welcomend additions to the library. This\
 category tends
to be time consuming because algorithms and their test cases need to be\
 reviewed and
merged. Please be mindful of the test cases, and attempt to procure them from\
 an
independent source.

The library cherishes test scripts and test cases. They ensure the library is\
 fit and
they help uncover issues with the library before users experience them. If\
 you have
some time, then write some test cases, especially the ones that are intended\
 to break
things.

Branch and release testing is your chance to ensure Master (and planned\
 merges) meets
your expectations and perform as expected. If you have a few spare cycles,\
 then please
test Master on your favorite platform. We need more testing on MinGW, Windows\
 Phone,
Windows Store, Solaris 10 (and below), and modern iOS and OS X (including TV\
 and
Watch builds).

Documentation and updates includes both the inline source code annotations\
 using
Doxygen, and the online information provided in the wiki. The wiki is more\
 verbose and
usually provides more contextual information than the API reference. Besides\
 testing,
documentation is one of the highest returns on investment.

*** History ***

The items in this section comprise the most recent history. Please see\
 History.txt
for the record back to Crypto++ 1.0.

8.6.0 - September 21, 2021
      - minor release, recompile of programs required
      - expanded community input and support
        * 74 unique contributors as of this release
      - fix ElGamal encryption
      - fix ChaCha20 AVX2 implementation
      - add octal and decimal literal prefix parsing to Integer
      - add missing overload in ed25519Signer and ed25519Verifier
      - make SHA-NI independent of AVX and AVX2
      - fix OldRandomPool GenerateWord32
      - use CPPFLAGS during feature testing
      - fix compile on CentOS 5
      - fix compile on FreeBSD
      - fix feature testing on ARM A-32 and Aarch64
      - enable inline ASM for CRC and PMULL on Apple M1
      - fix Intel oneAPI compile
      - rename test files with *.cpp extension
      - fix GCC compile error due to missing _mm256_set_m128i
      - add LSH-256 and LSH-512 hash functions
      - add ECIES_P1363 for backwards compatibility
      - fix AdditiveCipherTemplate<T> ProcessData
      - remove CRYPTOPP_NO_CXX11 define
      - add -fno-common for Darwin builds
      - update documentation

8.5.0 - March 7, 2021
      - minor release, no recompile of programs required
      - expanded community input and support
        * 70 unique contributors as of this release
      - port to Apple M1 hardware

8.4.0 - January 2, 2021
      - minor release, recompile of programs required
      - expanded community input and support
        * 67 unique contributors as of this release
      - fix SIGILL on POWER8 when compiling with GCC 10
      - fix potential out-of-bounds write in FixedSizeAllocatorWithCleanup
      - fix compile on AIX POWER7 with IBM XLC 12.01
      - fix compile on Solaris with SunCC 12.6
      - revert changes for constant-time elliptic curve algorithms
      - fix makefile clean and distclean recipes

8.3.0 - December 20, 2020
      - minor release, recompile of programs required
      - expanded community input and support
        * 66 unique contributors as of this release
      - fix use of macro CRYPTOPP_ALIGN_DATA
      - fix potential out-of-bounds read in ECDSA
      - fix std::bad_alloc when using ByteQueue in pipeline
      - fix missing CRYPTOPP_CXX17_EXCEPTIONS with Clang
      - fix potential out-of-bounds read in GCM mode
      - add configure.sh when preprocessor macros fail
      - fix potential out-of-bounds read in SipHash
      - fix compile error on POWER9 due to vec_xl_be
      - fix K233 curve on POWER8
      - add Cirrus CI testing
      - fix broken encryption for some 64-bit ciphers
      - fix Android cpu-features.c using C++ compiler
      - disable RDRAND and RDSEED for some AMD processors
      - fix BLAKE2 hash calculation using Salt and Personalization
      - refresh Android and iOS build scripts
      - add XTS mode
      - fix circular dependency between misc.h and secblock.h
      - add Certificate interface
      - fix recursion in AES::Encryption without AESNI
      - add missing OID for ElGamal encryption
      - fix missing override in KeyDerivationFunction-derived classes
      - fix RDSEED assemble under MSVC
      - fix elliptic curve timing leaks (CVE-2019-14318)
      - add link-library variable to Makefiles
      - fix SIZE_MAX definition in misc.h
      - add GetWord64 and PutWord64 to BufferedTransformation
      - use HKDF in AutoSeededX917RNG::Reseed
      - fix Asan finding in VMAC on i686 in inline asm
      - fix undeclared identifier _mm_roti_epi64 on Gentoo
      - fix ECIES and GetSymmetricKeyLength
      - fix possible divide by zero in PKCS5_PBKDF2_HMAC
      - refine ASN.1 encoders and decoders
      - disable BMI2 code paths in Integer class
      - fix use of CRYPTOPP_CLANG_VERSION
      - add NEON SHA1, SHA256 and SHA512 from Cryptogams
      - add ARM SHA1, SHA256 and SHA512 from Cryptogams
      - make config.h more autoconf friendly
      - handle Clang triplet armv8l-unknown-linux-gnueabihf
      - fix reference binding to misaligned address in xed25519
      - clear asserts in TestDataNameValuePairs

8.2.0 - April 28, 2019
      - minor release, no recompile of programs required
      - expanded community input and support
        * 56 unique contributors as of this release
      - use PowerPC unaligned loads and stores with Power8
      - add SKIPJACK test vectors
      - fix SHAKE-128 and SHAKE-256 compile
      - removed IS_NEON from Makefile
      - fix Aarch64 build on Fedora 29
      - fix missing GF2NT_233_Multiply_Reduce_CLMUL in FIPS DLL
      - add missing BLAKE2 constructors
      - fix missing BlockSize() in BLAKE2 classes

8.1.0 - February 22, 2019
      - minor release, no recompile of programs required
      - expanded community input and support
        * 56 unique contributors as of this release
      - fix OS X PowerPC builds with Clang
      - add Microsoft ARM64 support
      - fix iPhone Simulator build due to missing symbols
      - add CRYPTOPP_BUGGY_SIMD_LOAD_AND_STORE
      - add carryless multiplies for NIST b233 and k233 curves
      - fix OpenMP build due to use of OpenMP 4 with down-level compilers
      - add SignStream and VerifyStream for ed25519 and large files
      - fix missing AlgorithmProvider in PanamaHash
      - add SHAKE-128 and SHAKE-256
      - fix AVX2 build due to _mm256_broadcastsi128_si256
      - add IETF ChaCha, XChaCha, ChaChaPoly1305 and XChaChaPoly1305

8.0.0 - December 28, 2018
      - major release, recompile of programs required
      - expanded community input and support
         * 54 unique contributors as of this release
      - add x25519 key exchange and ed25519 signature scheme
      - add limited Asymmetric Key Package support from RFC 5958
      - add Power9 DARN random number generator support
      - add CHAM, HC-128, HC-256, Hight, LEA, Rabbit, Simeck
      - fix FixedSizeAllocatorWithCleanup may be unaligned on some platforms
      - cutover to GNU Make-based cpu feature tests
      - rename files with dashes to underscores
      - fix LegacyDecryptor and LegacyDecryptorWithMAC use wrong MAC
      - fix incorrect AES/CBC decryption on Windows
      - avoid Singleton<T> when possible, avoid std::call_once completely
      - fix SPARC alignment problems due to GetAlignmentOf<T>() on word64
      - add ARM AES asm implementation from Cryptogams
      - remove CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS support

June 2015 - Changing of the guard. Wei Dai turned the library over to the
        community. The first community release was Crypto++ 5.6.3. Wei is
        no longer involved with the daily operations of the project. Wei
        still provides guidance when we have questions.

Originally written by Wei Dai, maintained by the Crypto++ Project

\
description-type: text/plain
url: https://cryptopp.com
doc-url: https://www.cryptopp.com/wiki/Main_Page
src-url: https://github.com/weidai11/cryptopp
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = cryptopp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

config [bool] config.cryptopp.asm ?= true
config [bool] config.cryptopp.ssse3 ?= true
config [bool] config.cryptopp.sse4 ?= true
config [bool] config.cryptopp.clmul ?= true
config [bool] config.cryptopp.aes ?= true
config [bool] config.cryptopp.avx2 ?= true
config [bool] config.cryptopp.sha ?= true

\
location: cryptopp/cryptopp-8.6.0+8.tar.gz
sha256sum: 86310e4f56f9454055e7d159d37c5165cd7d3b18bf2118a86d99546eb1a67d5a
:
name: ctre
version: 3.5.0+1
summary: Fast compile-time regular expressions with support for\
 matching/searching/capturing during compile-time or runtime.
license: Apache-2.0; Apache License 2.0
description:
\
# Compile Time Regular Expression (ctre)

<p align="center">
    <a href="https://cppget.org/?packages=ctre">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=ctre">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

See [`ctre` documentation](https://compile-time.re) for usage and details and
limitations.

 - ctre: https://github.com/hanickadot/compile-time-regular-expressions
 - Build2: https://build2.org

Note: This is the source code for the build2 package of the `ctre` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

\
description-type: text/markdown;variant=GFM
url: https://github.com/hanickadot/compile-time-regular-expressions
doc-url: https://compile-time.re
package-email: wmbat@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
build-exclude: windows**; The library only partially supports windows, use at\
 your own risk
bootstrap-build:
\
project = ctre

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: ctre/ctre-3.5.0+1.tar.gz
sha256sum: 4086dfaf5e1a3f941d821847f3d9aee53c63aa63d8ab27380e5948907a753bec
:
name: ctre
version: 3.6.0
summary: Fast compile-time regular expressions with support for\
 matching/searching/capturing during compile-time or runtime.
license: Apache-2.0; Apache License 2.0
description:
\
# Compile Time Regular Expression (ctre)

<p align="center">
    <a href="https://cppget.org/?packages=ctre">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=ctre">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

See [`ctre` documentation](https://compile-time.re) for usage and details and
limitations.

 - ctre: https://github.com/hanickadot/compile-time-regular-expressions
 - Build2: https://build2.org

Note: This is the source code for the build2 package of the `ctre` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

\
description-type: text/markdown;variant=GFM
url: https://github.com/hanickadot/compile-time-regular-expressions
doc-url: https://compile-time.re
package-email: wmbat@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++ >= 17
build-exclude: windows**; The library only partially supports windows, use at\
 your own risk
bootstrap-build:
\
project = ctre

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: ctre/ctre-3.6.0.tar.gz
sha256sum: 11dad248fe467f279e911f79265354816d8d6b6666e3df2790ffee97fb277004
:
name: ctre
version: 3.7.0
summary: Fast compile-time regular expressions with support for\
 matching/searching/capturing during compile-time or runtime.
license: Apache-2.0; Apache License 2.0
description:
\
# Compile Time Regular Expression (ctre)

<p align="center">
    <a href="https://cppget.org/?packages=ctre">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=ctre">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

See [`ctre` documentation](https://compile-time.re) for usage and details and
limitations.

 - ctre: https://github.com/hanickadot/compile-time-regular-expressions
 - Build2: https://build2.org

Note: This is the source code for the build2 package of the `ctre` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

\
description-type: text/markdown;variant=GFM
url: https://github.com/hanickadot/compile-time-regular-expressions
doc-url: https://compile-time.re
package-email: wmbat@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++ >= 17
build-exclude: windows**; The library only partially supports windows, use at\
 your own risk
bootstrap-build:
\
project = ctre

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: ctre/ctre-3.7.0.tar.gz
sha256sum: 9ac3a64b6292900a209700b120c7f1f33795f23621cc2e5345eba9d2f6f8eb6e
:
name: curl
version: 7.67.0+8
summary: Command line tool for transferring data with URLs
license: cURL; MIT/X derivate license.
topics: HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs. The curl
command line tool makes the various features of libcurl available from the
shell. For more information see:

https://curl.haxx.se/

This package contains the original curl program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of curl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.haxx.se/
doc-url: https://curl.haxx.se/docs/manpage.html
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-users@cool.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libcurl == 7.67.0
depends: libca-certificates-curl >= 1.0.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : cURL License; see accompanying COPYING file

project = curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : cURL License; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/curl-7.67.0+8.tar.gz
sha256sum: 37d21a602d65aada588cab17ea6653534a77084546b4a646e08955f50d0e2c88
:
name: curl
version: 7.76.0
summary: Command line tool for transferring data with URLs
license: curl; MIT/X derivate license.
topics: HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs. The curl
command line tool makes the various features of libcurl available from the
shell. For more information see:

https://curl.se/

This package contains the original curl program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of curl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/docs/manpage.html
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-users@cool.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: libcurl == 7.76.0
depends: libca-certificates-curl ^1.0.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/curl-7.76.0.tar.gz
sha256sum: e1299dd969c864c5cbe2876689e1bf59e7f753099be774c5677d958eaaff9696
:
name: curl
version: 7.84.0
priority: security
summary: Command line tool for transferring data with URLs
license: curl; MIT/X derivate license.
topics: HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs. The curl
command line tool makes the various features of libcurl available from the
shell. For more information see:

https://curl.se/

This package contains the original curl program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of curl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/docs/manpage.html
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-users@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl == 7.84.0
depends: libca-certificates-curl ^1.0.0
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/curl-7.84.0.tar.gz
sha256sum: 19709e8a2db85eed9d9b380366ee2486ba66a0a170f9f49880014a3e63d4a024
:
name: curl
version: 7.87.0
priority: security
summary: Command line tool for transferring data with URLs
license: curl; MIT/X derivate license.
topics: HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs. The curl
command line tool makes the various features of libcurl available from the
shell. For more information see:

https://curl.se/

This package contains the original curl program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of curl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/docs/manpage.html
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-users@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl == 7.87.0
depends: libca-certificates-curl ^1.0.0
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/curl-7.87.0.tar.gz
sha256sum: 28006b02b187040f766e2661aad9048a8f9475969967437cd5b6830036c0bca9
:
name: curl
version: 7.88.1
priority: security
summary: Command line tool for transferring data with URLs
license: curl; MIT/X derivate license.
topics: HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs. The curl
command line tool makes the various features of libcurl available from the
shell. For more information see:

https://curl.se/

This package contains the original curl program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of curl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/docs/manpage.html
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-users@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl == 7.88.1
depends: libca-certificates-curl ^1.0.0
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/curl-7.88.1.tar.gz
sha256sum: 66edcfe9b7702495eaa76c419982c24cb7a692abb7d42641fa1ec77b3ab4499f
:
name: curl
version: 8.4.0
priority: security
summary: Command line tool for transferring data with URLs
license: curl; MIT/X derivate license.
topics: HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs. The curl
command line tool makes the various features of libcurl available from the
shell. For more information see:

https://curl.se/

This package contains the original curl program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of curl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/docs/manpage.html
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-users@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl == 8.4.0
depends: libca-certificates-curl ^1.0.0
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/curl-8.4.0.tar.gz
sha256sum: eb33f7ad6284572d2c10934c26f7a0bf77cda632afe10cd55d5f14524c6fc3ce
:
name: curl
version: 8.8.0+3
summary: Command line tool for transferring data with URLs
license: curl; MIT/X derivate license.
topics: HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs. The curl
command line tool makes the various features of libcurl available from the
shell. For more information see:

https://curl.se/

This package contains the original curl program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of curl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/docs/manpage.html
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-users@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl == 8.8.0
depends: libca-certificates-curl ^1.0.0
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/curl-8.8.0+3.tar.gz
sha256sum: 838e9996108df57cff699a56c6ccecac444cb053edee06e6b548d1c7c342ebf7
:
name: date
version: 3.0.1+5
summary: A date and time library based on the C++11/14/17 <chrono> header
license: MIT
description:
\
# Date

[![Build Status](https://travis-ci.org/HowardHinnant/date.svg?branch=master)]\
(https://travis-ci.org/HowardHinnant/date)
[![Join the chat at https://gitter.im/HowardHinnant/date](https://badges.gitt\
er.im/HowardHinnant/date.svg)](https://gitter.im/HowardHinnant/date?utm_sourc\
e=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

---

**[Try it out on wandbox!](https://wandbox.org/permlink/oyXjibyF680HHoyS)**

## Summary

This is actually several separate C++11/C++14/C++17 libraries:

1. `"date.h"` is a header-only library which builds upon `<chrono>`.  It adds\
 some new `duration` types, and new `time_point` types.  It also adds "field"\
 types such as `year_month_day` which is a struct `{year, month, day}`.  And\
 it provides convenient means to convert between the "field" types and the\
 `time_point` types.

    * Documentation: http://howardhinnant.github.io/date/date.html
    * Video: https://www.youtube.com/watch?v=tzyGjOm8AKo
    * Slides: http://schd.ws/hosted_files/cppcon2015/43/hinnant_dates.pdf

1. `"tz.h"` / `"tz.cpp"`  are a timezone library built on top of the\
 `"date.h"` library.  This timezone library is a complete parser of the IANA\
 timezone database.  It provides for an easy way to access all of the data in\
 this database, using the types from `"date.h"` and `<chrono>`.  The IANA\
 database also includes data on leap seconds, and this library provides\
 utilities to compute with that information as well.

    * Documentation: http://howardhinnant.github.io/date/tz.html
    * Video: https://www.youtube.com/watch?v=Vwd3pduVGKY
    * Slides: http://schd.ws/hosted_files/cppcon2016/0f/Welcome%20To%20The%20\
Time%20Zone%20-%20Howard%20Hinnant%20-%20CppCon%202016.pdf

1. `"iso_week.h"` is a header-only library built on top of the `"date.h"`\
 library which implements the ISO week date calendar.

    * Documentation: http://howardhinnant.github.io/date/iso_week.html

1. `"julian.h"` is a header-only library built on top of the `"date.h"`\
 library which implements a proleptic Julian calendar which is fully\
 interoperable with everything above.

    * Documentation: http://howardhinnant.github.io/date/julian.html

1. `"islamic.h"` is a header-only library built on top of the `"date.h"`\
 library which implements a proleptic Islamic calendar which is fully\
 interoperable with everything above.

    * Documentation: http://howardhinnant.github.io/date/islamic.html

## Standardization

Slightly modified versions of `"date.h"` and `"tz.h"` were voted into the\
 C++20 working draft at the Jacksonville FL meeting on 2018-03-17:

* http://howardhinnant.github.io/date/d0355r7.html

## Build & Test

The recommended way to use any of these libraries besides `"tz.h"` is to just\
 include it.  These are header-only libraries (except `"tz.h"`).

To use `"tz.h"`, there is a single source file (`src/tz.cpp`) that needs to\
 be compiled. Here are the recommended directions:  https://howardhinnant.git\
hub.io/date/tz.html#Installation.

One can run tests by cd'ing into the `test` subdirectory and running\
 `testit`.  There are known failures on all platforms except for macOS.  And\
 even on macOS if C++11 is used.  If any of these failures present problems\
 for you, there exist workarounds.

Additionally there is _unsupported_ support for [vcpkg](https://github.com/Mi\
crosoft/vcpkg) and [CMake](https://cmake.org/).  I don't personally use or\
 maintain these systems as for me they cause more problems than they solve\
 (for this small project).  If you would like to contribute to these build\
 systems please feel free to file a PR.

You can download and install Date using the [vcpkg](https://github.com/Micros\
oft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    vcpkg install date

The Date port in vcpkg is updated by Microsoft team members and community\
 contributors. If the version falls behind, please [create an issue or pull\
 request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.

You can optionally build using [CMake](https://cmake.org/). Here is a guide\
 of how to build and test using the CMake Makefile generator.

```bash
mkdir build
cd build
cmake -DENABLE_DATE_TESTING=ON -DBUILD_TZ_LIB=ON ../
cmake --build . --target testit # Consider '-- -j4' for multithreading
```
## Projects using this library

* www.safe.com
* www.webtoolkit.eu/wt
* https://github.com/ViewTouch/viewtouch
* https://routinghub.com
* https://github.com/valhalla
* https://github.com/siodb/siodb
* https://github.com/KomodoPlatform/atomicDEX-Pro
* https://github.com/Kotlin/kotlinx-datetime
* https://github.com/royalbee/jewish_date

If you would like your project (or product) on this list, just let me know.

\
description-type: text/markdown;variant=GFM
url: https://howardhinnant.github.io/date/date.html
doc-url: https://howardhinnant.github.io/date/date.html
src-url: https://github.com/HowardHinnant/date
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: libcurl ^7.76.0
bootstrap-build:
\
project = date

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

src_upstream = $src_root/upstream

config [bool] config.date.tz_test ?= false

\
location: date/date-3.0.1+5.tar.gz
sha256sum: 81eef6aba947d5bd0a54edb103e6579132130bb9c419eed14a1a03852e5a23e2
:
name: doctest
version: 2.3.5+1
summary: The fastest feature-rich C++11/14/17/20 single-header testing\
 framework for unit tests and TDD
license: MIT
description:
\
<p align="center"><img src="scripts/data/logo/logo_1.svg"></p>
<b>
<table>
    <tr>
        <td>
            master branch
        </td>
        <td>
            Linux/OSX <a href="https://travis-ci.org/onqtam/doctest"><img\
 src="https://travis-ci.org/onqtam/doctest.svg?branch=master"></a>
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/master"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahy\
w1dp4gd/branch/master?svg=true"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=master\
"><img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch\
=master"></a>
        </td>
        <td>
            <a href="https://scan.coverity.com/projects/onqtam-doctest"><img\
 src="https://scan.coverity.com/projects/7865/badge.svg"></a>
        </td>
    </tr>
    <tr>
        <td>
            dev branch
        </td>
        <td>
            Linux/OSX <a href="https://travis-ci.org/onqtam/doctest"><img\
 src="https://travis-ci.org/onqtam/doctest.svg?branch=dev"></a>
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/dev"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahyw1d\
p4gd/branch/dev?svg=true"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=dev"><\
img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch=de\
v"></a>
        </td>
        <td>
        </td>
    </tr>
</table>
</b>

**doctest** is a new C++ testing framework but is by far the fastest both in\
 compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and\
 runtime compared to other feature-rich alternatives. It brings the ability\
 of compiled languages such as [**D**](https://dlang.org/spec/unittest.html)\
 / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.h\
tml) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests\
 written directly in the production code thanks to a fast, transparent and\
 flexible test runner with a clean interface.

[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20-blue.svg)](http\
s://en.wikipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opens\
ource.org/licenses/MIT)
[![Version](https://badge.fury.io/gh/onqtam%2Fdoctest.svg)](https://github.co\
m/onqtam/doctest/releases)
[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](http\
s://raw.githubusercontent.com/onqtam/doctest/master/doctest/doctest.h)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/\
503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/onqtam/doct\
est.svg)](https://lgtm.com/projects/g/onqtam/doctest/context:cpp)
[![Join the chat at https://gitter.im/onqtam/doctest](https://badges.gitter.i\
m/onqtam/doctest.svg)](https://gitter.im/onqtam/doctest?utm_source=badge&utm_\
medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](h\
ttps://wandbox.org/permlink/3J7otx2TvFQNSZsb)
<!--
[![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://iso\
cpp.org/)
[![documentation](https://img.shields.io/badge/documentation%20%20-online-blu\
e.svg)](https://github.com/onqtam/doctest/blob/master/doc/markdown/readme.md#\
reference)
-->

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

The framework is and will stay free but needs your support to sustain its\
 development. There are lots of <a href="doc/markdown/roadmap.md"><b>new\
 features</b></a> and maintenance to do. If you work for a company using\
 **doctest** or have the means to do so, please consider financial support.\
 Monthly donations via Patreon and one-offs via PayPal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

A complete example with a self-registering test that compiles to an\
 executable looks like this:

![cover-example](scripts/data/using_doctest_888px_wide.gif)

There are many C++ testing frameworks - [Catch](https://github.com/catchorg/C\
atch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/\
index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp),\
 [cpputest](https://github.com/cpputest/cpputest), [googletest](https://githu\
b.com/google/googletest) and many [other](https://en.wikipedia.org/wiki/List_\
of_unit_testing_frameworks#C.2B.2B).

The **key** differences between it and other testing frameworks are that it\
 is light and unintrusive:
- Ultra light on compile times both in terms of [**including the\
 header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and\
 writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-ass\
ertion-macro)
- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmak\
e/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**
- Offers a way to remove **everything** testing-related from the binary with\
 the [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest\
_config_disable) identifier
- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts\
 (and logging) can be used from multiple threads spawned from a single test\
 case - [**example**](examples/all_features/concurrency.cpp)
- asserts can be used [**outside of a testing context**](doc/markdown/asserti\
ons.md#using-asserts-out-of-a-testing-context) - as a general purpose assert\
 library - [**example**](examples/all_features/asserts_used_outside_of_tests.\
cpp)
- Doesn't pollute the global namespace (everything is in namespace\
 ```doctest```) and doesn't drag **any** headers with it
- Very [**portable**](doc/markdown/features.md#extremely-portable) C++11 (use\
 tag [**1.2.9**](https://github.com/onqtam/doctest/tree/1.2.9) for C++98)\
 with over 180 different CI builds (static analysis, sanitizers...)
- binaries (exe/dll) can use the test runner of another binary - so tests end\
 up in a single registry - [**example**](examples/executable_dll_and_plugin/)

![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)

This allows the framework to be used in more ways than any other - tests can\
 be written directly in the production code!

*Tests can be considered a form of documentation and should be able to reside\
 near the production code which they test.*

- This makes the barrier for writing tests **much lower** - you don't have\
 to: **1)** make a separate source file **2)** include a bunch of stuff in it\
 **3)** add it to the build system and **4)** add it to source control - You\
 can just write the tests for a class or a piece of functionality at the\
 bottom of its source file - or even header file!
- Tests in the production code can be thought of as documentation or\
 up-to-date comments - showing the use of APIs
- Testing internals that are not exposed through the public API and headers\
 is no longer a mind-bending exercise
- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_dev\
elopment) in C++ has never been easier!

The framework can be used like any other if you don't want/need to mix\
 production code and tests - check out the [**features**](doc/markdown/featur\
es.md).

**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2)\
 and some parts of the code have been taken directly - check out [**the\
 differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).

[This table](https://github.com/martinmoene/catch-lest-other-comparison)\
 compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) /\
 [**lest**](https://github.com/martinmoene/lest) which are all very similar.

Checkout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/m\
ix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-\
modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=\
eH1CxEC29l8) to get a better understanding of how the framework works and\
 read about how to use it in [**the JetBrains article**](https://blog.jetbrai\
ns.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique\
 aspects of the framework! On a short description on how to use the framework\
 along production code you could refer to [**this GitHub issue**](https://git\
hub.com/onqtam/doctest/issues/252). There is also an [**older\
 article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the\
 february edition of ACCU Overload 2017.

[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-tal\
k-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)

Documentation
-------------

Project:

- [Features and design goals](doc/markdown/features.md) - the complete list\
 of features
- [Roadmap](doc/markdown/roadmap.md) - upcoming features
- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime\
 supremacy
- [Contributing](CONTRIBUTING.md) - how to make a proper pull request
- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs

Usage:

- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before\
 the other parts of the documentation
- [Assertion macros](doc/markdown/assertions.md)
- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)
- [Parameterized test cases](doc/markdown/parameterized-tests.md)
- [Command line](doc/markdown/commandline.md)
- [Logging macros](doc/markdown/logging.md)
- [```main()``` entry point](doc/markdown/main.md)
- [Configuration](doc/markdown/configuration.md)
- [String conversions](doc/markdown/stringification.md)
- [Reporters](doc/markdown/reporters.md)
- [FAQ](doc/markdown/faq.md)
- [Build systems](doc/markdown/build-systems.md)
- [Examples](examples)

Contributing
------------

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

Support the development of the project with donations! There is a list of\
 planned features which are all important and big - see the\
 [**roadmap**](doc/markdown/roadmap.md). I took a break from working in the\
 industry to make open source software so every cent is a big deal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

If you work for a company using **doctest** or have the means to do so,\
 please consider financial support.

Contributions in the form of issues and pull requests are welcome as well -\
 check out the [**Contributing**](CONTRIBUTING.md) page.

Stargazers over time
------------

[![Stargazers over time](https://starcharts.herokuapp.com/onqtam/doctest.svg)\
](https://starcharts.herokuapp.com/onqtam/doctest)

Logo
------------

The [logo](scripts/data/logo) is licensed under a Creative Commons\
 Attribution 4.0 International License. Copyright &copy; 2019\
 [area55git](https://github.com/area55git) &nbsp; [![License: CC BY\
 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons\
.org/licenses/by/4.0/)

<p align="center"><img src="scripts/data/logo/icon_2.svg"></p>

\
description-type: text/markdown;variant=GFM
url: https://github.com/onqtam/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: markuspawellek@gmail.com
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
requires: c++11 | c++14 | c++17 | c++20
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

test.target = $cxx.target

src_upstream = $src_root/upstream
\
location: doctest/doctest-2.3.5+1.tar.gz
sha256sum: 5252bb2f6daec656a15d7e1f74899491e166b82e2a23769ed687c5672ee2b526
:
name: doctest
version: 2.3.6
summary: The fastest feature-rich C++11/14/17/20 single-header testing\
 framework for unit tests and TDD
license: MIT
description:
\
<p align="center"><img src="scripts/data/logo/logo_1.svg"></p>
<b>
<table>
    <tr>
        <td>
            master branch
        </td>
        <td>
            Linux/OSX <a href="https://travis-ci.org/onqtam/doctest"><img\
 src="https://travis-ci.org/onqtam/doctest.svg?branch=master"></a>
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/master"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahy\
w1dp4gd/branch/master?svg=true"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=master\
"><img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch\
=master"></a>
        </td>
        <td>
            <a href="https://scan.coverity.com/projects/onqtam-doctest"><img\
 src="https://scan.coverity.com/projects/7865/badge.svg"></a>
        </td>
    </tr>
    <tr>
        <td>
            dev branch
        </td>
        <td>
            Linux/OSX <a href="https://travis-ci.org/onqtam/doctest"><img\
 src="https://travis-ci.org/onqtam/doctest.svg?branch=dev"></a>
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/dev"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahyw1d\
p4gd/branch/dev?svg=true"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=dev"><\
img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch=de\
v"></a>
        </td>
        <td>
        </td>
    </tr>
</table>
</b>

**doctest** is a new C++ testing framework but is by far the fastest both in\
 compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and\
 runtime compared to other feature-rich alternatives. It brings the ability\
 of compiled languages such as [**D**](https://dlang.org/spec/unittest.html)\
 / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.h\
tml) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests\
 written directly in the production code thanks to a fast, transparent and\
 flexible test runner with a clean interface.

[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20-blue.svg)](http\
s://en.wikipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opens\
ource.org/licenses/MIT)
[![Version](https://badge.fury.io/gh/onqtam%2Fdoctest.svg)](https://github.co\
m/onqtam/doctest/releases)
[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](http\
s://raw.githubusercontent.com/onqtam/doctest/master/doctest/doctest.h)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/\
503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/onqtam/doct\
est.svg)](https://lgtm.com/projects/g/onqtam/doctest/context:cpp)
[![Join the chat at https://gitter.im/onqtam/doctest](https://badges.gitter.i\
m/onqtam/doctest.svg)](https://gitter.im/onqtam/doctest?utm_source=badge&utm_\
medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](h\
ttps://wandbox.org/permlink/IDMrgRGTk6aQ6GW8)
<!--
[![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://iso\
cpp.org/)
[![documentation](https://img.shields.io/badge/documentation%20%20-online-blu\
e.svg)](https://github.com/onqtam/doctest/blob/master/doc/markdown/readme.md#\
reference)
-->

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

The framework is and will stay free but needs your support to sustain its\
 development. There are lots of <a href="doc/markdown/roadmap.md"><b>new\
 features</b></a> and maintenance to do. If you work for a company using\
 **doctest** or have the means to do so, please consider financial support.\
 Monthly donations via Patreon and one-offs via PayPal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

A complete example with a self-registering test that compiles to an\
 executable looks like this:

![cover-example](scripts/data/using_doctest_888px_wide.gif)

There are many C++ testing frameworks - [Catch](https://github.com/catchorg/C\
atch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/\
index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp),\
 [cpputest](https://github.com/cpputest/cpputest), [googletest](https://githu\
b.com/google/googletest) and many [other](https://en.wikipedia.org/wiki/List_\
of_unit_testing_frameworks#C.2B.2B).

The **key** differences between it and other testing frameworks are that it\
 is light and unintrusive:
- Ultra light on compile times both in terms of [**including the\
 header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and\
 writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-ass\
ertion-macro)
- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmak\
e/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**
- Offers a way to remove **everything** testing-related from the binary with\
 the [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest\
_config_disable) identifier
- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts\
 (and logging) can be used from multiple threads spawned from a single test\
 case - [**example**](examples/all_features/concurrency.cpp)
- asserts can be used [**outside of a testing context**](doc/markdown/asserti\
ons.md#using-asserts-out-of-a-testing-context) - as a general purpose assert\
 library - [**example**](examples/all_features/asserts_used_outside_of_tests.\
cpp)
- Doesn't pollute the global namespace (everything is in namespace\
 ```doctest```) and doesn't drag **any** headers with it
- Very [**portable**](doc/markdown/features.md#extremely-portable) C++11 (use\
 tag [**1.2.9**](https://github.com/onqtam/doctest/tree/1.2.9) for C++98)\
 with over 180 different CI builds (static analysis, sanitizers...)
- binaries (exe/dll) can use the test runner of another binary - so tests end\
 up in a single registry - [**example**](examples/executable_dll_and_plugin/)

![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)

This allows the framework to be used in more ways than any other - tests can\
 be written directly in the production code!

*Tests can be considered a form of documentation and should be able to reside\
 near the production code which they test.*

- This makes the barrier for writing tests **much lower** - you don't have\
 to: **1)** make a separate source file **2)** include a bunch of stuff in it\
 **3)** add it to the build system and **4)** add it to source control - You\
 can just write the tests for a class or a piece of functionality at the\
 bottom of its source file - or even header file!
- Tests in the production code can be thought of as documentation or\
 up-to-date comments - showing the use of APIs
- Testing internals that are not exposed through the public API and headers\
 is no longer a mind-bending exercise
- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_dev\
elopment) in C++ has never been easier!

The framework can be used like any other if you don't want/need to mix\
 production code and tests - check out the [**features**](doc/markdown/featur\
es.md).

**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2)\
 and some parts of the code have been taken directly - check out [**the\
 differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).

[This table](https://github.com/martinmoene/catch-lest-other-comparison)\
 compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) /\
 [**lest**](https://github.com/martinmoene/lest) which are all very similar.

Checkout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/m\
ix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-\
modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=\
eH1CxEC29l8) to get a better understanding of how the framework works and\
 read about how to use it in [**the JetBrains article**](https://blog.jetbrai\
ns.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique\
 aspects of the framework! On a short description on how to use the framework\
 along production code you could refer to [**this GitHub issue**](https://git\
hub.com/onqtam/doctest/issues/252). There is also an [**older\
 article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the\
 february edition of ACCU Overload 2017.

[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-tal\
k-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)

Documentation
-------------

Project:

- [Features and design goals](doc/markdown/features.md) - the complete list\
 of features
- [Roadmap](doc/markdown/roadmap.md) - upcoming features
- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime\
 supremacy
- [Contributing](CONTRIBUTING.md) - how to make a proper pull request
- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs

Usage:

- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before\
 the other parts of the documentation
- [Assertion macros](doc/markdown/assertions.md)
- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)
- [Parameterized test cases](doc/markdown/parameterized-tests.md)
- [Command line](doc/markdown/commandline.md)
- [Logging macros](doc/markdown/logging.md)
- [```main()``` entry point](doc/markdown/main.md)
- [Configuration](doc/markdown/configuration.md)
- [String conversions](doc/markdown/stringification.md)
- [Reporters](doc/markdown/reporters.md)
- [FAQ](doc/markdown/faq.md)
- [Build systems](doc/markdown/build-systems.md)
- [Examples](examples)

Contributing
------------

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

Support the development of the project with donations! There is a list of\
 planned features which are all important and big - see the\
 [**roadmap**](doc/markdown/roadmap.md). I took a break from working in the\
 industry to make open source software so every cent is a big deal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

If you work for a company using **doctest** or have the means to do so,\
 please consider financial support.

Contributions in the form of issues and pull requests are welcome as well -\
 check out the [**Contributing**](CONTRIBUTING.md) page.

Stargazers over time
------------

[![Stargazers over time](https://starcharts.herokuapp.com/onqtam/doctest.svg)\
](https://starcharts.herokuapp.com/onqtam/doctest)

Logo
------------

The [logo](scripts/data/logo) is licensed under a Creative Commons\
 Attribution 4.0 International License. Copyright &copy; 2019\
 [area55git](https://github.com/area55git) &nbsp; [![License: CC BY\
 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons\
.org/licenses/by/4.0/)

<p align="center"><img src="scripts/data/logo/icon_2.svg"></p>

\
description-type: text/markdown;variant=GFM
url: https://github.com/onqtam/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: markuspawellek@gmail.com
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
requires: c++11 | c++14 | c++17 | c++20
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

test.target = $cxx.target

src_upstream = $src_root/upstream
\
location: doctest/doctest-2.3.6.tar.gz
sha256sum: eda2d438dacf28ff240c310b4c37ec911e4abc5dc13b7754ec5b3e015385fc4b
:
name: doctest
version: 2.4.0
summary: The fastest feature-rich C++11/14/17/20 single-header testing\
 framework for unit tests and TDD
license: MIT
description:
\
<p align="center"><img src="scripts/data/logo/logo_1.svg"></p>
<b>
<table>
    <tr>
        <td>
            master branch
        </td>
        <td>
            Linux/OSX <a href="https://travis-ci.org/onqtam/doctest"><img\
 src="https://travis-ci.org/onqtam/doctest.svg?branch=master"></a>
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/master"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahy\
w1dp4gd/branch/master?svg=true"></a>
        </td>
        <td>
            All <a href="https://github.com/onqtam/doctest/actions?query=bran\
ch%3Amaster"><img src="https://github.com/onqtam/doctest/workflows/CI/badge.s\
vg?branch=master"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=master\
"><img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch\
=master"></a>
        </td>
        <!--
        <td>
            <a href="https://scan.coverity.com/projects/onqtam-doctest"><img\
 src="https://scan.coverity.com/projects/7865/badge.svg"></a>
        </td>
        -->
    </tr>
    <tr>
        <td>
            dev branch
        </td>
        <td>
            Linux/OSX <a href="https://travis-ci.org/onqtam/doctest"><img\
 src="https://travis-ci.org/onqtam/doctest.svg?branch=dev"></a>
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/dev"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahyw1d\
p4gd/branch/dev?svg=true"></a>
        </td>
        <td>
            All <a href="https://github.com/onqtam/doctest/actions?query=bran\
ch%3Adev"><img src="https://github.com/onqtam/doctest/workflows/CI/badge.svg?\
branch=dev"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=dev"><\
img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch=de\
v"></a>
        </td>
        <!--
        <td>
        </td>
        -->
    </tr>
</table>
</b>

**doctest** is a new C++ testing framework but is by far the fastest both in\
 compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and\
 runtime compared to other feature-rich alternatives. It brings the ability\
 of compiled languages such as [**D**](https://dlang.org/spec/unittest.html)\
 / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.h\
tml) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests\
 written directly in the production code thanks to a fast, transparent and\
 flexible test runner with a clean interface.

[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20-blue.svg)](http\
s://en.wikipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opens\
ource.org/licenses/MIT)
[![Version](https://badge.fury.io/gh/onqtam%2Fdoctest.svg)](https://github.co\
m/onqtam/doctest/releases)
[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](http\
s://raw.githubusercontent.com/onqtam/doctest/master/doctest/doctest.h)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/\
503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/onqtam/doct\
est.svg)](https://lgtm.com/projects/g/onqtam/doctest/context:cpp)
[![Join the chat at https://gitter.im/onqtam/doctest](https://badges.gitter.i\
m/onqtam/doctest.svg)](https://gitter.im/onqtam/doctest?utm_source=badge&utm_\
medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](h\
ttps://wandbox.org/permlink/nJIibfbivG7BG7r1)
<!--
[![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://iso\
cpp.org/)
[![documentation](https://img.shields.io/badge/documentation%20%20-online-blu\
e.svg)](https://github.com/onqtam/doctest/blob/master/doc/markdown/readme.md#\
reference)
-->

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

The framework is and will stay free but needs your support to sustain its\
 development. There are lots of <a href="doc/markdown/roadmap.md"><b>new\
 features</b></a> and maintenance to do. If you work for a company using\
 **doctest** or have the means to do so, please consider financial support.\
 Monthly donations via Patreon and one-offs via PayPal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

A complete example with a self-registering test that compiles to an\
 executable looks like this:

![cover-example](scripts/data/using_doctest_888px_wide.gif)

There are many C++ testing frameworks - [Catch](https://github.com/catchorg/C\
atch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/\
index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp),\
 [cpputest](https://github.com/cpputest/cpputest), [googletest](https://githu\
b.com/google/googletest) and many [other](https://en.wikipedia.org/wiki/List_\
of_unit_testing_frameworks#C.2B.2B).

The **key** differences between it and other testing frameworks are that it\
 is light and unintrusive:
- Ultra light on compile times both in terms of [**including the\
 header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and\
 writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-ass\
ertion-macro)
- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmak\
e/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**
- Offers a way to remove **everything** testing-related from the binary with\
 the [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest\
_config_disable) identifier
- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts\
 (and logging) can be used from multiple threads spawned from a single test\
 case - [**example**](examples/all_features/concurrency.cpp)
- asserts can be used [**outside of a testing context**](doc/markdown/asserti\
ons.md#using-asserts-out-of-a-testing-context) - as a general purpose assert\
 library - [**example**](examples/all_features/asserts_used_outside_of_tests.\
cpp)
- Doesn't pollute the global namespace (everything is in namespace\
 ```doctest```) and doesn't drag **any** headers with it
- Very [**portable**](doc/markdown/features.md#extremely-portable) C++11 (use\
 tag [**1.2.9**](https://github.com/onqtam/doctest/tree/1.2.9) for C++98)\
 with over 180 different CI builds (static analysis, sanitizers...)
- binaries (exe/dll) can use the test runner of another binary - so tests end\
 up in a single registry - [**example**](examples/executable_dll_and_plugin/)

![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)

This allows the framework to be used in more ways than any other - tests can\
 be written directly in the production code!

*Tests can be considered a form of documentation and should be able to reside\
 near the production code which they test.*

- This makes the barrier for writing tests **much lower** - you don't have\
 to: **1)** make a separate source file **2)** include a bunch of stuff in it\
 **3)** add it to the build system and **4)** add it to source control - You\
 can just write the tests for a class or a piece of functionality at the\
 bottom of its source file - or even header file!
- Tests in the production code can be thought of as documentation or\
 up-to-date comments - showing the use of APIs
- Testing internals that are not exposed through the public API and headers\
 is no longer a mind-bending exercise
- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_dev\
elopment) in C++ has never been easier!

The framework can be used like any other if you don't want/need to mix\
 production code and tests - check out the [**features**](doc/markdown/featur\
es.md).

**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2)\
 and some parts of the code have been taken directly - check out [**the\
 differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).

[This table](https://github.com/martinmoene/catch-lest-other-comparison)\
 compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) /\
 [**lest**](https://github.com/martinmoene/lest) which are all very similar.

Checkout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/m\
ix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-\
modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=\
eH1CxEC29l8) to get a better understanding of how the framework works and\
 read about how to use it in [**the JetBrains article**](https://blog.jetbrai\
ns.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique\
 aspects of the framework! On a short description on how to use the framework\
 along production code you could refer to [**this GitHub issue**](https://git\
hub.com/onqtam/doctest/issues/252). There is also an [**older\
 article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the\
 february edition of ACCU Overload 2017.

[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-tal\
k-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)

Documentation
-------------

Project:

- [Features and design goals](doc/markdown/features.md) - the complete list\
 of features
- [Roadmap](doc/markdown/roadmap.md) - upcoming features
- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime\
 supremacy
- [Contributing](CONTRIBUTING.md) - how to make a proper pull request
- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs

Usage:

- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before\
 the other parts of the documentation
- [Assertion macros](doc/markdown/assertions.md)
- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)
- [Parameterized test cases](doc/markdown/parameterized-tests.md)
- [Command line](doc/markdown/commandline.md)
- [Logging macros](doc/markdown/logging.md)
- [```main()``` entry point](doc/markdown/main.md)
- [Configuration](doc/markdown/configuration.md)
- [String conversions](doc/markdown/stringification.md)
- [Reporters](doc/markdown/reporters.md)
- [FAQ](doc/markdown/faq.md)
- [Build systems](doc/markdown/build-systems.md)
- [Examples](examples)

Contributing
------------

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

Support the development of the project with donations! There is a list of\
 planned features which are all important and big - see the\
 [**roadmap**](doc/markdown/roadmap.md). I took a break from working in the\
 industry to make open source software so every cent is a big deal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

If you work for a company using **doctest** or have the means to do so,\
 please consider financial support.

Contributions in the form of issues and pull requests are welcome as well -\
 check out the [**Contributing**](CONTRIBUTING.md) page.

Stargazers over time
------------

[![Stargazers over time](https://starcharts.herokuapp.com/onqtam/doctest.svg)\
](https://starcharts.herokuapp.com/onqtam/doctest)

Logo
------------

The [logo](scripts/data/logo) is licensed under a Creative Commons\
 Attribution 4.0 International License. Copyright &copy; 2019\
 [area55git](https://github.com/area55git) &nbsp; [![License: CC BY\
 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons\
.org/licenses/by/4.0/)

<p align="center"><img src="scripts/data/logo/icon_2.svg"></p>

\
description-type: text/markdown;variant=GFM
url: https://github.com/onqtam/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++11 | c++14 | c++17 | c++20
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

test.target = $cxx.target

src_upstream = $src_root/upstream
\
location: doctest/doctest-2.4.0.tar.gz
sha256sum: f4800888c46d15572c57f574825f705622cb44e35d451620436810c4943c2d84
:
name: doctest
version: 2.4.6+2
summary: The fastest feature-rich C++11/14/17/20 single-header testing\
 framework for unit tests and TDD
license: MIT
description:
\
<p align="center"><img src="scripts/data/logo/logo_1.svg"></p>
<b>
<table>
    <tr>
        <td>
            master branch
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/master"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahy\
w1dp4gd/branch/master?svg=true"></a>
        </td>
        <td>
            All <a href="https://github.com/onqtam/doctest/actions?query=bran\
ch%3Amaster"><img src="https://github.com/onqtam/doctest/workflows/CI/badge.s\
vg?branch=master"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=master\
"><img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch\
=master"></a>
        </td>
        <!--
        <td>
            <a href="https://scan.coverity.com/projects/onqtam-doctest"><img\
 src="https://scan.coverity.com/projects/7865/badge.svg"></a>
        </td>
        -->
    </tr>
    <tr>
        <td>
            dev branch
        </td>
        <td>
            Windows <a href="https://ci.appveyor.com/project/onqtam/doctest/b\
ranch/dev"><img src="https://ci.appveyor.com/api/projects/status/j89qxtahyw1d\
p4gd/branch/dev?svg=true"></a>
        </td>
        <td>
            All <a href="https://github.com/onqtam/doctest/actions?query=bran\
ch%3Adev"><img src="https://github.com/onqtam/doctest/workflows/CI/badge.svg?\
branch=dev"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=dev"><\
img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch=de\
v"></a>
        </td>
        <!--
        <td>
        </td>
        -->
    </tr>
</table>
</b>

**doctest** is a new C++ testing framework but is by far the fastest both in\
 compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and\
 runtime compared to other feature-rich alternatives. It brings the ability\
 of compiled languages such as [**D**](https://dlang.org/spec/unittest.html)\
 / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.h\
tml) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests\
 written directly in the production code thanks to a fast, transparent and\
 flexible test runner with a clean interface.

[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20-blue.svg)](http\
s://en.wikipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opens\
ource.org/licenses/MIT)
[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](http\
s://raw.githubusercontent.com/onqtam/doctest/master/doctest/doctest.h)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/\
503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/onqtam/doct\
est.svg)](https://lgtm.com/projects/g/onqtam/doctest/context:cpp)
[![Join the chat at https://gitter.im/onqtam/doctest](https://badges.gitter.i\
m/onqtam/doctest.svg)](https://gitter.im/onqtam/doctest?utm_source=badge&utm_\
medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](h\
ttps://wandbox.org/permlink/nJIibfbivG7BG7r1)
<!--
[![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://iso\
cpp.org/)
[![documentation](https://img.shields.io/badge/documentation%20%20-online-blu\
e.svg)](https://github.com/onqtam/doctest/blob/master/doc/markdown/readme.md#\
reference)
-->

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

The framework is and will stay free but needs your support to sustain its\
 development. There are lots of <a href="doc/markdown/roadmap.md"><b>new\
 features</b></a> and maintenance to do. If you work for a company using\
 **doctest** or have the means to do so, please consider financial support.\
 Monthly donations via Patreon and one-offs via PayPal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

A complete example with a self-registering test that compiles to an\
 executable looks like this:

![cover-example](scripts/data/using_doctest_888px_wide.gif)

There are many C++ testing frameworks - [Catch](https://github.com/catchorg/C\
atch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/\
index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp),\
 [cpputest](https://github.com/cpputest/cpputest), [googletest](https://githu\
b.com/google/googletest) and many [other](https://en.wikipedia.org/wiki/List_\
of_unit_testing_frameworks#C.2B.2B).

The **key** differences between it and other testing frameworks are that it\
 is light and unintrusive:
- Ultra light on compile times both in terms of [**including the\
 header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and\
 writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-ass\
ertion-macro)
- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmak\
e/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**
- Offers a way to remove **everything** testing-related from the binary with\
 the [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest\
_config_disable) identifier
- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts\
 (and logging) can be used from multiple threads spawned from a single test\
 case - [**example**](examples/all_features/concurrency.cpp)
- asserts can be used [**outside of a testing context**](doc/markdown/asserti\
ons.md#using-asserts-out-of-a-testing-context) - as a general purpose assert\
 library - [**example**](examples/all_features/asserts_used_outside_of_tests.\
cpp)
- Doesn't pollute the global namespace (everything is in namespace\
 ```doctest```) and doesn't drag **any** headers with it
- Very [**portable**](doc/markdown/features.md#extremely-portable) C++11 (use\
 tag [**1.2.9**](https://github.com/onqtam/doctest/tree/1.2.9) for C++98)\
 with over 180 different CI builds (static analysis, sanitizers...)
- binaries (exe/dll) can use the test runner of another binary - so tests end\
 up in a single registry - [**example**](examples/executable_dll_and_plugin/)

![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)

This allows the framework to be used in more ways than any other - tests can\
 be written directly in the production code!

*Tests can be considered a form of documentation and should be able to reside\
 near the production code which they test.*

- This makes the barrier for writing tests **much lower** - you don't have\
 to: **1)** make a separate source file **2)** include a bunch of stuff in it\
 **3)** add it to the build system and **4)** add it to source control - You\
 can just write the tests for a class or a piece of functionality at the\
 bottom of its source file - or even header file!
- Tests in the production code can be thought of as documentation or\
 up-to-date comments - showing the use of APIs
- Testing internals that are not exposed through the public API and headers\
 is no longer a mind-bending exercise
- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_dev\
elopment) in C++ has never been easier!

The framework can be used like any other if you don't want/need to mix\
 production code and tests - check out the [**features**](doc/markdown/featur\
es.md).

**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2)\
 and some parts of the code have been taken directly - check out [**the\
 differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).

[This table](https://github.com/martinmoene/catch-lest-other-comparison)\
 compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) /\
 [**lest**](https://github.com/martinmoene/lest) which are all very similar.

Checkout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/m\
ix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-\
modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=\
eH1CxEC29l8) to get a better understanding of how the framework works and\
 read about how to use it in [**the JetBrains article**](https://blog.jetbrai\
ns.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique\
 aspects of the framework! On a short description on how to use the framework\
 along production code you could refer to [**this GitHub issue**](https://git\
hub.com/onqtam/doctest/issues/252). There is also an [**older\
 article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the\
 february edition of ACCU Overload 2017.

[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-tal\
k-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)

Documentation
-------------

Project:

- [Features and design goals](doc/markdown/features.md) - the complete list\
 of features
- [Roadmap](doc/markdown/roadmap.md) - upcoming features
- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime\
 supremacy
- [Contributing](CONTRIBUTING.md) - how to make a proper pull request
- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs

Usage:

- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before\
 the other parts of the documentation
- [Assertion macros](doc/markdown/assertions.md)
- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)
- [Parameterized test cases](doc/markdown/parameterized-tests.md)
- [Command line](doc/markdown/commandline.md)
- [Logging macros](doc/markdown/logging.md)
- [```main()``` entry point](doc/markdown/main.md)
- [Configuration](doc/markdown/configuration.md)
- [String conversions](doc/markdown/stringification.md)
- [Reporters](doc/markdown/reporters.md)
- [Extensions](doc/markdown/extensions.md)
- [FAQ](doc/markdown/faq.md)
- [Build systems](doc/markdown/build-systems.md)
- [Examples](examples)

Contributing
------------

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

Support the development of the project with donations! There is a list of\
 planned features which are all important and big - see the\
 [**roadmap**](doc/markdown/roadmap.md). I took a break from working in the\
 industry to make open source software so every cent is a big deal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

If you work for a company using **doctest** or have the means to do so,\
 please consider financial support.

Contributions in the form of issues and pull requests are welcome as well -\
 check out the [**Contributing**](CONTRIBUTING.md) page.

Stargazers over time
------------

[![Stargazers over time](https://starcharts.herokuapp.com/onqtam/doctest.svg)\
](https://starcharts.herokuapp.com/onqtam/doctest)

Logo
------------

The [logo](scripts/data/logo) is licensed under a Creative Commons\
 Attribution 4.0 International License. Copyright &copy; 2019\
 [area55git](https://github.com/area55git) &nbsp; [![License: CC BY\
 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons\
.org/licenses/by/4.0/)

<p align="center"><img src="scripts/data/logo/icon_2.svg"></p>

\
description-type: text/markdown;variant=GFM
changes:
\
# Change Log

## [2.4.6](https://github.com/onqtam/doctest/tree/2.4.6) (2021-03-22)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.4.5...2.4.6)

**Fixed bugs:**

- REQUIRE does not compile when operator== in different namespace\
 [\#443](https://github.com/onqtam/doctest/issues/443)
- Using templated operator== inside TEST\_CASE changes deduced types of\
 forwarding references [\#399](https://github.com/onqtam/doctest/issues/399)

**Closed issues:**

- CMake doesn't link package [\#483](https://github.com/onqtam/doctest/issues\
/483)
- Assertions are slow when running on Windows with a debugger attached\
 [\#481](https://github.com/onqtam/doctest/issues/481)
- Get list of registered test-case names [\#479](https://github.com/onqtam/do\
ctest/issues/479)
- Can't compile with glibc master \(future 2.34\): SIGSTKSZ is no longer a\
 constant [\#473](https://github.com/onqtam/doctest/issues/473)
- How to use Doctest with Github Actions [\#472](https://github.com/onqtam/do\
ctest/issues/472)
- Link error \(multiple definition...\) in simple project [\#470](https://git\
hub.com/onqtam/doctest/issues/470)
- INFO does not compile when used like a function call [\#469](https://github\
.com/onqtam/doctest/issues/469)
- std::uncaught\_exceptions is only available if compiling for macOS 10.12 or\
 above [\#466](https://github.com/onqtam/doctest/issues/466)
- Compile failure with WinRT on 2.4.5 [\#465](https://github.com/onqtam/docte\
st/issues/465)

**Merged pull requests:**

- Improve speed with attached debugger \(Windows\) [\#482](https://github.com\
/onqtam/doctest/pull/482) ([pgroke](https://github.com/pgroke))
- Convert to bool by casting, rather than double negation [\#480](https://git\
hub.com/onqtam/doctest/pull/480) ([kitegi](https://github.com/kitegi))
- Fix compile error when targeting macOS version earlier and macOS 10.12\
 [\#478](https://github.com/onqtam/doctest/pull/478) ([SamWindell](https://gi\
thub.com/SamWindell))
- Fix MSVC linter warning about uninitialized TestSuite variables\
 [\#471](https://github.com/onqtam/doctest/pull/471) ([Reedbeta](https://gith\
ub.com/Reedbeta))
- REQUIRE does not compile when operator== in different namespace \#443 .\
 [\#468](https://github.com/onqtam/doctest/pull/468) ([navinp0304](https://gi\
thub.com/navinp0304))
- Automatically add TEST\_SUITE labels to discovered tests\
 [\#464](https://github.com/onqtam/doctest/pull/464) ([shivupa](https://githu\
b.com/shivupa))

## [2.4.5](https://github.com/onqtam/doctest/tree/2.4.5) (2021-02-02)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.4.4...2.4.5)

**Closed issues:**

- Stack buffer overflow in `String` constructor [\#460](https://github.com/on\
qtam/doctest/issues/460)
- Surpress warnings from clang-tidy [\#459](https://github.com/onqtam/doctest\
/issues/459)
- compilation issue in MSVC when defining DOCTEST\_THREAD\_LOCAL to static\
 [\#458](https://github.com/onqtam/doctest/issues/458)
- nvcc compiler warning; doctest.h\(4138\): warning : expression has no\
 effect [\#454](https://github.com/onqtam/doctest/issues/454)
- Use of std::atomic can slow down multithreaded tests [\#452](https://github\
.com/onqtam/doctest/issues/452)

**Merged pull requests:**

- Fix compilation on case-sensitive filesystems [\#463](https://github.com/on\
qtam/doctest/pull/463) ([jhasse](https://github.com/jhasse))
- Use function-like macros for prefixless macro names [\#462](https://github.\
com/onqtam/doctest/pull/462) ([tbleher](https://github.com/tbleher))
- Implement a multi lane atomic for assertion counts [\#453](https://github.c\
om/onqtam/doctest/pull/453) ([martinus](https://github.com/martinus))

## [2.4.4](https://github.com/onqtam/doctest/tree/2.4.4) (2020-12-25)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.4.3...2.4.4)

**Closed issues:**

- 2.4.2: build fails [\#450](https://github.com/onqtam/doctest/issues/450)
- combine the same tests for different build configurations from multiple\
 shared objects without having symbol clashes [\#436](https://github.com/onqt\
am/doctest/issues/436)
- Issue with GitHub Security Scanning: gmtime [\#423](https://github.com/onqt\
am/doctest/issues/423)

## [2.4.3](https://github.com/onqtam/doctest/tree/2.4.3) (2020-12-16)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.4.2...2.4.3)

## [2.4.2](https://github.com/onqtam/doctest/tree/2.4.2) (2020-12-15)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.4.1...2.4.2)

**Closed issues:**

- DOCTEST\_CHECK\_THROWS\_WITH\_AS fails to work with dependant exception\
 type [\#447](https://github.com/onqtam/doctest/issues/447)
- MSVC warnings: narrowing conversion, signed/unsigned mismatch\
 [\#446](https://github.com/onqtam/doctest/issues/446)
-  log contexts for failures in JUnit reporter [\#441](https://github.com/onq\
tam/doctest/issues/441)
- MinGW "'mutex' in namespace 'std' does not name a type" error.\
 [\#438](https://github.com/onqtam/doctest/issues/438)
- Test runner thread initialization [\#435](https://github.com/onqtam/doctest\
/issues/435)
- PLATFORM is misdetected on MacOSX Big Sur [\#415](https://github.com/onqtam\
/doctest/issues/415)
- CHECK\_EQ with enum values [\#276](https://github.com/onqtam/doctest/issues\
/276)

**Merged pull requests:**

- Squash MSVC warnings when including ntstatus.h [\#449](https://github.com/o\
nqtam/doctest/pull/449) ([nickhutchinson](https://github.com/nickhutchinson))
- Add MAIN\_PROJECT check for test option [\#445](https://github.com/onqtam/d\
octest/pull/445) ([globberwops](https://github.com/globberwops))
- Suppress clang-analyzer-cplusplus.NewDeleteLeaks [\#444](https://github.com\
/onqtam/doctest/pull/444) ([ncihnegn](https://github.com/ncihnegn))
- log contexts for failures in JUnit reporter [\#442](https://github.com/onqt\
am/doctest/pull/442) ([runave](https://github.com/runave))
- Fix 32bit support on macOS [\#440](https://github.com/onqtam/doctest/pull/4\
40) ([AlexanderLanin](https://github.com/AlexanderLanin))

## [2.4.1](https://github.com/onqtam/doctest/tree/2.4.1) (2020-11-04)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.4.0...2.4.1)

**Closed issues:**

- Avoid old C-style casts [\#424](https://github.com/onqtam/doctest/issues/42\
4)
- Segfault in unwind [\#422](https://github.com/onqtam/doctest/issues/422)
- Inspect exception with gdb [\#421](https://github.com/onqtam/doctest/issues\
/421)
- use-of-uninitialized-value [\#414](https://github.com/onqtam/doctest/issues\
/414)
- Support unit tests with MPI [\#413](https://github.com/onqtam/doctest/issue\
s/413)
- Break into debugger support is missing for Linux [\#411](https://github.com\
/onqtam/doctest/issues/411)
- What if built doctest as static library instead of header-only\
 [\#408](https://github.com/onqtam/doctest/issues/408)
- \[Question\] How to get test case name [\#407](https://github.com/onqtam/do\
ctest/issues/407)
- create extensions header for optional features requiring more std includes\
 or newer C++ features [\#405](https://github.com/onqtam/doctest/issues/405)
- tests/asserts summary lines are misaligned when counts exceed 999999\
 [\#402](https://github.com/onqtam/doctest/issues/402)
- Call to 'ne' is ambiguous -- with solution [\#395](https://github.com/onqta\
m/doctest/issues/395)
- Intermittent Segfaults [\#391](https://github.com/onqtam/doctest/issues/391)
- Junit classname [\#390](https://github.com/onqtam/doctest/issues/390)
- Add default printers for enums [\#121](https://github.com/onqtam/doctest/is\
sues/121)

**Merged pull requests:**

- Enum support \(fix for Issue \#121\) [\#429](https://github.com/onqtam/doct\
est/pull/429) ([jkriegshauser](https://github.com/jkriegshauser))
- Support Clang 3.4 [\#428](https://github.com/onqtam/doctest/pull/428)\
 ([AlexanderLanin](https://github.com/AlexanderLanin))
- Silence remarks on old C-style casts [\#425](https://github.com/onqtam/doct\
est/pull/425) ([UnePierre](https://github.com/UnePierre))
- Initial MPI unit tests implementation [\#418](https://github.com/onqtam/doc\
test/pull/418) ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Add JUNIT\_OUTPUT\_DIR option to doctest\_discover\_tests\
 [\#417](https://github.com/onqtam/doctest/pull/417) ([Tradias](https://githu\
b.com/Tradias))
- Add option to build with std headers. [\#416](https://github.com/onqtam/doc\
test/pull/416) ([avostrik](https://github.com/avostrik))
- Port Catch2 break into debugger for Linux. closes \#411 [\#412](https://git\
hub.com/onqtam/doctest/pull/412) ([mikezackles](https://github.com/mikezackle\
s))
- summary: align even large values \#402 [\#403](https://github.com/onqtam/do\
ctest/pull/403) ([dankamongmen](https://github.com/dankamongmen))
- Add breakpoint inline assembly for the Apple Silicon macOS.\
 [\#400](https://github.com/onqtam/doctest/pull/400) ([bruvzg](https://github\
.com/bruvzg))
- fix google's death test URI in roadmap [\#393](https://github.com/onqtam/do\
ctest/pull/393) ([ashutosh108](https://github.com/ashutosh108))

## [2.4.0](https://github.com/onqtam/doctest/tree/2.4.0) (2020-06-27)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.8...2.4.0)

**Closed issues:**

- Count points based on the number of passed/failed cases?\
 [\#386](https://github.com/onqtam/doctest/issues/386)
- How to understand "\#data\_array" in std::string? [\#383](https://github.co\
m/onqtam/doctest/issues/383)
- crash: doctest with custom allocator [\#382](https://github.com/onqtam/doct\
est/issues/382)
- Feature Request: format PRIVATE/PUBLIC/INTERFACE entries with constant\
 indentation [\#378](https://github.com/onqtam/doctest/issues/378)
- JUnit Reporter for Doctest [\#376](https://github.com/onqtam/doctest/issues\
/376)
- Avoiding Feature Bloat [\#374](https://github.com/onqtam/doctest/issues/374)
- StringMaker\<wchar\_t\> fail to compile with C++20 enabled \(GCC\)\
 [\#357](https://github.com/onqtam/doctest/issues/357)
- doctest\_discover\_tests and FetchContent\_Declare [\#351](https://github.c\
om/onqtam/doctest/issues/351)
- Junit reporter [\#318](https://github.com/onqtam/doctest/issues/318)

**Merged pull requests:**

- Add a note that doctest can be installed through Homebrew\
 [\#388](https://github.com/onqtam/doctest/pull/388) ([cameronwhite](https://\
github.com/cameronwhite))
- provide alternative implementation of has\_insertion\_operator for C++20\
 [\#387](https://github.com/onqtam/doctest/pull/387) ([lukaszgemborowski](htt\
ps://github.com/lukaszgemborowski))
- Fix issue template to mention doctest [\#380](https://github.com/onqtam/doc\
test/pull/380) ([nyanpasu64](https://github.com/nyanpasu64))

## [2.3.8](https://github.com/onqtam/doctest/tree/2.3.8) (2020-05-17)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.7...2.3.8)

**Closed issues:**

- Scenario name can not be passed to -tc to execute single scenario\
 [\#373](https://github.com/onqtam/doctest/issues/373)
- Compile Error with CHECK\_NOTHROW when using 2 Template Arguments\
 [\#372](https://github.com/onqtam/doctest/issues/372)
- dll example won't compile [\#371](https://github.com/onqtam/doctest/issues/\
371)
- Build error with MinGW \(Mingw-w64\) due to missing Windows.h \(with\
 capital W\) [\#370](https://github.com/onqtam/doctest/issues/370)
- How to override file\_line\_to\_stream? [\#369](https://github.com/onqtam/d\
octest/issues/369)
- Memory sanitizer fails. [\#365](https://github.com/onqtam/doctest/issues/36\
5)
- Warning c6319 in Visual Studio [\#359](https://github.com/onqtam/doctest/is\
sues/359)
- Any option to show each test case's execute time? [\#358](https://github.co\
m/onqtam/doctest/issues/358)
- doctest in embedded [\#355](https://github.com/onqtam/doctest/issues/355)
- Reloading a plugin with test cases leads to a segmentation fault\
 [\#350](https://github.com/onqtam/doctest/issues/350)
- Compiling with DOCTEST\_CONFIG\_COLORS\_ANSI fails on Windows\
 [\#348](https://github.com/onqtam/doctest/issues/348)
- Can I inherit ConsoleReporter? [\#344](https://github.com/onqtam/doctest/is\
sues/344)
- Noreturn and noexcept defines for Visual Studio 2013 support\
 [\#327](https://github.com/onqtam/doctest/issues/327)
- Data-driven testing -- print out the deepest DOCTEST\_SUBCASE\
 [\#215](https://github.com/onqtam/doctest/issues/215)
- Print the SUBCASE path when an assert fails in the TEST\_CASE body\
 [\#125](https://github.com/onqtam/doctest/issues/125)

**Merged pull requests:**

- fix: possible UB with nullptr increment [\#368](https://github.com/onqtam/d\
octest/pull/368) ([oktonion](https://github.com/oktonion))
- Use CMake's CMP0077 policy if available [\#363](https://github.com/onqtam/d\
octest/pull/363) ([thelink2012](https://github.com/thelink2012))
- Fix warning c6319 in Visual Studio 16.5 [\#361](https://github.com/onqtam/d\
octest/pull/361) ([Cvelth](https://github.com/Cvelth))

## [2.3.7](https://github.com/onqtam/doctest/tree/2.3.7) (2020-02-24)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.6...2.3.7)

**Closed issues:**

- Some of the GitHub CI builds are failing [\#334](https://github.com/onqtam/\
doctest/issues/334)
- C++20 removed std::uncaught\_exception [\#333](https://github.com/onqtam/do\
ctest/issues/333)
- Doctest SEH handlers are called before \_\_except handlers\
 [\#324](https://github.com/onqtam/doctest/issues/324)

**Merged pull requests:**

- using std namespace where necessary and timer ticks fix [\#341](https://git\
hub.com/onqtam/doctest/pull/341) ([oktonion](https://github.com/oktonion))
- fix std::uncaught\_exceptions [\#340](https://github.com/onqtam/doctest/pul\
l/340) ([cyyever](https://github.com/cyyever))
- Fix GitHub CI and add GitHub build badges [\#336](https://github.com/onqtam\
/doctest/pull/336) ([claremacrae](https://github.com/claremacrae))
- http -\> https [\#331](https://github.com/onqtam/doctest/pull/331)\
 ([Coeur](https://github.com/Coeur))
- Switch to catching unhandled exceptions on Windows Closes \#324\
 [\#325](https://github.com/onqtam/doctest/pull/325) ([jkriegshauser](https:/\
/github.com/jkriegshauser))

## [2.3.6](https://github.com/onqtam/doctest/tree/2.3.6) (2019-12-16)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.5...2.3.6)

**Closed issues:**

- Link problem w/ BUILD=Release if MESSAGE\(\) with std::string/ostream-opera\
tor is used [\#316](https://github.com/onqtam/doctest/issues/316)
- the FAQ about difference to Catch2 is missing tags [\#315](https://github.c\
om/onqtam/doctest/issues/315)
- include Windows.h in small caps to silence clang warnings\
 [\#312](https://github.com/onqtam/doctest/issues/312)
- Mistake in generator with lgtm error [\#311](https://github.com/onqtam/doct\
est/issues/311)
- CMake: cannot install target doctest\_with\_main [\#310](https://github.com\
/onqtam/doctest/issues/310)
- \[bug\] INFO\(\) and CAPTURE\(\) cannot compile using MSVC when used with\
 DOCTEST\_CONFIG\_IMPLEMENTATION\_IN\_DLL [\#306](https://github.com/onqtam/d\
octest/issues/306)
- Skip subcase [\#304](https://github.com/onqtam/doctest/issues/304)
- Does some equivalent features from google test exist here?\
 [\#300](https://github.com/onqtam/doctest/issues/300)
- How to use doctest in dll only\(without main.cpp and .exe\)\
 [\#299](https://github.com/onqtam/doctest/issues/299)
- Warning: C26812: The enum type 'doctest::assertType::Enum' is unscoped.\
 Prefer 'enum class' over 'enum' \(Enum.3\). [\#298](https://github.com/onqta\
m/doctest/issues/298)
- test executable\_dll\_and\_plugin fails on Linux, GCC 8.1.0,\
 -fsanitize=address [\#201](https://github.com/onqtam/doctest/issues/201)

**Merged pull requests:**

- Fixed missing ostream include for MacOS when defining DOCTEST\_CONFIG\_…\
 [\#314](https://github.com/onqtam/doctest/pull/314) ([NKTomHaygarth](https:/\
/github.com/NKTomHaygarth))
- include windows.h in cmall caps to silence clang nonportable warnings\
 [\#313](https://github.com/onqtam/doctest/pull/313) ([suoniq](https://github\
.com/suoniq))
- Add .editorconfig file. [\#301](https://github.com/onqtam/doctest/pull/301)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add Github Actions CI [\#285](https://github.com/onqtam/doctest/pull/285)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))

## [2.3.5](https://github.com/onqtam/doctest/tree/2.3.5) (2019-09-22)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.4...2.3.5)

**Closed issues:**

- \[feature request\] Assertion macros for throwing exception of a specific\
 type with message - \<LEVEL\>\_THROWS\_WITH\_AS\(expr, string, ex\_type\)\
 [\#295](https://github.com/onqtam/doctest/issues/295)
- CHECK\_THROWS\_AS of non-default constructor wants to call default\
 constructor [\#293](https://github.com/onqtam/doctest/issues/293)
- Typos and spelling errors in source, documentation and scripts\
 [\#291](https://github.com/onqtam/doctest/issues/291)
- Customize test names / variable substitution [\#284](https://github.com/onq\
tam/doctest/issues/284)
- SUBCASE in function not behaving as expected [\#282](https://github.com/onq\
tam/doctest/issues/282)
- SUPER\_FAST\_ASSERTS fails to compile CHECK\_MESSAGE [\#281](https://github\
.com/onqtam/doctest/issues/281)
- CHECK\_MESSAGE no longer works with DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS\
 [\#280](https://github.com/onqtam/doctest/issues/280)
- CAPTURE of structured binding element no longer works [\#279](https://githu\
b.com/onqtam/doctest/issues/279)
- Reporter: `test\_case\_end` no longer fired after test case restart\
 [\#278](https://github.com/onqtam/doctest/issues/278)
- Add debug break override support [\#277](https://github.com/onqtam/doctest/\
issues/277)
- Running tests from within Visual Studio in a static lib project\
 [\#275](https://github.com/onqtam/doctest/issues/275)
- Compile-time error when using a raw string literal inside of REQUIRE \(MSVC\
 2017\) [\#274](https://github.com/onqtam/doctest/issues/274)
- Give example for having tests in production code [\#252](https://github.com\
/onqtam/doctest/issues/252)
- Memory leaks just by including doctest.h [\#205](https://github.com/onqtam/\
doctest/issues/205)
- Feature request: print subcase when an exception is thrown inside one\
 [\#136](https://github.com/onqtam/doctest/issues/136)

**Merged pull requests:**

- Fix typos and misspellings found by codespell. [\#292](https://github.com/o\
nqtam/doctest/pull/292) ([warmsocks](https://github.com/warmsocks))
- Document order by issue correctly [\#290](https://github.com/onqtam/doctest\
/pull/290) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Document that -order-by=file is compiler-dependent [\#289](https://github.c\
om/onqtam/doctest/pull/289) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add -order-by=name to filter\_2 test [\#288](https://github.com/onqtam/doct\
est/pull/288) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add support for compiling with clang-cl [\#286](https://github.com/onqtam/d\
octest/pull/286) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- No minimum version limitation of Meson [\#283](https://github.com/onqtam/do\
ctest/pull/283) ([ydm](https://github.com/ydm))

## [2.3.4](https://github.com/onqtam/doctest/tree/2.3.4) (2019-08-12)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.3...2.3.4)

**Closed issues:**

- Remove INFO\(\) limitation for using only lvalues and no rvalues\
 [\#269](https://github.com/onqtam/doctest/issues/269)
- Compile error on MAC OS with AppleClang 8.0.0.8000042  [\#266](https://gith\
ub.com/onqtam/doctest/issues/266)
- Throwing exception in a mocked method [\#265](https://github.com/onqtam/doc\
test/issues/265)
- Illegal syntax for decorators compiles and runs without warning, but has no\
 effect [\#264](https://github.com/onqtam/doctest/issues/264)
- Support conditional expressions in REQUIRE [\#262](https://github.com/onqta\
m/doctest/issues/262)
- Register a listener\(reporter\) that always listens [\#257](https://github.\
com/onqtam/doctest/issues/257)
- Memory sanitizer complaint [\#255](https://github.com/onqtam/doctest/issues\
/255)
- Windows Clang GNU command line warnings [\#253](https://github.com/onqtam/d\
octest/issues/253)
- The build writes into the source directory [\#249](https://github.com/onqta\
m/doctest/issues/249)
- How to enable tests inside another exe [\#246](https://github.com/onqtam/do\
ctest/issues/246)
- Testing multiple headers. [\#244](https://github.com/onqtam/doctest/issues/\
244)
- CMakeLists.txt: Needs CMAKE\_CXX\_STANDARD=11 [\#243](https://github.com/on\
qtam/doctest/issues/243)
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest [\#242](https://github.com/onqtam/doctest/issues/242)

**Merged pull requests:**

- Improve Listener docs [\#273](https://github.com/onqtam/doctest/pull/273)\
 ([claremacrae](https://github.com/claremacrae))
- Rework `INFO` lazy evaluation to use lambdas. [\#270](https://github.com/on\
qtam/doctest/pull/270) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Prevent compile errors with AppleClang compiler [\#268](https://github.com/\
onqtam/doctest/pull/268) ([ClausKlein](https://github.com/ClausKlein))
- Revert "fix : includeing windows.h header caause error" [\#263](https://git\
hub.com/onqtam/doctest/pull/263) ([onqtam](https://github.com/onqtam))
- Fix static analyzer URLs [\#259](https://github.com/onqtam/doctest/pull/259\
) ([godbyk](https://github.com/godbyk))
- fix : includeing windows.h header caause error [\#258](https://github.com/o\
nqtam/doctest/pull/258) ([rinechran](https://github.com/rinechran))
- only look for C++ compiler with CMake [\#256](https://github.com/onqtam/doc\
test/pull/256) ([zhihaoy](https://github.com/zhihaoy))
- Fix \#253 [\#254](https://github.com/onqtam/doctest/pull/254)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- add alias target for doctest for use in build tree [\#247](https://github.c\
om/onqtam/doctest/pull/247) ([trondhe](https://github.com/trondhe))

## [2.3.3](https://github.com/onqtam/doctest/tree/2.3.3) (2019-06-02)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.2...2.3.3)

**Closed issues:**

- Build fails with gcc9 because of -Wstrict-overflow=5 which is too high\
 [\#241](https://github.com/onqtam/doctest/issues/241)
- doctest given defined with short macro name [\#239](https://github.com/onqt\
am/doctest/issues/239)
- Splitting templated test across different translation units\
 [\#238](https://github.com/onqtam/doctest/issues/238)
- Compile errors with iosfwd.h and Visual Studio 2019 Preview\
 [\#183](https://github.com/onqtam/doctest/issues/183)
- Add CMake test support as catch\_discover\_tests\(\) in Catch2\
 [\#171](https://github.com/onqtam/doctest/issues/171)

**Merged pull requests:**

- fix \#239 - use long macro name [\#240](https://github.com/onqtam/doctest/p\
ull/240) ([m-bd](https://github.com/m-bd))
- Add doctest\_discover\_tests\(\) [\#236](https://github.com/onqtam/doctest/\
pull/236) ([RedDwarf69](https://github.com/RedDwarf69))
- Ignore redundant-decls warning on MinGW [\#235](https://github.com/onqtam/d\
octest/pull/235) ([AMS21](https://github.com/AMS21))
- Fixed meson build file dependency declaration [\#233](https://github.com/on\
qtam/doctest/pull/233) ([jormundgand](https://github.com/jormundgand))

## [2.3.2](https://github.com/onqtam/doctest/tree/2.3.2) (2019-05-06)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.1...2.3.2)

**Closed issues:**

- scripts/bench/run\_all.py : module 'urllib' has no attribute 'urlretrieve'\
 [\#230](https://github.com/onqtam/doctest/issues/230)
- wrong set of tests registered with TEST\_CASE\_TEMPLATE get executed\
 [\#228](https://github.com/onqtam/doctest/issues/228)
- Logging not Working for me [\#227](https://github.com/onqtam/doctest/issues\
/227)
- Link test runner executable into dll? [\#226](https://github.com/onqtam/doc\
test/issues/226)
- Linking issue for executables after including doctest in library\
 [\#224](https://github.com/onqtam/doctest/issues/224)
- Strange REQUIRE\_THROWS behaviour [\#223](https://github.com/onqtam/doctest\
/issues/223)
- Windows clang-cl Wunused-variable warning [\#221](https://github.com/onqtam\
/doctest/issues/221)
- Update doctest 2.3.1 in bincrafters [\#220](https://github.com/onqtam/docte\
st/issues/220)
- make install, on 64 bit, installs cmake files into lib instead of lib64\
 folder  [\#218](https://github.com/onqtam/doctest/issues/218)
- TSAN: data race related to hasLoggedCurrentTestStart [\#217](https://github\
.com/onqtam/doctest/issues/217)
- REQUIRE\_THROWS\_AS does not support class constructors [\#216](https://git\
hub.com/onqtam/doctest/issues/216)
- Build failure on clang 7.0.1 on Fedora 29 [\#214](https://github.com/onqtam\
/doctest/issues/214)
- add example compatible with -\> https://github.com/report-ci/\
 [\#212](https://github.com/onqtam/doctest/issues/212)
- No DOCTEST\_WITH\_TESTS? [\#211](https://github.com/onqtam/doctest/issues/2\
11)

**Merged pull requests:**

- Added meson file, to declare a dependency. [\#232](https://github.com/onqta\
m/doctest/pull/232) ([jormundgand](https://github.com/jormundgand))
- Explicitly specify the doctest\_with\_main C++ standard in CMake.\
 [\#231](https://github.com/onqtam/doctest/pull/231) ([DaanDeMeyer](https://g\
ithub.com/DaanDeMeyer))
- Remove architecture check from CMake package [\#225](https://github.com/onq\
tam/doctest/pull/225) ([mmha](https://github.com/mmha))
- add default install prefix [\#219](https://github.com/onqtam/doctest/pull/2\
19) ([a4z](https://github.com/a4z))
- \[regression\] Workaround MSVC preprocessor issue triggered by\
 REQUIRE\_THROWS [\#213](https://github.com/onqtam/doctest/pull/213)\
 ([zhihaoy](https://github.com/zhihaoy))

## [2.3.1](https://github.com/onqtam/doctest/tree/2.3.1) (2019-03-24)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.3.0...2.3.1)

**Merged pull requests:**

- Add two very simple examples of using doctest with CMake\
 [\#209](https://github.com/onqtam/doctest/pull/209) ([pr0g](https://github.c\
om/pr0g))

## [2.3.0](https://github.com/onqtam/doctest/tree/2.3.0) (2019-03-23)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.2.3...2.3.0)

**Closed issues:**

- Compilation with emscripten fails by default because of signal handling\
 [\#207](https://github.com/onqtam/doctest/issues/207)
- Compilation fails with cl.exe /Zc:wchar\_t- [\#206](https://github.com/onqt\
am/doctest/issues/206)
- Parallel invocation of doctest's own testsuite via CTest fails\
 [\#202](https://github.com/onqtam/doctest/issues/202)
-  Get the number of passed/failed tests in the code [\#200](https://github.c\
om/onqtam/doctest/issues/200)
- Tests alongside code with multiple executables [\#199](https://github.com/o\
nqtam/doctest/issues/199)
- Cppcheck 1.86 warnings [\#198](https://github.com/onqtam/doctest/issues/198)
- Compiling as Dll maybe is wrong [\#196](https://github.com/onqtam/doctest/i\
ssues/196)
- Forward-declaring identifiers in std:: is UB - consider including some of\
 the cheaper C/C++ stdlib headers [\#194](https://github.com/onqtam/doctest/i\
ssues/194)
- QtCreator + clang warning about operator \<\< precedence\
 [\#191](https://github.com/onqtam/doctest/issues/191)
- run test fixture from cli [\#190](https://github.com/onqtam/doctest/issues/\
190)
- Installing doctest using cmake and make fails on Ubuntu 16.04 \(C++11 is\
 not used\) [\#189](https://github.com/onqtam/doctest/issues/189)
- c++17 requirement for testing private members [\#188](https://github.com/on\
qtam/doctest/issues/188)
- \[feature request\] implement a user-extendable reporter system\
 [\#138](https://github.com/onqtam/doctest/issues/138)
- Same test runs multiple times when written in a header and included with\
 different unnormalized paths [\#45](https://github.com/onqtam/doctest/issues\
/45)

**Merged pull requests:**

- Fix unmatched bracket in DOCTEST\_TEST\_CASE\_CLASS [\#204](https://github.\
com/onqtam/doctest/pull/204) ([patstew](https://github.com/patstew))
- Template apply [\#203](https://github.com/onqtam/doctest/pull/203)\
 ([zhihaoy](https://github.com/zhihaoy))
- No undefined behavior per C++ standard in detecting endianness.\
 [\#195](https://github.com/onqtam/doctest/pull/195) ([dimztimz](https://gith\
ub.com/dimztimz))
- Fix propagating include directories of target doctest\_with\_main\
 [\#193](https://github.com/onqtam/doctest/pull/193) ([dimztimz](https://gith\
ub.com/dimztimz))
-  Move single header to a separate folder [\#187](https://github.com/onqtam/\
doctest/pull/187) ([dimztimz](https://github.com/dimztimz))
- Fix Clang format to handle C++11 [\#186](https://github.com/onqtam/doctest/\
pull/186) ([dimztimz](https://github.com/dimztimz))
- Rename doctest\_impl.h to doctest.cpp for less confusion.\
 [\#185](https://github.com/onqtam/doctest/pull/185) ([dimztimz](https://gith\
ub.com/dimztimz))

## [2.2.3](https://github.com/onqtam/doctest/tree/2.2.3) (2019-02-10)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.2.2...2.2.3)

**Closed issues:**

- Calling convention needed on a few functions [\#182](https://github.com/onq\
tam/doctest/issues/182)
- Terminal color is not reset when a test fails with some signal\
 [\#122](https://github.com/onqtam/doctest/issues/122)
- testing private members - ability to write test cases in class bodies\
 [\#76](https://github.com/onqtam/doctest/issues/76)

## [2.2.2](https://github.com/onqtam/doctest/tree/2.2.2) (2019-01-28)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.2.1...2.2.2)

**Closed issues:**

- Add way to override getCurrentTicks\(\) implementation [\#178](https://gith\
ub.com/onqtam/doctest/issues/178)
- Wrap \<csignal\> include with ifdef [\#177](https://github.com/onqtam/docte\
st/issues/177)
- How to stop doctest hijack unhandled exceptions? [\#176](https://github.com\
/onqtam/doctest/issues/176)
- Change the include path of the `doctest` CMake interface target so users\
 need to specify the folder as well [\#175](https://github.com/onqtam/doctest\
/issues/175)
- Reduce scope of DebugOutputWindowReporter instance [\#174](https://github.c\
om/onqtam/doctest/issues/174)
- Can logging \(INFO\) be used in helper class outside of TEST\_CASE?\
 [\#169](https://github.com/onqtam/doctest/issues/169)

**Merged pull requests:**

- Change the include path in examples as \#175 [\#180](https://github.com/onq\
tam/doctest/pull/180) ([ncihnegn](https://github.com/ncihnegn))
- Fix CMake include path \#175 [\#179](https://github.com/onqtam/doctest/pull\
/179) ([ncihnegn](https://github.com/ncihnegn))

## [2.2.1](https://github.com/onqtam/doctest/tree/2.2.1) (2019-01-15)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.2.0...2.2.1)

**Closed issues:**

- the `--no-throw` option shouldn't affect `\<LEVEL\>\_NOTHROW` asserts\
 [\#173](https://github.com/onqtam/doctest/issues/173)
- Make doctest work with XCode 6 and 7 \(no support for C++11 thread\_local\)\
 [\#172](https://github.com/onqtam/doctest/issues/172)
- Print vector content. [\#170](https://github.com/onqtam/doctest/issues/170)
- Conan package [\#103](https://github.com/onqtam/doctest/issues/103)
- \[feature request\] Thread-safety for asserts and logging facilities\
 [\#4](https://github.com/onqtam/doctest/issues/4)

## [2.2.0](https://github.com/onqtam/doctest/tree/2.2.0) (2018-12-05)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.1.0...2.2.0)

**Closed issues:**

- remove the FAST\_ versions of the binary asserts \(not a breaking change!\)\
 [\#167](https://github.com/onqtam/doctest/issues/167)
- \[compile times\] make the DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS identifier\
 affect normal asserts too [\#166](https://github.com/onqtam/doctest/issues/1\
66)

## [2.1.0](https://github.com/onqtam/doctest/tree/2.1.0) (2018-11-30)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.0.1...2.1.0)

**Closed issues:**

- doctest::String ctor with non-zero terminated string [\#165](https://github\
.com/onqtam/doctest/issues/165)
- thread\_local is not supported on iOS 9.0 [\#164](https://github.com/onqtam\
/doctest/issues/164)
- Compiler error on Android NDK r18 [\#163](https://github.com/onqtam/doctest\
/issues/163)
- \[question\] One setup for multiple tests [\#160](https://github.com/onqtam\
/doctest/issues/160)
- clang unwanted warning in user code [\#156](https://github.com/onqtam/docte\
st/issues/156)
- Unsigned integer overflow in fileOrderComparator [\#151](https://github.com\
/onqtam/doctest/issues/151)
- ThreadSanitizer: signal-unsafe call inside of a signal [\#147](https://gith\
ub.com/onqtam/doctest/issues/147)
- Feature request: check for exception string \(like Catch's\
 CHECK\_THROWS\_WITH\) [\#97](https://github.com/onqtam/doctest/issues/97)

**Merged pull requests:**

- Fixed build error under Android NDK [\#162](https://github.com/onqtam/docte\
st/pull/162) ([tals](https://github.com/tals))
- Added clang-7 to travis build [\#161](https://github.com/onqtam/doctest/pul\
l/161) ([AMS21](https://github.com/AMS21))
- Remove clang-tidy warnings for static fields created by doctest\
 [\#159](https://github.com/onqtam/doctest/pull/159) ([rantasub](https://gith\
ub.com/rantasub))
- Make it possible to change the command line options prefix\
 [\#158](https://github.com/onqtam/doctest/pull/158) ([tbleher](https://githu\
b.com/tbleher))

## [2.0.1](https://github.com/onqtam/doctest/tree/2.0.1) (2018-10-24)
[Full Changelog](https://github.com/onqtam/doctest/compare/2.0.0...2.0.1)

**Closed issues:**

- macro name collision with google log [\#157](https://github.com/onqtam/doct\
est/issues/157)
- Add \#define to not run tests by default [\#152](https://github.com/onqtam/\
doctest/issues/152)
- REQUIRE\_THROWS\_MESSAGE not checking message correctly [\#150](https://git\
hub.com/onqtam/doctest/issues/150)
- Test case passes even though subcase failed [\#149](https://github.com/onqt\
am/doctest/issues/149)

**Merged pull requests:**

- Correctly document when a main\(\) entry point will be created\
 [\#155](https://github.com/onqtam/doctest/pull/155) ([tbleher](https://githu\
b.com/tbleher))
- Correct format string for unsigned char [\#154](https://github.com/onqtam/d\
octest/pull/154) ([tbleher](https://github.com/tbleher))

## [2.0.0](https://github.com/onqtam/doctest/tree/2.0.0) (2018-08-23)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.9...2.0.0)

**Closed issues:**

- MSVC 2017 15.8.1, New Warnings as Errors [\#144](https://github.com/onqtam/\
doctest/issues/144)
- Windows clang-cl Wdeprecated-declarations warnings [\#143](https://github.c\
om/onqtam/doctest/issues/143)
- Logo Proposal for Doctest [\#141](https://github.com/onqtam/doctest/issues/\
141)
- PCH Support [\#140](https://github.com/onqtam/doctest/issues/140)
- improve compile times even further [\#139](https://github.com/onqtam/doctes\
t/issues/139)
- !!! BREAKING CHANGE !!! - Move to C++11 for next version of the library\
 [\#137](https://github.com/onqtam/doctest/issues/137)
- getCurrentTicks producing warning on MinGW [\#133](https://github.com/onqta\
m/doctest/issues/133)
- \[enhancement\] Add support for "stand-alone assertions".\
 [\#114](https://github.com/onqtam/doctest/issues/114)

**Merged pull requests:**

- Suppress compiler warning on MinGW [\#134](https://github.com/onqtam/doctes\
t/pull/134) ([AMS21](https://github.com/AMS21))

## [1.2.9](https://github.com/onqtam/doctest/tree/1.2.9) (2018-05-10)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.8...1.2.9)

**Closed issues:**

- GCC 8.0 std::uncaught\_exception\(\) is deprecated  [\#130](https://github.\
com/onqtam/doctest/issues/130)
- Signal stack size too small on Linux [\#129](https://github.com/onqtam/doct\
est/issues/129)
- Support Intel Compiler [\#128](https://github.com/onqtam/doctest/issues/128)
- Please add support for MSVC 2005 [\#127](https://github.com/onqtam/doctest/\
issues/127)
- scan-build report "Dereference of null pointer" for function wildcmp\
 [\#124](https://github.com/onqtam/doctest/issues/124)
- !!! BREAKING CHANGE \(console output only\)  !!! - Emulate the\
 error/warning format emitted by native compiler gcc/clang/msvc when printing\
 test failures in the log [\#123](https://github.com/onqtam/doctest/issues/12\
3)
- ARM builds: FTBFS on armhf - error: cast from 'const char\*' to 'const \
 [\#118](https://github.com/onqtam/doctest/issues/118)

**Merged pull requests:**

- Exclude Intel from GCC compiler check [\#132](https://github.com/onqtam/doc\
test/pull/132) ([smcallis](https://github.com/smcallis))
- Fix deprecated-declarations warning with GCC-8.0 [\#131](https://github.com\
/onqtam/doctest/pull/131) ([AMS21](https://github.com/AMS21))

## [1.2.8](https://github.com/onqtam/doctest/tree/1.2.8) (2018-03-10)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.7...1.2.8)

**Closed issues:**

- ARM64 builds: templated\_test\_cases.cpp test fails [\#119](https://github.\
com/onqtam/doctest/issues/119)

## [1.2.7](https://github.com/onqtam/doctest/tree/1.2.7) (2018-02-06)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.6...1.2.7)

**Closed issues:**

- MSan has runtime error: unsigned integer overflow [\#116](https://github.co\
m/onqtam/doctest/issues/116)
- clang-tidy warning about cert-err58-cpp [\#115](https://github.com/onqtam/d\
octest/issues/115)
- Linking errors [\#113](https://github.com/onqtam/doctest/issues/113)
- inlining function defs [\#111](https://github.com/onqtam/doctest/issues/111)
- Nullptr issue. [\#110](https://github.com/onqtam/doctest/issues/110)
- MemorySanitizer: use-of-uninitialized-value [\#109](https://github.com/onqt\
am/doctest/issues/109)
- Potential memory leak through scan-build [\#108](https://github.com/onqtam/\
doctest/issues/108)
- Warnings raised to error with latest MSVC version [\#107](https://github.co\
m/onqtam/doctest/issues/107)
- New solution for tests in static libraries ! \(MSVC\) [\#106](https://githu\
b.com/onqtam/doctest/issues/106)
- Command line flags do not work after code formatter/beautifier\
 [\#104](https://github.com/onqtam/doctest/issues/104)
- Cppcheck 1.81 warnings [\#102](https://github.com/onqtam/doctest/issues/102)

**Merged pull requests:**

- Fix macros WIN32\_LEAN\_AND\_MEAN typo [\#112](https://github.com/onqtam/do\
ctest/pull/112) ([vladimirgamalyan](https://github.com/vladimirgamalyan))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set \(\#99\)\
 [\#100](https://github.com/onqtam/doctest/pull/100) ([onqtam](https://github\
.com/onqtam))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set\
 [\#99](https://github.com/onqtam/doctest/pull/99) ([OdyX](https://github.com\
/OdyX))

## [1.2.6](https://github.com/onqtam/doctest/tree/1.2.6) (2017-10-29)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.5...1.2.6)

**Closed issues:**

- \[bug\] writing an exception translator in a header file results in it\
 being registered multiple times which is suboptimal [\#98](https://github.co\
m/onqtam/doctest/issues/98)
- Warnings when using something more than /W4 for Visual Studio\
 [\#95](https://github.com/onqtam/doctest/issues/95)

**Merged pull requests:**

- Added an option to not install Doctest in the CMake scripts\
 [\#96](https://github.com/onqtam/doctest/pull/96) ([nm17](https://github.com\
/nm17))
- Adding a defensive check against a null pointer for the current test suite\
 [\#94](https://github.com/onqtam/doctest/pull/94) ([Lectem](https://github.c\
om/Lectem))
- Remove incomplete copy ctor [\#93](https://github.com/onqtam/doctest/pull/9\
3) ([McMartin](https://github.com/McMartin))

## [1.2.5](https://github.com/onqtam/doctest/tree/1.2.5) (2017-10-06)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.4...1.2.5)

**Closed issues:**

- Xcode 9 / clang - unknown warning group [\#92](https://github.com/onqtam/do\
ctest/issues/92)

## [1.2.4](https://github.com/onqtam/doctest/tree/1.2.4) (2017-09-20)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.3...1.2.4)

**Closed issues:**

- \[bug\] test cases can end up in the wrong test suite [\#91](https://github\
.com/onqtam/doctest/issues/91)

## [1.2.3](https://github.com/onqtam/doctest/tree/1.2.3) (2017-09-11)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.2...1.2.3)

**Closed issues:**

- \[bug\] Defining a variable T inside a test with DOCTEST\_CONFIG\_DISABLE\
 defined does not compile [\#90](https://github.com/onqtam/doctest/issues/90)
- \[support\] Using `DOCTEST\_CONFIG\_NO\_SHORT\_MACRO\_NAMES` does not\
 compile using g++ 6.3.0 [\#89](https://github.com/onqtam/doctest/issues/89)
- \[question\] Why are SUBCASEs executed only once when within a function\
 called multiple times? [\#88](https://github.com/onqtam/doctest/issues/88)

## [1.2.2](https://github.com/onqtam/doctest/tree/1.2.2) (2017-09-05)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.1...1.2.2)

**Closed issues:**

- \[question\] Differences between doctest and googletest \(gtest\) for\
 uninitialised local variables in test cases [\#86](https://github.com/onqtam\
/doctest/issues/86)
- !!! BREAKING CHANGE !!! - remove the custom implementation of\
 std::is\_constructible and optionally use the \<type\_traits\> header\
 because of infinite template recursion issues with GCC [\#85](https://github\
.com/onqtam/doctest/issues/85)
- Static Analysis results of doctest [\#83](https://github.com/onqtam/doctest\
/issues/83)
- !!! BREAKING CHANGE !!! - catch exceptions as const reference in\
 \<LEVEL\>\_THROWS\_AS [\#81](https://github.com/onqtam/doctest/issues/81)
- doctest implementation as static library [\#77](https://github.com/onqtam/d\
octest/issues/77)
- Provide some easy way to compare structs containing float/doubles\
 [\#73](https://github.com/onqtam/doctest/issues/73)

**Merged pull requests:**

- Add support for templated scenarios [\#87](https://github.com/onqtam/doctes\
t/pull/87) ([Lectem](https://github.com/Lectem))
- Prefer if\(MSVC\) in CMakeLists.txt. [\#84](https://github.com/onqtam/docte\
st/pull/84) ([martinmoene](https://github.com/martinmoene))
- catch throw\_as exception as const reference [\#82](https://github.com/onqt\
am/doctest/pull/82) ([a4z](https://github.com/a4z))
- Added doctest\_with\_main static lib [\#78](https://github.com/onqtam/docte\
st/pull/78) ([ymadzhunkov](https://github.com/ymadzhunkov))

## [1.2.1](https://github.com/onqtam/doctest/tree/1.2.1) (2017-05-24)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.2.0...1.2.1)

**Closed issues:**

- Compile error under MSVC 2015/2017 if \<thread\> included in same file as\
 "doctest.h" [\#72](https://github.com/onqtam/doctest/issues/72)

**Merged pull requests:**

- docs: TEST\_CASE\_METHOD -\> TEST\_CASE\_FIXTURE [\#71](https://github.com/\
onqtam/doctest/pull/71) ([akrzemi1](https://github.com/akrzemi1))

## [1.2.0](https://github.com/onqtam/doctest/tree/1.2.0) (2017-05-15)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.1.4...1.2.0)

**Closed issues:**

- Further improvements on compile time - disable inlining of functions used\
 in asserts [\#70](https://github.com/onqtam/doctest/issues/70)
- Improve runtime performance - lazy stringification, more inlining, no\
 statics on the hot path, move semantics for classes such as doctest::String\
 which are used by value, etc. [\#69](https://github.com/onqtam/doctest/issue\
s/69)
- Add option to show duration of test case execution and add a\
 timeout\(seconds\) decorator - marking them as failed if they exceed it\
 [\#68](https://github.com/onqtam/doctest/issues/68)
- Add support for test case decorators - label, description, skip, may\_fail,\
 should\_fail, expected\_failures, etc. [\#67](https://github.com/onqtam/doct\
est/issues/67)
- Integrate static analysis into the CI builds [\#66](https://github.com/onqt\
am/doctest/issues/66)
- Print the test suite name on test case failure [\#65](https://github.com/on\
qtam/doctest/issues/65)
- Add signal handlers to handle crashes \(and use SEH under Windows\) -\
 report which test case failed [\#63](https://github.com/onqtam/doctest/issue\
s/63)
- Add support to Approx for strong typedefs of double [\#62](https://github.c\
om/onqtam/doctest/issues/62)
- \[question\] Is there a way to always have 0 as the exit code regardless of\
 test results? [\#59](https://github.com/onqtam/doctest/issues/59)
- Add support for un-parenthesized expressions containing commas in asserts\
 [\#58](https://github.com/onqtam/doctest/issues/58)
- Add ability to filter subcases with filters [\#57](https://github.com/onqta\
m/doctest/issues/57)
- Add option to query if code is being ran inside of a test -\
 doctest::is\_running\_in\_test [\#56](https://github.com/onqtam/doctest/issu\
es/56)
- Ability for a binary \(executable / shared object\) to use the test runner\
 implementation of another binary - with exported symbols - so tests end up\
 in a single registry [\#55](https://github.com/onqtam/doctest/issues/55)
- How to force the use of colors in the terminal? [\#54](https://github.com/o\
nqtam/doctest/issues/54)
- How can I mix production code with the Unit Tests? [\#53](https://github.co\
m/onqtam/doctest/issues/53)
- add \<= and \>= operators to Approx \(and also maybe \< and \>\)\
 [\#52](https://github.com/onqtam/doctest/issues/52)
- Add ability to capture variables from test scope [\#48](https://github.com/\
onqtam/doctest/issues/48)
- !!! BREAKING CHANGE !!! - Make TEST\_SUITE work with blocks and add\
 TEST\_SUITE\_BEGIN [\#41](https://github.com/onqtam/doctest/issues/41)
- Add option to print which test suites/cases are run [\#39](https://github.c\
om/onqtam/doctest/issues/39)
- Add support for templated test cases - parameterized by type\
 [\#38](https://github.com/onqtam/doctest/issues/38)
- Add custom failure messages with lazy stringification [\#23](https://github\
.com/onqtam/doctest/issues/23)
- Add an exception translation mechanism + the ability for users to extend it\
 with custom exception types [\#12](https://github.com/onqtam/doctest/issues/\
12)
- Add API for reporting failures [\#9](https://github.com/onqtam/doctest/issu\
es/9)

**Merged pull requests:**

- Update doctest to work with ARM DS5-compiler [\#64](https://github.com/onqt\
am/doctest/pull/64) ([tomasnilefrost](https://github.com/tomasnilefrost))

## [1.1.4](https://github.com/onqtam/doctest/tree/1.1.4) (2017-02-18)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.1.3...1.1.4)

**Closed issues:**

- Add option --force-colors - for when a tty is not detected for stdout\
 [\#51](https://github.com/onqtam/doctest/issues/51)
- Issue with using lambdas in tests in gcc [\#49](https://github.com/onqtam/d\
octest/issues/49)
- Add the include file to releases [\#47](https://github.com/onqtam/doctest/i\
ssues/47)

**Merged pull requests:**

- Add translation of std::exception for exceptions that terminate a test case\
 [\#46](https://github.com/onqtam/doctest/pull/46) ([eliaskosunen](https://gi\
thub.com/eliaskosunen))

## [1.1.3](https://github.com/onqtam/doctest/tree/1.1.3) (2016-11-15)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.1.2...1.1.3)

**Closed issues:**

- Exception handlers cause warnings when exceptions are disabled\
 [\#44](https://github.com/onqtam/doctest/issues/44)

## [1.1.2](https://github.com/onqtam/doctest/tree/1.1.2) (2016-10-10)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.1.1...1.1.2)

**Closed issues:**

- clang warnings when using C++11 or newer [\#42](https://github.com/onqtam/d\
octest/issues/42)
- \[support\] identical names for test suites? [\#40](https://github.com/onqt\
am/doctest/issues/40)

## [1.1.1](https://github.com/onqtam/doctest/tree/1.1.1) (2016-09-22)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.1.0...1.1.1)

## [1.1.0](https://github.com/onqtam/doctest/tree/1.1.0) (2016-09-21)
[Full Changelog](https://github.com/onqtam/doctest/compare/1.0.0...1.1.0)

**Closed issues:**

- char\* comparison uses the contents, not the pointer [\#36](https://github.\
com/onqtam/doctest/issues/36)
- add configuration preprocessor identifier for passing by value in\
 assertions instead of by reference [\#35](https://github.com/onqtam/doctest/\
issues/35)
- restrict expressions in assertion macros to binary comparisons at most with\
 a static assert [\#34](https://github.com/onqtam/doctest/issues/34)
- Add clearFilters\(\) to doctest::Context [\#33](https://github.com/onqtam/d\
octest/issues/33)
- A way to refrain from polluting “\#define” space for users of tested code?\
 [\#32](https://github.com/onqtam/doctest/issues/32)
- drop VC++6 support [\#31](https://github.com/onqtam/doctest/issues/31)
- False positive test [\#30](https://github.com/onqtam/doctest/issues/30)
- Turn off coloring after tests are finished? [\#28](https://github.com/onqta\
m/doctest/issues/28)
- C++11 nullptr [\#27](https://github.com/onqtam/doctest/issues/27)
- Only one SUBCASE per line is executed [\#25](https://github.com/onqtam/doct\
est/issues/25)
- creative formatting of chars [\#24](https://github.com/onqtam/doctest/issue\
s/24)
- DOCTEST\_BREAK\_INTO\_DEBUGGER undefined under OSX [\#22](https://github.co\
m/onqtam/doctest/issues/22)
- Tests inside a static library [\#21](https://github.com/onqtam/doctest/issu\
es/21)
- Add example how to remove doctest options from the command line for the\
 program after the tests run [\#20](https://github.com/onqtam/doctest/issues/\
20)
- Single-letter options active even without leading '-' \(dash\)\
 [\#19](https://github.com/onqtam/doctest/issues/19)
- pointer stringification not working for compilers different from MSVC\
 [\#18](https://github.com/onqtam/doctest/issues/18)
- Tests that accompany code run and produce output at default\
 [\#17](https://github.com/onqtam/doctest/issues/17)
- GCC 5.3.1 Compiler warning: sign compare [\#16](https://github.com/onqtam/d\
octest/issues/16)
- Slower than Catch in realistic test cases [\#14](https://github.com/onqtam/\
doctest/issues/14)
- Rename doctest::detail::Result res; in DOCTEST\_ASSERT\_IMPLEMENT\
 [\#10](https://github.com/onqtam/doctest/issues/10)
- No red when all tests pass [\#7](https://github.com/onqtam/doctest/issues/7)
- UNIX line feedings on GitHub please [\#6](https://github.com/onqtam/doctest\
/issues/6)

**Merged pull requests:**

- don't show green when tests fail [\#26](https://github.com/onqtam/doctest/p\
ull/26) ([ferkulat](https://github.com/ferkulat))
- Include "program code" in example [\#15](https://github.com/onqtam/doctest/\
pull/15) ([martinmoene](https://github.com/martinmoene))

## [1.0.0](https://github.com/onqtam/doctest/tree/1.0.0) (2016-05-22)
**Merged pull requests:**

- Reduce the header size for test users [\#3](https://github.com/onqtam/docte\
st/pull/3) ([zah](https://github.com/zah))
- Add a Gitter chat badge to README.md [\#1](https://github.com/onqtam/doctes\
t/pull/1) ([gitter-badger](https://github.com/gitter-badger))



\* *This Change Log was automatically generated by [github_changelog_generato\
r](https://github.com/skywinder/Github-Changelog-Generator)*
\
changes-type: text/markdown;variant=GFM
url: https://github.com/onqtam/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++11 | c++14 | c++17 | c++20
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

test.target = $cxx.target

\
location: doctest/doctest-2.4.6+2.tar.gz
sha256sum: 8795e3495430f05c770ffa362a0efa9216cd41669bcab3d68153e440fde3fd41
:
name: doctest
version: 2.4.7
summary: The fastest feature-rich C++11/14/17/20 single-header testing\
 framework for unit tests and TDD
license: MIT
description:
\
<p align="center"><img src="scripts/data/logo/logo_1.svg"></p>
<b>
<table>
    <tr>
        <td>
            master branch
        </td>
        <td>
            All <a href="https://github.com/onqtam/doctest/actions?query=bran\
ch%3Amaster"><img src="https://github.com/onqtam/doctest/workflows/CI/badge.s\
vg?branch=master"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=master\
"><img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch\
=master"></a>
        </td>
        <!--
        <td>
            <a href="https://scan.coverity.com/projects/onqtam-doctest"><img\
 src="https://scan.coverity.com/projects/7865/badge.svg"></a>
        </td>
        -->
    </tr>
    <tr>
        <td>
            dev branch
        </td>
        <td>
            All <a href="https://github.com/onqtam/doctest/actions?query=bran\
ch%3Adev"><img src="https://github.com/onqtam/doctest/workflows/CI/badge.svg?\
branch=dev"></a>
        </td>
        <td>
            <a href="https://coveralls.io/github/onqtam/doctest?branch=dev"><\
img src="https://coveralls.io/repos/github/onqtam/doctest/badge.svg?branch=de\
v"></a>
        </td>
    </tr>
</table>
</b>

**doctest** is a new C++ testing framework but is by far the fastest both in\
 compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and\
 runtime compared to other feature-rich alternatives. It brings the ability\
 of compiled languages such as [**D**](https://dlang.org/spec/unittest.html)\
 / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.h\
tml) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests\
 written directly in the production code thanks to a fast, transparent and\
 flexible test runner with a clean interface.

[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20-blue.svg)](http\
s://en.wikipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opens\
ource.org/licenses/MIT)
[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](http\
s://raw.githubusercontent.com/onqtam/doctest/master/doctest/doctest.h)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/\
503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/onqtam/doct\
est.svg)](https://lgtm.com/projects/g/onqtam/doctest/context:cpp)
[![Chat - Discord](https://img.shields.io/badge/chat-Discord-blue.svg)](https\
://discord.gg/PGXn9YmyF3)
[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](h\
ttps://godbolt.org/z/4s389Kbfs)
<!--
[![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://iso\
cpp.org/)
[![documentation](https://img.shields.io/badge/documentation%20%20-online-blu\
e.svg)](https://github.com/onqtam/doctest/blob/master/doc/markdown/readme.md#\
reference)
-->

# [>> doctest is looking for maintainers <<](https://github.com/doctest/docte\
st/issues/554)

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

The framework is and will stay free but needs your support to sustain its\
 development. There are lots of <a href="doc/markdown/roadmap.md"><b>new\
 features</b></a> and maintenance to do. If you work for a company using\
 **doctest** or have the means to do so, please consider financial support.\
 Monthly donations via Patreon and one-offs via PayPal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

A complete example with a self-registering test that compiles to an\
 executable looks like this:

![cover-example](scripts/data/using_doctest_888px_wide.gif)

There are many C++ testing frameworks - [Catch](https://github.com/catchorg/C\
atch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/\
index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp),\
 [cpputest](https://github.com/cpputest/cpputest), [googletest](https://githu\
b.com/google/googletest) and [others](https://en.wikipedia.org/wiki/List_of_u\
nit_testing_frameworks#C.2B.2B).

The **key** differences between it and other testing frameworks are that it\
 is light and unintrusive:
- Ultra light on compile times both in terms of [**including the\
 header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and\
 writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-ass\
ertion-macro)
- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmak\
e/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**
- Can remove **everything** testing-related from the binary with the\
 [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest_con\
fig_disable) identifier
- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts\
 can be used from multiple threads spawned from a single test case -\
 [**example**](examples/all_features/concurrency.cpp)
- asserts can be used [**outside of a testing context**](doc/markdown/asserti\
ons.md#using-asserts-out-of-a-testing-context) - as a general purpose assert\
 library - [**example**](examples/all_features/asserts_used_outside_of_tests.\
cpp)
- No global namespace pollution (everything is in ```doctest::```) & doesn't\
 drag **any** headers with it
- [**Portable**](doc/markdown/features.md#extremely-portable) C++11 (use tag\
 [**1.2.9**](https://github.com/onqtam/doctest/tree/1.2.9) for C++98) with\
 over 100 different CI builds (static analysis, sanitizers..)
- binaries (exe/dll) can use the test runner of another binary => tests in a\
 single registry - [**example**](examples/executable_dll_and_plugin/)

![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)

This allows the framework to be used in more ways than any other - tests can\
 be written directly in the production code!

*Tests can be a form of documentation and should be able to reside near the\
 production code which they test.*

- This makes the barrier for writing tests **much lower** - you don't have\
 to: **1)** make a separate source file **2)** include a bunch of stuff in it\
 **3)** add it to the build system and **4)** add it to source control - You\
 can just write the tests for a class or a piece of functionality at the\
 bottom of its source file - or even header file!
- Tests in the production code can be thought of as documentation/up-to-date\
 comments - showcasing the APIs
- Testing internals that are not exposed through the public API and headers\
 is no longer a mind-bending exercise
- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_dev\
elopment) in C++ has never been easier!

The framework can be used just like any other without mixing production code\
 and tests - check out the [**features**](doc/markdown/features.md).

**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2)\
 and some parts of the code have been taken directly - check out [**the\
 differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).

[This table](https://github.com/martinmoene/catch-lest-other-comparison)\
 compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) /\
 [**lest**](https://github.com/martinmoene/lest) which are all very similar.

Checkout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/m\
ix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-\
modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=\
eH1CxEC29l8) to get a better understanding of how the framework works and\
 read about how to use it in [**the JetBrains article**](https://blog.jetbrai\
ns.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique\
 aspects of the framework! On a short description on how to use the framework\
 along production code you could refer to [**this GitHub issue**](https://git\
hub.com/onqtam/doctest/issues/252). There is also an [**older\
 article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the\
 february edition of ACCU Overload 2017.

[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-tal\
k-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)

Documentation
-------------

Project:

- [Features and design goals](doc/markdown/features.md) - the complete list\
 of features
- [Roadmap](doc/markdown/roadmap.md) - upcoming features
- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime\
 supremacy
- [Contributing](CONTRIBUTING.md) - how to make a proper pull request
- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs

Usage:

- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before\
 the other parts of the documentation
- [Assertion macros](doc/markdown/assertions.md)
- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)
- [Parameterized test cases](doc/markdown/parameterized-tests.md)
- [Command line](doc/markdown/commandline.md)
- [Logging macros](doc/markdown/logging.md)
- [```main()``` entry point](doc/markdown/main.md)
- [Configuration](doc/markdown/configuration.md)
- [String conversions](doc/markdown/stringification.md)
- [Reporters](doc/markdown/reporters.md)
- [Extensions](doc/markdown/extensions.md)
- [FAQ](doc/markdown/faq.md)
- [Build systems](doc/markdown/build-systems.md)
- [Examples](examples)

Contributing
------------

[<img src="https://cloud.githubusercontent.com/assets/8225057/5990484/7041356\
0-a9ab-11e4-8942-1a63607c0b00.png" align="right">](http://www.patreon.com/onq\
tam)

Support the development of the project with donations! There is a list of\
 planned features which are all important and big - see the\
 [**roadmap**](doc/markdown/roadmap.md). I took a break from working in the\
 industry to make open source software so every cent is a big deal.

[<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"\
 align="right">](https://www.paypal.me/onqtam/10)

If you work for a company using **doctest** or have the means to do so,\
 please consider financial support.

Contributions in the form of issues and pull requests are welcome as well -\
 check out the [**Contributing**](CONTRIBUTING.md) page.

Logo
------------

The [logo](scripts/data/logo) is licensed under a Creative Commons\
 Attribution 4.0 International License. Copyright &copy; 2019\
 [area55git](https://github.com/area55git) &nbsp; [![License: CC BY\
 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons\
.org/licenses/by/4.0/)

<p align="center"><img src="scripts/data/logo/icon_2.svg"></p>

\
description-type: text/markdown;variant=GFM
changes:
\
# Change Log

## [2.4.7](https://github.com/doctest/doctest/tree/2.4.7) (2021-12-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.6...2.4.7)

**Implemented enhancements:**

- Add a default Bazel BUILD file [\#433](https://github.com/doctest/doctest/i\
ssues/433)

**Fixed bugs:**

- Stack-buffer-overflow probably because char array is viewed as NULL\
 terminated string [\#476](https://github.com/doctest/doctest/issues/476)

**Closed issues:**

- "C4834: discarding return value" with REQUIRE\_THROWS [\#549](https://githu\
b.com/doctest/doctest/issues/549)
- Xcode 11.3 is gone from macOS-latest \(=macOS-11\) [\#547](https://github.c\
om/doctest/doctest/issues/547)
- is it possible to define dependency for CHECKs [\#545](https://github.com/d\
octest/doctest/issues/545)
- Output summary explanation [\#541](https://github.com/doctest/doctest/issue\
s/541)
- compiler errors in doctest.h using cmake in CLion [\#540](https://github.co\
m/doctest/doctest/issues/540)
- Fails to build in VS2013 because of constexpr [\#539](https://github.com/do\
ctest/doctest/issues/539)
- -Wreserved-identifier warnings with Clang 13.0.0 [\#536](https://github.com\
/doctest/doctest/issues/536)
- Build fails with latest MSVC 2019 \(v16.11\) due to /WX [\#535](https://git\
hub.com/doctest/doctest/issues/535)
- VS 16.11 warning about unreferenced function with internal linkage\
 [\#533](https://github.com/doctest/doctest/issues/533)
- Faq googletest mocking dead link [\#532](https://github.com/doctest/doctest\
/issues/532)
- FR: Documentation: FAQ: Add sectoin 'multiple files' [\#526](https://github\
.com/doctest/doctest/issues/526)
- CMAKE: doctest\_discover\_tests\(\) error when ADD\_LABELS is not specified\
 [\#524](https://github.com/doctest/doctest/issues/524)
- Register tests based on test data available [\#521](https://github.com/doct\
est/doctest/issues/521)
- naming override in different testcase files [\#517](https://github.com/doct\
est/doctest/issues/517)
- Segmentation fault during the compilation without the copy elision\
 optimization [\#515](https://github.com/doctest/doctest/issues/515)
- Compiler warnings on Xcode 12.5 [\#514](https://github.com/doctest/doctest/\
issues/514)
- Using filter `-sc` does not work properly? [\#513](https://github.com/docte\
st/doctest/issues/513)
- \[question\] Example of tests in production code & DLLs & shared libraries?\
 [\#511](https://github.com/doctest/doctest/issues/511)
- Dumping fixture state to disk on error [\#509](https://github.com/doctest/d\
octest/issues/509)
- Macros construct reserved identifiers [\#507](https://github.com/doctest/do\
ctest/issues/507)
- Running doctest on embedded ARM Cortex µCs [\#506](https://github.com/docte\
st/doctest/issues/506)
- Asserts Outside of Tests Example Does Not Link [\#504](https://github.com/d\
octest/doctest/issues/504)
- \[FEATURE REQUEST\] Quiet flag [\#503](https://github.com/doctest/doctest/i\
ssues/503)
- Compile error on Intel C++ Classic Compilers [\#502](https://github.com/doc\
test/doctest/issues/502)
- compiling doctest in 32-bit with \_\_stdcall calling convention fails\
 [\#500](https://github.com/doctest/doctest/issues/500)
- Duplicate 'const' compilation error from TEST\_CASE\_CLASS macro\
 [\#498](https://github.com/doctest/doctest/issues/498)
- Packed fields can't be accessed in 2.4.6 [\#495](https://github.com/doctest\
/doctest/issues/495)
- Dangling pointers with .str\(\).c\_str\(\) [\#494](https://github.com/docte\
st/doctest/issues/494)
- Automatic adding of TEST\_SUITE labels to discovered tests fails if\
 ADD\_LABELS not set [\#489](https://github.com/doctest/doctest/issues/489)
- Adding a bunch of REQUIRE/CHECK utilities [\#487](https://github.com/doctes\
t/doctest/issues/487)
- Warning C4114 in MSVC [\#485](https://github.com/doctest/doctest/issues/485)
- Own repository [\#410](https://github.com/doctest/doctest/issues/410)
- Linking problem with Clang 10 on Windows [\#362](https://github.com/doctest\
/doctest/issues/362)
- Add option not to print the intro text [\#342](https://github.com/doctest/d\
octest/issues/342)
- \[Feature\] Better integration with tools \(VS Code Test Adapter\
 Extension\) [\#320](https://github.com/doctest/doctest/issues/320)
- vscode test explorer [\#303](https://github.com/doctest/doctest/issues/303)
- Want an option not to print any intro [\#245](https://github.com/doctest/do\
ctest/issues/245)
- Add way to disable printing of intro [\#181](https://github.com/doctest/doc\
test/issues/181)

**Merged pull requests:**

- Make String::operator+ non-member [\#564](https://github.com/doctest/doctes\
t/pull/564) ([Saalvage](https://github.com/Saalvage))
- Add -minimal flag [\#562](https://github.com/doctest/doctest/pull/562)\
 ([Saalvage](https://github.com/Saalvage))
- Quiet flag [\#561](https://github.com/doctest/doctest/pull/561)\
 ([Saalvage](https://github.com/Saalvage))
- Fix redefinition error while using double time DOCTEST\_ANONYMOUS\(DOCTEST\_\
CAPTURE\_\) [\#557](https://github.com/doctest/doctest/pull/557)\
 ([isaevil](https://github.com/isaevil))
- Fix error: missing initializer for member doctest::detail::TestSuite\
 [\#556](https://github.com/doctest/doctest/pull/556) ([isaevil](https://gith\
ub.com/isaevil))
- Xcode 11.3 with macos 10.15 [\#548](https://github.com/doctest/doctest/pull\
/548) ([jsoref](https://github.com/jsoref))
- Spelling [\#546](https://github.com/doctest/doctest/pull/546)\
 ([jsoref](https://github.com/jsoref))
- Fix build with -Wunused-but-set-variable [\#543](https://github.com/doctest\
/doctest/pull/543) ([jktjkt](https://github.com/jktjkt))
- build\(meson\): use `override\_dependency` if supported [\#538](https://git\
hub.com/doctest/doctest/pull/538) ([Tachi107](https://github.com/Tachi107))
- Fix google death test URL [\#528](https://github.com/doctest/doctest/pull/5\
28) ([emrecil](https://github.com/emrecil))
- Fixing issue with doctestAddTests.cmake [\#527](https://github.com/doctest/\
doctest/pull/527) ([jharmer95](https://github.com/jharmer95))
- Replace gendered pronouns [\#525](https://github.com/doctest/doctest/pull/5\
25) ([mletterle](https://github.com/mletterle))
- Fixed intel compiler parser bug. Should fix \#502 [\#523](https://github.co\
m/doctest/doctest/pull/523) ([BerengerBerthoul](https://github.com/BerengerBe\
rthoul))
- specifying working directory for execute\_process in doctest\_discover\_tes\
ts [\#518](https://github.com/doctest/doctest/pull/518) ([philbucher](https:/\
/github.com/philbucher))
- Fix the logic that depends on optional copy elision optimization\
 [\#516](https://github.com/doctest/doctest/pull/516) ([ivankochin](https://g\
ithub.com/ivankochin))
- Fix reserved identifiers [\#510](https://github.com/doctest/doctest/pull/51\
0) ([ts826848](https://github.com/ts826848))
- Fix build with GCC 11 [\#505](https://github.com/doctest/doctest/pull/505)\
 ([jktjkt](https://github.com/jktjkt))
- minor fixes in MPI docs [\#499](https://github.com/doctest/doctest/pull/499\
) ([philbucher](https://github.com/philbucher))
- Add a minimal bazel config [\#497](https://github.com/doctest/doctest/pull/\
497) ([elliottt](https://github.com/elliottt))
- Handle escaped commas in parsed arguments [\#493](https://github.com/doctes\
t/doctest/pull/493) ([friendlyanon](https://github.com/friendlyanon))
- Fixes Issue 476 . When running executables with "-s" stringifyBinaryE…\
 [\#491](https://github.com/doctest/doctest/pull/491) ([navinp0304](https://g\
ithub.com/navinp0304))
- Set variable to 0 if not set [\#490](https://github.com/doctest/doctest/pul\
l/490) ([shivupa](https://github.com/shivupa))

## [2.4.6](https://github.com/doctest/doctest/tree/2.4.6) (2021-03-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.5...2.4.6)

**Fixed bugs:**

- REQUIRE does not compile when operator== in different namespace\
 [\#443](https://github.com/doctest/doctest/issues/443)
- Using templated operator== inside TEST\_CASE changes deduced types of\
 forwarding references [\#399](https://github.com/doctest/doctest/issues/399)

**Closed issues:**

- CMake doesn't link package [\#483](https://github.com/doctest/doctest/issue\
s/483)
- Assertions are slow when running on Windows with a debugger attached\
 [\#481](https://github.com/doctest/doctest/issues/481)
- Get list of registered test-case names [\#479](https://github.com/doctest/d\
octest/issues/479)
- Can't compile with glibc master \(future 2.34\): SIGSTKSZ is no longer a\
 constant [\#473](https://github.com/doctest/doctest/issues/473)
- How to use Doctest with Github Actions [\#472](https://github.com/doctest/d\
octest/issues/472)
- Link error \(multiple definition...\) in simple project [\#470](https://git\
hub.com/doctest/doctest/issues/470)
- INFO does not compile when used like a function call [\#469](https://github\
.com/doctest/doctest/issues/469)
- std::uncaught\_exceptions is only available if compiling for macOS 10.12 or\
 above [\#466](https://github.com/doctest/doctest/issues/466)
- Compile failure with WinRT on 2.4.5 [\#465](https://github.com/doctest/doct\
est/issues/465)

**Merged pull requests:**

- Improve speed with attached debugger \(Windows\) [\#482](https://github.com\
/doctest/doctest/pull/482) ([pgroke](https://github.com/pgroke))
- Convert to bool by casting, rather than double negation [\#480](https://git\
hub.com/doctest/doctest/pull/480) ([kitegi](https://github.com/kitegi))
- Fix compile error when targeting macOS version earlier and macOS 10.12\
 [\#478](https://github.com/doctest/doctest/pull/478) ([SamWindell](https://g\
ithub.com/SamWindell))
- Fix MSVC linter warning about uninitialized TestSuite variables\
 [\#471](https://github.com/doctest/doctest/pull/471) ([Reedbeta](https://git\
hub.com/Reedbeta))
- REQUIRE does not compile when operator== in different namespace \#443 .\
 [\#468](https://github.com/doctest/doctest/pull/468) ([navinp0304](https://g\
ithub.com/navinp0304))
- Automatically add TEST\_SUITE labels to discovered tests\
 [\#464](https://github.com/doctest/doctest/pull/464) ([shivupa](https://gith\
ub.com/shivupa))

## [2.4.5](https://github.com/doctest/doctest/tree/2.4.5) (2021-02-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.4...2.4.5)

**Closed issues:**

- Stack buffer overflow in `String` constructor [\#460](https://github.com/do\
ctest/doctest/issues/460)
- Suppress warnings from clang-tidy [\#459](https://github.com/doctest/doctes\
t/issues/459)
- compilation issue in MSVC when defining DOCTEST\_THREAD\_LOCAL to static\
 [\#458](https://github.com/doctest/doctest/issues/458)
- nvcc compiler warning; doctest.h\(4138\): warning : expression has no\
 effect [\#454](https://github.com/doctest/doctest/issues/454)
- Use of std::atomic can slow down multithreaded tests [\#452](https://github\
.com/doctest/doctest/issues/452)

**Merged pull requests:**

- Fix compilation on case-sensitive filesystems [\#463](https://github.com/do\
ctest/doctest/pull/463) ([jhasse](https://github.com/jhasse))
- Use function-like macros for prefixless macro names [\#462](https://github.\
com/doctest/doctest/pull/462) ([tbleher](https://github.com/tbleher))
- Implement a multi lane atomic for assertion counts [\#453](https://github.c\
om/doctest/doctest/pull/453) ([martinus](https://github.com/martinus))

## [2.4.4](https://github.com/doctest/doctest/tree/2.4.4) (2020-12-25)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.3...2.4.4)

**Closed issues:**

- 2.4.2: build fails [\#450](https://github.com/doctest/doctest/issues/450)
- combine the same tests for different build configurations from multiple\
 shared objects without having symbol clashes [\#436](https://github.com/doct\
est/doctest/issues/436)
- Issue with GitHub Security Scanning: gmtime [\#423](https://github.com/doct\
est/doctest/issues/423)

## [2.4.3](https://github.com/doctest/doctest/tree/2.4.3) (2020-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.2...2.4.3)

## [2.4.2](https://github.com/doctest/doctest/tree/2.4.2) (2020-12-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.1...2.4.2)

**Closed issues:**

- DOCTEST\_CHECK\_THROWS\_WITH\_AS fails to work with dependant exception\
 type [\#447](https://github.com/doctest/doctest/issues/447)
- MSVC warnings: narrowing conversion, signed/unsigned mismatch\
 [\#446](https://github.com/doctest/doctest/issues/446)
-  log contexts for failures in JUnit reporter [\#441](https://github.com/doc\
test/doctest/issues/441)
- MinGW "'mutex' in namespace 'std' does not name a type" error.\
 [\#438](https://github.com/doctest/doctest/issues/438)
- Test runner thread initialization [\#435](https://github.com/doctest/doctes\
t/issues/435)
- PLATFORM is misdetected on MacOSX Big Sur [\#415](https://github.com/doctes\
t/doctest/issues/415)
- CHECK\_EQ with enum values [\#276](https://github.com/doctest/doctest/issue\
s/276)

**Merged pull requests:**

- Squash MSVC warnings when including ntstatus.h [\#449](https://github.com/d\
octest/doctest/pull/449) ([nickhutchinson](https://github.com/nickhutchinson))
- Add MAIN\_PROJECT check for test option [\#445](https://github.com/doctest/\
doctest/pull/445) ([globberwops](https://github.com/globberwops))
- Suppress clang-analyzer-cplusplus.NewDeleteLeaks [\#444](https://github.com\
/doctest/doctest/pull/444) ([ncihnegn](https://github.com/ncihnegn))
- log contexts for failures in JUnit reporter [\#442](https://github.com/doct\
est/doctest/pull/442) ([runave](https://github.com/runave))
- Fix 32bit support on macOS [\#440](https://github.com/doctest/doctest/pull/\
440) ([AlexanderLanin](https://github.com/AlexanderLanin))

## [2.4.1](https://github.com/doctest/doctest/tree/2.4.1) (2020-11-04)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.0...2.4.1)

**Closed issues:**

- Avoid old C-style casts [\#424](https://github.com/doctest/doctest/issues/4\
24)
- Segfault in unwind [\#422](https://github.com/doctest/doctest/issues/422)
- Inspect exception with gdb [\#421](https://github.com/doctest/doctest/issue\
s/421)
- use-of-uninitialized-value [\#414](https://github.com/doctest/doctest/issue\
s/414)
- Support unit tests with MPI [\#413](https://github.com/doctest/doctest/issu\
es/413)
- Break into debugger support is missing for Linux [\#411](https://github.com\
/doctest/doctest/issues/411)
- What if built doctest as static library instead of header-only\
 [\#408](https://github.com/doctest/doctest/issues/408)
- \[Question\] How to get test case name [\#407](https://github.com/doctest/d\
octest/issues/407)
- create extensions header for optional features requiring more std includes\
 or newer C++ features [\#405](https://github.com/doctest/doctest/issues/405)
- tests/asserts summary lines are misaligned when counts exceed 999999\
 [\#402](https://github.com/doctest/doctest/issues/402)
- Call to 'ne' is ambiguous -- with solution [\#395](https://github.com/docte\
st/doctest/issues/395)
- Intermittent Segfaults [\#391](https://github.com/doctest/doctest/issues/39\
1)
- Junit classname [\#390](https://github.com/doctest/doctest/issues/390)
- Add default printers for enums [\#121](https://github.com/doctest/doctest/i\
ssues/121)

**Merged pull requests:**

- Enum support \(fix for Issue \#121\) [\#429](https://github.com/doctest/doc\
test/pull/429) ([jkriegshauser](https://github.com/jkriegshauser))
- Support Clang 3.4 [\#428](https://github.com/doctest/doctest/pull/428)\
 ([AlexanderLanin](https://github.com/AlexanderLanin))
- Silence remarks on old C-style casts [\#425](https://github.com/doctest/doc\
test/pull/425) ([UnePierre](https://github.com/UnePierre))
- Initial MPI unit tests implementation [\#418](https://github.com/doctest/do\
ctest/pull/418) ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Add JUNIT\_OUTPUT\_DIR option to doctest\_discover\_tests\
 [\#417](https://github.com/doctest/doctest/pull/417) ([Tradias](https://gith\
ub.com/Tradias))
- Add option to build with std headers. [\#416](https://github.com/doctest/do\
ctest/pull/416) ([avostrik](https://github.com/avostrik))
- Port Catch2 break into debugger for Linux. closes \#411 [\#412](https://git\
hub.com/doctest/doctest/pull/412) ([mikezackles](https://github.com/mikezackl\
es))
- summary: align even large values \#402 [\#403](https://github.com/doctest/d\
octest/pull/403) ([dankamongmen](https://github.com/dankamongmen))
- Add breakpoint inline assembly for the Apple Silicon macOS.\
 [\#400](https://github.com/doctest/doctest/pull/400) ([bruvzg](https://githu\
b.com/bruvzg))
- fix google's death test URI in roadmap [\#393](https://github.com/doctest/d\
octest/pull/393) ([ashutosh108](https://github.com/ashutosh108))

## [2.4.0](https://github.com/doctest/doctest/tree/2.4.0) (2020-06-27)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.8...2.4.0)

**Closed issues:**

- Count points based on the number of passed/failed cases?\
 [\#386](https://github.com/doctest/doctest/issues/386)
- How to understand "\#data\_array" in std::string? [\#383](https://github.co\
m/doctest/doctest/issues/383)
- crash: doctest with custom allocator [\#382](https://github.com/doctest/doc\
test/issues/382)
- Feature Request: format PRIVATE/PUBLIC/INTERFACE entries with constant\
 indentation [\#378](https://github.com/doctest/doctest/issues/378)
- JUnit Reporter for Doctest [\#376](https://github.com/doctest/doctest/issue\
s/376)
- Avoiding Feature Bloat [\#374](https://github.com/doctest/doctest/issues/37\
4)
- StringMaker\<wchar\_t\> fail to compile with C++20 enabled \(GCC\)\
 [\#357](https://github.com/doctest/doctest/issues/357)
- doctest\_discover\_tests and FetchContent\_Declare [\#351](https://github.c\
om/doctest/doctest/issues/351)
- Junit reporter [\#318](https://github.com/doctest/doctest/issues/318)

**Merged pull requests:**

- Add a note that doctest can be installed through Homebrew\
 [\#388](https://github.com/doctest/doctest/pull/388) ([cameronwhite](https:/\
/github.com/cameronwhite))
- provide alternative implementation of has\_insertion\_operator for C++20\
 [\#387](https://github.com/doctest/doctest/pull/387) ([lukaszgemborowski](ht\
tps://github.com/lukaszgemborowski))
- Fix issue template to mention doctest [\#380](https://github.com/doctest/do\
ctest/pull/380) ([nyanpasu64](https://github.com/nyanpasu64))

## [2.3.8](https://github.com/doctest/doctest/tree/2.3.8) (2020-05-17)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.7...2.3.8)

**Closed issues:**

- Scenario name can not be passed to -tc to execute single scenario\
 [\#373](https://github.com/doctest/doctest/issues/373)
- Compile Error with CHECK\_NOTHROW when using 2 Template Arguments\
 [\#372](https://github.com/doctest/doctest/issues/372)
- dll example won't compile [\#371](https://github.com/doctest/doctest/issues\
/371)
- Build error with MinGW \(Mingw-w64\) due to missing Windows.h \(with\
 capital W\) [\#370](https://github.com/doctest/doctest/issues/370)
- How to override file\_line\_to\_stream? [\#369](https://github.com/doctest/\
doctest/issues/369)
- Memory sanitizer fails. [\#365](https://github.com/doctest/doctest/issues/3\
65)
- Warning c6319 in Visual Studio [\#359](https://github.com/doctest/doctest/i\
ssues/359)
- Any option to show each test case's execute time? [\#358](https://github.co\
m/doctest/doctest/issues/358)
- doctest in embedded [\#355](https://github.com/doctest/doctest/issues/355)
- Reloading a plugin with test cases leads to a segmentation fault\
 [\#350](https://github.com/doctest/doctest/issues/350)
- Compiling with DOCTEST\_CONFIG\_COLORS\_ANSI fails on Windows\
 [\#348](https://github.com/doctest/doctest/issues/348)
- Can I inherit ConsoleReporter? [\#344](https://github.com/doctest/doctest/i\
ssues/344)
- Noreturn and noexcept defines for Visual Studio 2013 support\
 [\#327](https://github.com/doctest/doctest/issues/327)
- Data-driven testing -- print out the deepest DOCTEST\_SUBCASE\
 [\#215](https://github.com/doctest/doctest/issues/215)
- Print the SUBCASE path when an assert fails in the TEST\_CASE body\
 [\#125](https://github.com/doctest/doctest/issues/125)

**Merged pull requests:**

- fix: possible UB with nullptr increment [\#368](https://github.com/doctest/\
doctest/pull/368) ([oktonion](https://github.com/oktonion))
- Use CMake's CMP0077 policy if available [\#363](https://github.com/doctest/\
doctest/pull/363) ([thelink2012](https://github.com/thelink2012))
- Fix warning c6319 in Visual Studio 16.5 [\#361](https://github.com/doctest/\
doctest/pull/361) ([Cvelth](https://github.com/Cvelth))

## [2.3.7](https://github.com/doctest/doctest/tree/2.3.7) (2020-02-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.6...2.3.7)

**Closed issues:**

- Some of the GitHub CI builds are failing [\#334](https://github.com/doctest\
/doctest/issues/334)
- C++20 removed std::uncaught\_exception [\#333](https://github.com/doctest/d\
octest/issues/333)
- Doctest SEH handlers are called before \_\_except handlers\
 [\#324](https://github.com/doctest/doctest/issues/324)

**Merged pull requests:**

- using std namespace where necessary and timer ticks fix [\#341](https://git\
hub.com/doctest/doctest/pull/341) ([oktonion](https://github.com/oktonion))
- fix std::uncaught\_exceptions [\#340](https://github.com/doctest/doctest/pu\
ll/340) ([cyyever](https://github.com/cyyever))
- Fix GitHub CI and add GitHub build badges [\#336](https://github.com/doctes\
t/doctest/pull/336) ([claremacrae](https://github.com/claremacrae))
- http -\> https [\#331](https://github.com/doctest/doctest/pull/331)\
 ([Coeur](https://github.com/Coeur))
- Switch to catching unhandled exceptions on Windows Closes \#324\
 [\#325](https://github.com/doctest/doctest/pull/325) ([jkriegshauser](https:\
//github.com/jkriegshauser))

## [2.3.6](https://github.com/doctest/doctest/tree/2.3.6) (2019-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.5...2.3.6)

**Closed issues:**

- Link problem w/ BUILD=Release if MESSAGE\(\) with std::string/ostream-opera\
tor is used [\#316](https://github.com/doctest/doctest/issues/316)
- the FAQ about difference to Catch2 is missing tags [\#315](https://github.c\
om/doctest/doctest/issues/315)
- include Windows.h in small caps to silence clang warnings\
 [\#312](https://github.com/doctest/doctest/issues/312)
- Mistake in generator with lgtm error [\#311](https://github.com/doctest/doc\
test/issues/311)
- CMake: cannot install target doctest\_with\_main [\#310](https://github.com\
/doctest/doctest/issues/310)
- \[bug\] INFO\(\) and CAPTURE\(\) cannot compile using MSVC when used with\
 DOCTEST\_CONFIG\_IMPLEMENTATION\_IN\_DLL [\#306](https://github.com/doctest/\
doctest/issues/306)
- Skip subcase [\#304](https://github.com/doctest/doctest/issues/304)
- Does some equivalent features from google test exist here?\
 [\#300](https://github.com/doctest/doctest/issues/300)
- How to use doctest in dll only\(without main.cpp and .exe\)\
 [\#299](https://github.com/doctest/doctest/issues/299)
- Warning: C26812: The enum type 'doctest::assertType::Enum' is unscoped.\
 Prefer 'enum class' over 'enum' \(Enum.3\). [\#298](https://github.com/docte\
st/doctest/issues/298)
- test executable\_dll\_and\_plugin fails on Linux, GCC 8.1.0,\
 -fsanitize=address [\#201](https://github.com/doctest/doctest/issues/201)

**Merged pull requests:**

- Fixed missing ostream include for MacOS when defining DOCTEST\_CONFIG\_…\
 [\#314](https://github.com/doctest/doctest/pull/314) ([NKTomHaygarth](https:\
//github.com/NKTomHaygarth))
- include windows.h in cmall caps to silence clang nonportable warnings\
 [\#313](https://github.com/doctest/doctest/pull/313) ([suoniq](https://githu\
b.com/suoniq))
- Add .editorconfig file. [\#301](https://github.com/doctest/doctest/pull/301\
) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add Github Actions CI [\#285](https://github.com/doctest/doctest/pull/285)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))

## [2.3.5](https://github.com/doctest/doctest/tree/2.3.5) (2019-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.4...2.3.5)

**Closed issues:**

- \[feature request\] Assertion macros for throwing exception of a specific\
 type with message - \<LEVEL\>\_THROWS\_WITH\_AS\(expr, string, ex\_type\)\
 [\#295](https://github.com/doctest/doctest/issues/295)
- CHECK\_THROWS\_AS of non-default constructor wants to call default\
 constructor [\#293](https://github.com/doctest/doctest/issues/293)
- Typos and spelling errors in source, documentation and scripts\
 [\#291](https://github.com/doctest/doctest/issues/291)
- Customize test names / variable substitution [\#284](https://github.com/doc\
test/doctest/issues/284)
- SUBCASE in function not behaving as expected [\#282](https://github.com/doc\
test/doctest/issues/282)
- SUPER\_FAST\_ASSERTS fails to compile CHECK\_MESSAGE [\#281](https://github\
.com/doctest/doctest/issues/281)
- CHECK\_MESSAGE no longer works with DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS\
 [\#280](https://github.com/doctest/doctest/issues/280)
- CAPTURE of structured binding element no longer works [\#279](https://githu\
b.com/doctest/doctest/issues/279)
- Reporter: `test\_case\_end` no longer fired after test case restart\
 [\#278](https://github.com/doctest/doctest/issues/278)
- Add debug break override support [\#277](https://github.com/doctest/doctest\
/issues/277)
- Running tests from within Visual Studio in a static lib project\
 [\#275](https://github.com/doctest/doctest/issues/275)
- Compile-time error when using a raw string literal inside of REQUIRE \(MSVC\
 2017\) [\#274](https://github.com/doctest/doctest/issues/274)
- Give example for having tests in production code [\#252](https://github.com\
/doctest/doctest/issues/252)
- Memory leaks just by including doctest.h [\#205](https://github.com/doctest\
/doctest/issues/205)
- Feature request: print subcase when an exception is thrown inside one\
 [\#136](https://github.com/doctest/doctest/issues/136)

**Merged pull requests:**

- Fix typos and misspellings found by codespell. [\#292](https://github.com/d\
octest/doctest/pull/292) ([warmsocks](https://github.com/warmsocks))
- Document order by issue correctly [\#290](https://github.com/doctest/doctes\
t/pull/290) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Document that -order-by=file is compiler-dependent [\#289](https://github.c\
om/doctest/doctest/pull/289) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add -order-by=name to filter\_2 test [\#288](https://github.com/doctest/doc\
test/pull/288) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add support for compiling with clang-cl [\#286](https://github.com/doctest/\
doctest/pull/286) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- No minimum version limitation of Meson [\#283](https://github.com/doctest/d\
octest/pull/283) ([ydm](https://github.com/ydm))

## [2.3.4](https://github.com/doctest/doctest/tree/2.3.4) (2019-08-12)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.3...2.3.4)

**Closed issues:**

- Remove INFO\(\) limitation for using only lvalues and no rvalues\
 [\#269](https://github.com/doctest/doctest/issues/269)
- Compile error on MAC OS with AppleClang 8.0.0.8000042  [\#266](https://gith\
ub.com/doctest/doctest/issues/266)
- Throwing exception in a mocked method [\#265](https://github.com/doctest/do\
ctest/issues/265)
- Illegal syntax for decorators compiles and runs without warning, but has no\
 effect [\#264](https://github.com/doctest/doctest/issues/264)
- Support conditional expressions in REQUIRE [\#262](https://github.com/docte\
st/doctest/issues/262)
- Register a listener\(reporter\) that always listens [\#257](https://github.\
com/doctest/doctest/issues/257)
- Memory sanitizer complaint [\#255](https://github.com/doctest/doctest/issue\
s/255)
- Windows Clang GNU command line warnings [\#253](https://github.com/doctest/\
doctest/issues/253)
- The build writes into the source directory [\#249](https://github.com/docte\
st/doctest/issues/249)
- How to enable tests inside another exe [\#246](https://github.com/doctest/d\
octest/issues/246)
- Testing multiple headers. [\#244](https://github.com/doctest/doctest/issues\
/244)
- CMakeLists.txt: Needs CMAKE\_CXX\_STANDARD=11 [\#243](https://github.com/do\
ctest/doctest/issues/243)
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest [\#242](https://github.com/doctest/doctest/issues/242)

**Merged pull requests:**

- Improve Listener docs [\#273](https://github.com/doctest/doctest/pull/273)\
 ([claremacrae](https://github.com/claremacrae))
- Rework `INFO` lazy evaluation to use lambdas. [\#270](https://github.com/do\
ctest/doctest/pull/270) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Prevent compile errors with AppleClang compiler [\#268](https://github.com/\
doctest/doctest/pull/268) ([ClausKlein](https://github.com/ClausKlein))
- Revert "fix : including windows.h header cause error" [\#263](https://githu\
b.com/doctest/doctest/pull/263) ([onqtam](https://github.com/onqtam))
- Fix static analyzer URLs [\#259](https://github.com/doctest/doctest/pull/25\
9) ([godbyk](https://github.com/godbyk))
- fix : including windows.h header cause error [\#258](https://github.com/doc\
test/doctest/pull/258) ([rinechran](https://github.com/rinechran))
- only look for C++ compiler with CMake [\#256](https://github.com/doctest/do\
ctest/pull/256) ([zhihaoy](https://github.com/zhihaoy))
- Fix \#253 [\#254](https://github.com/doctest/doctest/pull/254)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- add alias target for doctest for use in build tree [\#247](https://github.c\
om/doctest/doctest/pull/247) ([trondhe](https://github.com/trondhe))

## [2.3.3](https://github.com/doctest/doctest/tree/2.3.3) (2019-06-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.2...2.3.3)

**Closed issues:**

- Build fails with gcc9 because of -Wstrict-overflow=5 which is too high\
 [\#241](https://github.com/doctest/doctest/issues/241)
- doctest given defined with short macro name [\#239](https://github.com/doct\
est/doctest/issues/239)
- Splitting templated test across different translation units\
 [\#238](https://github.com/doctest/doctest/issues/238)
- Compile errors with iosfwd.h and Visual Studio 2019 Preview\
 [\#183](https://github.com/doctest/doctest/issues/183)
- Add CMake test support as catch\_discover\_tests\(\) in Catch2\
 [\#171](https://github.com/doctest/doctest/issues/171)

**Merged pull requests:**

- fix \#239 - use long macro name [\#240](https://github.com/doctest/doctest/\
pull/240) ([m-bd](https://github.com/m-bd))
- Add doctest\_discover\_tests\(\) [\#236](https://github.com/doctest/doctest\
/pull/236) ([reddwarf69](https://github.com/reddwarf69))
- Ignore redundant-decls warning on MinGW [\#235](https://github.com/doctest/\
doctest/pull/235) ([AMS21](https://github.com/AMS21))
- Fixed meson build file dependency declaration [\#233](https://github.com/do\
ctest/doctest/pull/233) ([jormundgand](https://github.com/jormundgand))

## [2.3.2](https://github.com/doctest/doctest/tree/2.3.2) (2019-05-06)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.1...2.3.2)

**Closed issues:**

- scripts/bench/run\_all.py : module 'urllib' has no attribute 'urlretrieve'\
 [\#230](https://github.com/doctest/doctest/issues/230)
- wrong set of tests registered with TEST\_CASE\_TEMPLATE get executed\
 [\#228](https://github.com/doctest/doctest/issues/228)
- Logging not Working for me [\#227](https://github.com/doctest/doctest/issue\
s/227)
- Link test runner executable into dll? [\#226](https://github.com/doctest/do\
ctest/issues/226)
- Linking issue for executables after including doctest in library\
 [\#224](https://github.com/doctest/doctest/issues/224)
- Strange REQUIRE\_THROWS behaviour [\#223](https://github.com/doctest/doctes\
t/issues/223)
- Windows clang-cl -Wunused-variable warning [\#221](https://github.com/docte\
st/doctest/issues/221)
- Update doctest 2.3.1 in bincrafters [\#220](https://github.com/doctest/doct\
est/issues/220)
- make install, on 64 bit, installs cmake files into lib instead of lib64\
 folder  [\#218](https://github.com/doctest/doctest/issues/218)
- TSAN: data race related to hasLoggedCurrentTestStart [\#217](https://github\
.com/doctest/doctest/issues/217)
- REQUIRE\_THROWS\_AS does not support class constructors [\#216](https://git\
hub.com/doctest/doctest/issues/216)
- Build failure on clang 7.0.1 on Fedora 29 [\#214](https://github.com/doctes\
t/doctest/issues/214)
- add example compatible with -\> https://github.com/report-ci/\
 [\#212](https://github.com/doctest/doctest/issues/212)
- No DOCTEST\_WITH\_TESTS? [\#211](https://github.com/doctest/doctest/issues/\
211)

**Merged pull requests:**

- Added meson file, to declare a dependency. [\#232](https://github.com/docte\
st/doctest/pull/232) ([jormundgand](https://github.com/jormundgand))
- Explicitly specify the doctest\_with\_main C++ standard in CMake.\
 [\#231](https://github.com/doctest/doctest/pull/231) ([DaanDeMeyer](https://\
github.com/DaanDeMeyer))
- Remove architecture check from CMake package [\#225](https://github.com/doc\
test/doctest/pull/225) ([mmha](https://github.com/mmha))
- add default install prefix [\#219](https://github.com/doctest/doctest/pull/\
219) ([a4z](https://github.com/a4z))
- \[regression\] Workaround MSVC preprocessor issue triggered by\
 REQUIRE\_THROWS [\#213](https://github.com/doctest/doctest/pull/213)\
 ([zhihaoy](https://github.com/zhihaoy))

## [2.3.1](https://github.com/doctest/doctest/tree/2.3.1) (2019-03-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.0...2.3.1)

**Merged pull requests:**

- Add two very simple examples of using doctest with CMake\
 [\#209](https://github.com/doctest/doctest/pull/209) ([pr0g](https://github.\
com/pr0g))

## [2.3.0](https://github.com/doctest/doctest/tree/2.3.0) (2019-03-23)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.3...2.3.0)

**Closed issues:**

- Compilation with emscripten fails by default because of signal handling\
 [\#207](https://github.com/doctest/doctest/issues/207)
- Compilation fails with cl.exe /Zc:wchar\_t- [\#206](https://github.com/doct\
est/doctest/issues/206)
- Parallel invocation of doctest's own testsuite via CTest fails\
 [\#202](https://github.com/doctest/doctest/issues/202)
-  Get the number of passed/failed tests in the code [\#200](https://github.c\
om/doctest/doctest/issues/200)
- Tests alongside code with multiple executables [\#199](https://github.com/d\
octest/doctest/issues/199)
- Cppcheck 1.86 warnings [\#198](https://github.com/doctest/doctest/issues/19\
8)
- Compiling as Dll maybe is wrong [\#196](https://github.com/doctest/doctest/\
issues/196)
- Forward-declaring identifiers in std:: is UB - consider including some of\
 the cheaper C/C++ stdlib headers [\#194](https://github.com/doctest/doctest/\
issues/194)
- QtCreator + clang warning about operator \<\< precedence\
 [\#191](https://github.com/doctest/doctest/issues/191)
- run test fixture from cli [\#190](https://github.com/doctest/doctest/issues\
/190)
- Installing doctest using cmake and make fails on Ubuntu 16.04 \(C++11 is\
 not used\) [\#189](https://github.com/doctest/doctest/issues/189)
- c++17 requirement for testing private members [\#188](https://github.com/do\
ctest/doctest/issues/188)
- \[feature request\] implement a user-extendable reporter system\
 [\#138](https://github.com/doctest/doctest/issues/138)
- Same test runs multiple times when written in a header and included with\
 different unnormalized paths [\#45](https://github.com/doctest/doctest/issue\
s/45)

**Merged pull requests:**

- Fix unmatched bracket in DOCTEST\_TEST\_CASE\_CLASS [\#204](https://github.\
com/doctest/doctest/pull/204) ([patstew](https://github.com/patstew))
- Template apply [\#203](https://github.com/doctest/doctest/pull/203)\
 ([zhihaoy](https://github.com/zhihaoy))
- No undefined behavior per C++ standard in detecting endianness.\
 [\#195](https://github.com/doctest/doctest/pull/195) ([dimztimz](https://git\
hub.com/dimztimz))
- Fix propagating include directories of target doctest\_with\_main\
 [\#193](https://github.com/doctest/doctest/pull/193) ([dimztimz](https://git\
hub.com/dimztimz))
-  Move single header to a separate folder [\#187](https://github.com/doctest\
/doctest/pull/187) ([dimztimz](https://github.com/dimztimz))
- Fix Clang format to handle C++11 [\#186](https://github.com/doctest/doctest\
/pull/186) ([dimztimz](https://github.com/dimztimz))
- Rename doctest\_impl.h to doctest.cpp for less confusion.\
 [\#185](https://github.com/doctest/doctest/pull/185) ([dimztimz](https://git\
hub.com/dimztimz))

## [2.2.3](https://github.com/doctest/doctest/tree/2.2.3) (2019-02-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.2...2.2.3)

**Closed issues:**

- Calling convention needed on a few functions [\#182](https://github.com/doc\
test/doctest/issues/182)
- Terminal color is not reset when a test fails with some signal\
 [\#122](https://github.com/doctest/doctest/issues/122)

## [2.2.2](https://github.com/doctest/doctest/tree/2.2.2) (2019-01-28)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.1...2.2.2)

**Closed issues:**

- Add way to override getCurrentTicks\(\) implementation [\#178](https://gith\
ub.com/doctest/doctest/issues/178)
- Wrap \<csignal\> include with ifdef [\#177](https://github.com/doctest/doct\
est/issues/177)
- How to stop doctest hijack unhandled exceptions? [\#176](https://github.com\
/doctest/doctest/issues/176)
- Change the include path of the `doctest` CMake interface target so users\
 need to specify the folder as well [\#175](https://github.com/doctest/doctes\
t/issues/175)
- Reduce scope of DebugOutputWindowReporter instance [\#174](https://github.c\
om/doctest/doctest/issues/174)
- Can logging \(INFO\) be used in helper class outside of TEST\_CASE?\
 [\#169](https://github.com/doctest/doctest/issues/169)

**Merged pull requests:**

- Change the include path in examples as \#175 [\#180](https://github.com/doc\
test/doctest/pull/180) ([ncihnegn](https://github.com/ncihnegn))
- Fix CMake include path \#175 [\#179](https://github.com/doctest/doctest/pul\
l/179) ([ncihnegn](https://github.com/ncihnegn))

## [2.2.1](https://github.com/doctest/doctest/tree/2.2.1) (2019-01-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.0...2.2.1)

**Closed issues:**

- the `--no-throw` option shouldn't affect `\<LEVEL\>\_NOTHROW` asserts\
 [\#173](https://github.com/doctest/doctest/issues/173)
- Make doctest work with XCode 6 and 7 \(no support for C++11 thread\_local\)\
 [\#172](https://github.com/doctest/doctest/issues/172)
- Print vector content. [\#170](https://github.com/doctest/doctest/issues/170)
- Conan package [\#103](https://github.com/doctest/doctest/issues/103)
- \[feature request\] Thread-safety for asserts and logging facilities\
 [\#4](https://github.com/doctest/doctest/issues/4)

## [2.2.0](https://github.com/doctest/doctest/tree/2.2.0) (2018-12-05)
[Full Changelog](https://github.com/doctest/doctest/compare/2.1.0...2.2.0)

**Closed issues:**

- remove the FAST\_ versions of the binary asserts \(not a breaking change!\)\
 [\#167](https://github.com/doctest/doctest/issues/167)
- \[compile times\] make the DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS identifier\
 affect normal asserts too [\#166](https://github.com/doctest/doctest/issues/\
166)

## [2.1.0](https://github.com/doctest/doctest/tree/2.1.0) (2018-11-30)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.1...2.1.0)

**Closed issues:**

- doctest::String ctor with non-zero terminated string [\#165](https://github\
.com/doctest/doctest/issues/165)
- thread\_local is not supported on iOS 9.0 [\#164](https://github.com/doctes\
t/doctest/issues/164)
- Compiler error on Android NDK r18 [\#163](https://github.com/doctest/doctes\
t/issues/163)
- \[question\] One setup for multiple tests [\#160](https://github.com/doctes\
t/doctest/issues/160)
- clang unwanted warning in user code [\#156](https://github.com/doctest/doct\
est/issues/156)
- Unsigned integer overflow in fileOrderComparator [\#151](https://github.com\
/doctest/doctest/issues/151)
- ThreadSanitizer: signal-unsafe call inside of a signal [\#147](https://gith\
ub.com/doctest/doctest/issues/147)
- Feature request: check for exception string \(like Catch's\
 CHECK\_THROWS\_WITH\) [\#97](https://github.com/doctest/doctest/issues/97)

**Merged pull requests:**

- Fixed build error under Android NDK [\#162](https://github.com/doctest/doct\
est/pull/162) ([tals](https://github.com/tals))
- Added clang-7 to travis build [\#161](https://github.com/doctest/doctest/pu\
ll/161) ([AMS21](https://github.com/AMS21))
- Remove clang-tidy warnings for static fields created by doctest\
 [\#159](https://github.com/doctest/doctest/pull/159) ([rantasub](https://git\
hub.com/rantasub))
- Make it possible to change the command line options prefix\
 [\#158](https://github.com/doctest/doctest/pull/158) ([tbleher](https://gith\
ub.com/tbleher))

## [2.0.1](https://github.com/doctest/doctest/tree/2.0.1) (2018-10-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.0...2.0.1)

**Closed issues:**

- macro name collision with google log [\#157](https://github.com/doctest/doc\
test/issues/157)
- Add \#define to not run tests by default [\#152](https://github.com/doctest\
/doctest/issues/152)
- REQUIRE\_THROWS\_MESSAGE not checking message correctly [\#150](https://git\
hub.com/doctest/doctest/issues/150)
- Test case passes even though subcase failed [\#149](https://github.com/doct\
est/doctest/issues/149)

**Merged pull requests:**

- Correctly document when a main\(\) entry point will be created\
 [\#155](https://github.com/doctest/doctest/pull/155) ([tbleher](https://gith\
ub.com/tbleher))
- Correct format string for unsigned char [\#154](https://github.com/doctest/\
doctest/pull/154) ([tbleher](https://github.com/tbleher))

## [2.0.0](https://github.com/doctest/doctest/tree/2.0.0) (2018-08-23)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.9...2.0.0)

**Closed issues:**

- MSVC 2017 15.8.1, New Warnings as Errors [\#144](https://github.com/doctest\
/doctest/issues/144)
- Windows clang-cl -Wdeprecated-declarations warnings [\#143](https://github.\
com/doctest/doctest/issues/143)
- Logo Proposal for Doctest [\#141](https://github.com/doctest/doctest/issues\
/141)
- PCH Support [\#140](https://github.com/doctest/doctest/issues/140)
- improve compile times even further [\#139](https://github.com/doctest/docte\
st/issues/139)
- !!! BREAKING CHANGE !!! - Move to C++11 for next version of the library\
 [\#137](https://github.com/doctest/doctest/issues/137)
- getCurrentTicks producing warning on MinGW [\#133](https://github.com/docte\
st/doctest/issues/133)
- \[enhancement\] Add support for "stand-alone assertions".\
 [\#114](https://github.com/doctest/doctest/issues/114)

**Merged pull requests:**

- Suppress compiler warning on MinGW [\#134](https://github.com/doctest/docte\
st/pull/134) ([AMS21](https://github.com/AMS21))

## [1.2.9](https://github.com/doctest/doctest/tree/1.2.9) (2018-05-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.8...1.2.9)

**Closed issues:**

- GCC 8.0 std::uncaught\_exception\(\) is deprecated  [\#130](https://github.\
com/doctest/doctest/issues/130)
- Signal stack size too small on Linux [\#129](https://github.com/doctest/doc\
test/issues/129)
- Support Intel Compiler [\#128](https://github.com/doctest/doctest/issues/12\
8)
- Please add support for MSVC 2005 [\#127](https://github.com/doctest/doctest\
/issues/127)
- scan-build report "Dereference of null pointer" for function wildcmp\
 [\#124](https://github.com/doctest/doctest/issues/124)
- !!! BREAKING CHANGE \(console output only\)  !!! - Emulate the\
 error/warning format emitted by native compiler gcc/clang/msvc when printing\
 test failures in the log [\#123](https://github.com/doctest/doctest/issues/1\
23)
- ARM builds: FTBFS on armhf - error: cast from 'const char\*' to 'const \
 [\#118](https://github.com/doctest/doctest/issues/118)

**Merged pull requests:**

- Exclude Intel from GCC compiler check [\#132](https://github.com/doctest/do\
ctest/pull/132) ([smcallis](https://github.com/smcallis))
- Fix deprecated-declarations warning with GCC-8.0 [\#131](https://github.com\
/doctest/doctest/pull/131) ([AMS21](https://github.com/AMS21))

## [1.2.8](https://github.com/doctest/doctest/tree/1.2.8) (2018-03-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.7...1.2.8)

**Closed issues:**

- ARM64 builds: templated\_test\_cases.cpp test fails [\#119](https://github.\
com/doctest/doctest/issues/119)

## [1.2.7](https://github.com/doctest/doctest/tree/1.2.7) (2018-02-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.6...1.2.7)

**Closed issues:**

- MSan has runtime error: unsigned integer overflow [\#116](https://github.co\
m/doctest/doctest/issues/116)
- clang-tidy warning about cert-err58-cpp [\#115](https://github.com/doctest/\
doctest/issues/115)
- Linking errors [\#113](https://github.com/doctest/doctest/issues/113)
- inlining function defs [\#111](https://github.com/doctest/doctest/issues/11\
1)
- Nullptr issue. [\#110](https://github.com/doctest/doctest/issues/110)
- MemorySanitizer: use-of-uninitialized-value [\#109](https://github.com/doct\
est/doctest/issues/109)
- Potential memory leak through scan-build [\#108](https://github.com/doctest\
/doctest/issues/108)
- Warnings raised to error with latest MSVC version [\#107](https://github.co\
m/doctest/doctest/issues/107)
- New solution for tests in static libraries ! \(MSVC\) [\#106](https://githu\
b.com/doctest/doctest/issues/106)
- Command line flags do not work after code formatter/beautifier\
 [\#104](https://github.com/doctest/doctest/issues/104)
- Cppcheck 1.81 warnings [\#102](https://github.com/doctest/doctest/issues/10\
2)

**Merged pull requests:**

- Fix macros WIN32\_LEAN\_AND\_MEAN typo [\#112](https://github.com/doctest/d\
octest/pull/112) ([vladimirgamalyan](https://github.com/vladimirgamalyan))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set \(\#99\)\
 [\#100](https://github.com/doctest/doctest/pull/100) ([onqtam](https://githu\
b.com/onqtam))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set\
 [\#99](https://github.com/doctest/doctest/pull/99) ([OdyX](https://github.co\
m/OdyX))

## [1.2.6](https://github.com/doctest/doctest/tree/1.2.6) (2017-10-29)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.5...1.2.6)

**Closed issues:**

- \[bug\] writing an exception translator in a header file results in it\
 being registered multiple times which is suboptimal [\#98](https://github.co\
m/doctest/doctest/issues/98)
- Warnings when using something more than /W4 for Visual Studio\
 [\#95](https://github.com/doctest/doctest/issues/95)

**Merged pull requests:**

- Added an option to not install Doctest in the CMake scripts\
 [\#96](https://github.com/doctest/doctest/pull/96) ([nm17](https://github.co\
m/nm17))
- Adding a defensive check against a null pointer for the current test suite\
 [\#94](https://github.com/doctest/doctest/pull/94) ([Lectem](https://github.\
com/Lectem))
- Remove incomplete copy ctor [\#93](https://github.com/doctest/doctest/pull/\
93) ([McMartin](https://github.com/McMartin))

## [1.2.5](https://github.com/doctest/doctest/tree/1.2.5) (2017-10-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.4...1.2.5)

**Closed issues:**

- Xcode 9 / clang - unknown warning group [\#92](https://github.com/doctest/d\
octest/issues/92)

## [1.2.4](https://github.com/doctest/doctest/tree/1.2.4) (2017-09-20)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.3...1.2.4)

**Closed issues:**

- \[bug\] test cases can end up in the wrong test suite [\#91](https://github\
.com/doctest/doctest/issues/91)

## [1.2.3](https://github.com/doctest/doctest/tree/1.2.3) (2017-09-11)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.2...1.2.3)

**Closed issues:**

- \[bug\] Defining a variable T inside a test with DOCTEST\_CONFIG\_DISABLE\
 defined does not compile [\#90](https://github.com/doctest/doctest/issues/90)
- \[support\] Using `DOCTEST\_CONFIG\_NO\_SHORT\_MACRO\_NAMES` does not\
 compile using g++ 6.3.0 [\#89](https://github.com/doctest/doctest/issues/89)
- \[question\] Why are SUBCASEs executed only once when within a function\
 called multiple times? [\#88](https://github.com/doctest/doctest/issues/88)

## [1.2.2](https://github.com/doctest/doctest/tree/1.2.2) (2017-09-05)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.1...1.2.2)

**Closed issues:**

- \[question\] Differences between doctest and googletest \(gtest\) for\
 uninitialised local variables in test cases [\#86](https://github.com/doctes\
t/doctest/issues/86)
- !!! BREAKING CHANGE !!! - remove the custom implementation of\
 std::is\_constructible and optionally use the \<type\_traits\> header\
 because of infinite template recursion issues with GCC [\#85](https://github\
.com/doctest/doctest/issues/85)
- Static Analysis results of doctest [\#83](https://github.com/doctest/doctes\
t/issues/83)
- !!! BREAKING CHANGE !!! - catch exceptions as const reference in\
 \<LEVEL\>\_THROWS\_AS [\#81](https://github.com/doctest/doctest/issues/81)
- doctest implementation as static library [\#77](https://github.com/doctest/\
doctest/issues/77)
- Provide some easy way to compare structs containing float/doubles\
 [\#73](https://github.com/doctest/doctest/issues/73)

**Merged pull requests:**

- Add support for templated scenarios [\#87](https://github.com/doctest/docte\
st/pull/87) ([Lectem](https://github.com/Lectem))
- Prefer if\(MSVC\) in CMakeLists.txt. [\#84](https://github.com/doctest/doct\
est/pull/84) ([martinmoene](https://github.com/martinmoene))
- catch throw\_as exception as const reference [\#82](https://github.com/doct\
est/doctest/pull/82) ([a4z](https://github.com/a4z))
- Added doctest\_with\_main static lib [\#78](https://github.com/doctest/doct\
est/pull/78) ([ymadzhunkov](https://github.com/ymadzhunkov))

## [1.2.1](https://github.com/doctest/doctest/tree/1.2.1) (2017-05-24)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.0...1.2.1)

**Closed issues:**

- Compile error under MSVC 2015/2017 if \<thread\> included in same file as\
 "doctest.h" [\#72](https://github.com/doctest/doctest/issues/72)

**Merged pull requests:**

- docs: TEST\_CASE\_METHOD -\> TEST\_CASE\_FIXTURE [\#71](https://github.com/\
doctest/doctest/pull/71) ([akrzemi1](https://github.com/akrzemi1))

## [1.2.0](https://github.com/doctest/doctest/tree/1.2.0) (2017-05-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.4...1.2.0)

**Closed issues:**

- Further improvements on compile time - disable inlining of functions used\
 in asserts [\#70](https://github.com/doctest/doctest/issues/70)
- Improve runtime performance - lazy stringification, more inlining, no\
 statics on the hot path, move semantics for classes such as doctest::String\
 which are used by value, etc. [\#69](https://github.com/doctest/doctest/issu\
es/69)
- Add option to show duration of test case execution and add a\
 timeout\(seconds\) decorator - marking them as failed if they exceed it\
 [\#68](https://github.com/doctest/doctest/issues/68)
- Add support for test case decorators - label, description, skip, may\_fail,\
 should\_fail, expected\_failures, etc. [\#67](https://github.com/doctest/doc\
test/issues/67)
- Integrate static analysis into the CI builds [\#66](https://github.com/doct\
est/doctest/issues/66)
- Print the test suite name on test case failure [\#65](https://github.com/do\
ctest/doctest/issues/65)
- Add signal handlers to handle crashes \(and use SEH under Windows\) -\
 report which test case failed [\#63](https://github.com/doctest/doctest/issu\
es/63)
- Add support to Approx for strong typedefs of double [\#62](https://github.c\
om/doctest/doctest/issues/62)
- \[question\] Is there a way to always have 0 as the exit code regardless of\
 test results? [\#59](https://github.com/doctest/doctest/issues/59)
- Add support for un-parenthesized expressions containing commas in asserts\
 [\#58](https://github.com/doctest/doctest/issues/58)
- Add ability to filter subcases with filters [\#57](https://github.com/docte\
st/doctest/issues/57)
- Add option to query if code is being ran inside of a test -\
 doctest::is\_running\_in\_test [\#56](https://github.com/doctest/doctest/iss\
ues/56)
- Ability for a binary \(executable / shared object\) to use the test runner\
 implementation of another binary - with exported symbols - so tests end up\
 in a single registry [\#55](https://github.com/doctest/doctest/issues/55)
- How to force the use of colors in the terminal? [\#54](https://github.com/d\
octest/doctest/issues/54)
- How can I mix production code with the Unit Tests? [\#53](https://github.co\
m/doctest/doctest/issues/53)
- add \<= and \>= operators to Approx \(and also maybe \< and \>\)\
 [\#52](https://github.com/doctest/doctest/issues/52)
- Add ability to capture variables from test scope [\#48](https://github.com/\
doctest/doctest/issues/48)
- !!! BREAKING CHANGE !!! - Make TEST\_SUITE work with blocks and add\
 TEST\_SUITE\_BEGIN [\#41](https://github.com/doctest/doctest/issues/41)
- Add option to print which test suites/cases are run [\#39](https://github.c\
om/doctest/doctest/issues/39)
- Add support for templated test cases - parameterized by type\
 [\#38](https://github.com/doctest/doctest/issues/38)
- Add custom failure messages with lazy stringification [\#23](https://github\
.com/doctest/doctest/issues/23)
- Add an exception translation mechanism + the ability for users to extend it\
 with custom exception types [\#12](https://github.com/doctest/doctest/issues\
/12)
- Add API for reporting failures [\#9](https://github.com/doctest/doctest/iss\
ues/9)

**Merged pull requests:**

- Update doctest to work with ARM DS5-compiler [\#64](https://github.com/doct\
est/doctest/pull/64) ([tomasnilefrost](https://github.com/tomasnilefrost))

## [1.1.4](https://github.com/doctest/doctest/tree/1.1.4) (2017-02-18)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.3...1.1.4)

**Closed issues:**

- Add option --force-colors - for when a tty is not detected for stdout\
 [\#51](https://github.com/doctest/doctest/issues/51)
- Issue with using lambdas in tests in gcc [\#49](https://github.com/doctest/\
doctest/issues/49)
- Add the include file to releases [\#47](https://github.com/doctest/doctest/\
issues/47)

**Merged pull requests:**

- Add translation of std::exception for exceptions that terminate a test case\
 [\#46](https://github.com/doctest/doctest/pull/46) ([eliaskosunen](https://g\
ithub.com/eliaskosunen))

## [1.1.3](https://github.com/doctest/doctest/tree/1.1.3) (2016-11-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.2...1.1.3)

**Closed issues:**

- Exception handlers cause warnings when exceptions are disabled\
 [\#44](https://github.com/doctest/doctest/issues/44)

## [1.1.2](https://github.com/doctest/doctest/tree/1.1.2) (2016-10-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.1...1.1.2)

**Closed issues:**

- clang warnings when using C++11 or newer [\#42](https://github.com/doctest/\
doctest/issues/42)
- \[support\] identical names for test suites? [\#40](https://github.com/doct\
est/doctest/issues/40)

## [1.1.1](https://github.com/doctest/doctest/tree/1.1.1) (2016-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.0...1.1.1)

## [1.1.0](https://github.com/doctest/doctest/tree/1.1.0) (2016-09-21)
[Full Changelog](https://github.com/doctest/doctest/compare/1.0.0...1.1.0)

**Closed issues:**

- char\* comparison uses the contents, not the pointer [\#36](https://github.\
com/doctest/doctest/issues/36)
- add configuration preprocessor identifier for passing by value in\
 assertions instead of by reference [\#35](https://github.com/doctest/doctest\
/issues/35)
- restrict expressions in assertion macros to binary comparisons at most with\
 a static assert [\#34](https://github.com/doctest/doctest/issues/34)
- Add clearFilters\(\) to doctest::Context [\#33](https://github.com/doctest/\
doctest/issues/33)
- A way to refrain from polluting “\#define” space for users of tested code?\
 [\#32](https://github.com/doctest/doctest/issues/32)
- drop VC++6 support [\#31](https://github.com/doctest/doctest/issues/31)
- False positive test [\#30](https://github.com/doctest/doctest/issues/30)
- Turn off coloring after tests are finished? [\#28](https://github.com/docte\
st/doctest/issues/28)
- C++11 nullptr [\#27](https://github.com/doctest/doctest/issues/27)
- Only one SUBCASE per line is executed [\#25](https://github.com/doctest/doc\
test/issues/25)
- creative formatting of chars [\#24](https://github.com/doctest/doctest/issu\
es/24)
- DOCTEST\_BREAK\_INTO\_DEBUGGER undefined under OSX [\#22](https://github.co\
m/doctest/doctest/issues/22)
- Tests inside a static library [\#21](https://github.com/doctest/doctest/iss\
ues/21)
- Add example how to remove doctest options from the command line for the\
 program after the tests run [\#20](https://github.com/doctest/doctest/issues\
/20)
- Single-letter options active even without leading '-' \(dash\)\
 [\#19](https://github.com/doctest/doctest/issues/19)
- pointer stringification not working for compilers different from MSVC\
 [\#18](https://github.com/doctest/doctest/issues/18)
- Tests that accompany code run and produce output at default\
 [\#17](https://github.com/doctest/doctest/issues/17)
- GCC 5.3.1 Compiler warning: sign compare [\#16](https://github.com/doctest/\
doctest/issues/16)
- Slower than Catch in realistic test cases [\#14](https://github.com/doctest\
/doctest/issues/14)
- Rename doctest::detail::Result res; in DOCTEST\_ASSERT\_IMPLEMENT\
 [\#10](https://github.com/doctest/doctest/issues/10)
- No red when all tests pass [\#7](https://github.com/doctest/doctest/issues/\
7)
- UNIX line feedings on GitHub please [\#6](https://github.com/doctest/doctes\
t/issues/6)

**Merged pull requests:**

- don't show green when tests fail [\#26](https://github.com/doctest/doctest/\
pull/26) ([ferkulat](https://github.com/ferkulat))
- Include "program code" in example [\#15](https://github.com/doctest/doctest\
/pull/15) ([martinmoene](https://github.com/martinmoene))

## [1.0.0](https://github.com/doctest/doctest/tree/1.0.0) (2016-05-22)
**Merged pull requests:**

- Reduce the header size for test users [\#3](https://github.com/doctest/doct\
est/pull/3) ([zah](https://github.com/zah))
- Add a Gitter chat badge to README.md [\#1](https://github.com/doctest/docte\
st/pull/1) ([gitter-badger](https://github.com/gitter-badger))



\* *This Change Log was automatically generated by [github_changelog_generato\
r](https://github.com/skywinder/Github-Changelog-Generator)*
\
changes-type: text/markdown;variant=GFM
url: https://github.com/onqtam/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++11 | c++14 | c++17 | c++20
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

test.target = $cxx.target

\
location: doctest/doctest-2.4.7.tar.gz
sha256sum: 871d7e145a22f8005957609a6f19d8f2b8dc690f90d0d26b751e6fde6d1dbc45
:
name: doctest
version: 2.4.9
summary: The fastest feature-rich C++11/14/17/20 single-header testing\
 framework for unit tests and TDD
license: MIT
description:
\
<p align="center"><img src="scripts/data/logo/logo_1.svg"></p>

<b>
<table>
    <tr>
        <td>
            master branch
        </td>
        <td>
            <a href="https://github.com/doctest/doctest/actions?query=branch%\
3Amaster"><img src="https://github.com/doctest/doctest/workflows/CI/badge.svg\
?branch=master"></a>
        </td>
        <td>
            <a href="https://codecov.io/gh/doctest/doctest/branch/master"><im\
g src="https://codecov.io/gh/doctest/doctest/branch/master/graph/badge.svg?to\
ken=fAdZl67WN7"/></a>
        </td>
    </tr>
    <tr>
        <td>
            dev branch
        </td>
        <td>
            <a href="https://github.com/doctest/doctest/actions?query=branch%\
3Adev"><img src="https://github.com/doctest/doctest/workflows/CI/badge.svg?br\
anch=dev"></a>
        </td>
        <td>
            <a href="https://codecov.io/gh/doctest/doctest/branch/dev"><img\
 src="https://codecov.io/gh/doctest/doctest/branch/dev/graph/badge.svg?token=\
fAdZl67WN7"/></a>
        </td>
    </tr>
</table>
</b>

**doctest** is a new C++ testing framework but is by far the fastest both in\
 compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and\
 runtime compared to other feature-rich alternatives. It brings the ability\
 of compiled languages such as [**D**](https://dlang.org/spec/unittest.html)\
 / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.h\
tml) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests\
 written directly in the production code thanks to a fast, transparent and\
 flexible test runner with a clean interface.

[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20-blue.svg)](http\
s://en.wikipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opens\
ource.org/licenses/MIT)
[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](http\
s://raw.githubusercontent.com/doctest/doctest/master/doctest/doctest.h)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/\
503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/doctest/doc\
test.svg)](https://lgtm.com/projects/g/doctest/doctest/context:cpp)
[![Chat - Discord](https://img.shields.io/badge/chat-Discord-blue.svg)](https\
://discord.gg/PGXn9YmyF3)
[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](h\
ttps://godbolt.org/z/4s389Kbfs)
<!--
[![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://iso\
cpp.org/)
[![documentation](https://img.shields.io/badge/documentation%20%20-online-blu\
e.svg)](https://github.com/doctest/doctest/blob/master/doc/markdown/readme.md\
#reference)
-->

[<img src="https://c5.patreon.com/external/logo/become_a_patron_button.png"\
 align="right">](https://www.patreon.com/onqtam)

The framework is and will stay free but needs your support to sustain its\
 development. There are lots of <a href="https://github.com/doctest/doctest/i\
ssues/600"><b>new features</b></a> and maintenance to do. If you work for a\
 company using **doctest** or have the means to do so, please consider\
 financial support. Monthly donations via Patreon and one-offs via PayPal.

[<img src="https://raw.githubusercontent.com/aha999/DonateButtons/master/payp\
al-donate-icon-7.png" width=100 align="right">](https://www.paypal.me/onqtam/\
10)

A complete example with a self-registering test that compiles to an\
 executable looks like this:

![cover-example](scripts/data/using_doctest_888px_wide.gif)

There are many C++ testing frameworks - [Catch](https://github.com/catchorg/C\
atch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/\
index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp),\
 [cpputest](https://github.com/cpputest/cpputest), [googletest](https://githu\
b.com/google/googletest) and [others](https://en.wikipedia.org/wiki/List_of_u\
nit_testing_frameworks#C.2B.2B).

The **key** differences between it and other testing frameworks are that it\
 is light and unintrusive:
- Ultra light on compile times both in terms of [**including the\
 header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and\
 writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-ass\
ertion-macro)
- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmak\
e/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**
- Can remove **everything** testing-related from the binary with the\
 [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest_con\
fig_disable) identifier
- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts\
 can be used from multiple threads spawned from a single test case -\
 [**example**](examples/all_features/concurrency.cpp)
- asserts can be used [**outside of a testing context**](doc/markdown/asserti\
ons.md#using-asserts-out-of-a-testing-context) - as a general purpose assert\
 library - [**example**](examples/all_features/asserts_used_outside_of_tests.\
cpp)
- No global namespace pollution (everything is in ```doctest::```) & doesn't\
 drag **any** headers with it
- [**Portable**](doc/markdown/features.md#extremely-portable) C++11 (use tag\
 [**1.2.9**](https://github.com/doctest/doctest/tree/1.2.9) for C++98) with\
 over 100 different CI builds (static analysis, sanitizers..)
- binaries (exe/dll) can use the test runner of another binary => tests in a\
 single registry - [**example**](examples/executable_dll_and_plugin/)

![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)

This allows the framework to be used in more ways than any other - tests can\
 be written directly in the production code!

*Tests can be a form of documentation and should be able to reside near the\
 production code which they test.*

- This makes the barrier for writing tests **much lower** - you don't have\
 to: **1)** make a separate source file **2)** include a bunch of stuff in it\
 **3)** add it to the build system and **4)** add it to source control - You\
 can just write the tests for a class or a piece of functionality at the\
 bottom of its source file - or even header file!
- Tests in the production code can be thought of as documentation/up-to-date\
 comments - showcasing the APIs
- Testing internals that are not exposed through the public API and headers\
 is no longer a mind-bending exercise
- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_dev\
elopment) in C++ has never been easier!

The framework can be used just like any other without mixing production code\
 and tests - check out the [**features**](doc/markdown/features.md).

**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2)\
 and some parts of the code have been taken directly - check out [**the\
 differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).

[This table](https://github.com/martinmoene/catch-lest-other-comparison)\
 compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) /\
 [**lest**](https://github.com/martinmoene/lest) which are all very similar.

Checkout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/m\
ix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-\
modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=\
eH1CxEC29l8) to get a better understanding of how the framework works and\
 read about how to use it in [**the JetBrains article**](https://blog.jetbrai\
ns.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique\
 aspects of the framework! On a short description on how to use the framework\
 along production code you could refer to [**this GitHub issue**](https://git\
hub.com/doctest/doctest/issues/252). There is also an [**older\
 article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the\
 february edition of ACCU Overload 2017.

[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-tal\
k-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)

Documentation
-------------

Project:

- [Features and design goals](doc/markdown/features.md) - the complete list\
 of features
- [Community driven roadmap](https://github.com/doctest/doctest/issues/600) -\
 upcoming features
- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime\
 supremacy
- [Contributing](CONTRIBUTING.md) - how to make a proper pull request
- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs

Usage:

- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before\
 the other parts of the documentation
- [Assertion macros](doc/markdown/assertions.md)
- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)
- [Parameterized test cases](doc/markdown/parameterized-tests.md)
- [Command line](doc/markdown/commandline.md)
- [Logging macros](doc/markdown/logging.md)
- [```main()``` entry point](doc/markdown/main.md)
- [Configuration](doc/markdown/configuration.md)
- [String conversions](doc/markdown/stringification.md)
- [Reporters](doc/markdown/reporters.md)
- [Extensions](doc/markdown/extensions.md)
- [FAQ](doc/markdown/faq.md)
- [Build systems](doc/markdown/build-systems.md)
- [Examples](examples)

Contributing
------------

[<img src="https://c5.patreon.com/external/logo/become_a_patron_button.png"\
 align="right">](https://www.patreon.com/onqtam)

Support the development of the project with donations! There is a list of\
 planned features which are all important and big - see the\
 [**roadmap**](https://github.com/doctest/doctest/issues/600).

[<img src="https://raw.githubusercontent.com/aha999/DonateButtons/master/payp\
al-donate-icon-7.png" width=100 align="right">](https://www.paypal.me/onqtam/\
10)

If you work for a company using **doctest** or have the means to do so,\
 please consider financial support.

Contributions in the form of issues and pull requests are welcome as well -\
 check out the [**Contributing**](CONTRIBUTING.md) page.

Stargazers over time
------------

[![Stargazers over time](https://starchart.cc/doctest/doctest.svg)](https://s\
tarchart.cc/doctest/doctest)

Logo
------------

The [logo](scripts/data/logo) is licensed under a Creative Commons\
 Attribution 4.0 International License. Copyright &copy; 2019\
 [area55git](https://github.com/area55git) &nbsp; [![License: CC BY\
 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons\
.org/licenses/by/4.0/)

<p align="center"><img src="scripts/data/logo/icon_2.svg"></p>

\
description-type: text/markdown;variant=GFM
changes:
\
# Change Log

## [v2.4.9](https://github.com/doctest/doctest/tree/v2.4.9) (2022-06-18)
[Full Changelog](https://github.com/doctest/doctest/compare/v2.4.8...v2.4.9)

**Closed issues:**
- Visual Studio's Test Explorer and Resharper C\+\+'s Unit Test Explorer\
 don't see Doctest's tests \#661 ([KulaGGin](https://github.com/KulaGGin))
- How to get detailed information about testcases failing due to thrown\
 exceptions? \#660 ([NiklasKappel](https://github.com/NiklasKappel))
- Add clang\-tidy integration and fix all warnings \#659 ([Saalvage](https://\
github.com/Saalvage))
- Avoid static init problem in insufficient\_procs\(\) \(MPI\) \#657\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Use MPI\_Isend in MpiConsoleReporter to avoid deadlock \#656\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Deadlock in MpiConsoleReporter when root rank fails assert \#655\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Cleanup of DOCTEST\_DO\_BINARY\_EXPRESSION\_COMPARISON\. Fixes \#651 \#652\
 ([iboB](https://github.com/iboB))
- Comparison with implicit cast from non\-const value can't be decomposed\
 \#651 ([iboB](https://github.com/iboB))
- Local structured bindings cannot be used in CHECK macros \(since 2\.4\.8\)\
 \#647 ([pragmaxwell](https://github.com/pragmaxwell))
- Add tests for DOCTEST\_CONFIG\_USE\_STD\_HEADERS \#643 ([Saalvage](https://\
github.com/Saalvage))
- Stringification amendments \#642 ([Saalvage](https://github.com/Saalvage))
- Clean up defines a bit; Implement \#439 \#641 ([Saalvage](https://github.co\
m/Saalvage))
- Fix \#508 \#640 ([Saalvage](https://github.com/Saalvage))
- Fix \#508 \#639 ([Saalvage](https://github.com/Saalvage))
- New doctest version gives me an error: reference to local binding '\.\.\.'\
 declared in enclosing function 'DOCTEST\_ANON\_FUNC\_16' \#638\
 ([a4z](https://github.com/a4z))
- The tutorial example does not work \(linker errors\) with clang 10 \#637\
 ([sixcy](https://github.com/sixcy))
- Implementing \`DOCTEST\_ASSERT\_IMPLEMENT\_1\` as lambda prevents testing\
 structured bindings \#636 ([ChrisThrasher](https://github.com/ChrisThrasher))
- re\-re\-remove overly restrictive minimum version of meson \#635\
 ([eli-schwartz](https://github.com/eli-schwartz))
- Fix move\-only types failing to decompose correctly \#634\
 ([Saalvage](https://github.com/Saalvage))
- Weird compilation error when using CHECK\_THROWS/CHECK\_THROWS\_AS on\
 Visual Studio 2019 with no exceptions \#633 ([yeputons](https://github.com/y\
eputons))
- Error triggered by comparing typeid with new doctest 2\.4\.8 \#632\
 ([JazzSuite](https://github.com/JazzSuite))
- Improve Mac PowerPC support \#631 ([ryandesign](https://github.com/ryandesi\
gn))
- issue introduced in 2\.4\.7 \#630 ([onqtam](https://github.com/onqtam))
- Decompose expressions containing the spaceship operator \#629\
 ([falbrechtskirchinger](https://github.com/falbrechtskirchinger))
- added nolint for cert\-err58 \#628 ([serguei-k](https://github.com/serguei-\
k))
- Fix properties not being passed in doctest\_discover\_tests \#626\
 ([quantumsteve](https://github.com/quantumsteve))
- Config no multithreading \#625 ([Saalvage](https://github.com/Saalvage))
- wasm\*\-support? \#624 ([FrozenSource](https://github.com/FrozenSource))
- Fix MPI extension to work with no parallel tests \#623 ([BerengerBerthoul](\
https://github.com/BerengerBerthoul))
- string comparison leads to gotting stuck \#622 ([laoshaw](https://github.co\
m/laoshaw))
- doctest\_discover\_tests no longer sets ENVIRONMENT variables for\
 discovered tests\.  \#621 ([quantumsteve](https://github.com/quantumsteve))
- Add contains option to checks\. \#620 ([MFraters](https://github.com/MFrate\
rs))
- Feature request: CHECK\_THROWS\_WITH with contains option \#619\
 ([MFraters](https://github.com/MFraters))
- Add alias target for doctest\_with\_main \#617 ([jessestricker](https://git\
hub.com/jessestricker))
- Allow escaping backslash with backslash in filters \(\#614\) \#616\
 ([yeputons](https://github.com/yeputons))
- Fix operator<< \#615 ([Saalvage](https://github.com/Saalvage))
- Correct minor typos \#613 ([utilForever](https://github.com/utilForever))
- Fix MPI extension to work if launched without mpirun/mpiexec \#612\
 ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Fix mpi subcase \#611 ([BerengerBerthoul](https://github.com/BerengerBertho\
ul))
- compilation error with custom operator== defined in namespace \#610\
 ([zvyagin1](https://github.com/zvyagin1))
- Regression: Clang\-Tidy warnings in 2\.4\.8 \#607 ([nlohmann](https://githu\
b.com/nlohmann))
- Internal compiler error with GCC 7\.5 \#606 ([foonathan](https://github.com\
/foonathan))
- tagging convension has changed? \#605 ([kloczek](https://github.com/kloczek\
))
- Update Doctest in vcpkg to 2\.4\.8 \#604 ([gc435](https://github.com/gc435))
- Add IsNaN operator\! \#603 ([Saalvage](https://github.com/Saalvage))
- Ignored generated files from CMake, OSX, Xcode, and VS \#602\
 ([LeonBrands](https://github.com/LeonBrands))
- Move roadmap and wipe it clean \#601 ([Saalvage](https://github.com/Saalvag\
e))
- removes a duplicate word 'most' in configuration\.md \#599\
 ([krishnakumarg1984](https://github.com/krishnakumarg1984))
- Fix subcase reentry \#598 ([Saalvage](https://github.com/Saalvage))
- Loop\-generated \`SUBCASE\`s are not run \#597 ([yeputons](https://github.c\
om/yeputons))
- Void \#596 ([Saalvage](https://github.com/Saalvage))
- Add flag that forces custom stringification methods to be provided \#595\
 ([Saalvage](https://github.com/Saalvage))
- Fix coverage \#594 ([Saalvage](https://github.com/Saalvage))
- TEST CODECOV PR BEHAVIOR \#593 ([Saalvage](https://github.com/Saalvage))
- Ignore CMake and MacOS generated files \#592 ([LeonBrands](https://github.c\
om/LeonBrands))
- Feature request: option to disable fallback "\{?\}" stringifier \#591\
 ([YarikTH](https://github.com/YarikTH))
- Add tests for default stringification result of doctest \#590\
 ([YarikTH](https://github.com/YarikTH))
- Feature config ret vals \#589 ([Saalvage](https://github.com/Saalvage))
- DOCTEST\_CONFIG\_ASSERT\_RETURN\_VALUES \#588 ([Saalvage](https://github.co\
m/Saalvage))
- Support pretty printing of container based on heuristics \#587\
 ([YarikTH](https://github.com/YarikTH))
- Refactor stringification \#585 ([Saalvage](https://github.com/Saalvage))
- Feature: Better NaN \#584 ([Saalvage](https://github.com/Saalvage))
- Nan check \#582 ([Saalvage](https://github.com/Saalvage))
- Update roadmap following maintainer change \#581 ([eyalroz](https://github.\
com/eyalroz))
- Regression between 2\.4\.6 and 2\.4\.7 \#571 ([YarikTH](https://github.com/\
YarikTH))
- build failure with gcc\-11\.2 when using user declared operator<<\(ostream,\
 vector\) \#551 ([nlitsme](https://github.com/nlitsme))
- variable maximum is assigned 6206517616395625 instead of the actual return\
 value which is 5\.0 \#530 ([kk723](https://github.com/kk723))
- toString can call existing user\-defined toString through ADL incorrectly\
 \#508 ([zeux](https://github.com/zeux))
- \[Coverity\] Concurrent data access violations \(MISSING\_LOCK\)\
 doctest\.h: 5838 in doctest::<unnamed>::ConsoleReporter::test\_case\_start\(\
const doctest::TestCaseData &\)\(\) \#486 ([jiridanek](https://github.com/jir\
idanek))
- Provide an error message if REQUIRE \(or other disabled assertion macros\)\
 are used when exceptions are disabled \#439 ([alexeyr](https://github.com/al\
exeyr))
- Conflict with templated toString function \#420 ([TillHeinzel](https://gith\
ub.com/TillHeinzel))
- \-tc does not work with comma in names \#398 ([martinus](https://github.com\
/martinus))
- Compile error on MSVC2019 with any macro which involves stringification of\
 std::string \(asserts, INFO, etc\.\) when <ostream> isn't included \#381\
 ([nyanpasu64](https://github.com/nyanpasu64))
- the dll example doesn't run correctly on Windows with MinGW \#375\
 ([GregKon](https://github.com/GregKon))
- add basic conan recipe \#354 ([trondhe](https://github.com/trondhe))
- CHECK\_MESSAGE\(\) should accept temporaries \#337 ([eyalroz](https://githu\
b.com/eyalroz))
- stringify of cstring literals doesn't work out of the box with separate\
 test\_driver\.cpp \#329 ([teichert](https://github.com/teichert))
- warning : function declared 'noreturn' should not return\
 \[\-Winvalid\-noreturn\] \#307 ([Vexthil](https://github.com/Vexthil))
- Test cases containing a comma cannot be run individually \#297\
 ([Tradias](https://github.com/Tradias))
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest \#242 ([BrunaoW](https://github.com/BrunaoW))
- The \`CHECK\` macro conflicts with Boost\.Beast \(and surely others\) \#234\
 ([reddwarf69](https://github.com/reddwarf69))
- Feature request: check if a \`float\` or \`double\` is NaN \#105\
 ([iamthad](https://github.com/iamthad))

**Merged pull requests:**
- Add clang\-tidy integration and fix all warnings \#659 ([Saalvage](https://\
github.com/Saalvage))
- Avoid static init problem in insufficient\_procs\(\) \(MPI\) \#657\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Use MPI\_Isend in MpiConsoleReporter to avoid deadlock \#656\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Cleanup of DOCTEST\_DO\_BINARY\_EXPRESSION\_COMPARISON\. Fixes \#651 \#652\
 ([iboB](https://github.com/iboB))
- Add tests for DOCTEST\_CONFIG\_USE\_STD\_HEADERS \#643 ([Saalvage](https://\
github.com/Saalvage))
- Stringification amendments \#642 ([Saalvage](https://github.com/Saalvage))
- Clean up defines a bit; Implement \#439 \#641 ([Saalvage](https://github.co\
m/Saalvage))
- Fix \#508 \#640 ([Saalvage](https://github.com/Saalvage))
- re\-re\-remove overly restrictive minimum version of meson \#635\
 ([eli-schwartz](https://github.com/eli-schwartz))
- Fix move\-only types failing to decompose correctly \#634\
 ([Saalvage](https://github.com/Saalvage))
- Improve Mac PowerPC support \#631 ([ryandesign](https://github.com/ryandesi\
gn))
- added nolint for cert\-err58 \#628 ([serguei-k](https://github.com/serguei-\
k))
- Fix properties not being passed in doctest\_discover\_tests \#626\
 ([quantumsteve](https://github.com/quantumsteve))
- Config no multithreading \#625 ([Saalvage](https://github.com/Saalvage))
- Fix MPI extension to work with no parallel tests \#623 ([BerengerBerthoul](\
https://github.com/BerengerBerthoul))
- Add contains option to checks\. \#620 ([MFraters](https://github.com/MFrate\
rs))
- Add alias target for doctest\_with\_main \#617 ([jessestricker](https://git\
hub.com/jessestricker))
- Allow escaping backslash with backslash in filters \(\#614\) \#616\
 ([yeputons](https://github.com/yeputons))
- Fix operator<< \#615 ([Saalvage](https://github.com/Saalvage))
- Fix MPI extension to work if launched without mpirun/mpiexec \#612\
 ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Fix mpi subcase \#611 ([BerengerBerthoul](https://github.com/BerengerBertho\
ul))
- Add IsNaN operator\! \#603 ([Saalvage](https://github.com/Saalvage))
- Move roadmap and wipe it clean \#601 ([Saalvage](https://github.com/Saalvag\
e))
- removes a duplicate word 'most' in configuration\.md \#599\
 ([krishnakumarg1984](https://github.com/krishnakumarg1984))
- Fix subcase reentry \#598 ([Saalvage](https://github.com/Saalvage))
- Add flag that forces custom stringification methods to be provided \#595\
 ([Saalvage](https://github.com/Saalvage))
- Fix coverage \#594 ([Saalvage](https://github.com/Saalvage))
- Ignore CMake and MacOS generated files \#592 ([LeonBrands](https://github.c\
om/LeonBrands))
- Feature config ret vals \#589 ([Saalvage](https://github.com/Saalvage))
- Refactor stringification \#585 ([Saalvage](https://github.com/Saalvage))
- Feature: Better NaN \#584 ([Saalvage](https://github.com/Saalvage))
- Nan check \#582 ([Saalvage](https://github.com/Saalvage))

## [v2.4.8](https://github.com/doctest/doctest/tree/v2.4.8) (2022-01-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.7...v2.4.8)

**Closed issues:**

- \[meta\] Change git tagging pattern [\#579](https://github.com/doctest/doct\
est/issues/579)
- TEST\_CASE\_TEMPLATE causes "-Wunused-local-typedef" warning on Clang\
 [\#577](https://github.com/doctest/doctest/issues/577)
- Regression between 2.4.6 and 2.4.7 with Visual Studio 2015\
 [\#573](https://github.com/doctest/doctest/issues/573)
- Regression between 2.4.6 and 2.4.7 [\#571](https://github.com/doctest/docte\
st/issues/571)
- Compilation error on MSVS2019 with ClangCL [\#570](https://github.com/docte\
st/doctest/issues/570)
- Compilation errors on MSVC 2015 after doctest update to 2.4.7\
 [\#568](https://github.com/doctest/doctest/issues/568)
- `g\_oss` is causing incorrect stringification results [\#567](https://githu\
b.com/doctest/doctest/issues/567)
- MSVC warnings leak through when using the library as a single header with\
 /Wall [\#565](https://github.com/doctest/doctest/issues/565)
- \[PROJECT ANNOUNCEMENT\] Looking for maintainers for Doctest\
 [\#554](https://github.com/doctest/doctest/issues/554)
- Is this still maintained? [\#537](https://github.com/doctest/doctest/issues\
/537)
- \[Feature request\] CHECK could return the value of expression\
 [\#496](https://github.com/doctest/doctest/issues/496)
- Feature: check or return false [\#426](https://github.com/doctest/doctest/i\
ssues/426)
- Undefined reference of `operator\<\<\(ostream&, const string&\)` when\
 compiling with clang 10 and libc++ 10 on Ubuntu 16.04.6 LTS\
 [\#356](https://github.com/doctest/doctest/issues/356)
- Doctest is not able to compile on OSX [\#126](https://github.com/doctest/do\
ctest/issues/126)

**Merged pull requests:**

- Continuous Integration Refactor [\#580](https://github.com/doctest/doctest/\
pull/580) ([Saalvage](https://github.com/Saalvage))
- Fix semicolon enforcement [\#578](https://github.com/doctest/doctest/pull/5\
78) ([Saalvage](https://github.com/Saalvage))
- Fix unused variable 2 [\#576](https://github.com/doctest/doctest/pull/576)\
 ([Saalvage](https://github.com/Saalvage))
- Alternative approach to Windows color initialization [\#575](https://github\
.com/doctest/doctest/pull/575) ([Saalvage](https://github.com/Saalvage))
- Assertions returning booleans [\#574](https://github.com/doctest/doctest/pu\
ll/574) ([Saalvage](https://github.com/Saalvage))
- Fix the thread-local string-stream [\#569](https://github.com/doctest/docte\
st/pull/569) ([Saalvage](https://github.com/Saalvage))
- Clean up warning suppression a bit; Fixes \#565 [\#566](https://github.com/\
doctest/doctest/pull/566) ([Saalvage](https://github.com/Saalvage))
- Add Universal Windows Platform support [\#558](https://github.com/doctest/d\
octest/pull/558) ([isaevil](https://github.com/isaevil))

## [2.4.7](https://github.com/doctest/doctest/tree/2.4.7) (2021-12-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.6...2.4.7)

**Implemented enhancements:**

- Add a default Bazel BUILD file [\#433](https://github.com/doctest/doctest/i\
ssues/433)

**Fixed bugs:**

- Stack-buffer-overflow probably because char array is viewed as NULL\
 terminated string [\#476](https://github.com/doctest/doctest/issues/476)

**Closed issues:**

- "C4834: discarding return value" with REQUIRE\_THROWS [\#549](https://githu\
b.com/doctest/doctest/issues/549)
- Xcode 11.3 is gone from macOS-latest \(=macOS-11\) [\#547](https://github.c\
om/doctest/doctest/issues/547)
- is it possible to define dependency for CHECKs [\#545](https://github.com/d\
octest/doctest/issues/545)
- Output summary explanation [\#541](https://github.com/doctest/doctest/issue\
s/541)
- compiler errors in doctest.h using cmake in CLion [\#540](https://github.co\
m/doctest/doctest/issues/540)
- Fails to build in VS2013 because of constexpr [\#539](https://github.com/do\
ctest/doctest/issues/539)
- -Wreserved-identifier warnings with Clang 13.0.0 [\#536](https://github.com\
/doctest/doctest/issues/536)
- Build fails with latest MSVC 2019 \(v16.11\) due to /WX [\#535](https://git\
hub.com/doctest/doctest/issues/535)
- VS 16.11 warning about unreferenced function with internal linkage\
 [\#533](https://github.com/doctest/doctest/issues/533)
- Faq googletest mocking dead link [\#532](https://github.com/doctest/doctest\
/issues/532)
- FR: Documentation: FAQ: Add sectoin 'multiple files' [\#526](https://github\
.com/doctest/doctest/issues/526)
- CMAKE: doctest\_discover\_tests\(\) error when ADD\_LABELS is not specified\
 [\#524](https://github.com/doctest/doctest/issues/524)
- Register tests based on test data available [\#521](https://github.com/doct\
est/doctest/issues/521)
- naming override in different testcase files [\#517](https://github.com/doct\
est/doctest/issues/517)
- Segmentation fault during the compilation without the copy elision\
 optimization [\#515](https://github.com/doctest/doctest/issues/515)
- Compiler warnings on Xcode 12.5 [\#514](https://github.com/doctest/doctest/\
issues/514)
- Using filter `-sc` does not work properly? [\#513](https://github.com/docte\
st/doctest/issues/513)
- \[question\] Example of tests in production code & DLLs & shared libraries?\
 [\#511](https://github.com/doctest/doctest/issues/511)
- Dumping fixture state to disk on error [\#509](https://github.com/doctest/d\
octest/issues/509)
- Macros construct reserved identifiers [\#507](https://github.com/doctest/do\
ctest/issues/507)
- Running doctest on embedded ARM Cortex µCs [\#506](https://github.com/docte\
st/doctest/issues/506)
- Asserts Outside of Tests Example Does Not Link [\#504](https://github.com/d\
octest/doctest/issues/504)
- \[FEATURE REQUEST\] Quiet flag [\#503](https://github.com/doctest/doctest/i\
ssues/503)
- Compile error on Intel C++ Classic Compilers [\#502](https://github.com/doc\
test/doctest/issues/502)
- compiling doctest in 32-bit with \_\_stdcall calling convention fails\
 [\#500](https://github.com/doctest/doctest/issues/500)
- Duplicate 'const' compilation error from TEST\_CASE\_CLASS macro\
 [\#498](https://github.com/doctest/doctest/issues/498)
- Packed fields can't be accessed in 2.4.6 [\#495](https://github.com/doctest\
/doctest/issues/495)
- Dangling pointers with .str\(\).c\_str\(\) [\#494](https://github.com/docte\
st/doctest/issues/494)
- Automatic adding of TEST\_SUITE labels to discovered tests fails if\
 ADD\_LABELS not set [\#489](https://github.com/doctest/doctest/issues/489)
- Adding a bunch of REQUIRE/CHECK utilities [\#487](https://github.com/doctes\
t/doctest/issues/487)
- Warning C4114 in MSVC [\#485](https://github.com/doctest/doctest/issues/485)
- Own repository [\#410](https://github.com/doctest/doctest/issues/410)
- Linking problem with Clang 10 on Windows [\#362](https://github.com/doctest\
/doctest/issues/362)
- Add option not to print the intro text [\#342](https://github.com/doctest/d\
octest/issues/342)
- \[Feature\] Better integration with tools \(VS Code Test Adapter\
 Extension\) [\#320](https://github.com/doctest/doctest/issues/320)
- vscode test explorer [\#303](https://github.com/doctest/doctest/issues/303)
- Want an option not to print any intro [\#245](https://github.com/doctest/do\
ctest/issues/245)
- Add way to disable printing of intro [\#181](https://github.com/doctest/doc\
test/issues/181)

**Merged pull requests:**

- Make String::operator+ non-member [\#564](https://github.com/doctest/doctes\
t/pull/564) ([Saalvage](https://github.com/Saalvage))
- Add -minimal flag [\#562](https://github.com/doctest/doctest/pull/562)\
 ([Saalvage](https://github.com/Saalvage))
- Quiet flag [\#561](https://github.com/doctest/doctest/pull/561)\
 ([Saalvage](https://github.com/Saalvage))
- Fix redefinition error while using double time DOCTEST\_ANONYMOUS\(DOCTEST\_\
CAPTURE\_\) [\#557](https://github.com/doctest/doctest/pull/557)\
 ([isaevil](https://github.com/isaevil))
- Fix error: missing initializer for member doctest::detail::TestSuite\
 [\#556](https://github.com/doctest/doctest/pull/556) ([isaevil](https://gith\
ub.com/isaevil))
- Xcode 11.3 with macos 10.15 [\#548](https://github.com/doctest/doctest/pull\
/548) ([jsoref](https://github.com/jsoref))
- Spelling [\#546](https://github.com/doctest/doctest/pull/546)\
 ([jsoref](https://github.com/jsoref))
- Fix build with -Wunused-but-set-variable [\#543](https://github.com/doctest\
/doctest/pull/543) ([jktjkt](https://github.com/jktjkt))
- build\(meson\): use `override\_dependency` if supported [\#538](https://git\
hub.com/doctest/doctest/pull/538) ([Tachi107](https://github.com/Tachi107))
- Fix google death test URL [\#528](https://github.com/doctest/doctest/pull/5\
28) ([emrecil](https://github.com/emrecil))
- Fixing issue with doctestAddTests.cmake [\#527](https://github.com/doctest/\
doctest/pull/527) ([jharmer95](https://github.com/jharmer95))
- Replace gendered pronouns [\#525](https://github.com/doctest/doctest/pull/5\
25) ([mletterle](https://github.com/mletterle))
- Fixed intel compiler parser bug. Should fix \#502 [\#523](https://github.co\
m/doctest/doctest/pull/523) ([BerengerBerthoul](https://github.com/BerengerBe\
rthoul))
- specifying working directory for execute\_process in doctest\_discover\_tes\
ts [\#518](https://github.com/doctest/doctest/pull/518) ([philbucher](https:/\
/github.com/philbucher))
- Fix the logic that depends on optional copy elision optimization\
 [\#516](https://github.com/doctest/doctest/pull/516) ([ivankochin](https://g\
ithub.com/ivankochin))
- Fix reserved identifiers [\#510](https://github.com/doctest/doctest/pull/51\
0) ([ts826848](https://github.com/ts826848))
- Fix build with GCC 11 [\#505](https://github.com/doctest/doctest/pull/505)\
 ([jktjkt](https://github.com/jktjkt))
- minor fixes in MPI docs [\#499](https://github.com/doctest/doctest/pull/499\
) ([philbucher](https://github.com/philbucher))
- Add a minimal bazel config [\#497](https://github.com/doctest/doctest/pull/\
497) ([elliottt](https://github.com/elliottt))
- Handle escaped commas in parsed arguments [\#493](https://github.com/doctes\
t/doctest/pull/493) ([friendlyanon](https://github.com/friendlyanon))
- Fixes Issue 476 . When running executables with "-s" stringifyBinaryE…\
 [\#491](https://github.com/doctest/doctest/pull/491) ([navinp0304](https://g\
ithub.com/navinp0304))
- Set variable to 0 if not set [\#490](https://github.com/doctest/doctest/pul\
l/490) ([shivupa](https://github.com/shivupa))

## [2.4.6](https://github.com/doctest/doctest/tree/2.4.6) (2021-03-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.5...2.4.6)

**Fixed bugs:**

- REQUIRE does not compile when operator== in different namespace\
 [\#443](https://github.com/doctest/doctest/issues/443)
- Using templated operator== inside TEST\_CASE changes deduced types of\
 forwarding references [\#399](https://github.com/doctest/doctest/issues/399)

**Closed issues:**

- CMake doesn't link package [\#483](https://github.com/doctest/doctest/issue\
s/483)
- Assertions are slow when running on Windows with a debugger attached\
 [\#481](https://github.com/doctest/doctest/issues/481)
- Get list of registered test-case names [\#479](https://github.com/doctest/d\
octest/issues/479)
- Can't compile with glibc master \(future 2.34\): SIGSTKSZ is no longer a\
 constant [\#473](https://github.com/doctest/doctest/issues/473)
- How to use Doctest with Github Actions [\#472](https://github.com/doctest/d\
octest/issues/472)
- Link error \(multiple definition...\) in simple project [\#470](https://git\
hub.com/doctest/doctest/issues/470)
- INFO does not compile when used like a function call [\#469](https://github\
.com/doctest/doctest/issues/469)
- std::uncaught\_exceptions is only available if compiling for macOS 10.12 or\
 above [\#466](https://github.com/doctest/doctest/issues/466)
- Compile failure with WinRT on 2.4.5 [\#465](https://github.com/doctest/doct\
est/issues/465)

**Merged pull requests:**

- Improve speed with attached debugger \(Windows\) [\#482](https://github.com\
/doctest/doctest/pull/482) ([pgroke](https://github.com/pgroke))
- Convert to bool by casting, rather than double negation [\#480](https://git\
hub.com/doctest/doctest/pull/480) ([kitegi](https://github.com/kitegi))
- Fix compile error when targeting macOS version earlier and macOS 10.12\
 [\#478](https://github.com/doctest/doctest/pull/478) ([SamWindell](https://g\
ithub.com/SamWindell))
- Fix MSVC linter warning about uninitialized TestSuite variables\
 [\#471](https://github.com/doctest/doctest/pull/471) ([Reedbeta](https://git\
hub.com/Reedbeta))
- REQUIRE does not compile when operator== in different namespace \#443 .\
 [\#468](https://github.com/doctest/doctest/pull/468) ([navinp0304](https://g\
ithub.com/navinp0304))
- Automatically add TEST\_SUITE labels to discovered tests\
 [\#464](https://github.com/doctest/doctest/pull/464) ([shivupa](https://gith\
ub.com/shivupa))

## [2.4.5](https://github.com/doctest/doctest/tree/2.4.5) (2021-02-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.4...2.4.5)

**Closed issues:**

- Stack buffer overflow in `String` constructor [\#460](https://github.com/do\
ctest/doctest/issues/460)
- Suppress warnings from clang-tidy [\#459](https://github.com/doctest/doctes\
t/issues/459)
- compilation issue in MSVC when defining DOCTEST\_THREAD\_LOCAL to static\
 [\#458](https://github.com/doctest/doctest/issues/458)
- nvcc compiler warning; doctest.h\(4138\): warning : expression has no\
 effect [\#454](https://github.com/doctest/doctest/issues/454)
- Use of std::atomic can slow down multithreaded tests [\#452](https://github\
.com/doctest/doctest/issues/452)

**Merged pull requests:**

- Fix compilation on case-sensitive filesystems [\#463](https://github.com/do\
ctest/doctest/pull/463) ([jhasse](https://github.com/jhasse))
- Use function-like macros for prefixless macro names [\#462](https://github.\
com/doctest/doctest/pull/462) ([tbleher](https://github.com/tbleher))
- Implement a multi lane atomic for assertion counts [\#453](https://github.c\
om/doctest/doctest/pull/453) ([martinus](https://github.com/martinus))

## [2.4.4](https://github.com/doctest/doctest/tree/2.4.4) (2020-12-25)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.3...2.4.4)

**Closed issues:**

- 2.4.2: build fails [\#450](https://github.com/doctest/doctest/issues/450)
- combine the same tests for different build configurations from multiple\
 shared objects without having symbol clashes [\#436](https://github.com/doct\
est/doctest/issues/436)
- Issue with GitHub Security Scanning: gmtime [\#423](https://github.com/doct\
est/doctest/issues/423)

## [2.4.3](https://github.com/doctest/doctest/tree/2.4.3) (2020-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.2...2.4.3)

## [2.4.2](https://github.com/doctest/doctest/tree/2.4.2) (2020-12-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.1...2.4.2)

**Closed issues:**

- DOCTEST\_CHECK\_THROWS\_WITH\_AS fails to work with dependant exception\
 type [\#447](https://github.com/doctest/doctest/issues/447)
- MSVC warnings: narrowing conversion, signed/unsigned mismatch\
 [\#446](https://github.com/doctest/doctest/issues/446)
-  log contexts for failures in JUnit reporter [\#441](https://github.com/doc\
test/doctest/issues/441)
- MinGW "'mutex' in namespace 'std' does not name a type" error.\
 [\#438](https://github.com/doctest/doctest/issues/438)
- Test runner thread initialization [\#435](https://github.com/doctest/doctes\
t/issues/435)
- PLATFORM is misdetected on MacOSX Big Sur [\#415](https://github.com/doctes\
t/doctest/issues/415)
- CHECK\_EQ with enum values [\#276](https://github.com/doctest/doctest/issue\
s/276)

**Merged pull requests:**

- Squash MSVC warnings when including ntstatus.h [\#449](https://github.com/d\
octest/doctest/pull/449) ([nickhutchinson](https://github.com/nickhutchinson))
- Add MAIN\_PROJECT check for test option [\#445](https://github.com/doctest/\
doctest/pull/445) ([globberwops](https://github.com/globberwops))
- Suppress clang-analyzer-cplusplus.NewDeleteLeaks [\#444](https://github.com\
/doctest/doctest/pull/444) ([ncihnegn](https://github.com/ncihnegn))
- log contexts for failures in JUnit reporter [\#442](https://github.com/doct\
est/doctest/pull/442) ([runave](https://github.com/runave))
- Fix 32bit support on macOS [\#440](https://github.com/doctest/doctest/pull/\
440) ([AlexanderLanin](https://github.com/AlexanderLanin))

## [2.4.1](https://github.com/doctest/doctest/tree/2.4.1) (2020-11-04)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.0...2.4.1)

**Closed issues:**

- Avoid old C-style casts [\#424](https://github.com/doctest/doctest/issues/4\
24)
- Segfault in unwind [\#422](https://github.com/doctest/doctest/issues/422)
- Inspect exception with gdb [\#421](https://github.com/doctest/doctest/issue\
s/421)
- use-of-uninitialized-value [\#414](https://github.com/doctest/doctest/issue\
s/414)
- Support unit tests with MPI [\#413](https://github.com/doctest/doctest/issu\
es/413)
- Break into debugger support is missing for Linux [\#411](https://github.com\
/doctest/doctest/issues/411)
- What if built doctest as static library instead of header-only\
 [\#408](https://github.com/doctest/doctest/issues/408)
- \[Question\] How to get test case name [\#407](https://github.com/doctest/d\
octest/issues/407)
- create extensions header for optional features requiring more std includes\
 or newer C++ features [\#405](https://github.com/doctest/doctest/issues/405)
- tests/asserts summary lines are misaligned when counts exceed 999999\
 [\#402](https://github.com/doctest/doctest/issues/402)
- Call to 'ne' is ambiguous -- with solution [\#395](https://github.com/docte\
st/doctest/issues/395)
- Intermittent Segfaults [\#391](https://github.com/doctest/doctest/issues/39\
1)
- Junit classname [\#390](https://github.com/doctest/doctest/issues/390)
- Add default printers for enums [\#121](https://github.com/doctest/doctest/i\
ssues/121)

**Merged pull requests:**

- Enum support \(fix for Issue \#121\) [\#429](https://github.com/doctest/doc\
test/pull/429) ([jkriegshauser](https://github.com/jkriegshauser))
- Support Clang 3.4 [\#428](https://github.com/doctest/doctest/pull/428)\
 ([AlexanderLanin](https://github.com/AlexanderLanin))
- Silence remarks on old C-style casts [\#425](https://github.com/doctest/doc\
test/pull/425) ([UnePierre](https://github.com/UnePierre))
- Initial MPI unit tests implementation [\#418](https://github.com/doctest/do\
ctest/pull/418) ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Add JUNIT\_OUTPUT\_DIR option to doctest\_discover\_tests\
 [\#417](https://github.com/doctest/doctest/pull/417) ([Tradias](https://gith\
ub.com/Tradias))
- Add option to build with std headers. [\#416](https://github.com/doctest/do\
ctest/pull/416) ([avostrik](https://github.com/avostrik))
- Port Catch2 break into debugger for Linux. closes \#411 [\#412](https://git\
hub.com/doctest/doctest/pull/412) ([mikezackles](https://github.com/mikezackl\
es))
- summary: align even large values \#402 [\#403](https://github.com/doctest/d\
octest/pull/403) ([dankamongmen](https://github.com/dankamongmen))
- Add breakpoint inline assembly for the Apple Silicon macOS.\
 [\#400](https://github.com/doctest/doctest/pull/400) ([bruvzg](https://githu\
b.com/bruvzg))
- fix google's death test URI in roadmap [\#393](https://github.com/doctest/d\
octest/pull/393) ([ashutosh108](https://github.com/ashutosh108))

## [2.4.0](https://github.com/doctest/doctest/tree/2.4.0) (2020-06-27)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.8...2.4.0)

**Closed issues:**

- Count points based on the number of passed/failed cases?\
 [\#386](https://github.com/doctest/doctest/issues/386)
- How to understand "\#data\_array" in std::string? [\#383](https://github.co\
m/doctest/doctest/issues/383)
- crash: doctest with custom allocator [\#382](https://github.com/doctest/doc\
test/issues/382)
- Feature Request: format PRIVATE/PUBLIC/INTERFACE entries with constant\
 indentation [\#378](https://github.com/doctest/doctest/issues/378)
- JUnit Reporter for Doctest [\#376](https://github.com/doctest/doctest/issue\
s/376)
- Avoiding Feature Bloat [\#374](https://github.com/doctest/doctest/issues/37\
4)
- StringMaker\<wchar\_t\> fail to compile with C++20 enabled \(GCC\)\
 [\#357](https://github.com/doctest/doctest/issues/357)
- doctest\_discover\_tests and FetchContent\_Declare [\#351](https://github.c\
om/doctest/doctest/issues/351)
- Junit reporter [\#318](https://github.com/doctest/doctest/issues/318)

**Merged pull requests:**

- Add a note that doctest can be installed through Homebrew\
 [\#388](https://github.com/doctest/doctest/pull/388) ([cameronwhite](https:/\
/github.com/cameronwhite))
- provide alternative implementation of has\_insertion\_operator for C++20\
 [\#387](https://github.com/doctest/doctest/pull/387) ([lukaszgemborowski](ht\
tps://github.com/lukaszgemborowski))
- Fix issue template to mention doctest [\#380](https://github.com/doctest/do\
ctest/pull/380) ([nyanpasu64](https://github.com/nyanpasu64))

## [2.3.8](https://github.com/doctest/doctest/tree/2.3.8) (2020-05-17)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.7...2.3.8)

**Closed issues:**

- Scenario name can not be passed to -tc to execute single scenario\
 [\#373](https://github.com/doctest/doctest/issues/373)
- Compile Error with CHECK\_NOTHROW when using 2 Template Arguments\
 [\#372](https://github.com/doctest/doctest/issues/372)
- dll example won't compile [\#371](https://github.com/doctest/doctest/issues\
/371)
- Build error with MinGW \(Mingw-w64\) due to missing Windows.h \(with\
 capital W\) [\#370](https://github.com/doctest/doctest/issues/370)
- How to override file\_line\_to\_stream? [\#369](https://github.com/doctest/\
doctest/issues/369)
- Memory sanitizer fails. [\#365](https://github.com/doctest/doctest/issues/3\
65)
- Warning c6319 in Visual Studio [\#359](https://github.com/doctest/doctest/i\
ssues/359)
- Any option to show each test case's execute time? [\#358](https://github.co\
m/doctest/doctest/issues/358)
- doctest in embedded [\#355](https://github.com/doctest/doctest/issues/355)
- Reloading a plugin with test cases leads to a segmentation fault\
 [\#350](https://github.com/doctest/doctest/issues/350)
- Compiling with DOCTEST\_CONFIG\_COLORS\_ANSI fails on Windows\
 [\#348](https://github.com/doctest/doctest/issues/348)
- Can I inherit ConsoleReporter? [\#344](https://github.com/doctest/doctest/i\
ssues/344)
- Noreturn and noexcept defines for Visual Studio 2013 support\
 [\#327](https://github.com/doctest/doctest/issues/327)
- Data-driven testing -- print out the deepest DOCTEST\_SUBCASE\
 [\#215](https://github.com/doctest/doctest/issues/215)
- Print the SUBCASE path when an assert fails in the TEST\_CASE body\
 [\#125](https://github.com/doctest/doctest/issues/125)

**Merged pull requests:**

- fix: possible UB with nullptr increment [\#368](https://github.com/doctest/\
doctest/pull/368) ([oktonion](https://github.com/oktonion))
- Use CMake's CMP0077 policy if available [\#363](https://github.com/doctest/\
doctest/pull/363) ([thelink2012](https://github.com/thelink2012))
- Fix warning c6319 in Visual Studio 16.5 [\#361](https://github.com/doctest/\
doctest/pull/361) ([Cvelth](https://github.com/Cvelth))

## [2.3.7](https://github.com/doctest/doctest/tree/2.3.7) (2020-02-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.6...2.3.7)

**Closed issues:**

- Some of the GitHub CI builds are failing [\#334](https://github.com/doctest\
/doctest/issues/334)
- C++20 removed std::uncaught\_exception [\#333](https://github.com/doctest/d\
octest/issues/333)
- Doctest SEH handlers are called before \_\_except handlers\
 [\#324](https://github.com/doctest/doctest/issues/324)

**Merged pull requests:**

- using std namespace where necessary and timer ticks fix [\#341](https://git\
hub.com/doctest/doctest/pull/341) ([oktonion](https://github.com/oktonion))
- fix std::uncaught\_exceptions [\#340](https://github.com/doctest/doctest/pu\
ll/340) ([cyyever](https://github.com/cyyever))
- Fix GitHub CI and add GitHub build badges [\#336](https://github.com/doctes\
t/doctest/pull/336) ([claremacrae](https://github.com/claremacrae))
- http -\> https [\#331](https://github.com/doctest/doctest/pull/331)\
 ([Coeur](https://github.com/Coeur))
- Switch to catching unhandled exceptions on Windows Closes \#324\
 [\#325](https://github.com/doctest/doctest/pull/325) ([jkriegshauser](https:\
//github.com/jkriegshauser))

## [2.3.6](https://github.com/doctest/doctest/tree/2.3.6) (2019-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.5...2.3.6)

**Closed issues:**

- Link problem w/ BUILD=Release if MESSAGE\(\) with std::string/ostream-opera\
tor is used [\#316](https://github.com/doctest/doctest/issues/316)
- the FAQ about difference to Catch2 is missing tags [\#315](https://github.c\
om/doctest/doctest/issues/315)
- include Windows.h in small caps to silence clang warnings\
 [\#312](https://github.com/doctest/doctest/issues/312)
- Mistake in generator with lgtm error [\#311](https://github.com/doctest/doc\
test/issues/311)
- CMake: cannot install target doctest\_with\_main [\#310](https://github.com\
/doctest/doctest/issues/310)
- \[bug\] INFO\(\) and CAPTURE\(\) cannot compile using MSVC when used with\
 DOCTEST\_CONFIG\_IMPLEMENTATION\_IN\_DLL [\#306](https://github.com/doctest/\
doctest/issues/306)
- Skip subcase [\#304](https://github.com/doctest/doctest/issues/304)
- Does some equivalent features from google test exist here?\
 [\#300](https://github.com/doctest/doctest/issues/300)
- How to use doctest in dll only\(without main.cpp and .exe\)\
 [\#299](https://github.com/doctest/doctest/issues/299)
- Warning: C26812: The enum type 'doctest::assertType::Enum' is unscoped.\
 Prefer 'enum class' over 'enum' \(Enum.3\). [\#298](https://github.com/docte\
st/doctest/issues/298)
- test executable\_dll\_and\_plugin fails on Linux, GCC 8.1.0,\
 -fsanitize=address [\#201](https://github.com/doctest/doctest/issues/201)

**Merged pull requests:**

- Fixed missing ostream include for MacOS when defining DOCTEST\_CONFIG\_…\
 [\#314](https://github.com/doctest/doctest/pull/314) ([NKTomHaygarth](https:\
//github.com/NKTomHaygarth))
- include windows.h in cmall caps to silence clang nonportable warnings\
 [\#313](https://github.com/doctest/doctest/pull/313) ([suoniq](https://githu\
b.com/suoniq))
- Add .editorconfig file. [\#301](https://github.com/doctest/doctest/pull/301\
) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add Github Actions CI [\#285](https://github.com/doctest/doctest/pull/285)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))

## [2.3.5](https://github.com/doctest/doctest/tree/2.3.5) (2019-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.4...2.3.5)

**Closed issues:**

- \[feature request\] Assertion macros for throwing exception of a specific\
 type with message - \<LEVEL\>\_THROWS\_WITH\_AS\(expr, string, ex\_type\)\
 [\#295](https://github.com/doctest/doctest/issues/295)
- CHECK\_THROWS\_AS of non-default constructor wants to call default\
 constructor [\#293](https://github.com/doctest/doctest/issues/293)
- Typos and spelling errors in source, documentation and scripts\
 [\#291](https://github.com/doctest/doctest/issues/291)
- Customize test names / variable substitution [\#284](https://github.com/doc\
test/doctest/issues/284)
- SUBCASE in function not behaving as expected [\#282](https://github.com/doc\
test/doctest/issues/282)
- SUPER\_FAST\_ASSERTS fails to compile CHECK\_MESSAGE [\#281](https://github\
.com/doctest/doctest/issues/281)
- CHECK\_MESSAGE no longer works with DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS\
 [\#280](https://github.com/doctest/doctest/issues/280)
- CAPTURE of structured binding element no longer works [\#279](https://githu\
b.com/doctest/doctest/issues/279)
- Reporter: `test\_case\_end` no longer fired after test case restart\
 [\#278](https://github.com/doctest/doctest/issues/278)
- Add debug break override support [\#277](https://github.com/doctest/doctest\
/issues/277)
- Running tests from within Visual Studio in a static lib project\
 [\#275](https://github.com/doctest/doctest/issues/275)
- Compile-time error when using a raw string literal inside of REQUIRE \(MSVC\
 2017\) [\#274](https://github.com/doctest/doctest/issues/274)
- Give example for having tests in production code [\#252](https://github.com\
/doctest/doctest/issues/252)
- Memory leaks just by including doctest.h [\#205](https://github.com/doctest\
/doctest/issues/205)
- Feature request: print subcase when an exception is thrown inside one\
 [\#136](https://github.com/doctest/doctest/issues/136)

**Merged pull requests:**

- Fix typos and misspellings found by codespell. [\#292](https://github.com/d\
octest/doctest/pull/292) ([warmsocks](https://github.com/warmsocks))
- Document order by issue correctly [\#290](https://github.com/doctest/doctes\
t/pull/290) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Document that -order-by=file is compiler-dependent [\#289](https://github.c\
om/doctest/doctest/pull/289) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add -order-by=name to filter\_2 test [\#288](https://github.com/doctest/doc\
test/pull/288) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add support for compiling with clang-cl [\#286](https://github.com/doctest/\
doctest/pull/286) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- No minimum version limitation of Meson [\#283](https://github.com/doctest/d\
octest/pull/283) ([ydm](https://github.com/ydm))

## [2.3.4](https://github.com/doctest/doctest/tree/2.3.4) (2019-08-12)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.3...2.3.4)

**Closed issues:**

- Remove INFO\(\) limitation for using only lvalues and no rvalues\
 [\#269](https://github.com/doctest/doctest/issues/269)
- Compile error on MAC OS with AppleClang 8.0.0.8000042  [\#266](https://gith\
ub.com/doctest/doctest/issues/266)
- Throwing exception in a mocked method [\#265](https://github.com/doctest/do\
ctest/issues/265)
- Illegal syntax for decorators compiles and runs without warning, but has no\
 effect [\#264](https://github.com/doctest/doctest/issues/264)
- Support conditional expressions in REQUIRE [\#262](https://github.com/docte\
st/doctest/issues/262)
- Register a listener\(reporter\) that always listens [\#257](https://github.\
com/doctest/doctest/issues/257)
- Memory sanitizer complaint [\#255](https://github.com/doctest/doctest/issue\
s/255)
- Windows Clang GNU command line warnings [\#253](https://github.com/doctest/\
doctest/issues/253)
- The build writes into the source directory [\#249](https://github.com/docte\
st/doctest/issues/249)
- How to enable tests inside another exe [\#246](https://github.com/doctest/d\
octest/issues/246)
- Testing multiple headers. [\#244](https://github.com/doctest/doctest/issues\
/244)
- CMakeLists.txt: Needs CMAKE\_CXX\_STANDARD=11 [\#243](https://github.com/do\
ctest/doctest/issues/243)
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest [\#242](https://github.com/doctest/doctest/issues/242)

**Merged pull requests:**

- Improve Listener docs [\#273](https://github.com/doctest/doctest/pull/273)\
 ([claremacrae](https://github.com/claremacrae))
- Rework `INFO` lazy evaluation to use lambdas. [\#270](https://github.com/do\
ctest/doctest/pull/270) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Prevent compile errors with AppleClang compiler [\#268](https://github.com/\
doctest/doctest/pull/268) ([ClausKlein](https://github.com/ClausKlein))
- Revert "fix : including windows.h header cause error" [\#263](https://githu\
b.com/doctest/doctest/pull/263) ([onqtam](https://github.com/onqtam))
- Fix static analyzer URLs [\#259](https://github.com/doctest/doctest/pull/25\
9) ([godbyk](https://github.com/godbyk))
- fix : including windows.h header cause error [\#258](https://github.com/doc\
test/doctest/pull/258) ([rinechran](https://github.com/rinechran))
- only look for C++ compiler with CMake [\#256](https://github.com/doctest/do\
ctest/pull/256) ([zhihaoy](https://github.com/zhihaoy))
- Fix \#253 [\#254](https://github.com/doctest/doctest/pull/254)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- add alias target for doctest for use in build tree [\#247](https://github.c\
om/doctest/doctest/pull/247) ([trondhe](https://github.com/trondhe))

## [2.3.3](https://github.com/doctest/doctest/tree/2.3.3) (2019-06-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.2...2.3.3)

**Closed issues:**

- Build fails with gcc9 because of -Wstrict-overflow=5 which is too high\
 [\#241](https://github.com/doctest/doctest/issues/241)
- doctest given defined with short macro name [\#239](https://github.com/doct\
est/doctest/issues/239)
- Splitting templated test across different translation units\
 [\#238](https://github.com/doctest/doctest/issues/238)
- Compile errors with iosfwd.h and Visual Studio 2019 Preview\
 [\#183](https://github.com/doctest/doctest/issues/183)
- Add CMake test support as catch\_discover\_tests\(\) in Catch2\
 [\#171](https://github.com/doctest/doctest/issues/171)

**Merged pull requests:**

- fix \#239 - use long macro name [\#240](https://github.com/doctest/doctest/\
pull/240) ([m-bd](https://github.com/m-bd))
- Add doctest\_discover\_tests\(\) [\#236](https://github.com/doctest/doctest\
/pull/236) ([reddwarf69](https://github.com/reddwarf69))
- Ignore redundant-decls warning on MinGW [\#235](https://github.com/doctest/\
doctest/pull/235) ([AMS21](https://github.com/AMS21))
- Fixed meson build file dependency declaration [\#233](https://github.com/do\
ctest/doctest/pull/233) ([jormundgand](https://github.com/jormundgand))

## [2.3.2](https://github.com/doctest/doctest/tree/2.3.2) (2019-05-06)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.1...2.3.2)

**Closed issues:**

- scripts/bench/run\_all.py : module 'urllib' has no attribute 'urlretrieve'\
 [\#230](https://github.com/doctest/doctest/issues/230)
- wrong set of tests registered with TEST\_CASE\_TEMPLATE get executed\
 [\#228](https://github.com/doctest/doctest/issues/228)
- Logging not Working for me [\#227](https://github.com/doctest/doctest/issue\
s/227)
- Link test runner executable into dll? [\#226](https://github.com/doctest/do\
ctest/issues/226)
- Linking issue for executables after including doctest in library\
 [\#224](https://github.com/doctest/doctest/issues/224)
- Strange REQUIRE\_THROWS behaviour [\#223](https://github.com/doctest/doctes\
t/issues/223)
- Windows clang-cl -Wunused-variable warning [\#221](https://github.com/docte\
st/doctest/issues/221)
- Update doctest 2.3.1 in bincrafters [\#220](https://github.com/doctest/doct\
est/issues/220)
- make install, on 64 bit, installs cmake files into lib instead of lib64\
 folder  [\#218](https://github.com/doctest/doctest/issues/218)
- TSAN: data race related to hasLoggedCurrentTestStart [\#217](https://github\
.com/doctest/doctest/issues/217)
- REQUIRE\_THROWS\_AS does not support class constructors [\#216](https://git\
hub.com/doctest/doctest/issues/216)
- Build failure on clang 7.0.1 on Fedora 29 [\#214](https://github.com/doctes\
t/doctest/issues/214)
- add example compatible with -\> https://github.com/report-ci/\
 [\#212](https://github.com/doctest/doctest/issues/212)
- No DOCTEST\_WITH\_TESTS? [\#211](https://github.com/doctest/doctest/issues/\
211)

**Merged pull requests:**

- Added meson file, to declare a dependency. [\#232](https://github.com/docte\
st/doctest/pull/232) ([jormundgand](https://github.com/jormundgand))
- Explicitly specify the doctest\_with\_main C++ standard in CMake.\
 [\#231](https://github.com/doctest/doctest/pull/231) ([DaanDeMeyer](https://\
github.com/DaanDeMeyer))
- Remove architecture check from CMake package [\#225](https://github.com/doc\
test/doctest/pull/225) ([mmha](https://github.com/mmha))
- add default install prefix [\#219](https://github.com/doctest/doctest/pull/\
219) ([a4z](https://github.com/a4z))
- \[regression\] Workaround MSVC preprocessor issue triggered by\
 REQUIRE\_THROWS [\#213](https://github.com/doctest/doctest/pull/213)\
 ([zhihaoy](https://github.com/zhihaoy))

## [2.3.1](https://github.com/doctest/doctest/tree/2.3.1) (2019-03-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.0...2.3.1)

**Merged pull requests:**

- Add two very simple examples of using doctest with CMake\
 [\#209](https://github.com/doctest/doctest/pull/209) ([pr0g](https://github.\
com/pr0g))

## [2.3.0](https://github.com/doctest/doctest/tree/2.3.0) (2019-03-23)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.3...2.3.0)

**Closed issues:**

- Compilation with emscripten fails by default because of signal handling\
 [\#207](https://github.com/doctest/doctest/issues/207)
- Compilation fails with cl.exe /Zc:wchar\_t- [\#206](https://github.com/doct\
est/doctest/issues/206)
- Parallel invocation of doctest's own testsuite via CTest fails\
 [\#202](https://github.com/doctest/doctest/issues/202)
-  Get the number of passed/failed tests in the code [\#200](https://github.c\
om/doctest/doctest/issues/200)
- Tests alongside code with multiple executables [\#199](https://github.com/d\
octest/doctest/issues/199)
- Cppcheck 1.86 warnings [\#198](https://github.com/doctest/doctest/issues/19\
8)
- Compiling as Dll maybe is wrong [\#196](https://github.com/doctest/doctest/\
issues/196)
- Forward-declaring identifiers in std:: is UB - consider including some of\
 the cheaper C/C++ stdlib headers [\#194](https://github.com/doctest/doctest/\
issues/194)
- QtCreator + clang warning about operator \<\< precedence\
 [\#191](https://github.com/doctest/doctest/issues/191)
- run test fixture from cli [\#190](https://github.com/doctest/doctest/issues\
/190)
- Installing doctest using cmake and make fails on Ubuntu 16.04 \(C++11 is\
 not used\) [\#189](https://github.com/doctest/doctest/issues/189)
- c++17 requirement for testing private members [\#188](https://github.com/do\
ctest/doctest/issues/188)
- \[feature request\] implement a user-extendable reporter system\
 [\#138](https://github.com/doctest/doctest/issues/138)
- Same test runs multiple times when written in a header and included with\
 different unnormalized paths [\#45](https://github.com/doctest/doctest/issue\
s/45)

**Merged pull requests:**

- Fix unmatched bracket in DOCTEST\_TEST\_CASE\_CLASS [\#204](https://github.\
com/doctest/doctest/pull/204) ([patstew](https://github.com/patstew))
- Template apply [\#203](https://github.com/doctest/doctest/pull/203)\
 ([zhihaoy](https://github.com/zhihaoy))
- No undefined behavior per C++ standard in detecting endianness.\
 [\#195](https://github.com/doctest/doctest/pull/195) ([dimztimz](https://git\
hub.com/dimztimz))
- Fix propagating include directories of target doctest\_with\_main\
 [\#193](https://github.com/doctest/doctest/pull/193) ([dimztimz](https://git\
hub.com/dimztimz))
-  Move single header to a separate folder [\#187](https://github.com/doctest\
/doctest/pull/187) ([dimztimz](https://github.com/dimztimz))
- Fix Clang format to handle C++11 [\#186](https://github.com/doctest/doctest\
/pull/186) ([dimztimz](https://github.com/dimztimz))
- Rename doctest\_impl.h to doctest.cpp for less confusion.\
 [\#185](https://github.com/doctest/doctest/pull/185) ([dimztimz](https://git\
hub.com/dimztimz))

## [2.2.3](https://github.com/doctest/doctest/tree/2.2.3) (2019-02-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.2...2.2.3)

**Closed issues:**

- Calling convention needed on a few functions [\#182](https://github.com/doc\
test/doctest/issues/182)
- Terminal color is not reset when a test fails with some signal\
 [\#122](https://github.com/doctest/doctest/issues/122)

## [2.2.2](https://github.com/doctest/doctest/tree/2.2.2) (2019-01-28)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.1...2.2.2)

**Closed issues:**

- Add way to override getCurrentTicks\(\) implementation [\#178](https://gith\
ub.com/doctest/doctest/issues/178)
- Wrap \<csignal\> include with ifdef [\#177](https://github.com/doctest/doct\
est/issues/177)
- How to stop doctest hijack unhandled exceptions? [\#176](https://github.com\
/doctest/doctest/issues/176)
- Change the include path of the `doctest` CMake interface target so users\
 need to specify the folder as well [\#175](https://github.com/doctest/doctes\
t/issues/175)
- Reduce scope of DebugOutputWindowReporter instance [\#174](https://github.c\
om/doctest/doctest/issues/174)
- Can logging \(INFO\) be used in helper class outside of TEST\_CASE?\
 [\#169](https://github.com/doctest/doctest/issues/169)

**Merged pull requests:**

- Change the include path in examples as \#175 [\#180](https://github.com/doc\
test/doctest/pull/180) ([ncihnegn](https://github.com/ncihnegn))
- Fix CMake include path \#175 [\#179](https://github.com/doctest/doctest/pul\
l/179) ([ncihnegn](https://github.com/ncihnegn))

## [2.2.1](https://github.com/doctest/doctest/tree/2.2.1) (2019-01-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.0...2.2.1)

**Closed issues:**

- the `--no-throw` option shouldn't affect `\<LEVEL\>\_NOTHROW` asserts\
 [\#173](https://github.com/doctest/doctest/issues/173)
- Make doctest work with XCode 6 and 7 \(no support for C++11 thread\_local\)\
 [\#172](https://github.com/doctest/doctest/issues/172)
- Print vector content. [\#170](https://github.com/doctest/doctest/issues/170)
- Conan package [\#103](https://github.com/doctest/doctest/issues/103)
- \[feature request\] Thread-safety for asserts and logging facilities\
 [\#4](https://github.com/doctest/doctest/issues/4)

## [2.2.0](https://github.com/doctest/doctest/tree/2.2.0) (2018-12-05)
[Full Changelog](https://github.com/doctest/doctest/compare/2.1.0...2.2.0)

**Closed issues:**

- remove the FAST\_ versions of the binary asserts \(not a breaking change!\)\
 [\#167](https://github.com/doctest/doctest/issues/167)
- \[compile times\] make the DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS identifier\
 affect normal asserts too [\#166](https://github.com/doctest/doctest/issues/\
166)

## [2.1.0](https://github.com/doctest/doctest/tree/2.1.0) (2018-11-30)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.1...2.1.0)

**Closed issues:**

- doctest::String ctor with non-zero terminated string [\#165](https://github\
.com/doctest/doctest/issues/165)
- thread\_local is not supported on iOS 9.0 [\#164](https://github.com/doctes\
t/doctest/issues/164)
- Compiler error on Android NDK r18 [\#163](https://github.com/doctest/doctes\
t/issues/163)
- \[question\] One setup for multiple tests [\#160](https://github.com/doctes\
t/doctest/issues/160)
- clang unwanted warning in user code [\#156](https://github.com/doctest/doct\
est/issues/156)
- Unsigned integer overflow in fileOrderComparator [\#151](https://github.com\
/doctest/doctest/issues/151)
- ThreadSanitizer: signal-unsafe call inside of a signal [\#147](https://gith\
ub.com/doctest/doctest/issues/147)
- Feature request: check for exception string \(like Catch's\
 CHECK\_THROWS\_WITH\) [\#97](https://github.com/doctest/doctest/issues/97)

**Merged pull requests:**

- Fixed build error under Android NDK [\#162](https://github.com/doctest/doct\
est/pull/162) ([tals](https://github.com/tals))
- Added clang-7 to travis build [\#161](https://github.com/doctest/doctest/pu\
ll/161) ([AMS21](https://github.com/AMS21))
- Remove clang-tidy warnings for static fields created by doctest\
 [\#159](https://github.com/doctest/doctest/pull/159) ([rantasub](https://git\
hub.com/rantasub))
- Make it possible to change the command line options prefix\
 [\#158](https://github.com/doctest/doctest/pull/158) ([tbleher](https://gith\
ub.com/tbleher))

## [2.0.1](https://github.com/doctest/doctest/tree/2.0.1) (2018-10-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.0...2.0.1)

**Closed issues:**

- macro name collision with google log [\#157](https://github.com/doctest/doc\
test/issues/157)
- Add \#define to not run tests by default [\#152](https://github.com/doctest\
/doctest/issues/152)
- REQUIRE\_THROWS\_MESSAGE not checking message correctly [\#150](https://git\
hub.com/doctest/doctest/issues/150)
- Test case passes even though subcase failed [\#149](https://github.com/doct\
est/doctest/issues/149)

**Merged pull requests:**

- Correctly document when a main\(\) entry point will be created\
 [\#155](https://github.com/doctest/doctest/pull/155) ([tbleher](https://gith\
ub.com/tbleher))
- Correct format string for unsigned char [\#154](https://github.com/doctest/\
doctest/pull/154) ([tbleher](https://github.com/tbleher))

## [2.0.0](https://github.com/doctest/doctest/tree/2.0.0) (2018-08-23)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.9...2.0.0)

**Closed issues:**

- MSVC 2017 15.8.1, New Warnings as Errors [\#144](https://github.com/doctest\
/doctest/issues/144)
- Windows clang-cl -Wdeprecated-declarations warnings [\#143](https://github.\
com/doctest/doctest/issues/143)
- Logo Proposal for Doctest [\#141](https://github.com/doctest/doctest/issues\
/141)
- PCH Support [\#140](https://github.com/doctest/doctest/issues/140)
- improve compile times even further [\#139](https://github.com/doctest/docte\
st/issues/139)
- !!! BREAKING CHANGE !!! - Move to C++11 for next version of the library\
 [\#137](https://github.com/doctest/doctest/issues/137)
- getCurrentTicks producing warning on MinGW [\#133](https://github.com/docte\
st/doctest/issues/133)
- \[enhancement\] Add support for "stand-alone assertions".\
 [\#114](https://github.com/doctest/doctest/issues/114)

**Merged pull requests:**

- Suppress compiler warning on MinGW [\#134](https://github.com/doctest/docte\
st/pull/134) ([AMS21](https://github.com/AMS21))

## [1.2.9](https://github.com/doctest/doctest/tree/1.2.9) (2018-05-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.8...1.2.9)

**Closed issues:**

- GCC 8.0 std::uncaught\_exception\(\) is deprecated  [\#130](https://github.\
com/doctest/doctest/issues/130)
- Signal stack size too small on Linux [\#129](https://github.com/doctest/doc\
test/issues/129)
- Support Intel Compiler [\#128](https://github.com/doctest/doctest/issues/12\
8)
- Please add support for MSVC 2005 [\#127](https://github.com/doctest/doctest\
/issues/127)
- scan-build report "Dereference of null pointer" for function wildcmp\
 [\#124](https://github.com/doctest/doctest/issues/124)
- !!! BREAKING CHANGE \(console output only\)  !!! - Emulate the\
 error/warning format emitted by native compiler gcc/clang/msvc when printing\
 test failures in the log [\#123](https://github.com/doctest/doctest/issues/1\
23)
- ARM builds: FTBFS on armhf - error: cast from 'const char\*' to 'const \
 [\#118](https://github.com/doctest/doctest/issues/118)

**Merged pull requests:**

- Exclude Intel from GCC compiler check [\#132](https://github.com/doctest/do\
ctest/pull/132) ([smcallis](https://github.com/smcallis))
- Fix deprecated-declarations warning with GCC-8.0 [\#131](https://github.com\
/doctest/doctest/pull/131) ([AMS21](https://github.com/AMS21))

## [1.2.8](https://github.com/doctest/doctest/tree/1.2.8) (2018-03-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.7...1.2.8)

**Closed issues:**

- ARM64 builds: templated\_test\_cases.cpp test fails [\#119](https://github.\
com/doctest/doctest/issues/119)

## [1.2.7](https://github.com/doctest/doctest/tree/1.2.7) (2018-02-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.6...1.2.7)

**Closed issues:**

- MSan has runtime error: unsigned integer overflow [\#116](https://github.co\
m/doctest/doctest/issues/116)
- clang-tidy warning about cert-err58-cpp [\#115](https://github.com/doctest/\
doctest/issues/115)
- Linking errors [\#113](https://github.com/doctest/doctest/issues/113)
- inlining function defs [\#111](https://github.com/doctest/doctest/issues/11\
1)
- Nullptr issue. [\#110](https://github.com/doctest/doctest/issues/110)
- MemorySanitizer: use-of-uninitialized-value [\#109](https://github.com/doct\
est/doctest/issues/109)
- Potential memory leak through scan-build [\#108](https://github.com/doctest\
/doctest/issues/108)
- Warnings raised to error with latest MSVC version [\#107](https://github.co\
m/doctest/doctest/issues/107)
- New solution for tests in static libraries ! \(MSVC\) [\#106](https://githu\
b.com/doctest/doctest/issues/106)
- Command line flags do not work after code formatter/beautifier\
 [\#104](https://github.com/doctest/doctest/issues/104)
- Cppcheck 1.81 warnings [\#102](https://github.com/doctest/doctest/issues/10\
2)

**Merged pull requests:**

- Fix macros WIN32\_LEAN\_AND\_MEAN typo [\#112](https://github.com/doctest/d\
octest/pull/112) ([vladimirgamalyan](https://github.com/vladimirgamalyan))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set \(\#99\)\
 [\#100](https://github.com/doctest/doctest/pull/100) ([onqtam](https://githu\
b.com/onqtam))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set\
 [\#99](https://github.com/doctest/doctest/pull/99) ([OdyX](https://github.co\
m/OdyX))

## [1.2.6](https://github.com/doctest/doctest/tree/1.2.6) (2017-10-29)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.5...1.2.6)

**Closed issues:**

- \[bug\] writing an exception translator in a header file results in it\
 being registered multiple times which is suboptimal [\#98](https://github.co\
m/doctest/doctest/issues/98)
- Warnings when using something more than /W4 for Visual Studio\
 [\#95](https://github.com/doctest/doctest/issues/95)

**Merged pull requests:**

- Added an option to not install Doctest in the CMake scripts\
 [\#96](https://github.com/doctest/doctest/pull/96) ([nm17](https://github.co\
m/nm17))
- Adding a defensive check against a null pointer for the current test suite\
 [\#94](https://github.com/doctest/doctest/pull/94) ([Lectem](https://github.\
com/Lectem))
- Remove incomplete copy ctor [\#93](https://github.com/doctest/doctest/pull/\
93) ([McMartin](https://github.com/McMartin))

## [1.2.5](https://github.com/doctest/doctest/tree/1.2.5) (2017-10-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.4...1.2.5)

**Closed issues:**

- Xcode 9 / clang - unknown warning group [\#92](https://github.com/doctest/d\
octest/issues/92)

## [1.2.4](https://github.com/doctest/doctest/tree/1.2.4) (2017-09-20)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.3...1.2.4)

**Closed issues:**

- \[bug\] test cases can end up in the wrong test suite [\#91](https://github\
.com/doctest/doctest/issues/91)

## [1.2.3](https://github.com/doctest/doctest/tree/1.2.3) (2017-09-11)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.2...1.2.3)

**Closed issues:**

- \[bug\] Defining a variable T inside a test with DOCTEST\_CONFIG\_DISABLE\
 defined does not compile [\#90](https://github.com/doctest/doctest/issues/90)
- \[support\] Using `DOCTEST\_CONFIG\_NO\_SHORT\_MACRO\_NAMES` does not\
 compile using g++ 6.3.0 [\#89](https://github.com/doctest/doctest/issues/89)
- \[question\] Why are SUBCASEs executed only once when within a function\
 called multiple times? [\#88](https://github.com/doctest/doctest/issues/88)

## [1.2.2](https://github.com/doctest/doctest/tree/1.2.2) (2017-09-05)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.1...1.2.2)

**Closed issues:**

- \[question\] Differences between doctest and googletest \(gtest\) for\
 uninitialised local variables in test cases [\#86](https://github.com/doctes\
t/doctest/issues/86)
- !!! BREAKING CHANGE !!! - remove the custom implementation of\
 std::is\_constructible and optionally use the \<type\_traits\> header\
 because of infinite template recursion issues with GCC [\#85](https://github\
.com/doctest/doctest/issues/85)
- Static Analysis results of doctest [\#83](https://github.com/doctest/doctes\
t/issues/83)
- !!! BREAKING CHANGE !!! - catch exceptions as const reference in\
 \<LEVEL\>\_THROWS\_AS [\#81](https://github.com/doctest/doctest/issues/81)
- doctest implementation as static library [\#77](https://github.com/doctest/\
doctest/issues/77)
- Provide some easy way to compare structs containing float/doubles\
 [\#73](https://github.com/doctest/doctest/issues/73)

**Merged pull requests:**

- Add support for templated scenarios [\#87](https://github.com/doctest/docte\
st/pull/87) ([Lectem](https://github.com/Lectem))
- Prefer if\(MSVC\) in CMakeLists.txt. [\#84](https://github.com/doctest/doct\
est/pull/84) ([martinmoene](https://github.com/martinmoene))
- catch throw\_as exception as const reference [\#82](https://github.com/doct\
est/doctest/pull/82) ([a4z](https://github.com/a4z))
- Added doctest\_with\_main static lib [\#78](https://github.com/doctest/doct\
est/pull/78) ([ymadzhunkov](https://github.com/ymadzhunkov))

## [1.2.1](https://github.com/doctest/doctest/tree/1.2.1) (2017-05-24)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.0...1.2.1)

**Closed issues:**

- Compile error under MSVC 2015/2017 if \<thread\> included in same file as\
 "doctest.h" [\#72](https://github.com/doctest/doctest/issues/72)

**Merged pull requests:**

- docs: TEST\_CASE\_METHOD -\> TEST\_CASE\_FIXTURE [\#71](https://github.com/\
doctest/doctest/pull/71) ([akrzemi1](https://github.com/akrzemi1))

## [1.2.0](https://github.com/doctest/doctest/tree/1.2.0) (2017-05-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.4...1.2.0)

**Closed issues:**

- Further improvements on compile time - disable inlining of functions used\
 in asserts [\#70](https://github.com/doctest/doctest/issues/70)
- Improve runtime performance - lazy stringification, more inlining, no\
 statics on the hot path, move semantics for classes such as doctest::String\
 which are used by value, etc. [\#69](https://github.com/doctest/doctest/issu\
es/69)
- Add option to show duration of test case execution and add a\
 timeout\(seconds\) decorator - marking them as failed if they exceed it\
 [\#68](https://github.com/doctest/doctest/issues/68)
- Add support for test case decorators - label, description, skip, may\_fail,\
 should\_fail, expected\_failures, etc. [\#67](https://github.com/doctest/doc\
test/issues/67)
- Integrate static analysis into the CI builds [\#66](https://github.com/doct\
est/doctest/issues/66)
- Print the test suite name on test case failure [\#65](https://github.com/do\
ctest/doctest/issues/65)
- Add signal handlers to handle crashes \(and use SEH under Windows\) -\
 report which test case failed [\#63](https://github.com/doctest/doctest/issu\
es/63)
- Add support to Approx for strong typedefs of double [\#62](https://github.c\
om/doctest/doctest/issues/62)
- \[question\] Is there a way to always have 0 as the exit code regardless of\
 test results? [\#59](https://github.com/doctest/doctest/issues/59)
- Add support for un-parenthesized expressions containing commas in asserts\
 [\#58](https://github.com/doctest/doctest/issues/58)
- Add ability to filter subcases with filters [\#57](https://github.com/docte\
st/doctest/issues/57)
- Add option to query if code is being ran inside of a test -\
 doctest::is\_running\_in\_test [\#56](https://github.com/doctest/doctest/iss\
ues/56)
- Ability for a binary \(executable / shared object\) to use the test runner\
 implementation of another binary - with exported symbols - so tests end up\
 in a single registry [\#55](https://github.com/doctest/doctest/issues/55)
- How to force the use of colors in the terminal? [\#54](https://github.com/d\
octest/doctest/issues/54)
- How can I mix production code with the Unit Tests? [\#53](https://github.co\
m/doctest/doctest/issues/53)
- add \<= and \>= operators to Approx \(and also maybe \< and \>\)\
 [\#52](https://github.com/doctest/doctest/issues/52)
- Add ability to capture variables from test scope [\#48](https://github.com/\
doctest/doctest/issues/48)
- !!! BREAKING CHANGE !!! - Make TEST\_SUITE work with blocks and add\
 TEST\_SUITE\_BEGIN [\#41](https://github.com/doctest/doctest/issues/41)
- Add option to print which test suites/cases are run [\#39](https://github.c\
om/doctest/doctest/issues/39)
- Add support for templated test cases - parameterized by type\
 [\#38](https://github.com/doctest/doctest/issues/38)
- Add custom failure messages with lazy stringification [\#23](https://github\
.com/doctest/doctest/issues/23)
- Add an exception translation mechanism + the ability for users to extend it\
 with custom exception types [\#12](https://github.com/doctest/doctest/issues\
/12)
- Add API for reporting failures [\#9](https://github.com/doctest/doctest/iss\
ues/9)

**Merged pull requests:**

- Update doctest to work with ARM DS5-compiler [\#64](https://github.com/doct\
est/doctest/pull/64) ([tomasnilefrost](https://github.com/tomasnilefrost))

## [1.1.4](https://github.com/doctest/doctest/tree/1.1.4) (2017-02-18)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.3...1.1.4)

**Closed issues:**

- Add option --force-colors - for when a tty is not detected for stdout\
 [\#51](https://github.com/doctest/doctest/issues/51)
- Issue with using lambdas in tests in gcc [\#49](https://github.com/doctest/\
doctest/issues/49)
- Add the include file to releases [\#47](https://github.com/doctest/doctest/\
issues/47)

**Merged pull requests:**

- Add translation of std::exception for exceptions that terminate a test case\
 [\#46](https://github.com/doctest/doctest/pull/46) ([eliaskosunen](https://g\
ithub.com/eliaskosunen))

## [1.1.3](https://github.com/doctest/doctest/tree/1.1.3) (2016-11-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.2...1.1.3)

**Closed issues:**

- Exception handlers cause warnings when exceptions are disabled\
 [\#44](https://github.com/doctest/doctest/issues/44)

## [1.1.2](https://github.com/doctest/doctest/tree/1.1.2) (2016-10-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.1...1.1.2)

**Closed issues:**

- clang warnings when using C++11 or newer [\#42](https://github.com/doctest/\
doctest/issues/42)
- \[support\] identical names for test suites? [\#40](https://github.com/doct\
est/doctest/issues/40)

## [1.1.1](https://github.com/doctest/doctest/tree/1.1.1) (2016-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.0...1.1.1)

## [1.1.0](https://github.com/doctest/doctest/tree/1.1.0) (2016-09-21)
[Full Changelog](https://github.com/doctest/doctest/compare/1.0.0...1.1.0)

**Closed issues:**

- char\* comparison uses the contents, not the pointer [\#36](https://github.\
com/doctest/doctest/issues/36)
- add configuration preprocessor identifier for passing by value in\
 assertions instead of by reference [\#35](https://github.com/doctest/doctest\
/issues/35)
- restrict expressions in assertion macros to binary comparisons at most with\
 a static assert [\#34](https://github.com/doctest/doctest/issues/34)
- Add clearFilters\(\) to doctest::Context [\#33](https://github.com/doctest/\
doctest/issues/33)
- A way to refrain from polluting “\#define” space for users of tested code?\
 [\#32](https://github.com/doctest/doctest/issues/32)
- drop VC++6 support [\#31](https://github.com/doctest/doctest/issues/31)
- False positive test [\#30](https://github.com/doctest/doctest/issues/30)
- Turn off coloring after tests are finished? [\#28](https://github.com/docte\
st/doctest/issues/28)
- C++11 nullptr [\#27](https://github.com/doctest/doctest/issues/27)
- Only one SUBCASE per line is executed [\#25](https://github.com/doctest/doc\
test/issues/25)
- creative formatting of chars [\#24](https://github.com/doctest/doctest/issu\
es/24)
- DOCTEST\_BREAK\_INTO\_DEBUGGER undefined under OSX [\#22](https://github.co\
m/doctest/doctest/issues/22)
- Tests inside a static library [\#21](https://github.com/doctest/doctest/iss\
ues/21)
- Add example how to remove doctest options from the command line for the\
 program after the tests run [\#20](https://github.com/doctest/doctest/issues\
/20)
- Single-letter options active even without leading '-' \(dash\)\
 [\#19](https://github.com/doctest/doctest/issues/19)
- pointer stringification not working for compilers different from MSVC\
 [\#18](https://github.com/doctest/doctest/issues/18)
- Tests that accompany code run and produce output at default\
 [\#17](https://github.com/doctest/doctest/issues/17)
- GCC 5.3.1 Compiler warning: sign compare [\#16](https://github.com/doctest/\
doctest/issues/16)
- Slower than Catch in realistic test cases [\#14](https://github.com/doctest\
/doctest/issues/14)
- Rename doctest::detail::Result res; in DOCTEST\_ASSERT\_IMPLEMENT\
 [\#10](https://github.com/doctest/doctest/issues/10)
- No red when all tests pass [\#7](https://github.com/doctest/doctest/issues/\
7)
- UNIX line feedings on GitHub please [\#6](https://github.com/doctest/doctes\
t/issues/6)

**Merged pull requests:**

- don't show green when tests fail [\#26](https://github.com/doctest/doctest/\
pull/26) ([ferkulat](https://github.com/ferkulat))
- Include "program code" in example [\#15](https://github.com/doctest/doctest\
/pull/15) ([martinmoene](https://github.com/martinmoene))

## [1.0.0](https://github.com/doctest/doctest/tree/1.0.0) (2016-05-22)
**Merged pull requests:**

- Reduce the header size for test users [\#3](https://github.com/doctest/doct\
est/pull/3) ([zah](https://github.com/zah))
- Add a Gitter chat badge to README.md [\#1](https://github.com/doctest/docte\
st/pull/1) ([gitter-badger](https://github.com/gitter-badger))



\* *This Change Log was automatically generated by [github_changelog_generato\
r](https://github.com/skywinder/Github-Changelog-Generator)*
\
changes-type: text/markdown;variant=GFM
url: https://github.com/doctest/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++11 | c++14 | c++17 | c++20
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

test.target = $cxx.target

\
location: doctest/doctest-2.4.9.tar.gz
sha256sum: 23e053048b99291836fd1b5ff69ec3b263f1bf71fc031f48e6cf868f8710f9ab
:
name: doctest
version: 2.4.10
summary: The fastest feature-rich C++11/14/17/20 single-header testing\
 framework for unit tests and TDD
license: MIT
description:
\
<h1 align="center">
    build2 Package for doctest
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/doctest/doctest">doctest</a>.
    doctest is a new C++ testing framework but is by far the fastest both in\
 compile times and runtime compared to other feature-rich alternatives. It\
 brings the ability to have tests written directly in the production code\
 thanks to a fast, transparent and flexible test runner with a clean\
 interface.
</p>

<p align="center">
    <a href="https://github.com/doctest/doctest">
        <img src="https://img.shields.io/website/https/github.com/doctest/doc\
test.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blu\
e&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/doctest">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/doctest.svg?down_message=offline&label=build2&style=for-the-badge&up_co\
lor=blue&up_message=online">
    </a>
    <a href="https://cppget.org/doctest">
        <img src="https://img.shields.io/website/https/cppget.org/doctest.svg\
?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_m\
essage=online">
    </a>
    <a href="https://queue.cppget.org/doctest">
        <img src="https://img.shields.io/website/https/queue.cppget.org/docte\
st.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-th\
e-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable `cppget.org` repositories to your project's\
 `repositories.manifest` to be able to fetch the packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: doctest ^ 2.4.10

The header-only C++ library to use doctest as your unit testing framework can\
 be imported by the following declaration in a `buildfile`.

    import doctest = doctest%lib{doctest}

## Configuration
There are no configuration options vailable.

## Issues
Currently, there are no known issues.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/doctest/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/doctest\
/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/doctes\
t) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
description-type: text/markdown;variant=GFM
changes:
\
# Change Log

## [v2.4.10](https://github.com/doctest/doctest/tree/v2.4.10) (2023-02-27)

[Full Changelog](https://github.com/doctest/doctest/compare/v2.4.9...v2.4.10)

## [v2.4.9](https://github.com/doctest/doctest/tree/v2.4.9) (2022-06-18)
[Full Changelog](https://github.com/doctest/doctest/compare/v2.4.8...v2.4.9)

**Closed issues:**
- Visual Studio's Test Explorer and Resharper C\+\+'s Unit Test Explorer\
 don't see Doctest's tests \#661 ([KulaGGin](https://github.com/KulaGGin))
- How to get detailed information about testcases failing due to thrown\
 exceptions? \#660 ([NiklasKappel](https://github.com/NiklasKappel))
- Add clang\-tidy integration and fix all warnings \#659 ([Saalvage](https://\
github.com/Saalvage))
- Avoid static init problem in insufficient\_procs\(\) \(MPI\) \#657\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Use MPI\_Isend in MpiConsoleReporter to avoid deadlock \#656\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Deadlock in MpiConsoleReporter when root rank fails assert \#655\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Cleanup of DOCTEST\_DO\_BINARY\_EXPRESSION\_COMPARISON\. Fixes \#651 \#652\
 ([iboB](https://github.com/iboB))
- Comparison with implicit cast from non\-const value can't be decomposed\
 \#651 ([iboB](https://github.com/iboB))
- Local structured bindings cannot be used in CHECK macros \(since 2\.4\.8\)\
 \#647 ([pragmaxwell](https://github.com/pragmaxwell))
- Add tests for DOCTEST\_CONFIG\_USE\_STD\_HEADERS \#643 ([Saalvage](https://\
github.com/Saalvage))
- Stringification amendments \#642 ([Saalvage](https://github.com/Saalvage))
- Clean up defines a bit; Implement \#439 \#641 ([Saalvage](https://github.co\
m/Saalvage))
- Fix \#508 \#640 ([Saalvage](https://github.com/Saalvage))
- Fix \#508 \#639 ([Saalvage](https://github.com/Saalvage))
- New doctest version gives me an error: reference to local binding '\.\.\.'\
 declared in enclosing function 'DOCTEST\_ANON\_FUNC\_16' \#638\
 ([a4z](https://github.com/a4z))
- The tutorial example does not work \(linker errors\) with clang 10 \#637\
 ([sixcy](https://github.com/sixcy))
- Implementing \`DOCTEST\_ASSERT\_IMPLEMENT\_1\` as lambda prevents testing\
 structured bindings \#636 ([ChrisThrasher](https://github.com/ChrisThrasher))
- re\-re\-remove overly restrictive minimum version of meson \#635\
 ([eli-schwartz](https://github.com/eli-schwartz))
- Fix move\-only types failing to decompose correctly \#634\
 ([Saalvage](https://github.com/Saalvage))
- Weird compilation error when using CHECK\_THROWS/CHECK\_THROWS\_AS on\
 Visual Studio 2019 with no exceptions \#633 ([yeputons](https://github.com/y\
eputons))
- Error triggered by comparing typeid with new doctest 2\.4\.8 \#632\
 ([JazzSuite](https://github.com/JazzSuite))
- Improve Mac PowerPC support \#631 ([ryandesign](https://github.com/ryandesi\
gn))
- issue introduced in 2\.4\.7 \#630 ([onqtam](https://github.com/onqtam))
- Decompose expressions containing the spaceship operator \#629\
 ([falbrechtskirchinger](https://github.com/falbrechtskirchinger))
- added nolint for cert\-err58 \#628 ([serguei-k](https://github.com/serguei-\
k))
- Fix properties not being passed in doctest\_discover\_tests \#626\
 ([quantumsteve](https://github.com/quantumsteve))
- Config no multithreading \#625 ([Saalvage](https://github.com/Saalvage))
- wasm\*\-support? \#624 ([FrozenSource](https://github.com/FrozenSource))
- Fix MPI extension to work with no parallel tests \#623 ([BerengerBerthoul](\
https://github.com/BerengerBerthoul))
- string comparison leads to gotting stuck \#622 ([laoshaw](https://github.co\
m/laoshaw))
- doctest\_discover\_tests no longer sets ENVIRONMENT variables for\
 discovered tests\.  \#621 ([quantumsteve](https://github.com/quantumsteve))
- Add contains option to checks\. \#620 ([MFraters](https://github.com/MFrate\
rs))
- Feature request: CHECK\_THROWS\_WITH with contains option \#619\
 ([MFraters](https://github.com/MFraters))
- Add alias target for doctest\_with\_main \#617 ([jessestricker](https://git\
hub.com/jessestricker))
- Allow escaping backslash with backslash in filters \(\#614\) \#616\
 ([yeputons](https://github.com/yeputons))
- Fix operator<< \#615 ([Saalvage](https://github.com/Saalvage))
- Correct minor typos \#613 ([utilForever](https://github.com/utilForever))
- Fix MPI extension to work if launched without mpirun/mpiexec \#612\
 ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Fix mpi subcase \#611 ([BerengerBerthoul](https://github.com/BerengerBertho\
ul))
- compilation error with custom operator== defined in namespace \#610\
 ([zvyagin1](https://github.com/zvyagin1))
- Regression: Clang\-Tidy warnings in 2\.4\.8 \#607 ([nlohmann](https://githu\
b.com/nlohmann))
- Internal compiler error with GCC 7\.5 \#606 ([foonathan](https://github.com\
/foonathan))
- tagging convension has changed? \#605 ([kloczek](https://github.com/kloczek\
))
- Update Doctest in vcpkg to 2\.4\.8 \#604 ([gc435](https://github.com/gc435))
- Add IsNaN operator\! \#603 ([Saalvage](https://github.com/Saalvage))
- Ignored generated files from CMake, OSX, Xcode, and VS \#602\
 ([LeonBrands](https://github.com/LeonBrands))
- Move roadmap and wipe it clean \#601 ([Saalvage](https://github.com/Saalvag\
e))
- removes a duplicate word 'most' in configuration\.md \#599\
 ([krishnakumarg1984](https://github.com/krishnakumarg1984))
- Fix subcase reentry \#598 ([Saalvage](https://github.com/Saalvage))
- Loop\-generated \`SUBCASE\`s are not run \#597 ([yeputons](https://github.c\
om/yeputons))
- Void \#596 ([Saalvage](https://github.com/Saalvage))
- Add flag that forces custom stringification methods to be provided \#595\
 ([Saalvage](https://github.com/Saalvage))
- Fix coverage \#594 ([Saalvage](https://github.com/Saalvage))
- TEST CODECOV PR BEHAVIOR \#593 ([Saalvage](https://github.com/Saalvage))
- Ignore CMake and MacOS generated files \#592 ([LeonBrands](https://github.c\
om/LeonBrands))
- Feature request: option to disable fallback "\{?\}" stringifier \#591\
 ([YarikTH](https://github.com/YarikTH))
- Add tests for default stringification result of doctest \#590\
 ([YarikTH](https://github.com/YarikTH))
- Feature config ret vals \#589 ([Saalvage](https://github.com/Saalvage))
- DOCTEST\_CONFIG\_ASSERT\_RETURN\_VALUES \#588 ([Saalvage](https://github.co\
m/Saalvage))
- Support pretty printing of container based on heuristics \#587\
 ([YarikTH](https://github.com/YarikTH))
- Refactor stringification \#585 ([Saalvage](https://github.com/Saalvage))
- Feature: Better NaN \#584 ([Saalvage](https://github.com/Saalvage))
- Nan check \#582 ([Saalvage](https://github.com/Saalvage))
- Update roadmap following maintainer change \#581 ([eyalroz](https://github.\
com/eyalroz))
- Regression between 2\.4\.6 and 2\.4\.7 \#571 ([YarikTH](https://github.com/\
YarikTH))
- build failure with gcc\-11\.2 when using user declared operator<<\(ostream,\
 vector\) \#551 ([nlitsme](https://github.com/nlitsme))
- variable maximum is assigned 6206517616395625 instead of the actual return\
 value which is 5\.0 \#530 ([kk723](https://github.com/kk723))
- toString can call existing user\-defined toString through ADL incorrectly\
 \#508 ([zeux](https://github.com/zeux))
- \[Coverity\] Concurrent data access violations \(MISSING\_LOCK\)\
 doctest\.h: 5838 in doctest::<unnamed>::ConsoleReporter::test\_case\_start\(\
const doctest::TestCaseData &\)\(\) \#486 ([jiridanek](https://github.com/jir\
idanek))
- Provide an error message if REQUIRE \(or other disabled assertion macros\)\
 are used when exceptions are disabled \#439 ([alexeyr](https://github.com/al\
exeyr))
- Conflict with templated toString function \#420 ([TillHeinzel](https://gith\
ub.com/TillHeinzel))
- \-tc does not work with comma in names \#398 ([martinus](https://github.com\
/martinus))
- Compile error on MSVC2019 with any macro which involves stringification of\
 std::string \(asserts, INFO, etc\.\) when <ostream> isn't included \#381\
 ([nyanpasu64](https://github.com/nyanpasu64))
- the dll example doesn't run correctly on Windows with MinGW \#375\
 ([GregKon](https://github.com/GregKon))
- add basic conan recipe \#354 ([trondhe](https://github.com/trondhe))
- CHECK\_MESSAGE\(\) should accept temporaries \#337 ([eyalroz](https://githu\
b.com/eyalroz))
- stringify of cstring literals doesn't work out of the box with separate\
 test\_driver\.cpp \#329 ([teichert](https://github.com/teichert))
- warning : function declared 'noreturn' should not return\
 \[\-Winvalid\-noreturn\] \#307 ([Vexthil](https://github.com/Vexthil))
- Test cases containing a comma cannot be run individually \#297\
 ([Tradias](https://github.com/Tradias))
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest \#242 ([BrunaoW](https://github.com/BrunaoW))
- The \`CHECK\` macro conflicts with Boost\.Beast \(and surely others\) \#234\
 ([reddwarf69](https://github.com/reddwarf69))
- Feature request: check if a \`float\` or \`double\` is NaN \#105\
 ([iamthad](https://github.com/iamthad))

**Merged pull requests:**
- Add clang\-tidy integration and fix all warnings \#659 ([Saalvage](https://\
github.com/Saalvage))
- Avoid static init problem in insufficient\_procs\(\) \(MPI\) \#657\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Use MPI\_Isend in MpiConsoleReporter to avoid deadlock \#656\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Cleanup of DOCTEST\_DO\_BINARY\_EXPRESSION\_COMPARISON\. Fixes \#651 \#652\
 ([iboB](https://github.com/iboB))
- Add tests for DOCTEST\_CONFIG\_USE\_STD\_HEADERS \#643 ([Saalvage](https://\
github.com/Saalvage))
- Stringification amendments \#642 ([Saalvage](https://github.com/Saalvage))
- Clean up defines a bit; Implement \#439 \#641 ([Saalvage](https://github.co\
m/Saalvage))
- Fix \#508 \#640 ([Saalvage](https://github.com/Saalvage))
- re\-re\-remove overly restrictive minimum version of meson \#635\
 ([eli-schwartz](https://github.com/eli-schwartz))
- Fix move\-only types failing to decompose correctly \#634\
 ([Saalvage](https://github.com/Saalvage))
- Improve Mac PowerPC support \#631 ([ryandesign](https://github.com/ryandesi\
gn))
- added nolint for cert\-err58 \#628 ([serguei-k](https://github.com/serguei-\
k))
- Fix properties not being passed in doctest\_discover\_tests \#626\
 ([quantumsteve](https://github.com/quantumsteve))
- Config no multithreading \#625 ([Saalvage](https://github.com/Saalvage))
- Fix MPI extension to work with no parallel tests \#623 ([BerengerBerthoul](\
https://github.com/BerengerBerthoul))
- Add contains option to checks\. \#620 ([MFraters](https://github.com/MFrate\
rs))
- Add alias target for doctest\_with\_main \#617 ([jessestricker](https://git\
hub.com/jessestricker))
- Allow escaping backslash with backslash in filters \(\#614\) \#616\
 ([yeputons](https://github.com/yeputons))
- Fix operator<< \#615 ([Saalvage](https://github.com/Saalvage))
- Fix MPI extension to work if launched without mpirun/mpiexec \#612\
 ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Fix mpi subcase \#611 ([BerengerBerthoul](https://github.com/BerengerBertho\
ul))
- Add IsNaN operator\! \#603 ([Saalvage](https://github.com/Saalvage))
- Move roadmap and wipe it clean \#601 ([Saalvage](https://github.com/Saalvag\
e))
- removes a duplicate word 'most' in configuration\.md \#599\
 ([krishnakumarg1984](https://github.com/krishnakumarg1984))
- Fix subcase reentry \#598 ([Saalvage](https://github.com/Saalvage))
- Add flag that forces custom stringification methods to be provided \#595\
 ([Saalvage](https://github.com/Saalvage))
- Fix coverage \#594 ([Saalvage](https://github.com/Saalvage))
- Ignore CMake and MacOS generated files \#592 ([LeonBrands](https://github.c\
om/LeonBrands))
- Feature config ret vals \#589 ([Saalvage](https://github.com/Saalvage))
- Refactor stringification \#585 ([Saalvage](https://github.com/Saalvage))
- Feature: Better NaN \#584 ([Saalvage](https://github.com/Saalvage))
- Nan check \#582 ([Saalvage](https://github.com/Saalvage))

## [v2.4.8](https://github.com/doctest/doctest/tree/v2.4.8) (2022-01-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.7...v2.4.8)

**Closed issues:**

- \[meta\] Change git tagging pattern [\#579](https://github.com/doctest/doct\
est/issues/579)
- TEST\_CASE\_TEMPLATE causes "-Wunused-local-typedef" warning on Clang\
 [\#577](https://github.com/doctest/doctest/issues/577)
- Regression between 2.4.6 and 2.4.7 with Visual Studio 2015\
 [\#573](https://github.com/doctest/doctest/issues/573)
- Regression between 2.4.6 and 2.4.7 [\#571](https://github.com/doctest/docte\
st/issues/571)
- Compilation error on MSVS2019 with ClangCL [\#570](https://github.com/docte\
st/doctest/issues/570)
- Compilation errors on MSVC 2015 after doctest update to 2.4.7\
 [\#568](https://github.com/doctest/doctest/issues/568)
- `g\_oss` is causing incorrect stringification results [\#567](https://githu\
b.com/doctest/doctest/issues/567)
- MSVC warnings leak through when using the library as a single header with\
 /Wall [\#565](https://github.com/doctest/doctest/issues/565)
- \[PROJECT ANNOUNCEMENT\] Looking for maintainers for Doctest\
 [\#554](https://github.com/doctest/doctest/issues/554)
- Is this still maintained? [\#537](https://github.com/doctest/doctest/issues\
/537)
- \[Feature request\] CHECK could return the value of expression\
 [\#496](https://github.com/doctest/doctest/issues/496)
- Feature: check or return false [\#426](https://github.com/doctest/doctest/i\
ssues/426)
- Undefined reference of `operator\<\<\(ostream&, const string&\)` when\
 compiling with clang 10 and libc++ 10 on Ubuntu 16.04.6 LTS\
 [\#356](https://github.com/doctest/doctest/issues/356)
- Doctest is not able to compile on OSX [\#126](https://github.com/doctest/do\
ctest/issues/126)

**Merged pull requests:**

- Continuous Integration Refactor [\#580](https://github.com/doctest/doctest/\
pull/580) ([Saalvage](https://github.com/Saalvage))
- Fix semicolon enforcement [\#578](https://github.com/doctest/doctest/pull/5\
78) ([Saalvage](https://github.com/Saalvage))
- Fix unused variable 2 [\#576](https://github.com/doctest/doctest/pull/576)\
 ([Saalvage](https://github.com/Saalvage))
- Alternative approach to Windows color initialization [\#575](https://github\
.com/doctest/doctest/pull/575) ([Saalvage](https://github.com/Saalvage))
- Assertions returning booleans [\#574](https://github.com/doctest/doctest/pu\
ll/574) ([Saalvage](https://github.com/Saalvage))
- Fix the thread-local string-stream [\#569](https://github.com/doctest/docte\
st/pull/569) ([Saalvage](https://github.com/Saalvage))
- Clean up warning suppression a bit; Fixes \#565 [\#566](https://github.com/\
doctest/doctest/pull/566) ([Saalvage](https://github.com/Saalvage))
- Add Universal Windows Platform support [\#558](https://github.com/doctest/d\
octest/pull/558) ([isaevil](https://github.com/isaevil))

## [2.4.7](https://github.com/doctest/doctest/tree/2.4.7) (2021-12-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.6...2.4.7)

**Implemented enhancements:**

- Add a default Bazel BUILD file [\#433](https://github.com/doctest/doctest/i\
ssues/433)

**Fixed bugs:**

- Stack-buffer-overflow probably because char array is viewed as NULL\
 terminated string [\#476](https://github.com/doctest/doctest/issues/476)

**Closed issues:**

- "C4834: discarding return value" with REQUIRE\_THROWS [\#549](https://githu\
b.com/doctest/doctest/issues/549)
- Xcode 11.3 is gone from macOS-latest \(=macOS-11\) [\#547](https://github.c\
om/doctest/doctest/issues/547)
- is it possible to define dependency for CHECKs [\#545](https://github.com/d\
octest/doctest/issues/545)
- Output summary explanation [\#541](https://github.com/doctest/doctest/issue\
s/541)
- compiler errors in doctest.h using cmake in CLion [\#540](https://github.co\
m/doctest/doctest/issues/540)
- Fails to build in VS2013 because of constexpr [\#539](https://github.com/do\
ctest/doctest/issues/539)
- -Wreserved-identifier warnings with Clang 13.0.0 [\#536](https://github.com\
/doctest/doctest/issues/536)
- Build fails with latest MSVC 2019 \(v16.11\) due to /WX [\#535](https://git\
hub.com/doctest/doctest/issues/535)
- VS 16.11 warning about unreferenced function with internal linkage\
 [\#533](https://github.com/doctest/doctest/issues/533)
- Faq googletest mocking dead link [\#532](https://github.com/doctest/doctest\
/issues/532)
- FR: Documentation: FAQ: Add sectoin 'multiple files' [\#526](https://github\
.com/doctest/doctest/issues/526)
- CMAKE: doctest\_discover\_tests\(\) error when ADD\_LABELS is not specified\
 [\#524](https://github.com/doctest/doctest/issues/524)
- Register tests based on test data available [\#521](https://github.com/doct\
est/doctest/issues/521)
- naming override in different testcase files [\#517](https://github.com/doct\
est/doctest/issues/517)
- Segmentation fault during the compilation without the copy elision\
 optimization [\#515](https://github.com/doctest/doctest/issues/515)
- Compiler warnings on Xcode 12.5 [\#514](https://github.com/doctest/doctest/\
issues/514)
- Using filter `-sc` does not work properly? [\#513](https://github.com/docte\
st/doctest/issues/513)
- \[question\] Example of tests in production code & DLLs & shared libraries?\
 [\#511](https://github.com/doctest/doctest/issues/511)
- Dumping fixture state to disk on error [\#509](https://github.com/doctest/d\
octest/issues/509)
- Macros construct reserved identifiers [\#507](https://github.com/doctest/do\
ctest/issues/507)
- Running doctest on embedded ARM Cortex µCs [\#506](https://github.com/docte\
st/doctest/issues/506)
- Asserts Outside of Tests Example Does Not Link [\#504](https://github.com/d\
octest/doctest/issues/504)
- \[FEATURE REQUEST\] Quiet flag [\#503](https://github.com/doctest/doctest/i\
ssues/503)
- Compile error on Intel C++ Classic Compilers [\#502](https://github.com/doc\
test/doctest/issues/502)
- compiling doctest in 32-bit with \_\_stdcall calling convention fails\
 [\#500](https://github.com/doctest/doctest/issues/500)
- Duplicate 'const' compilation error from TEST\_CASE\_CLASS macro\
 [\#498](https://github.com/doctest/doctest/issues/498)
- Packed fields can't be accessed in 2.4.6 [\#495](https://github.com/doctest\
/doctest/issues/495)
- Dangling pointers with .str\(\).c\_str\(\) [\#494](https://github.com/docte\
st/doctest/issues/494)
- Automatic adding of TEST\_SUITE labels to discovered tests fails if\
 ADD\_LABELS not set [\#489](https://github.com/doctest/doctest/issues/489)
- Adding a bunch of REQUIRE/CHECK utilities [\#487](https://github.com/doctes\
t/doctest/issues/487)
- Warning C4114 in MSVC [\#485](https://github.com/doctest/doctest/issues/485)
- Own repository [\#410](https://github.com/doctest/doctest/issues/410)
- Linking problem with Clang 10 on Windows [\#362](https://github.com/doctest\
/doctest/issues/362)
- Add option not to print the intro text [\#342](https://github.com/doctest/d\
octest/issues/342)
- \[Feature\] Better integration with tools \(VS Code Test Adapter\
 Extension\) [\#320](https://github.com/doctest/doctest/issues/320)
- vscode test explorer [\#303](https://github.com/doctest/doctest/issues/303)
- Want an option not to print any intro [\#245](https://github.com/doctest/do\
ctest/issues/245)
- Add way to disable printing of intro [\#181](https://github.com/doctest/doc\
test/issues/181)

**Merged pull requests:**

- Make String::operator+ non-member [\#564](https://github.com/doctest/doctes\
t/pull/564) ([Saalvage](https://github.com/Saalvage))
- Add -minimal flag [\#562](https://github.com/doctest/doctest/pull/562)\
 ([Saalvage](https://github.com/Saalvage))
- Quiet flag [\#561](https://github.com/doctest/doctest/pull/561)\
 ([Saalvage](https://github.com/Saalvage))
- Fix redefinition error while using double time DOCTEST\_ANONYMOUS\(DOCTEST\_\
CAPTURE\_\) [\#557](https://github.com/doctest/doctest/pull/557)\
 ([isaevil](https://github.com/isaevil))
- Fix error: missing initializer for member doctest::detail::TestSuite\
 [\#556](https://github.com/doctest/doctest/pull/556) ([isaevil](https://gith\
ub.com/isaevil))
- Xcode 11.3 with macos 10.15 [\#548](https://github.com/doctest/doctest/pull\
/548) ([jsoref](https://github.com/jsoref))
- Spelling [\#546](https://github.com/doctest/doctest/pull/546)\
 ([jsoref](https://github.com/jsoref))
- Fix build with -Wunused-but-set-variable [\#543](https://github.com/doctest\
/doctest/pull/543) ([jktjkt](https://github.com/jktjkt))
- build\(meson\): use `override\_dependency` if supported [\#538](https://git\
hub.com/doctest/doctest/pull/538) ([Tachi107](https://github.com/Tachi107))
- Fix google death test URL [\#528](https://github.com/doctest/doctest/pull/5\
28) ([emrecil](https://github.com/emrecil))
- Fixing issue with doctestAddTests.cmake [\#527](https://github.com/doctest/\
doctest/pull/527) ([jharmer95](https://github.com/jharmer95))
- Replace gendered pronouns [\#525](https://github.com/doctest/doctest/pull/5\
25) ([mletterle](https://github.com/mletterle))
- Fixed intel compiler parser bug. Should fix \#502 [\#523](https://github.co\
m/doctest/doctest/pull/523) ([BerengerBerthoul](https://github.com/BerengerBe\
rthoul))
- specifying working directory for execute\_process in doctest\_discover\_tes\
ts [\#518](https://github.com/doctest/doctest/pull/518) ([philbucher](https:/\
/github.com/philbucher))
- Fix the logic that depends on optional copy elision optimization\
 [\#516](https://github.com/doctest/doctest/pull/516) ([ivankochin](https://g\
ithub.com/ivankochin))
- Fix reserved identifiers [\#510](https://github.com/doctest/doctest/pull/51\
0) ([ts826848](https://github.com/ts826848))
- Fix build with GCC 11 [\#505](https://github.com/doctest/doctest/pull/505)\
 ([jktjkt](https://github.com/jktjkt))
- minor fixes in MPI docs [\#499](https://github.com/doctest/doctest/pull/499\
) ([philbucher](https://github.com/philbucher))
- Add a minimal bazel config [\#497](https://github.com/doctest/doctest/pull/\
497) ([elliottt](https://github.com/elliottt))
- Handle escaped commas in parsed arguments [\#493](https://github.com/doctes\
t/doctest/pull/493) ([friendlyanon](https://github.com/friendlyanon))
- Fixes Issue 476 . When running executables with "-s" stringifyBinaryE…\
 [\#491](https://github.com/doctest/doctest/pull/491) ([navinp0304](https://g\
ithub.com/navinp0304))
- Set variable to 0 if not set [\#490](https://github.com/doctest/doctest/pul\
l/490) ([shivupa](https://github.com/shivupa))

## [2.4.6](https://github.com/doctest/doctest/tree/2.4.6) (2021-03-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.5...2.4.6)

**Fixed bugs:**

- REQUIRE does not compile when operator== in different namespace\
 [\#443](https://github.com/doctest/doctest/issues/443)
- Using templated operator== inside TEST\_CASE changes deduced types of\
 forwarding references [\#399](https://github.com/doctest/doctest/issues/399)

**Closed issues:**

- CMake doesn't link package [\#483](https://github.com/doctest/doctest/issue\
s/483)
- Assertions are slow when running on Windows with a debugger attached\
 [\#481](https://github.com/doctest/doctest/issues/481)
- Get list of registered test-case names [\#479](https://github.com/doctest/d\
octest/issues/479)
- Can't compile with glibc master \(future 2.34\): SIGSTKSZ is no longer a\
 constant [\#473](https://github.com/doctest/doctest/issues/473)
- How to use Doctest with Github Actions [\#472](https://github.com/doctest/d\
octest/issues/472)
- Link error \(multiple definition...\) in simple project [\#470](https://git\
hub.com/doctest/doctest/issues/470)
- INFO does not compile when used like a function call [\#469](https://github\
.com/doctest/doctest/issues/469)
- std::uncaught\_exceptions is only available if compiling for macOS 10.12 or\
 above [\#466](https://github.com/doctest/doctest/issues/466)
- Compile failure with WinRT on 2.4.5 [\#465](https://github.com/doctest/doct\
est/issues/465)

**Merged pull requests:**

- Improve speed with attached debugger \(Windows\) [\#482](https://github.com\
/doctest/doctest/pull/482) ([pgroke](https://github.com/pgroke))
- Convert to bool by casting, rather than double negation [\#480](https://git\
hub.com/doctest/doctest/pull/480) ([kitegi](https://github.com/kitegi))
- Fix compile error when targeting macOS version earlier and macOS 10.12\
 [\#478](https://github.com/doctest/doctest/pull/478) ([SamWindell](https://g\
ithub.com/SamWindell))
- Fix MSVC linter warning about uninitialized TestSuite variables\
 [\#471](https://github.com/doctest/doctest/pull/471) ([Reedbeta](https://git\
hub.com/Reedbeta))
- REQUIRE does not compile when operator== in different namespace \#443 .\
 [\#468](https://github.com/doctest/doctest/pull/468) ([navinp0304](https://g\
ithub.com/navinp0304))
- Automatically add TEST\_SUITE labels to discovered tests\
 [\#464](https://github.com/doctest/doctest/pull/464) ([shivupa](https://gith\
ub.com/shivupa))

## [2.4.5](https://github.com/doctest/doctest/tree/2.4.5) (2021-02-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.4...2.4.5)

**Closed issues:**

- Stack buffer overflow in `String` constructor [\#460](https://github.com/do\
ctest/doctest/issues/460)
- Suppress warnings from clang-tidy [\#459](https://github.com/doctest/doctes\
t/issues/459)
- compilation issue in MSVC when defining DOCTEST\_THREAD\_LOCAL to static\
 [\#458](https://github.com/doctest/doctest/issues/458)
- nvcc compiler warning; doctest.h\(4138\): warning : expression has no\
 effect [\#454](https://github.com/doctest/doctest/issues/454)
- Use of std::atomic can slow down multithreaded tests [\#452](https://github\
.com/doctest/doctest/issues/452)

**Merged pull requests:**

- Fix compilation on case-sensitive filesystems [\#463](https://github.com/do\
ctest/doctest/pull/463) ([jhasse](https://github.com/jhasse))
- Use function-like macros for prefixless macro names [\#462](https://github.\
com/doctest/doctest/pull/462) ([tbleher](https://github.com/tbleher))
- Implement a multi lane atomic for assertion counts [\#453](https://github.c\
om/doctest/doctest/pull/453) ([martinus](https://github.com/martinus))

## [2.4.4](https://github.com/doctest/doctest/tree/2.4.4) (2020-12-25)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.3...2.4.4)

**Closed issues:**

- 2.4.2: build fails [\#450](https://github.com/doctest/doctest/issues/450)
- combine the same tests for different build configurations from multiple\
 shared objects without having symbol clashes [\#436](https://github.com/doct\
est/doctest/issues/436)
- Issue with GitHub Security Scanning: gmtime [\#423](https://github.com/doct\
est/doctest/issues/423)

## [2.4.3](https://github.com/doctest/doctest/tree/2.4.3) (2020-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.2...2.4.3)

## [2.4.2](https://github.com/doctest/doctest/tree/2.4.2) (2020-12-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.1...2.4.2)

**Closed issues:**

- DOCTEST\_CHECK\_THROWS\_WITH\_AS fails to work with dependant exception\
 type [\#447](https://github.com/doctest/doctest/issues/447)
- MSVC warnings: narrowing conversion, signed/unsigned mismatch\
 [\#446](https://github.com/doctest/doctest/issues/446)
-  log contexts for failures in JUnit reporter [\#441](https://github.com/doc\
test/doctest/issues/441)
- MinGW "'mutex' in namespace 'std' does not name a type" error.\
 [\#438](https://github.com/doctest/doctest/issues/438)
- Test runner thread initialization [\#435](https://github.com/doctest/doctes\
t/issues/435)
- PLATFORM is misdetected on MacOSX Big Sur [\#415](https://github.com/doctes\
t/doctest/issues/415)
- CHECK\_EQ with enum values [\#276](https://github.com/doctest/doctest/issue\
s/276)

**Merged pull requests:**

- Squash MSVC warnings when including ntstatus.h [\#449](https://github.com/d\
octest/doctest/pull/449) ([nickhutchinson](https://github.com/nickhutchinson))
- Add MAIN\_PROJECT check for test option [\#445](https://github.com/doctest/\
doctest/pull/445) ([globberwops](https://github.com/globberwops))
- Suppress clang-analyzer-cplusplus.NewDeleteLeaks [\#444](https://github.com\
/doctest/doctest/pull/444) ([ncihnegn](https://github.com/ncihnegn))
- log contexts for failures in JUnit reporter [\#442](https://github.com/doct\
est/doctest/pull/442) ([runave](https://github.com/runave))
- Fix 32bit support on macOS [\#440](https://github.com/doctest/doctest/pull/\
440) ([AlexanderLanin](https://github.com/AlexanderLanin))

## [2.4.1](https://github.com/doctest/doctest/tree/2.4.1) (2020-11-04)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.0...2.4.1)

**Closed issues:**

- Avoid old C-style casts [\#424](https://github.com/doctest/doctest/issues/4\
24)
- Segfault in unwind [\#422](https://github.com/doctest/doctest/issues/422)
- Inspect exception with gdb [\#421](https://github.com/doctest/doctest/issue\
s/421)
- use-of-uninitialized-value [\#414](https://github.com/doctest/doctest/issue\
s/414)
- Support unit tests with MPI [\#413](https://github.com/doctest/doctest/issu\
es/413)
- Break into debugger support is missing for Linux [\#411](https://github.com\
/doctest/doctest/issues/411)
- What if built doctest as static library instead of header-only\
 [\#408](https://github.com/doctest/doctest/issues/408)
- \[Question\] How to get test case name [\#407](https://github.com/doctest/d\
octest/issues/407)
- create extensions header for optional features requiring more std includes\
 or newer C++ features [\#405](https://github.com/doctest/doctest/issues/405)
- tests/asserts summary lines are misaligned when counts exceed 999999\
 [\#402](https://github.com/doctest/doctest/issues/402)
- Call to 'ne' is ambiguous -- with solution [\#395](https://github.com/docte\
st/doctest/issues/395)
- Intermittent Segfaults [\#391](https://github.com/doctest/doctest/issues/39\
1)
- Junit classname [\#390](https://github.com/doctest/doctest/issues/390)
- Add default printers for enums [\#121](https://github.com/doctest/doctest/i\
ssues/121)

**Merged pull requests:**

- Enum support \(fix for Issue \#121\) [\#429](https://github.com/doctest/doc\
test/pull/429) ([jkriegshauser](https://github.com/jkriegshauser))
- Support Clang 3.4 [\#428](https://github.com/doctest/doctest/pull/428)\
 ([AlexanderLanin](https://github.com/AlexanderLanin))
- Silence remarks on old C-style casts [\#425](https://github.com/doctest/doc\
test/pull/425) ([UnePierre](https://github.com/UnePierre))
- Initial MPI unit tests implementation [\#418](https://github.com/doctest/do\
ctest/pull/418) ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Add JUNIT\_OUTPUT\_DIR option to doctest\_discover\_tests\
 [\#417](https://github.com/doctest/doctest/pull/417) ([Tradias](https://gith\
ub.com/Tradias))
- Add option to build with std headers. [\#416](https://github.com/doctest/do\
ctest/pull/416) ([avostrik](https://github.com/avostrik))
- Port Catch2 break into debugger for Linux. closes \#411 [\#412](https://git\
hub.com/doctest/doctest/pull/412) ([mikezackles](https://github.com/mikezackl\
es))
- summary: align even large values \#402 [\#403](https://github.com/doctest/d\
octest/pull/403) ([dankamongmen](https://github.com/dankamongmen))
- Add breakpoint inline assembly for the Apple Silicon macOS.\
 [\#400](https://github.com/doctest/doctest/pull/400) ([bruvzg](https://githu\
b.com/bruvzg))
- fix google's death test URI in roadmap [\#393](https://github.com/doctest/d\
octest/pull/393) ([ashutosh108](https://github.com/ashutosh108))

## [2.4.0](https://github.com/doctest/doctest/tree/2.4.0) (2020-06-27)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.8...2.4.0)

**Closed issues:**

- Count points based on the number of passed/failed cases?\
 [\#386](https://github.com/doctest/doctest/issues/386)
- How to understand "\#data\_array" in std::string? [\#383](https://github.co\
m/doctest/doctest/issues/383)
- crash: doctest with custom allocator [\#382](https://github.com/doctest/doc\
test/issues/382)
- Feature Request: format PRIVATE/PUBLIC/INTERFACE entries with constant\
 indentation [\#378](https://github.com/doctest/doctest/issues/378)
- JUnit Reporter for Doctest [\#376](https://github.com/doctest/doctest/issue\
s/376)
- Avoiding Feature Bloat [\#374](https://github.com/doctest/doctest/issues/37\
4)
- StringMaker\<wchar\_t\> fail to compile with C++20 enabled \(GCC\)\
 [\#357](https://github.com/doctest/doctest/issues/357)
- doctest\_discover\_tests and FetchContent\_Declare [\#351](https://github.c\
om/doctest/doctest/issues/351)
- Junit reporter [\#318](https://github.com/doctest/doctest/issues/318)

**Merged pull requests:**

- Add a note that doctest can be installed through Homebrew\
 [\#388](https://github.com/doctest/doctest/pull/388) ([cameronwhite](https:/\
/github.com/cameronwhite))
- provide alternative implementation of has\_insertion\_operator for C++20\
 [\#387](https://github.com/doctest/doctest/pull/387) ([lukaszgemborowski](ht\
tps://github.com/lukaszgemborowski))
- Fix issue template to mention doctest [\#380](https://github.com/doctest/do\
ctest/pull/380) ([nyanpasu64](https://github.com/nyanpasu64))

## [2.3.8](https://github.com/doctest/doctest/tree/2.3.8) (2020-05-17)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.7...2.3.8)

**Closed issues:**

- Scenario name can not be passed to -tc to execute single scenario\
 [\#373](https://github.com/doctest/doctest/issues/373)
- Compile Error with CHECK\_NOTHROW when using 2 Template Arguments\
 [\#372](https://github.com/doctest/doctest/issues/372)
- dll example won't compile [\#371](https://github.com/doctest/doctest/issues\
/371)
- Build error with MinGW \(Mingw-w64\) due to missing Windows.h \(with\
 capital W\) [\#370](https://github.com/doctest/doctest/issues/370)
- How to override file\_line\_to\_stream? [\#369](https://github.com/doctest/\
doctest/issues/369)
- Memory sanitizer fails. [\#365](https://github.com/doctest/doctest/issues/3\
65)
- Warning c6319 in Visual Studio [\#359](https://github.com/doctest/doctest/i\
ssues/359)
- Any option to show each test case's execute time? [\#358](https://github.co\
m/doctest/doctest/issues/358)
- doctest in embedded [\#355](https://github.com/doctest/doctest/issues/355)
- Reloading a plugin with test cases leads to a segmentation fault\
 [\#350](https://github.com/doctest/doctest/issues/350)
- Compiling with DOCTEST\_CONFIG\_COLORS\_ANSI fails on Windows\
 [\#348](https://github.com/doctest/doctest/issues/348)
- Can I inherit ConsoleReporter? [\#344](https://github.com/doctest/doctest/i\
ssues/344)
- Noreturn and noexcept defines for Visual Studio 2013 support\
 [\#327](https://github.com/doctest/doctest/issues/327)
- Data-driven testing -- print out the deepest DOCTEST\_SUBCASE\
 [\#215](https://github.com/doctest/doctest/issues/215)
- Print the SUBCASE path when an assert fails in the TEST\_CASE body\
 [\#125](https://github.com/doctest/doctest/issues/125)

**Merged pull requests:**

- fix: possible UB with nullptr increment [\#368](https://github.com/doctest/\
doctest/pull/368) ([oktonion](https://github.com/oktonion))
- Use CMake's CMP0077 policy if available [\#363](https://github.com/doctest/\
doctest/pull/363) ([thelink2012](https://github.com/thelink2012))
- Fix warning c6319 in Visual Studio 16.5 [\#361](https://github.com/doctest/\
doctest/pull/361) ([Cvelth](https://github.com/Cvelth))

## [2.3.7](https://github.com/doctest/doctest/tree/2.3.7) (2020-02-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.6...2.3.7)

**Closed issues:**

- Some of the GitHub CI builds are failing [\#334](https://github.com/doctest\
/doctest/issues/334)
- C++20 removed std::uncaught\_exception [\#333](https://github.com/doctest/d\
octest/issues/333)
- Doctest SEH handlers are called before \_\_except handlers\
 [\#324](https://github.com/doctest/doctest/issues/324)

**Merged pull requests:**

- using std namespace where necessary and timer ticks fix [\#341](https://git\
hub.com/doctest/doctest/pull/341) ([oktonion](https://github.com/oktonion))
- fix std::uncaught\_exceptions [\#340](https://github.com/doctest/doctest/pu\
ll/340) ([cyyever](https://github.com/cyyever))
- Fix GitHub CI and add GitHub build badges [\#336](https://github.com/doctes\
t/doctest/pull/336) ([claremacrae](https://github.com/claremacrae))
- http -\> https [\#331](https://github.com/doctest/doctest/pull/331)\
 ([Coeur](https://github.com/Coeur))
- Switch to catching unhandled exceptions on Windows Closes \#324\
 [\#325](https://github.com/doctest/doctest/pull/325) ([jkriegshauser](https:\
//github.com/jkriegshauser))

## [2.3.6](https://github.com/doctest/doctest/tree/2.3.6) (2019-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.5...2.3.6)

**Closed issues:**

- Link problem w/ BUILD=Release if MESSAGE\(\) with std::string/ostream-opera\
tor is used [\#316](https://github.com/doctest/doctest/issues/316)
- the FAQ about difference to Catch2 is missing tags [\#315](https://github.c\
om/doctest/doctest/issues/315)
- include Windows.h in small caps to silence clang warnings\
 [\#312](https://github.com/doctest/doctest/issues/312)
- Mistake in generator with lgtm error [\#311](https://github.com/doctest/doc\
test/issues/311)
- CMake: cannot install target doctest\_with\_main [\#310](https://github.com\
/doctest/doctest/issues/310)
- \[bug\] INFO\(\) and CAPTURE\(\) cannot compile using MSVC when used with\
 DOCTEST\_CONFIG\_IMPLEMENTATION\_IN\_DLL [\#306](https://github.com/doctest/\
doctest/issues/306)
- Skip subcase [\#304](https://github.com/doctest/doctest/issues/304)
- Does some equivalent features from google test exist here?\
 [\#300](https://github.com/doctest/doctest/issues/300)
- How to use doctest in dll only\(without main.cpp and .exe\)\
 [\#299](https://github.com/doctest/doctest/issues/299)
- Warning: C26812: The enum type 'doctest::assertType::Enum' is unscoped.\
 Prefer 'enum class' over 'enum' \(Enum.3\). [\#298](https://github.com/docte\
st/doctest/issues/298)
- test executable\_dll\_and\_plugin fails on Linux, GCC 8.1.0,\
 -fsanitize=address [\#201](https://github.com/doctest/doctest/issues/201)

**Merged pull requests:**

- Fixed missing ostream include for MacOS when defining DOCTEST\_CONFIG\_…\
 [\#314](https://github.com/doctest/doctest/pull/314) ([NKTomHaygarth](https:\
//github.com/NKTomHaygarth))
- include windows.h in cmall caps to silence clang nonportable warnings\
 [\#313](https://github.com/doctest/doctest/pull/313) ([suoniq](https://githu\
b.com/suoniq))
- Add .editorconfig file. [\#301](https://github.com/doctest/doctest/pull/301\
) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add Github Actions CI [\#285](https://github.com/doctest/doctest/pull/285)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))

## [2.3.5](https://github.com/doctest/doctest/tree/2.3.5) (2019-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.4...2.3.5)

**Closed issues:**

- \[feature request\] Assertion macros for throwing exception of a specific\
 type with message - \<LEVEL\>\_THROWS\_WITH\_AS\(expr, string, ex\_type\)\
 [\#295](https://github.com/doctest/doctest/issues/295)
- CHECK\_THROWS\_AS of non-default constructor wants to call default\
 constructor [\#293](https://github.com/doctest/doctest/issues/293)
- Typos and spelling errors in source, documentation and scripts\
 [\#291](https://github.com/doctest/doctest/issues/291)
- Customize test names / variable substitution [\#284](https://github.com/doc\
test/doctest/issues/284)
- SUBCASE in function not behaving as expected [\#282](https://github.com/doc\
test/doctest/issues/282)
- SUPER\_FAST\_ASSERTS fails to compile CHECK\_MESSAGE [\#281](https://github\
.com/doctest/doctest/issues/281)
- CHECK\_MESSAGE no longer works with DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS\
 [\#280](https://github.com/doctest/doctest/issues/280)
- CAPTURE of structured binding element no longer works [\#279](https://githu\
b.com/doctest/doctest/issues/279)
- Reporter: `test\_case\_end` no longer fired after test case restart\
 [\#278](https://github.com/doctest/doctest/issues/278)
- Add debug break override support [\#277](https://github.com/doctest/doctest\
/issues/277)
- Running tests from within Visual Studio in a static lib project\
 [\#275](https://github.com/doctest/doctest/issues/275)
- Compile-time error when using a raw string literal inside of REQUIRE \(MSVC\
 2017\) [\#274](https://github.com/doctest/doctest/issues/274)
- Give example for having tests in production code [\#252](https://github.com\
/doctest/doctest/issues/252)
- Memory leaks just by including doctest.h [\#205](https://github.com/doctest\
/doctest/issues/205)
- Feature request: print subcase when an exception is thrown inside one\
 [\#136](https://github.com/doctest/doctest/issues/136)

**Merged pull requests:**

- Fix typos and misspellings found by codespell. [\#292](https://github.com/d\
octest/doctest/pull/292) ([warmsocks](https://github.com/warmsocks))
- Document order by issue correctly [\#290](https://github.com/doctest/doctes\
t/pull/290) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Document that -order-by=file is compiler-dependent [\#289](https://github.c\
om/doctest/doctest/pull/289) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add -order-by=name to filter\_2 test [\#288](https://github.com/doctest/doc\
test/pull/288) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add support for compiling with clang-cl [\#286](https://github.com/doctest/\
doctest/pull/286) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- No minimum version limitation of Meson [\#283](https://github.com/doctest/d\
octest/pull/283) ([ydm](https://github.com/ydm))

## [2.3.4](https://github.com/doctest/doctest/tree/2.3.4) (2019-08-12)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.3...2.3.4)

**Closed issues:**

- Remove INFO\(\) limitation for using only lvalues and no rvalues\
 [\#269](https://github.com/doctest/doctest/issues/269)
- Compile error on MAC OS with AppleClang 8.0.0.8000042  [\#266](https://gith\
ub.com/doctest/doctest/issues/266)
- Throwing exception in a mocked method [\#265](https://github.com/doctest/do\
ctest/issues/265)
- Illegal syntax for decorators compiles and runs without warning, but has no\
 effect [\#264](https://github.com/doctest/doctest/issues/264)
- Support conditional expressions in REQUIRE [\#262](https://github.com/docte\
st/doctest/issues/262)
- Register a listener\(reporter\) that always listens [\#257](https://github.\
com/doctest/doctest/issues/257)
- Memory sanitizer complaint [\#255](https://github.com/doctest/doctest/issue\
s/255)
- Windows Clang GNU command line warnings [\#253](https://github.com/doctest/\
doctest/issues/253)
- The build writes into the source directory [\#249](https://github.com/docte\
st/doctest/issues/249)
- How to enable tests inside another exe [\#246](https://github.com/doctest/d\
octest/issues/246)
- Testing multiple headers. [\#244](https://github.com/doctest/doctest/issues\
/244)
- CMakeLists.txt: Needs CMAKE\_CXX\_STANDARD=11 [\#243](https://github.com/do\
ctest/doctest/issues/243)
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest [\#242](https://github.com/doctest/doctest/issues/242)

**Merged pull requests:**

- Improve Listener docs [\#273](https://github.com/doctest/doctest/pull/273)\
 ([claremacrae](https://github.com/claremacrae))
- Rework `INFO` lazy evaluation to use lambdas. [\#270](https://github.com/do\
ctest/doctest/pull/270) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Prevent compile errors with AppleClang compiler [\#268](https://github.com/\
doctest/doctest/pull/268) ([ClausKlein](https://github.com/ClausKlein))
- Revert "fix : including windows.h header cause error" [\#263](https://githu\
b.com/doctest/doctest/pull/263) ([onqtam](https://github.com/onqtam))
- Fix static analyzer URLs [\#259](https://github.com/doctest/doctest/pull/25\
9) ([godbyk](https://github.com/godbyk))
- fix : including windows.h header cause error [\#258](https://github.com/doc\
test/doctest/pull/258) ([rinechran](https://github.com/rinechran))
- only look for C++ compiler with CMake [\#256](https://github.com/doctest/do\
ctest/pull/256) ([zhihaoy](https://github.com/zhihaoy))
- Fix \#253 [\#254](https://github.com/doctest/doctest/pull/254)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- add alias target for doctest for use in build tree [\#247](https://github.c\
om/doctest/doctest/pull/247) ([trondhe](https://github.com/trondhe))

## [2.3.3](https://github.com/doctest/doctest/tree/2.3.3) (2019-06-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.2...2.3.3)

**Closed issues:**

- Build fails with gcc9 because of -Wstrict-overflow=5 which is too high\
 [\#241](https://github.com/doctest/doctest/issues/241)
- doctest given defined with short macro name [\#239](https://github.com/doct\
est/doctest/issues/239)
- Splitting templated test across different translation units\
 [\#238](https://github.com/doctest/doctest/issues/238)
- Compile errors with iosfwd.h and Visual Studio 2019 Preview\
 [\#183](https://github.com/doctest/doctest/issues/183)
- Add CMake test support as catch\_discover\_tests\(\) in Catch2\
 [\#171](https://github.com/doctest/doctest/issues/171)

**Merged pull requests:**

- fix \#239 - use long macro name [\#240](https://github.com/doctest/doctest/\
pull/240) ([m-bd](https://github.com/m-bd))
- Add doctest\_discover\_tests\(\) [\#236](https://github.com/doctest/doctest\
/pull/236) ([reddwarf69](https://github.com/reddwarf69))
- Ignore redundant-decls warning on MinGW [\#235](https://github.com/doctest/\
doctest/pull/235) ([AMS21](https://github.com/AMS21))
- Fixed meson build file dependency declaration [\#233](https://github.com/do\
ctest/doctest/pull/233) ([jormundgand](https://github.com/jormundgand))

## [2.3.2](https://github.com/doctest/doctest/tree/2.3.2) (2019-05-06)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.1...2.3.2)

**Closed issues:**

- scripts/bench/run\_all.py : module 'urllib' has no attribute 'urlretrieve'\
 [\#230](https://github.com/doctest/doctest/issues/230)
- wrong set of tests registered with TEST\_CASE\_TEMPLATE get executed\
 [\#228](https://github.com/doctest/doctest/issues/228)
- Logging not Working for me [\#227](https://github.com/doctest/doctest/issue\
s/227)
- Link test runner executable into dll? [\#226](https://github.com/doctest/do\
ctest/issues/226)
- Linking issue for executables after including doctest in library\
 [\#224](https://github.com/doctest/doctest/issues/224)
- Strange REQUIRE\_THROWS behaviour [\#223](https://github.com/doctest/doctes\
t/issues/223)
- Windows clang-cl -Wunused-variable warning [\#221](https://github.com/docte\
st/doctest/issues/221)
- Update doctest 2.3.1 in bincrafters [\#220](https://github.com/doctest/doct\
est/issues/220)
- make install, on 64 bit, installs cmake files into lib instead of lib64\
 folder  [\#218](https://github.com/doctest/doctest/issues/218)
- TSAN: data race related to hasLoggedCurrentTestStart [\#217](https://github\
.com/doctest/doctest/issues/217)
- REQUIRE\_THROWS\_AS does not support class constructors [\#216](https://git\
hub.com/doctest/doctest/issues/216)
- Build failure on clang 7.0.1 on Fedora 29 [\#214](https://github.com/doctes\
t/doctest/issues/214)
- add example compatible with -\> https://github.com/report-ci/\
 [\#212](https://github.com/doctest/doctest/issues/212)
- No DOCTEST\_WITH\_TESTS? [\#211](https://github.com/doctest/doctest/issues/\
211)

**Merged pull requests:**

- Added meson file, to declare a dependency. [\#232](https://github.com/docte\
st/doctest/pull/232) ([jormundgand](https://github.com/jormundgand))
- Explicitly specify the doctest\_with\_main C++ standard in CMake.\
 [\#231](https://github.com/doctest/doctest/pull/231) ([DaanDeMeyer](https://\
github.com/DaanDeMeyer))
- Remove architecture check from CMake package [\#225](https://github.com/doc\
test/doctest/pull/225) ([mmha](https://github.com/mmha))
- add default install prefix [\#219](https://github.com/doctest/doctest/pull/\
219) ([a4z](https://github.com/a4z))
- \[regression\] Workaround MSVC preprocessor issue triggered by\
 REQUIRE\_THROWS [\#213](https://github.com/doctest/doctest/pull/213)\
 ([zhihaoy](https://github.com/zhihaoy))

## [2.3.1](https://github.com/doctest/doctest/tree/2.3.1) (2019-03-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.0...2.3.1)

**Merged pull requests:**

- Add two very simple examples of using doctest with CMake\
 [\#209](https://github.com/doctest/doctest/pull/209) ([pr0g](https://github.\
com/pr0g))

## [2.3.0](https://github.com/doctest/doctest/tree/2.3.0) (2019-03-23)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.3...2.3.0)

**Closed issues:**

- Compilation with emscripten fails by default because of signal handling\
 [\#207](https://github.com/doctest/doctest/issues/207)
- Compilation fails with cl.exe /Zc:wchar\_t- [\#206](https://github.com/doct\
est/doctest/issues/206)
- Parallel invocation of doctest's own testsuite via CTest fails\
 [\#202](https://github.com/doctest/doctest/issues/202)
-  Get the number of passed/failed tests in the code [\#200](https://github.c\
om/doctest/doctest/issues/200)
- Tests alongside code with multiple executables [\#199](https://github.com/d\
octest/doctest/issues/199)
- Cppcheck 1.86 warnings [\#198](https://github.com/doctest/doctest/issues/19\
8)
- Compiling as Dll maybe is wrong [\#196](https://github.com/doctest/doctest/\
issues/196)
- Forward-declaring identifiers in std:: is UB - consider including some of\
 the cheaper C/C++ stdlib headers [\#194](https://github.com/doctest/doctest/\
issues/194)
- QtCreator + clang warning about operator \<\< precedence\
 [\#191](https://github.com/doctest/doctest/issues/191)
- run test fixture from cli [\#190](https://github.com/doctest/doctest/issues\
/190)
- Installing doctest using cmake and make fails on Ubuntu 16.04 \(C++11 is\
 not used\) [\#189](https://github.com/doctest/doctest/issues/189)
- c++17 requirement for testing private members [\#188](https://github.com/do\
ctest/doctest/issues/188)
- \[feature request\] implement a user-extendable reporter system\
 [\#138](https://github.com/doctest/doctest/issues/138)
- Same test runs multiple times when written in a header and included with\
 different unnormalized paths [\#45](https://github.com/doctest/doctest/issue\
s/45)

**Merged pull requests:**

- Fix unmatched bracket in DOCTEST\_TEST\_CASE\_CLASS [\#204](https://github.\
com/doctest/doctest/pull/204) ([patstew](https://github.com/patstew))
- Template apply [\#203](https://github.com/doctest/doctest/pull/203)\
 ([zhihaoy](https://github.com/zhihaoy))
- No undefined behavior per C++ standard in detecting endianness.\
 [\#195](https://github.com/doctest/doctest/pull/195) ([dimztimz](https://git\
hub.com/dimztimz))
- Fix propagating include directories of target doctest\_with\_main\
 [\#193](https://github.com/doctest/doctest/pull/193) ([dimztimz](https://git\
hub.com/dimztimz))
-  Move single header to a separate folder [\#187](https://github.com/doctest\
/doctest/pull/187) ([dimztimz](https://github.com/dimztimz))
- Fix Clang format to handle C++11 [\#186](https://github.com/doctest/doctest\
/pull/186) ([dimztimz](https://github.com/dimztimz))
- Rename doctest\_impl.h to doctest.cpp for less confusion.\
 [\#185](https://github.com/doctest/doctest/pull/185) ([dimztimz](https://git\
hub.com/dimztimz))

## [2.2.3](https://github.com/doctest/doctest/tree/2.2.3) (2019-02-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.2...2.2.3)

**Closed issues:**

- Calling convention needed on a few functions [\#182](https://github.com/doc\
test/doctest/issues/182)
- Terminal color is not reset when a test fails with some signal\
 [\#122](https://github.com/doctest/doctest/issues/122)

## [2.2.2](https://github.com/doctest/doctest/tree/2.2.2) (2019-01-28)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.1...2.2.2)

**Closed issues:**

- Add way to override getCurrentTicks\(\) implementation [\#178](https://gith\
ub.com/doctest/doctest/issues/178)
- Wrap \<csignal\> include with ifdef [\#177](https://github.com/doctest/doct\
est/issues/177)
- How to stop doctest hijack unhandled exceptions? [\#176](https://github.com\
/doctest/doctest/issues/176)
- Change the include path of the `doctest` CMake interface target so users\
 need to specify the folder as well [\#175](https://github.com/doctest/doctes\
t/issues/175)
- Reduce scope of DebugOutputWindowReporter instance [\#174](https://github.c\
om/doctest/doctest/issues/174)
- Can logging \(INFO\) be used in helper class outside of TEST\_CASE?\
 [\#169](https://github.com/doctest/doctest/issues/169)

**Merged pull requests:**

- Change the include path in examples as \#175 [\#180](https://github.com/doc\
test/doctest/pull/180) ([ncihnegn](https://github.com/ncihnegn))
- Fix CMake include path \#175 [\#179](https://github.com/doctest/doctest/pul\
l/179) ([ncihnegn](https://github.com/ncihnegn))

## [2.2.1](https://github.com/doctest/doctest/tree/2.2.1) (2019-01-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.0...2.2.1)

**Closed issues:**

- the `--no-throw` option shouldn't affect `\<LEVEL\>\_NOTHROW` asserts\
 [\#173](https://github.com/doctest/doctest/issues/173)
- Make doctest work with XCode 6 and 7 \(no support for C++11 thread\_local\)\
 [\#172](https://github.com/doctest/doctest/issues/172)
- Print vector content. [\#170](https://github.com/doctest/doctest/issues/170)
- Conan package [\#103](https://github.com/doctest/doctest/issues/103)
- \[feature request\] Thread-safety for asserts and logging facilities\
 [\#4](https://github.com/doctest/doctest/issues/4)

## [2.2.0](https://github.com/doctest/doctest/tree/2.2.0) (2018-12-05)
[Full Changelog](https://github.com/doctest/doctest/compare/2.1.0...2.2.0)

**Closed issues:**

- remove the FAST\_ versions of the binary asserts \(not a breaking change!\)\
 [\#167](https://github.com/doctest/doctest/issues/167)
- \[compile times\] make the DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS identifier\
 affect normal asserts too [\#166](https://github.com/doctest/doctest/issues/\
166)

## [2.1.0](https://github.com/doctest/doctest/tree/2.1.0) (2018-11-30)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.1...2.1.0)

**Closed issues:**

- doctest::String ctor with non-zero terminated string [\#165](https://github\
.com/doctest/doctest/issues/165)
- thread\_local is not supported on iOS 9.0 [\#164](https://github.com/doctes\
t/doctest/issues/164)
- Compiler error on Android NDK r18 [\#163](https://github.com/doctest/doctes\
t/issues/163)
- \[question\] One setup for multiple tests [\#160](https://github.com/doctes\
t/doctest/issues/160)
- clang unwanted warning in user code [\#156](https://github.com/doctest/doct\
est/issues/156)
- Unsigned integer overflow in fileOrderComparator [\#151](https://github.com\
/doctest/doctest/issues/151)
- ThreadSanitizer: signal-unsafe call inside of a signal [\#147](https://gith\
ub.com/doctest/doctest/issues/147)
- Feature request: check for exception string \(like Catch's\
 CHECK\_THROWS\_WITH\) [\#97](https://github.com/doctest/doctest/issues/97)

**Merged pull requests:**

- Fixed build error under Android NDK [\#162](https://github.com/doctest/doct\
est/pull/162) ([tals](https://github.com/tals))
- Added clang-7 to travis build [\#161](https://github.com/doctest/doctest/pu\
ll/161) ([AMS21](https://github.com/AMS21))
- Remove clang-tidy warnings for static fields created by doctest\
 [\#159](https://github.com/doctest/doctest/pull/159) ([rantasub](https://git\
hub.com/rantasub))
- Make it possible to change the command line options prefix\
 [\#158](https://github.com/doctest/doctest/pull/158) ([tbleher](https://gith\
ub.com/tbleher))

## [2.0.1](https://github.com/doctest/doctest/tree/2.0.1) (2018-10-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.0...2.0.1)

**Closed issues:**

- macro name collision with google log [\#157](https://github.com/doctest/doc\
test/issues/157)
- Add \#define to not run tests by default [\#152](https://github.com/doctest\
/doctest/issues/152)
- REQUIRE\_THROWS\_MESSAGE not checking message correctly [\#150](https://git\
hub.com/doctest/doctest/issues/150)
- Test case passes even though subcase failed [\#149](https://github.com/doct\
est/doctest/issues/149)

**Merged pull requests:**

- Correctly document when a main\(\) entry point will be created\
 [\#155](https://github.com/doctest/doctest/pull/155) ([tbleher](https://gith\
ub.com/tbleher))
- Correct format string for unsigned char [\#154](https://github.com/doctest/\
doctest/pull/154) ([tbleher](https://github.com/tbleher))

## [2.0.0](https://github.com/doctest/doctest/tree/2.0.0) (2018-08-23)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.9...2.0.0)

**Closed issues:**

- MSVC 2017 15.8.1, New Warnings as Errors [\#144](https://github.com/doctest\
/doctest/issues/144)
- Windows clang-cl -Wdeprecated-declarations warnings [\#143](https://github.\
com/doctest/doctest/issues/143)
- Logo Proposal for Doctest [\#141](https://github.com/doctest/doctest/issues\
/141)
- PCH Support [\#140](https://github.com/doctest/doctest/issues/140)
- improve compile times even further [\#139](https://github.com/doctest/docte\
st/issues/139)
- !!! BREAKING CHANGE !!! - Move to C++11 for next version of the library\
 [\#137](https://github.com/doctest/doctest/issues/137)
- getCurrentTicks producing warning on MinGW [\#133](https://github.com/docte\
st/doctest/issues/133)
- \[enhancement\] Add support for "stand-alone assertions".\
 [\#114](https://github.com/doctest/doctest/issues/114)

**Merged pull requests:**

- Suppress compiler warning on MinGW [\#134](https://github.com/doctest/docte\
st/pull/134) ([AMS21](https://github.com/AMS21))

## [1.2.9](https://github.com/doctest/doctest/tree/1.2.9) (2018-05-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.8...1.2.9)

**Closed issues:**

- GCC 8.0 std::uncaught\_exception\(\) is deprecated  [\#130](https://github.\
com/doctest/doctest/issues/130)
- Signal stack size too small on Linux [\#129](https://github.com/doctest/doc\
test/issues/129)
- Support Intel Compiler [\#128](https://github.com/doctest/doctest/issues/12\
8)
- Please add support for MSVC 2005 [\#127](https://github.com/doctest/doctest\
/issues/127)
- scan-build report "Dereference of null pointer" for function wildcmp\
 [\#124](https://github.com/doctest/doctest/issues/124)
- !!! BREAKING CHANGE \(console output only\)  !!! - Emulate the\
 error/warning format emitted by native compiler gcc/clang/msvc when printing\
 test failures in the log [\#123](https://github.com/doctest/doctest/issues/1\
23)
- ARM builds: FTBFS on armhf - error: cast from 'const char\*' to 'const \
 [\#118](https://github.com/doctest/doctest/issues/118)

**Merged pull requests:**

- Exclude Intel from GCC compiler check [\#132](https://github.com/doctest/do\
ctest/pull/132) ([smcallis](https://github.com/smcallis))
- Fix deprecated-declarations warning with GCC-8.0 [\#131](https://github.com\
/doctest/doctest/pull/131) ([AMS21](https://github.com/AMS21))

## [1.2.8](https://github.com/doctest/doctest/tree/1.2.8) (2018-03-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.7...1.2.8)

**Closed issues:**

- ARM64 builds: templated\_test\_cases.cpp test fails [\#119](https://github.\
com/doctest/doctest/issues/119)

## [1.2.7](https://github.com/doctest/doctest/tree/1.2.7) (2018-02-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.6...1.2.7)

**Closed issues:**

- MSan has runtime error: unsigned integer overflow [\#116](https://github.co\
m/doctest/doctest/issues/116)
- clang-tidy warning about cert-err58-cpp [\#115](https://github.com/doctest/\
doctest/issues/115)
- Linking errors [\#113](https://github.com/doctest/doctest/issues/113)
- inlining function defs [\#111](https://github.com/doctest/doctest/issues/11\
1)
- Nullptr issue. [\#110](https://github.com/doctest/doctest/issues/110)
- MemorySanitizer: use-of-uninitialized-value [\#109](https://github.com/doct\
est/doctest/issues/109)
- Potential memory leak through scan-build [\#108](https://github.com/doctest\
/doctest/issues/108)
- Warnings raised to error with latest MSVC version [\#107](https://github.co\
m/doctest/doctest/issues/107)
- New solution for tests in static libraries ! \(MSVC\) [\#106](https://githu\
b.com/doctest/doctest/issues/106)
- Command line flags do not work after code formatter/beautifier\
 [\#104](https://github.com/doctest/doctest/issues/104)
- Cppcheck 1.81 warnings [\#102](https://github.com/doctest/doctest/issues/10\
2)

**Merged pull requests:**

- Fix macros WIN32\_LEAN\_AND\_MEAN typo [\#112](https://github.com/doctest/d\
octest/pull/112) ([vladimirgamalyan](https://github.com/vladimirgamalyan))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set \(\#99\)\
 [\#100](https://github.com/doctest/doctest/pull/100) ([onqtam](https://githu\
b.com/onqtam))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set\
 [\#99](https://github.com/doctest/doctest/pull/99) ([OdyX](https://github.co\
m/OdyX))

## [1.2.6](https://github.com/doctest/doctest/tree/1.2.6) (2017-10-29)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.5...1.2.6)

**Closed issues:**

- \[bug\] writing an exception translator in a header file results in it\
 being registered multiple times which is suboptimal [\#98](https://github.co\
m/doctest/doctest/issues/98)
- Warnings when using something more than /W4 for Visual Studio\
 [\#95](https://github.com/doctest/doctest/issues/95)

**Merged pull requests:**

- Added an option to not install Doctest in the CMake scripts\
 [\#96](https://github.com/doctest/doctest/pull/96) ([nm17](https://github.co\
m/nm17))
- Adding a defensive check against a null pointer for the current test suite\
 [\#94](https://github.com/doctest/doctest/pull/94) ([Lectem](https://github.\
com/Lectem))
- Remove incomplete copy ctor [\#93](https://github.com/doctest/doctest/pull/\
93) ([McMartin](https://github.com/McMartin))

## [1.2.5](https://github.com/doctest/doctest/tree/1.2.5) (2017-10-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.4...1.2.5)

**Closed issues:**

- Xcode 9 / clang - unknown warning group [\#92](https://github.com/doctest/d\
octest/issues/92)

## [1.2.4](https://github.com/doctest/doctest/tree/1.2.4) (2017-09-20)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.3...1.2.4)

**Closed issues:**

- \[bug\] test cases can end up in the wrong test suite [\#91](https://github\
.com/doctest/doctest/issues/91)

## [1.2.3](https://github.com/doctest/doctest/tree/1.2.3) (2017-09-11)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.2...1.2.3)

**Closed issues:**

- \[bug\] Defining a variable T inside a test with DOCTEST\_CONFIG\_DISABLE\
 defined does not compile [\#90](https://github.com/doctest/doctest/issues/90)
- \[support\] Using `DOCTEST\_CONFIG\_NO\_SHORT\_MACRO\_NAMES` does not\
 compile using g++ 6.3.0 [\#89](https://github.com/doctest/doctest/issues/89)
- \[question\] Why are SUBCASEs executed only once when within a function\
 called multiple times? [\#88](https://github.com/doctest/doctest/issues/88)

## [1.2.2](https://github.com/doctest/doctest/tree/1.2.2) (2017-09-05)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.1...1.2.2)

**Closed issues:**

- \[question\] Differences between doctest and googletest \(gtest\) for\
 uninitialised local variables in test cases [\#86](https://github.com/doctes\
t/doctest/issues/86)
- !!! BREAKING CHANGE !!! - remove the custom implementation of\
 std::is\_constructible and optionally use the \<type\_traits\> header\
 because of infinite template recursion issues with GCC [\#85](https://github\
.com/doctest/doctest/issues/85)
- Static Analysis results of doctest [\#83](https://github.com/doctest/doctes\
t/issues/83)
- !!! BREAKING CHANGE !!! - catch exceptions as const reference in\
 \<LEVEL\>\_THROWS\_AS [\#81](https://github.com/doctest/doctest/issues/81)
- doctest implementation as static library [\#77](https://github.com/doctest/\
doctest/issues/77)
- Provide some easy way to compare structs containing float/doubles\
 [\#73](https://github.com/doctest/doctest/issues/73)

**Merged pull requests:**

- Add support for templated scenarios [\#87](https://github.com/doctest/docte\
st/pull/87) ([Lectem](https://github.com/Lectem))
- Prefer if\(MSVC\) in CMakeLists.txt. [\#84](https://github.com/doctest/doct\
est/pull/84) ([martinmoene](https://github.com/martinmoene))
- catch throw\_as exception as const reference [\#82](https://github.com/doct\
est/doctest/pull/82) ([a4z](https://github.com/a4z))
- Added doctest\_with\_main static lib [\#78](https://github.com/doctest/doct\
est/pull/78) ([ymadzhunkov](https://github.com/ymadzhunkov))

## [1.2.1](https://github.com/doctest/doctest/tree/1.2.1) (2017-05-24)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.0...1.2.1)

**Closed issues:**

- Compile error under MSVC 2015/2017 if \<thread\> included in same file as\
 "doctest.h" [\#72](https://github.com/doctest/doctest/issues/72)

**Merged pull requests:**

- docs: TEST\_CASE\_METHOD -\> TEST\_CASE\_FIXTURE [\#71](https://github.com/\
doctest/doctest/pull/71) ([akrzemi1](https://github.com/akrzemi1))

## [1.2.0](https://github.com/doctest/doctest/tree/1.2.0) (2017-05-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.4...1.2.0)

**Closed issues:**

- Further improvements on compile time - disable inlining of functions used\
 in asserts [\#70](https://github.com/doctest/doctest/issues/70)
- Improve runtime performance - lazy stringification, more inlining, no\
 statics on the hot path, move semantics for classes such as doctest::String\
 which are used by value, etc. [\#69](https://github.com/doctest/doctest/issu\
es/69)
- Add option to show duration of test case execution and add a\
 timeout\(seconds\) decorator - marking them as failed if they exceed it\
 [\#68](https://github.com/doctest/doctest/issues/68)
- Add support for test case decorators - label, description, skip, may\_fail,\
 should\_fail, expected\_failures, etc. [\#67](https://github.com/doctest/doc\
test/issues/67)
- Integrate static analysis into the CI builds [\#66](https://github.com/doct\
est/doctest/issues/66)
- Print the test suite name on test case failure [\#65](https://github.com/do\
ctest/doctest/issues/65)
- Add signal handlers to handle crashes \(and use SEH under Windows\) -\
 report which test case failed [\#63](https://github.com/doctest/doctest/issu\
es/63)
- Add support to Approx for strong typedefs of double [\#62](https://github.c\
om/doctest/doctest/issues/62)
- \[question\] Is there a way to always have 0 as the exit code regardless of\
 test results? [\#59](https://github.com/doctest/doctest/issues/59)
- Add support for un-parenthesized expressions containing commas in asserts\
 [\#58](https://github.com/doctest/doctest/issues/58)
- Add ability to filter subcases with filters [\#57](https://github.com/docte\
st/doctest/issues/57)
- Add option to query if code is being ran inside of a test -\
 doctest::is\_running\_in\_test [\#56](https://github.com/doctest/doctest/iss\
ues/56)
- Ability for a binary \(executable / shared object\) to use the test runner\
 implementation of another binary - with exported symbols - so tests end up\
 in a single registry [\#55](https://github.com/doctest/doctest/issues/55)
- How to force the use of colors in the terminal? [\#54](https://github.com/d\
octest/doctest/issues/54)
- How can I mix production code with the Unit Tests? [\#53](https://github.co\
m/doctest/doctest/issues/53)
- add \<= and \>= operators to Approx \(and also maybe \< and \>\)\
 [\#52](https://github.com/doctest/doctest/issues/52)
- Add ability to capture variables from test scope [\#48](https://github.com/\
doctest/doctest/issues/48)
- !!! BREAKING CHANGE !!! - Make TEST\_SUITE work with blocks and add\
 TEST\_SUITE\_BEGIN [\#41](https://github.com/doctest/doctest/issues/41)
- Add option to print which test suites/cases are run [\#39](https://github.c\
om/doctest/doctest/issues/39)
- Add support for templated test cases - parameterized by type\
 [\#38](https://github.com/doctest/doctest/issues/38)
- Add custom failure messages with lazy stringification [\#23](https://github\
.com/doctest/doctest/issues/23)
- Add an exception translation mechanism + the ability for users to extend it\
 with custom exception types [\#12](https://github.com/doctest/doctest/issues\
/12)
- Add API for reporting failures [\#9](https://github.com/doctest/doctest/iss\
ues/9)

**Merged pull requests:**

- Update doctest to work with ARM DS5-compiler [\#64](https://github.com/doct\
est/doctest/pull/64) ([tomasnilefrost](https://github.com/tomasnilefrost))

## [1.1.4](https://github.com/doctest/doctest/tree/1.1.4) (2017-02-18)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.3...1.1.4)

**Closed issues:**

- Add option --force-colors - for when a tty is not detected for stdout\
 [\#51](https://github.com/doctest/doctest/issues/51)
- Issue with using lambdas in tests in gcc [\#49](https://github.com/doctest/\
doctest/issues/49)
- Add the include file to releases [\#47](https://github.com/doctest/doctest/\
issues/47)

**Merged pull requests:**

- Add translation of std::exception for exceptions that terminate a test case\
 [\#46](https://github.com/doctest/doctest/pull/46) ([eliaskosunen](https://g\
ithub.com/eliaskosunen))

## [1.1.3](https://github.com/doctest/doctest/tree/1.1.3) (2016-11-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.2...1.1.3)

**Closed issues:**

- Exception handlers cause warnings when exceptions are disabled\
 [\#44](https://github.com/doctest/doctest/issues/44)

## [1.1.2](https://github.com/doctest/doctest/tree/1.1.2) (2016-10-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.1...1.1.2)

**Closed issues:**

- clang warnings when using C++11 or newer [\#42](https://github.com/doctest/\
doctest/issues/42)
- \[support\] identical names for test suites? [\#40](https://github.com/doct\
est/doctest/issues/40)

## [1.1.1](https://github.com/doctest/doctest/tree/1.1.1) (2016-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.0...1.1.1)

## [1.1.0](https://github.com/doctest/doctest/tree/1.1.0) (2016-09-21)
[Full Changelog](https://github.com/doctest/doctest/compare/1.0.0...1.1.0)

**Closed issues:**

- char\* comparison uses the contents, not the pointer [\#36](https://github.\
com/doctest/doctest/issues/36)
- add configuration preprocessor identifier for passing by value in\
 assertions instead of by reference [\#35](https://github.com/doctest/doctest\
/issues/35)
- restrict expressions in assertion macros to binary comparisons at most with\
 a static assert [\#34](https://github.com/doctest/doctest/issues/34)
- Add clearFilters\(\) to doctest::Context [\#33](https://github.com/doctest/\
doctest/issues/33)
- A way to refrain from polluting “\#define” space for users of tested code?\
 [\#32](https://github.com/doctest/doctest/issues/32)
- drop VC++6 support [\#31](https://github.com/doctest/doctest/issues/31)
- False positive test [\#30](https://github.com/doctest/doctest/issues/30)
- Turn off coloring after tests are finished? [\#28](https://github.com/docte\
st/doctest/issues/28)
- C++11 nullptr [\#27](https://github.com/doctest/doctest/issues/27)
- Only one SUBCASE per line is executed [\#25](https://github.com/doctest/doc\
test/issues/25)
- creative formatting of chars [\#24](https://github.com/doctest/doctest/issu\
es/24)
- DOCTEST\_BREAK\_INTO\_DEBUGGER undefined under OSX [\#22](https://github.co\
m/doctest/doctest/issues/22)
- Tests inside a static library [\#21](https://github.com/doctest/doctest/iss\
ues/21)
- Add example how to remove doctest options from the command line for the\
 program after the tests run [\#20](https://github.com/doctest/doctest/issues\
/20)
- Single-letter options active even without leading '-' \(dash\)\
 [\#19](https://github.com/doctest/doctest/issues/19)
- pointer stringification not working for compilers different from MSVC\
 [\#18](https://github.com/doctest/doctest/issues/18)
- Tests that accompany code run and produce output at default\
 [\#17](https://github.com/doctest/doctest/issues/17)
- GCC 5.3.1 Compiler warning: sign compare [\#16](https://github.com/doctest/\
doctest/issues/16)
- Slower than Catch in realistic test cases [\#14](https://github.com/doctest\
/doctest/issues/14)
- Rename doctest::detail::Result res; in DOCTEST\_ASSERT\_IMPLEMENT\
 [\#10](https://github.com/doctest/doctest/issues/10)
- No red when all tests pass [\#7](https://github.com/doctest/doctest/issues/\
7)
- UNIX line feedings on GitHub please [\#6](https://github.com/doctest/doctes\
t/issues/6)

**Merged pull requests:**

- don't show green when tests fail [\#26](https://github.com/doctest/doctest/\
pull/26) ([ferkulat](https://github.com/ferkulat))
- Include "program code" in example [\#15](https://github.com/doctest/doctest\
/pull/15) ([martinmoene](https://github.com/martinmoene))

## [1.0.0](https://github.com/doctest/doctest/tree/1.0.0) (2016-05-22)
**Merged pull requests:**

- Reduce the header size for test users [\#3](https://github.com/doctest/doct\
est/pull/3) ([zah](https://github.com/zah))
- Add a Gitter chat badge to README.md [\#1](https://github.com/doctest/docte\
st/pull/1) ([gitter-badger](https://github.com/gitter-badger))



\* *This Change Log was automatically generated by [github_changelog_generato\
r](https://github.com/skywinder/Github-Changelog-Generator)*
\
changes-type: text/markdown;variant=GFM
url: https://github.com/doctest/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

test.target = $cxx.target

\
location: doctest/doctest-2.4.10.tar.gz
sha256sum: fbda47edef2941eec382fa263b464723272bd1b0588fc6ca846c4ade29a0e9c1
:
name: doctest
version: 2.4.11
type: lib
language: c++
summary: C++ testing framework for unit tests and TDD
license: MIT
description:
\
<p align="center"><img src="scripts/data/logo/logo_1.svg"></p>

<b>
<table>
    <tr>
        <td>
            master branch
        </td>
        <td>
            <a href="https://github.com/doctest/doctest/actions?query=branch%\
3Amaster"><img src="https://github.com/doctest/doctest/workflows/CI/badge.svg\
?branch=master"></a>
        </td>
        <td>
            <a href="https://app.codecov.io/gh/doctest/doctest/branch/master"\
><img src="https://codecov.io/gh/doctest/doctest/branch/master/graph/badge.sv\
g?token=fAdZl67WN7"/></a>
        </td>
    </tr>
    <tr>
        <td>
            dev branch
        </td>
        <td>
            <a href="https://github.com/doctest/doctest/actions?query=branch%\
3Adev"><img src="https://github.com/doctest/doctest/workflows/CI/badge.svg?br\
anch=dev"></a>
        </td>
        <td>
            <a href="https://app.codecov.io/gh/doctest/doctest/branch/dev"><i\
mg src="https://codecov.io/gh/doctest/doctest/branch/dev/graph/badge.svg?toke\
n=fAdZl67WN7"/></a>
        </td>
    </tr>
</table>
</b>

**doctest** is a new C++ testing framework but is by far the fastest both in\
 compile times (by [**orders of magnitude**](doc/markdown/benchmarks.md)) and\
 runtime compared to other feature-rich alternatives. It brings the ability\
 of compiled languages such as [**D**](https://dlang.org/spec/unittest.html)\
 / [**Rust**](https://doc.rust-lang.org/book/second-edition/ch11-00-testing.h\
tml) / [**Nim**](https://nim-lang.org/docs/unittest.html) to have tests\
 written directly in the production code thanks to a fast, transparent and\
 flexible test runner with a clean interface.

[![Standard](https://img.shields.io/badge/c%2B%2B-11/14/17/20-blue.svg)](http\
s://en.wikipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opens\
ource.org/licenses/MIT)
[![download](https://img.shields.io/badge/download%20%20-link-blue.svg)](http\
s://raw.githubusercontent.com/doctest/doctest/master/doctest/doctest.h)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/\
503/badge)](https://bestpractices.coreinfrastructure.org/projects/503)
[![Chat - Discord](https://img.shields.io/badge/chat-Discord-blue.svg)](https\
://discord.gg/PGXn9YmyF3)
[![Try it online](https://img.shields.io/badge/try%20it-online-orange.svg)](h\
ttps://godbolt.org/z/4s389Kbfs)
<!--
[![Language](https://img.shields.io/badge/language-C++-blue.svg)](https://iso\
cpp.org/)
[![documentation](https://img.shields.io/badge/documentation%20%20-online-blu\
e.svg)](https://github.com/doctest/doctest/blob/master/doc/markdown/readme.md\
#reference)
-->

[<img src="https://c5.patreon.com/external/logo/become_a_patron_button.png"\
 align="right">](https://www.patreon.com/onqtam)

The framework is and will stay free but needs your support to sustain its\
 development. There are lots of <a href="https://github.com/doctest/doctest/i\
ssues/600"><b>new features</b></a> and maintenance to do. If you work for a\
 company using **doctest** or have the means to do so, please consider\
 financial support. Monthly donations via Patreon and one-offs via PayPal.

[<img src="https://raw.githubusercontent.com/aha999/DonateButtons/master/payp\
al-donate-icon-7.png" width=100 align="right">](https://www.paypal.me/onqtam/\
10)

A complete example with a self-registering test that compiles to an\
 executable looks like this:

![cover-example](scripts/data/using_doctest_888px_wide.gif)

There are many C++ testing frameworks - [Catch](https://github.com/catchorg/C\
atch2), [Boost.Test](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/\
index.html), [UnitTest++](https://github.com/unittest-cpp/unittest-cpp),\
 [cpputest](https://github.com/cpputest/cpputest), [googletest](https://githu\
b.com/google/googletest) and [others](https://en.wikipedia.org/wiki/List_of_u\
nit_testing_frameworks#C.2B.2B).

The **key** differences between it and other testing frameworks are that it\
 is light and unintrusive:
- Ultra light on compile times both in terms of [**including the\
 header**](doc/markdown/benchmarks.md#cost-of-including-the-header) and\
 writing [**thousands of asserts**](doc/markdown/benchmarks.md#cost-of-an-ass\
ertion-macro)
- Doesn't produce any warnings even on the [**most aggressive**](scripts/cmak\
e/common.cmake#L84) warning levels for **MSVC**/**GCC**/**Clang**
- Can remove **everything** testing-related from the binary with the\
 [**```DOCTEST_CONFIG_DISABLE```**](doc/markdown/configuration.md#doctest_con\
fig_disable) identifier
- [**thread-safe**](doc/markdown/faq.md#is-doctest-thread-aware) - asserts\
 can be used from multiple threads spawned from a single test case -\
 [**example**](examples/all_features/concurrency.cpp)
- asserts can be used [**outside of a testing context**](doc/markdown/asserti\
ons.md#using-asserts-out-of-a-testing-context) - as a general purpose assert\
 library - [**example**](examples/all_features/asserts_used_outside_of_tests.\
cpp)
- No global namespace pollution (everything is in ```doctest::```) & doesn't\
 drag **any** headers with it
- [**Portable**](doc/markdown/features.md#extremely-portable) C++11 (use tag\
 [**1.2.9**](https://github.com/doctest/doctest/tree/1.2.9) for C++98) with\
 over 100 different CI builds (static analysis, sanitizers..)
- binaries (exe/dll) can use the test runner of another binary => tests in a\
 single registry - [**example**](examples/executable_dll_and_plugin/)

![cost-of-including-the-framework-header](scripts/data/benchmarks/header.png)

This allows the framework to be used in more ways than any other - tests can\
 be written directly in the production code!

*Tests can be a form of documentation and should be able to reside near the\
 production code which they test.*

- This makes the barrier for writing tests **much lower** - you don't have\
 to: **1)** make a separate source file **2)** include a bunch of stuff in it\
 **3)** add it to the build system and **4)** add it to source control - You\
 can just write the tests for a class or a piece of functionality at the\
 bottom of its source file - or even header file!
- Tests in the production code can be thought of as documentation/up-to-date\
 comments - showcasing the APIs
- Testing internals that are not exposed through the public API and headers\
 is no longer a mind-bending exercise
- [**Test-driven development**](https://en.wikipedia.org/wiki/Test-driven_dev\
elopment) in C++ has never been easier!

The framework can be used just like any other without mixing production code\
 and tests - check out the [**features**](doc/markdown/features.md).

**doctest** is modeled after [**Catch**](https://github.com/catchorg/Catch2)\
 and some parts of the code have been taken directly - check out [**the\
 differences**](doc/markdown/faq.md#how-is-doctest-different-from-catch).

[This table](https://github.com/martinmoene/catch-lest-other-comparison)\
 compares **doctest** / [**Catch**](https://github.com/catchorg/Catch2) /\
 [**lest**](https://github.com/martinmoene/lest) which are all very similar.

Checkout the [**CppCon 2017 talk**](https://cppcon2017.sched.com/event/BgsI/m\
ix-tests-and-production-code-with-doctest-implementing-and-using-the-fastest-\
modern-c-testing-framework) on [**YouTube**](https://www.youtube.com/watch?v=\
eH1CxEC29l8) to get a better understanding of how the framework works and\
 read about how to use it in [**the JetBrains article**](https://blog.jetbrai\
ns.com/rscpp/better-ways-testing-with-doctest/) - highlighting the unique\
 aspects of the framework! On a short description on how to use the framework\
 along production code you could refer to [**this GitHub issue**](https://git\
hub.com/doctest/doctest/issues/252). There is also an [**older\
 article**](https://accu.org/var/uploads/journals/Overload137.pdf) in the\
 february edition of ACCU Overload 2017.

[![CppCon 2017 talk about doctest on youtube](scripts/data/youtube-cppcon-tal\
k-thumbnail.png)](https://www.youtube.com/watch?v=eH1CxEC29l8)

Documentation
-------------

Project:

- [Features and design goals](doc/markdown/features.md) - the complete list\
 of features
- [Community driven roadmap](https://github.com/doctest/doctest/issues/600) -\
 upcoming features
- [Benchmarks](doc/markdown/benchmarks.md) - compile-time and runtime\
 supremacy
- [Contributing](CONTRIBUTING.md) - how to make a proper pull request
- [Changelog](CHANGELOG.md) - generated changelog based on closed issues/PRs

Usage:

- [Tutorial](doc/markdown/tutorial.md) - make sure you have read it before\
 the other parts of the documentation
- [Assertion macros](doc/markdown/assertions.md)
- [Test cases, subcases and test fixtures](doc/markdown/testcases.md)
- [Parameterized test cases](doc/markdown/parameterized-tests.md)
- [Command line](doc/markdown/commandline.md)
- [Logging macros](doc/markdown/logging.md)
- [```main()``` entry point](doc/markdown/main.md)
- [Configuration](doc/markdown/configuration.md)
- [String conversions](doc/markdown/stringification.md)
- [Reporters](doc/markdown/reporters.md)
- [Extensions](doc/markdown/extensions.md)
- [FAQ](doc/markdown/faq.md)
- [Build systems](doc/markdown/build-systems.md)
- [Examples](examples)

Contributing
------------

[<img src="https://c5.patreon.com/external/logo/become_a_patron_button.png"\
 align="right">](https://www.patreon.com/onqtam)

Support the development of the project with donations! There is a list of\
 planned features which are all important and big - see the\
 [**roadmap**](https://github.com/doctest/doctest/issues/600).

[<img src="https://raw.githubusercontent.com/aha999/DonateButtons/master/payp\
al-donate-icon-7.png" width=100 align="right">](https://www.paypal.me/onqtam/\
10)

If you work for a company using **doctest** or have the means to do so,\
 please consider financial support.

Contributions in the form of issues and pull requests are welcome as well -\
 check out the [**Contributing**](CONTRIBUTING.md) page.

Stargazers over time
------------

[![Stargazers over time](https://starchart.cc/doctest/doctest.svg)](https://s\
tarchart.cc/doctest/doctest)

Logo
------------

The [logo](scripts/data/logo) is licensed under a Creative Commons\
 Attribution 4.0 International License. Copyright &copy; 2019\
 [area55git](https://github.com/area55git) &nbsp; [![License: CC BY\
 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons\
.org/licenses/by/4.0/)

<p align="center"><img src="scripts/data/logo/icon_2.svg"></p>

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for doctest

This project is a [build2](https://build2.org) package repository that\
 provides access to [`doctest`](https://github.com/doctest/doctest), a C++\
 testing framework that brings the ability to have tests written directly in\
 the production code thanks to a fast, transparent and flexible test runner\
 with a clean interface.

[![Official](https://img.shields.io/website/https/github.com/doctest/doctest.\
svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up_\
message=online)](https://github.com/doctest/doctest)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/d\
octest.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blu\
e&up_message=online)](https://github.com/build2-packaging/doctest)
[![cppget.org](https://img.shields.io/website/https/cppget.org/doctest.svg?do\
wn_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_mess\
age=online)](https://cppget.org/doctest)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/do\
ctest.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for\
-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/doct\
est)

## Usage
Make sure to add the stable section of the [`cppget.org`](https://cppget.org/\
?about) repository to your project's `repositories.manifest` to be able to\
 fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/doctest.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: doctest ^2.4.11

To import the library target that already implements the `main` function,\
 include the following declaration in a `buildfile`.

    import doctest = doctest%lib{doctest-main}

If you want to customize the testing process by providing your own `main`,\
 use the following header-only library target instead.

    import doctest = doctest%lib{doctest}


## Configuration
`doctest` itself already comes with various configuration options.
Some of these can be accessed by the package configuration.
For an explanation, refer to `doctest`'s configuration documentation.
The following variables need to be provided globally and will affect both\
 library targets, `lib{doctest}` and `lib{doctest-main}`.

    config [bool] config.doctest.disable                 ?= false
    config [bool] config.doctest.treat_char_as_string    ?= false
    config [bool] config.doctest.use_std_headers         ?= false
    config [bool] config.doctest.no_exceptions           ?= false
    config [bool] config.doctest.no_contradicting_inline ?= false

The following configuration variables only need to be set for the\
 implementation unit and will only affect the `lib{doctest-main}` library\
 target.
Define their respective pre-processor macros for doctest implementation unit\
 that implement their own `main` function and only link to `lib{doctest}`.

    config [string] config.doctest.options_prefix      ?= [null]
    config [bool] config.doctest.no_unprefixed_options ?= false
    config [bool] config.doctest.colors_none           ?= false
    config [bool] config.doctest.colors_windows        ?= false
    config [bool] config.doctest.colors_ansi           ?= false
    config [bool] config.doctest.windows_seh           ?= false
    config [bool] config.doctest.no_windows_seh        ?= false
    config [bool] config.doctest.posix_signals         ?= false
    config [bool] config.doctest.no_posix_signals      ?= false
    config [bool] config.doctest.no_multithreading     ?= false
    config [bool] config.doctest.no_multi_lane_atomics ?= false

- Some configuration options cannot be provided by the package. Use them only\
 in your `doctest` implementation file when linking against `lib{doctest}`\
 for providing your own `main` function.
    - `DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN`
    - `DOCTEST_CONFIG_IMPLEMENT`
    - `DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL`
- Some configuration options do not need to be defined globally. You may also\
 define them only for specific source files when they are actually needed. As\
 of such, no global package configuration variables are provided for these\
 options. Instead, define their respective pre-processor macros in the\
 required units to enable them.
    - `DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES`
    - `DOCTEST_CONFIG_REQUIRE_STRINGIFICATION_FOR_ALL_USED_TYPES`
    - `DOCTEST_CONFIG_DOUBLE_STRINGIFY`
    - `DOCTEST_CONFIG_SUPER_FAST_ASSERTS`
    - `DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS`
    - `DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION`
    - `DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS`
    - `DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS`
    - `DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE`
    - `DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS`
    - `DOCTEST_CONFIG_ASSERTS_RETURN_VALUES`
    - `DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED`
    - `DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM`
    - `DOCTEST_CONFIG_HANDLE_EXCEPTION`

## Issues and Notes
- The tests fail for MinGW on Windows as different line numbers for\
 assertions in the file `asserts_used_outside_of_tests.cpp` are generated and\
 compared to expected line numbers in `asserts_used_outside_of_tests.cpp.txt`\
. This issue is not caused by the build system and must be fixed upstream.\
 Fortunately, it is not a major problem and the package can be used without\
 concerns on all available platforms.
- According to the upstream build system, `lib{doctest-main}` does not need\
 to export `pthread` for multi-threading. Also, basic unit tests run\
 perfectly fine. As of that, `pthread` is neither exported by `lib{doctest}`\
 nor by `lib{doctest-main}`. However, in feature tests, `pthread` is used to\
 test concurrency. Consequently, be aware of linking `pthread` when needed.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/doctest/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/doctest\
/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/doctes\
t) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
# Change Log

## [v2.4.11](https://github.com/doctest/doctest/tree/v2.4.11) (2023-03-15)

[Full Changelog](https://github.com/doctest/doctest/compare/v2.4.10...v2.4.11)

## [v2.4.10](https://github.com/doctest/doctest/tree/v2.4.10) (2023-02-27)

[Full Changelog](https://github.com/doctest/doctest/compare/v2.4.9...v2.4.10)

## [v2.4.9](https://github.com/doctest/doctest/tree/v2.4.9) (2022-06-18)
[Full Changelog](https://github.com/doctest/doctest/compare/v2.4.8...v2.4.9)

**Closed issues:**
- Visual Studio's Test Explorer and Resharper C\+\+'s Unit Test Explorer\
 don't see Doctest's tests \#661 ([KulaGGin](https://github.com/KulaGGin))
- How to get detailed information about testcases failing due to thrown\
 exceptions? \#660 ([NiklasKappel](https://github.com/NiklasKappel))
- Add clang\-tidy integration and fix all warnings \#659 ([Saalvage](https://\
github.com/Saalvage))
- Avoid static init problem in insufficient\_procs\(\) \(MPI\) \#657\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Use MPI\_Isend in MpiConsoleReporter to avoid deadlock \#656\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Deadlock in MpiConsoleReporter when root rank fails assert \#655\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Cleanup of DOCTEST\_DO\_BINARY\_EXPRESSION\_COMPARISON\. Fixes \#651 \#652\
 ([iboB](https://github.com/iboB))
- Comparison with implicit cast from non\-const value can't be decomposed\
 \#651 ([iboB](https://github.com/iboB))
- Local structured bindings cannot be used in CHECK macros \(since 2\.4\.8\)\
 \#647 ([pragmaxwell](https://github.com/pragmaxwell))
- Add tests for DOCTEST\_CONFIG\_USE\_STD\_HEADERS \#643 ([Saalvage](https://\
github.com/Saalvage))
- Stringification amendments \#642 ([Saalvage](https://github.com/Saalvage))
- Clean up defines a bit; Implement \#439 \#641 ([Saalvage](https://github.co\
m/Saalvage))
- Fix \#508 \#640 ([Saalvage](https://github.com/Saalvage))
- Fix \#508 \#639 ([Saalvage](https://github.com/Saalvage))
- New doctest version gives me an error: reference to local binding '\.\.\.'\
 declared in enclosing function 'DOCTEST\_ANON\_FUNC\_16' \#638\
 ([a4z](https://github.com/a4z))
- The tutorial example does not work \(linker errors\) with clang 10 \#637\
 ([sixcy](https://github.com/sixcy))
- Implementing \`DOCTEST\_ASSERT\_IMPLEMENT\_1\` as lambda prevents testing\
 structured bindings \#636 ([ChrisThrasher](https://github.com/ChrisThrasher))
- re\-re\-remove overly restrictive minimum version of meson \#635\
 ([eli-schwartz](https://github.com/eli-schwartz))
- Fix move\-only types failing to decompose correctly \#634\
 ([Saalvage](https://github.com/Saalvage))
- Weird compilation error when using CHECK\_THROWS/CHECK\_THROWS\_AS on\
 Visual Studio 2019 with no exceptions \#633 ([yeputons](https://github.com/y\
eputons))
- Error triggered by comparing typeid with new doctest 2\.4\.8 \#632\
 ([JazzSuite](https://github.com/JazzSuite))
- Improve Mac PowerPC support \#631 ([ryandesign](https://github.com/ryandesi\
gn))
- issue introduced in 2\.4\.7 \#630 ([onqtam](https://github.com/onqtam))
- Decompose expressions containing the spaceship operator \#629\
 ([falbrechtskirchinger](https://github.com/falbrechtskirchinger))
- added nolint for cert\-err58 \#628 ([serguei-k](https://github.com/serguei-\
k))
- Fix properties not being passed in doctest\_discover\_tests \#626\
 ([quantumsteve](https://github.com/quantumsteve))
- Config no multithreading \#625 ([Saalvage](https://github.com/Saalvage))
- wasm\*\-support? \#624 ([FrozenSource](https://github.com/FrozenSource))
- Fix MPI extension to work with no parallel tests \#623 ([BerengerBerthoul](\
https://github.com/BerengerBerthoul))
- string comparison leads to gotting stuck \#622 ([laoshaw](https://github.co\
m/laoshaw))
- doctest\_discover\_tests no longer sets ENVIRONMENT variables for\
 discovered tests\.  \#621 ([quantumsteve](https://github.com/quantumsteve))
- Add contains option to checks\. \#620 ([MFraters](https://github.com/MFrate\
rs))
- Feature request: CHECK\_THROWS\_WITH with contains option \#619\
 ([MFraters](https://github.com/MFraters))
- Add alias target for doctest\_with\_main \#617 ([jessestricker](https://git\
hub.com/jessestricker))
- Allow escaping backslash with backslash in filters \(\#614\) \#616\
 ([yeputons](https://github.com/yeputons))
- Fix operator<< \#615 ([Saalvage](https://github.com/Saalvage))
- Correct minor typos \#613 ([utilForever](https://github.com/utilForever))
- Fix MPI extension to work if launched without mpirun/mpiexec \#612\
 ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Fix mpi subcase \#611 ([BerengerBerthoul](https://github.com/BerengerBertho\
ul))
- compilation error with custom operator== defined in namespace \#610\
 ([zvyagin1](https://github.com/zvyagin1))
- Regression: Clang\-Tidy warnings in 2\.4\.8 \#607 ([nlohmann](https://githu\
b.com/nlohmann))
- Internal compiler error with GCC 7\.5 \#606 ([foonathan](https://github.com\
/foonathan))
- tagging convension has changed? \#605 ([kloczek](https://github.com/kloczek\
))
- Update Doctest in vcpkg to 2\.4\.8 \#604 ([gc435](https://github.com/gc435))
- Add IsNaN operator\! \#603 ([Saalvage](https://github.com/Saalvage))
- Ignored generated files from CMake, OSX, Xcode, and VS \#602\
 ([LeonBrands](https://github.com/LeonBrands))
- Move roadmap and wipe it clean \#601 ([Saalvage](https://github.com/Saalvag\
e))
- removes a duplicate word 'most' in configuration\.md \#599\
 ([krishnakumarg1984](https://github.com/krishnakumarg1984))
- Fix subcase reentry \#598 ([Saalvage](https://github.com/Saalvage))
- Loop\-generated \`SUBCASE\`s are not run \#597 ([yeputons](https://github.c\
om/yeputons))
- Void \#596 ([Saalvage](https://github.com/Saalvage))
- Add flag that forces custom stringification methods to be provided \#595\
 ([Saalvage](https://github.com/Saalvage))
- Fix coverage \#594 ([Saalvage](https://github.com/Saalvage))
- TEST CODECOV PR BEHAVIOR \#593 ([Saalvage](https://github.com/Saalvage))
- Ignore CMake and MacOS generated files \#592 ([LeonBrands](https://github.c\
om/LeonBrands))
- Feature request: option to disable fallback "\{?\}" stringifier \#591\
 ([YarikTH](https://github.com/YarikTH))
- Add tests for default stringification result of doctest \#590\
 ([YarikTH](https://github.com/YarikTH))
- Feature config ret vals \#589 ([Saalvage](https://github.com/Saalvage))
- DOCTEST\_CONFIG\_ASSERT\_RETURN\_VALUES \#588 ([Saalvage](https://github.co\
m/Saalvage))
- Support pretty printing of container based on heuristics \#587\
 ([YarikTH](https://github.com/YarikTH))
- Refactor stringification \#585 ([Saalvage](https://github.com/Saalvage))
- Feature: Better NaN \#584 ([Saalvage](https://github.com/Saalvage))
- Nan check \#582 ([Saalvage](https://github.com/Saalvage))
- Update roadmap following maintainer change \#581 ([eyalroz](https://github.\
com/eyalroz))
- Regression between 2\.4\.6 and 2\.4\.7 \#571 ([YarikTH](https://github.com/\
YarikTH))
- build failure with gcc\-11\.2 when using user declared operator<<\(ostream,\
 vector\) \#551 ([nlitsme](https://github.com/nlitsme))
- variable maximum is assigned 6206517616395625 instead of the actual return\
 value which is 5\.0 \#530 ([kk723](https://github.com/kk723))
- toString can call existing user\-defined toString through ADL incorrectly\
 \#508 ([zeux](https://github.com/zeux))
- \[Coverity\] Concurrent data access violations \(MISSING\_LOCK\)\
 doctest\.h: 5838 in doctest::<unnamed>::ConsoleReporter::test\_case\_start\(\
const doctest::TestCaseData &\)\(\) \#486 ([jiridanek](https://github.com/jir\
idanek))
- Provide an error message if REQUIRE \(or other disabled assertion macros\)\
 are used when exceptions are disabled \#439 ([alexeyr](https://github.com/al\
exeyr))
- Conflict with templated toString function \#420 ([TillHeinzel](https://gith\
ub.com/TillHeinzel))
- \-tc does not work with comma in names \#398 ([martinus](https://github.com\
/martinus))
- Compile error on MSVC2019 with any macro which involves stringification of\
 std::string \(asserts, INFO, etc\.\) when <ostream> isn't included \#381\
 ([nyanpasu64](https://github.com/nyanpasu64))
- the dll example doesn't run correctly on Windows with MinGW \#375\
 ([GregKon](https://github.com/GregKon))
- add basic conan recipe \#354 ([trondhe](https://github.com/trondhe))
- CHECK\_MESSAGE\(\) should accept temporaries \#337 ([eyalroz](https://githu\
b.com/eyalroz))
- stringify of cstring literals doesn't work out of the box with separate\
 test\_driver\.cpp \#329 ([teichert](https://github.com/teichert))
- warning : function declared 'noreturn' should not return\
 \[\-Winvalid\-noreturn\] \#307 ([Vexthil](https://github.com/Vexthil))
- Test cases containing a comma cannot be run individually \#297\
 ([Tradias](https://github.com/Tradias))
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest \#242 ([BrunaoW](https://github.com/BrunaoW))
- The \`CHECK\` macro conflicts with Boost\.Beast \(and surely others\) \#234\
 ([reddwarf69](https://github.com/reddwarf69))
- Feature request: check if a \`float\` or \`double\` is NaN \#105\
 ([iamthad](https://github.com/iamthad))

**Merged pull requests:**
- Add clang\-tidy integration and fix all warnings \#659 ([Saalvage](https://\
github.com/Saalvage))
- Avoid static init problem in insufficient\_procs\(\) \(MPI\) \#657\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Use MPI\_Isend in MpiConsoleReporter to avoid deadlock \#656\
 ([starintheuniverse](https://github.com/starintheuniverse))
- Cleanup of DOCTEST\_DO\_BINARY\_EXPRESSION\_COMPARISON\. Fixes \#651 \#652\
 ([iboB](https://github.com/iboB))
- Add tests for DOCTEST\_CONFIG\_USE\_STD\_HEADERS \#643 ([Saalvage](https://\
github.com/Saalvage))
- Stringification amendments \#642 ([Saalvage](https://github.com/Saalvage))
- Clean up defines a bit; Implement \#439 \#641 ([Saalvage](https://github.co\
m/Saalvage))
- Fix \#508 \#640 ([Saalvage](https://github.com/Saalvage))
- re\-re\-remove overly restrictive minimum version of meson \#635\
 ([eli-schwartz](https://github.com/eli-schwartz))
- Fix move\-only types failing to decompose correctly \#634\
 ([Saalvage](https://github.com/Saalvage))
- Improve Mac PowerPC support \#631 ([ryandesign](https://github.com/ryandesi\
gn))
- added nolint for cert\-err58 \#628 ([serguei-k](https://github.com/serguei-\
k))
- Fix properties not being passed in doctest\_discover\_tests \#626\
 ([quantumsteve](https://github.com/quantumsteve))
- Config no multithreading \#625 ([Saalvage](https://github.com/Saalvage))
- Fix MPI extension to work with no parallel tests \#623 ([BerengerBerthoul](\
https://github.com/BerengerBerthoul))
- Add contains option to checks\. \#620 ([MFraters](https://github.com/MFrate\
rs))
- Add alias target for doctest\_with\_main \#617 ([jessestricker](https://git\
hub.com/jessestricker))
- Allow escaping backslash with backslash in filters \(\#614\) \#616\
 ([yeputons](https://github.com/yeputons))
- Fix operator<< \#615 ([Saalvage](https://github.com/Saalvage))
- Fix MPI extension to work if launched without mpirun/mpiexec \#612\
 ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Fix mpi subcase \#611 ([BerengerBerthoul](https://github.com/BerengerBertho\
ul))
- Add IsNaN operator\! \#603 ([Saalvage](https://github.com/Saalvage))
- Move roadmap and wipe it clean \#601 ([Saalvage](https://github.com/Saalvag\
e))
- removes a duplicate word 'most' in configuration\.md \#599\
 ([krishnakumarg1984](https://github.com/krishnakumarg1984))
- Fix subcase reentry \#598 ([Saalvage](https://github.com/Saalvage))
- Add flag that forces custom stringification methods to be provided \#595\
 ([Saalvage](https://github.com/Saalvage))
- Fix coverage \#594 ([Saalvage](https://github.com/Saalvage))
- Ignore CMake and MacOS generated files \#592 ([LeonBrands](https://github.c\
om/LeonBrands))
- Feature config ret vals \#589 ([Saalvage](https://github.com/Saalvage))
- Refactor stringification \#585 ([Saalvage](https://github.com/Saalvage))
- Feature: Better NaN \#584 ([Saalvage](https://github.com/Saalvage))
- Nan check \#582 ([Saalvage](https://github.com/Saalvage))

## [v2.4.8](https://github.com/doctest/doctest/tree/v2.4.8) (2022-01-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.7...v2.4.8)

**Closed issues:**

- \[meta\] Change git tagging pattern [\#579](https://github.com/doctest/doct\
est/issues/579)
- TEST\_CASE\_TEMPLATE causes "-Wunused-local-typedef" warning on Clang\
 [\#577](https://github.com/doctest/doctest/issues/577)
- Regression between 2.4.6 and 2.4.7 with Visual Studio 2015\
 [\#573](https://github.com/doctest/doctest/issues/573)
- Regression between 2.4.6 and 2.4.7 [\#571](https://github.com/doctest/docte\
st/issues/571)
- Compilation error on MSVS2019 with ClangCL [\#570](https://github.com/docte\
st/doctest/issues/570)
- Compilation errors on MSVC 2015 after doctest update to 2.4.7\
 [\#568](https://github.com/doctest/doctest/issues/568)
- `g\_oss` is causing incorrect stringification results [\#567](https://githu\
b.com/doctest/doctest/issues/567)
- MSVC warnings leak through when using the library as a single header with\
 /Wall [\#565](https://github.com/doctest/doctest/issues/565)
- \[PROJECT ANNOUNCEMENT\] Looking for maintainers for Doctest\
 [\#554](https://github.com/doctest/doctest/issues/554)
- Is this still maintained? [\#537](https://github.com/doctest/doctest/issues\
/537)
- \[Feature request\] CHECK could return the value of expression\
 [\#496](https://github.com/doctest/doctest/issues/496)
- Feature: check or return false [\#426](https://github.com/doctest/doctest/i\
ssues/426)
- Undefined reference of `operator\<\<\(ostream&, const string&\)` when\
 compiling with clang 10 and libc++ 10 on Ubuntu 16.04.6 LTS\
 [\#356](https://github.com/doctest/doctest/issues/356)
- Doctest is not able to compile on OSX [\#126](https://github.com/doctest/do\
ctest/issues/126)

**Merged pull requests:**

- Continuous Integration Refactor [\#580](https://github.com/doctest/doctest/\
pull/580) ([Saalvage](https://github.com/Saalvage))
- Fix semicolon enforcement [\#578](https://github.com/doctest/doctest/pull/5\
78) ([Saalvage](https://github.com/Saalvage))
- Fix unused variable 2 [\#576](https://github.com/doctest/doctest/pull/576)\
 ([Saalvage](https://github.com/Saalvage))
- Alternative approach to Windows color initialization [\#575](https://github\
.com/doctest/doctest/pull/575) ([Saalvage](https://github.com/Saalvage))
- Assertions returning booleans [\#574](https://github.com/doctest/doctest/pu\
ll/574) ([Saalvage](https://github.com/Saalvage))
- Fix the thread-local string-stream [\#569](https://github.com/doctest/docte\
st/pull/569) ([Saalvage](https://github.com/Saalvage))
- Clean up warning suppression a bit; Fixes \#565 [\#566](https://github.com/\
doctest/doctest/pull/566) ([Saalvage](https://github.com/Saalvage))
- Add Universal Windows Platform support [\#558](https://github.com/doctest/d\
octest/pull/558) ([isaevil](https://github.com/isaevil))

## [2.4.7](https://github.com/doctest/doctest/tree/2.4.7) (2021-12-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.6...2.4.7)

**Implemented enhancements:**

- Add a default Bazel BUILD file [\#433](https://github.com/doctest/doctest/i\
ssues/433)

**Fixed bugs:**

- Stack-buffer-overflow probably because char array is viewed as NULL\
 terminated string [\#476](https://github.com/doctest/doctest/issues/476)

**Closed issues:**

- "C4834: discarding return value" with REQUIRE\_THROWS [\#549](https://githu\
b.com/doctest/doctest/issues/549)
- Xcode 11.3 is gone from macOS-latest \(=macOS-11\) [\#547](https://github.c\
om/doctest/doctest/issues/547)
- is it possible to define dependency for CHECKs [\#545](https://github.com/d\
octest/doctest/issues/545)
- Output summary explanation [\#541](https://github.com/doctest/doctest/issue\
s/541)
- compiler errors in doctest.h using cmake in CLion [\#540](https://github.co\
m/doctest/doctest/issues/540)
- Fails to build in VS2013 because of constexpr [\#539](https://github.com/do\
ctest/doctest/issues/539)
- -Wreserved-identifier warnings with Clang 13.0.0 [\#536](https://github.com\
/doctest/doctest/issues/536)
- Build fails with latest MSVC 2019 \(v16.11\) due to /WX [\#535](https://git\
hub.com/doctest/doctest/issues/535)
- VS 16.11 warning about unreferenced function with internal linkage\
 [\#533](https://github.com/doctest/doctest/issues/533)
- Faq googletest mocking dead link [\#532](https://github.com/doctest/doctest\
/issues/532)
- FR: Documentation: FAQ: Add sectoin 'multiple files' [\#526](https://github\
.com/doctest/doctest/issues/526)
- CMAKE: doctest\_discover\_tests\(\) error when ADD\_LABELS is not specified\
 [\#524](https://github.com/doctest/doctest/issues/524)
- Register tests based on test data available [\#521](https://github.com/doct\
est/doctest/issues/521)
- naming override in different testcase files [\#517](https://github.com/doct\
est/doctest/issues/517)
- Segmentation fault during the compilation without the copy elision\
 optimization [\#515](https://github.com/doctest/doctest/issues/515)
- Compiler warnings on Xcode 12.5 [\#514](https://github.com/doctest/doctest/\
issues/514)
- Using filter `-sc` does not work properly? [\#513](https://github.com/docte\
st/doctest/issues/513)
- \[question\] Example of tests in production code & DLLs & shared libraries?\
 [\#511](https://github.com/doctest/doctest/issues/511)
- Dumping fixture state to disk on error [\#509](https://github.com/doctest/d\
octest/issues/509)
- Macros construct reserved identifiers [\#507](https://github.com/doctest/do\
ctest/issues/507)
- Running doctest on embedded ARM Cortex µCs [\#506](https://github.com/docte\
st/doctest/issues/506)
- Asserts Outside of Tests Example Does Not Link [\#504](https://github.com/d\
octest/doctest/issues/504)
- \[FEATURE REQUEST\] Quiet flag [\#503](https://github.com/doctest/doctest/i\
ssues/503)
- Compile error on Intel C++ Classic Compilers [\#502](https://github.com/doc\
test/doctest/issues/502)
- compiling doctest in 32-bit with \_\_stdcall calling convention fails\
 [\#500](https://github.com/doctest/doctest/issues/500)
- Duplicate 'const' compilation error from TEST\_CASE\_CLASS macro\
 [\#498](https://github.com/doctest/doctest/issues/498)
- Packed fields can't be accessed in 2.4.6 [\#495](https://github.com/doctest\
/doctest/issues/495)
- Dangling pointers with .str\(\).c\_str\(\) [\#494](https://github.com/docte\
st/doctest/issues/494)
- Automatic adding of TEST\_SUITE labels to discovered tests fails if\
 ADD\_LABELS not set [\#489](https://github.com/doctest/doctest/issues/489)
- Adding a bunch of REQUIRE/CHECK utilities [\#487](https://github.com/doctes\
t/doctest/issues/487)
- Warning C4114 in MSVC [\#485](https://github.com/doctest/doctest/issues/485)
- Own repository [\#410](https://github.com/doctest/doctest/issues/410)
- Linking problem with Clang 10 on Windows [\#362](https://github.com/doctest\
/doctest/issues/362)
- Add option not to print the intro text [\#342](https://github.com/doctest/d\
octest/issues/342)
- \[Feature\] Better integration with tools \(VS Code Test Adapter\
 Extension\) [\#320](https://github.com/doctest/doctest/issues/320)
- vscode test explorer [\#303](https://github.com/doctest/doctest/issues/303)
- Want an option not to print any intro [\#245](https://github.com/doctest/do\
ctest/issues/245)
- Add way to disable printing of intro [\#181](https://github.com/doctest/doc\
test/issues/181)

**Merged pull requests:**

- Make String::operator+ non-member [\#564](https://github.com/doctest/doctes\
t/pull/564) ([Saalvage](https://github.com/Saalvage))
- Add -minimal flag [\#562](https://github.com/doctest/doctest/pull/562)\
 ([Saalvage](https://github.com/Saalvage))
- Quiet flag [\#561](https://github.com/doctest/doctest/pull/561)\
 ([Saalvage](https://github.com/Saalvage))
- Fix redefinition error while using double time DOCTEST\_ANONYMOUS\(DOCTEST\_\
CAPTURE\_\) [\#557](https://github.com/doctest/doctest/pull/557)\
 ([isaevil](https://github.com/isaevil))
- Fix error: missing initializer for member doctest::detail::TestSuite\
 [\#556](https://github.com/doctest/doctest/pull/556) ([isaevil](https://gith\
ub.com/isaevil))
- Xcode 11.3 with macos 10.15 [\#548](https://github.com/doctest/doctest/pull\
/548) ([jsoref](https://github.com/jsoref))
- Spelling [\#546](https://github.com/doctest/doctest/pull/546)\
 ([jsoref](https://github.com/jsoref))
- Fix build with -Wunused-but-set-variable [\#543](https://github.com/doctest\
/doctest/pull/543) ([jktjkt](https://github.com/jktjkt))
- build\(meson\): use `override\_dependency` if supported [\#538](https://git\
hub.com/doctest/doctest/pull/538) ([Tachi107](https://github.com/Tachi107))
- Fix google death test URL [\#528](https://github.com/doctest/doctest/pull/5\
28) ([emrecil](https://github.com/emrecil))
- Fixing issue with doctestAddTests.cmake [\#527](https://github.com/doctest/\
doctest/pull/527) ([jharmer95](https://github.com/jharmer95))
- Replace gendered pronouns [\#525](https://github.com/doctest/doctest/pull/5\
25) ([mletterle](https://github.com/mletterle))
- Fixed intel compiler parser bug. Should fix \#502 [\#523](https://github.co\
m/doctest/doctest/pull/523) ([BerengerBerthoul](https://github.com/BerengerBe\
rthoul))
- specifying working directory for execute\_process in doctest\_discover\_tes\
ts [\#518](https://github.com/doctest/doctest/pull/518) ([philbucher](https:/\
/github.com/philbucher))
- Fix the logic that depends on optional copy elision optimization\
 [\#516](https://github.com/doctest/doctest/pull/516) ([ivankochin](https://g\
ithub.com/ivankochin))
- Fix reserved identifiers [\#510](https://github.com/doctest/doctest/pull/51\
0) ([ts826848](https://github.com/ts826848))
- Fix build with GCC 11 [\#505](https://github.com/doctest/doctest/pull/505)\
 ([jktjkt](https://github.com/jktjkt))
- minor fixes in MPI docs [\#499](https://github.com/doctest/doctest/pull/499\
) ([philbucher](https://github.com/philbucher))
- Add a minimal bazel config [\#497](https://github.com/doctest/doctest/pull/\
497) ([elliottt](https://github.com/elliottt))
- Handle escaped commas in parsed arguments [\#493](https://github.com/doctes\
t/doctest/pull/493) ([friendlyanon](https://github.com/friendlyanon))
- Fixes Issue 476 . When running executables with "-s" stringifyBinaryE…\
 [\#491](https://github.com/doctest/doctest/pull/491) ([navinp0304](https://g\
ithub.com/navinp0304))
- Set variable to 0 if not set [\#490](https://github.com/doctest/doctest/pul\
l/490) ([shivupa](https://github.com/shivupa))

## [2.4.6](https://github.com/doctest/doctest/tree/2.4.6) (2021-03-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.5...2.4.6)

**Fixed bugs:**

- REQUIRE does not compile when operator== in different namespace\
 [\#443](https://github.com/doctest/doctest/issues/443)
- Using templated operator== inside TEST\_CASE changes deduced types of\
 forwarding references [\#399](https://github.com/doctest/doctest/issues/399)

**Closed issues:**

- CMake doesn't link package [\#483](https://github.com/doctest/doctest/issue\
s/483)
- Assertions are slow when running on Windows with a debugger attached\
 [\#481](https://github.com/doctest/doctest/issues/481)
- Get list of registered test-case names [\#479](https://github.com/doctest/d\
octest/issues/479)
- Can't compile with glibc master \(future 2.34\): SIGSTKSZ is no longer a\
 constant [\#473](https://github.com/doctest/doctest/issues/473)
- How to use Doctest with Github Actions [\#472](https://github.com/doctest/d\
octest/issues/472)
- Link error \(multiple definition...\) in simple project [\#470](https://git\
hub.com/doctest/doctest/issues/470)
- INFO does not compile when used like a function call [\#469](https://github\
.com/doctest/doctest/issues/469)
- std::uncaught\_exceptions is only available if compiling for macOS 10.12 or\
 above [\#466](https://github.com/doctest/doctest/issues/466)
- Compile failure with WinRT on 2.4.5 [\#465](https://github.com/doctest/doct\
est/issues/465)

**Merged pull requests:**

- Improve speed with attached debugger \(Windows\) [\#482](https://github.com\
/doctest/doctest/pull/482) ([pgroke](https://github.com/pgroke))
- Convert to bool by casting, rather than double negation [\#480](https://git\
hub.com/doctest/doctest/pull/480) ([kitegi](https://github.com/kitegi))
- Fix compile error when targeting macOS version earlier and macOS 10.12\
 [\#478](https://github.com/doctest/doctest/pull/478) ([SamWindell](https://g\
ithub.com/SamWindell))
- Fix MSVC linter warning about uninitialized TestSuite variables\
 [\#471](https://github.com/doctest/doctest/pull/471) ([Reedbeta](https://git\
hub.com/Reedbeta))
- REQUIRE does not compile when operator== in different namespace \#443 .\
 [\#468](https://github.com/doctest/doctest/pull/468) ([navinp0304](https://g\
ithub.com/navinp0304))
- Automatically add TEST\_SUITE labels to discovered tests\
 [\#464](https://github.com/doctest/doctest/pull/464) ([shivupa](https://gith\
ub.com/shivupa))

## [2.4.5](https://github.com/doctest/doctest/tree/2.4.5) (2021-02-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.4...2.4.5)

**Closed issues:**

- Stack buffer overflow in `String` constructor [\#460](https://github.com/do\
ctest/doctest/issues/460)
- Suppress warnings from clang-tidy [\#459](https://github.com/doctest/doctes\
t/issues/459)
- compilation issue in MSVC when defining DOCTEST\_THREAD\_LOCAL to static\
 [\#458](https://github.com/doctest/doctest/issues/458)
- nvcc compiler warning; doctest.h\(4138\): warning : expression has no\
 effect [\#454](https://github.com/doctest/doctest/issues/454)
- Use of std::atomic can slow down multithreaded tests [\#452](https://github\
.com/doctest/doctest/issues/452)

**Merged pull requests:**

- Fix compilation on case-sensitive filesystems [\#463](https://github.com/do\
ctest/doctest/pull/463) ([jhasse](https://github.com/jhasse))
- Use function-like macros for prefixless macro names [\#462](https://github.\
com/doctest/doctest/pull/462) ([tbleher](https://github.com/tbleher))
- Implement a multi lane atomic for assertion counts [\#453](https://github.c\
om/doctest/doctest/pull/453) ([martinus](https://github.com/martinus))

## [2.4.4](https://github.com/doctest/doctest/tree/2.4.4) (2020-12-25)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.3...2.4.4)

**Closed issues:**

- 2.4.2: build fails [\#450](https://github.com/doctest/doctest/issues/450)
- combine the same tests for different build configurations from multiple\
 shared objects without having symbol clashes [\#436](https://github.com/doct\
est/doctest/issues/436)
- Issue with GitHub Security Scanning: gmtime [\#423](https://github.com/doct\
est/doctest/issues/423)

## [2.4.3](https://github.com/doctest/doctest/tree/2.4.3) (2020-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.2...2.4.3)

## [2.4.2](https://github.com/doctest/doctest/tree/2.4.2) (2020-12-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.1...2.4.2)

**Closed issues:**

- DOCTEST\_CHECK\_THROWS\_WITH\_AS fails to work with dependant exception\
 type [\#447](https://github.com/doctest/doctest/issues/447)
- MSVC warnings: narrowing conversion, signed/unsigned mismatch\
 [\#446](https://github.com/doctest/doctest/issues/446)
-  log contexts for failures in JUnit reporter [\#441](https://github.com/doc\
test/doctest/issues/441)
- MinGW "'mutex' in namespace 'std' does not name a type" error.\
 [\#438](https://github.com/doctest/doctest/issues/438)
- Test runner thread initialization [\#435](https://github.com/doctest/doctes\
t/issues/435)
- PLATFORM is misdetected on MacOSX Big Sur [\#415](https://github.com/doctes\
t/doctest/issues/415)
- CHECK\_EQ with enum values [\#276](https://github.com/doctest/doctest/issue\
s/276)

**Merged pull requests:**

- Squash MSVC warnings when including ntstatus.h [\#449](https://github.com/d\
octest/doctest/pull/449) ([nickhutchinson](https://github.com/nickhutchinson))
- Add MAIN\_PROJECT check for test option [\#445](https://github.com/doctest/\
doctest/pull/445) ([globberwops](https://github.com/globberwops))
- Suppress clang-analyzer-cplusplus.NewDeleteLeaks [\#444](https://github.com\
/doctest/doctest/pull/444) ([ncihnegn](https://github.com/ncihnegn))
- log contexts for failures in JUnit reporter [\#442](https://github.com/doct\
est/doctest/pull/442) ([runave](https://github.com/runave))
- Fix 32bit support on macOS [\#440](https://github.com/doctest/doctest/pull/\
440) ([AlexanderLanin](https://github.com/AlexanderLanin))

## [2.4.1](https://github.com/doctest/doctest/tree/2.4.1) (2020-11-04)
[Full Changelog](https://github.com/doctest/doctest/compare/2.4.0...2.4.1)

**Closed issues:**

- Avoid old C-style casts [\#424](https://github.com/doctest/doctest/issues/4\
24)
- Segfault in unwind [\#422](https://github.com/doctest/doctest/issues/422)
- Inspect exception with gdb [\#421](https://github.com/doctest/doctest/issue\
s/421)
- use-of-uninitialized-value [\#414](https://github.com/doctest/doctest/issue\
s/414)
- Support unit tests with MPI [\#413](https://github.com/doctest/doctest/issu\
es/413)
- Break into debugger support is missing for Linux [\#411](https://github.com\
/doctest/doctest/issues/411)
- What if built doctest as static library instead of header-only\
 [\#408](https://github.com/doctest/doctest/issues/408)
- \[Question\] How to get test case name [\#407](https://github.com/doctest/d\
octest/issues/407)
- create extensions header for optional features requiring more std includes\
 or newer C++ features [\#405](https://github.com/doctest/doctest/issues/405)
- tests/asserts summary lines are misaligned when counts exceed 999999\
 [\#402](https://github.com/doctest/doctest/issues/402)
- Call to 'ne' is ambiguous -- with solution [\#395](https://github.com/docte\
st/doctest/issues/395)
- Intermittent Segfaults [\#391](https://github.com/doctest/doctest/issues/39\
1)
- Junit classname [\#390](https://github.com/doctest/doctest/issues/390)
- Add default printers for enums [\#121](https://github.com/doctest/doctest/i\
ssues/121)

**Merged pull requests:**

- Enum support \(fix for Issue \#121\) [\#429](https://github.com/doctest/doc\
test/pull/429) ([jkriegshauser](https://github.com/jkriegshauser))
- Support Clang 3.4 [\#428](https://github.com/doctest/doctest/pull/428)\
 ([AlexanderLanin](https://github.com/AlexanderLanin))
- Silence remarks on old C-style casts [\#425](https://github.com/doctest/doc\
test/pull/425) ([UnePierre](https://github.com/UnePierre))
- Initial MPI unit tests implementation [\#418](https://github.com/doctest/do\
ctest/pull/418) ([BerengerBerthoul](https://github.com/BerengerBerthoul))
- Add JUNIT\_OUTPUT\_DIR option to doctest\_discover\_tests\
 [\#417](https://github.com/doctest/doctest/pull/417) ([Tradias](https://gith\
ub.com/Tradias))
- Add option to build with std headers. [\#416](https://github.com/doctest/do\
ctest/pull/416) ([avostrik](https://github.com/avostrik))
- Port Catch2 break into debugger for Linux. closes \#411 [\#412](https://git\
hub.com/doctest/doctest/pull/412) ([mikezackles](https://github.com/mikezackl\
es))
- summary: align even large values \#402 [\#403](https://github.com/doctest/d\
octest/pull/403) ([dankamongmen](https://github.com/dankamongmen))
- Add breakpoint inline assembly for the Apple Silicon macOS.\
 [\#400](https://github.com/doctest/doctest/pull/400) ([bruvzg](https://githu\
b.com/bruvzg))
- fix google's death test URI in roadmap [\#393](https://github.com/doctest/d\
octest/pull/393) ([ashutosh108](https://github.com/ashutosh108))

## [2.4.0](https://github.com/doctest/doctest/tree/2.4.0) (2020-06-27)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.8...2.4.0)

**Closed issues:**

- Count points based on the number of passed/failed cases?\
 [\#386](https://github.com/doctest/doctest/issues/386)
- How to understand "\#data\_array" in std::string? [\#383](https://github.co\
m/doctest/doctest/issues/383)
- crash: doctest with custom allocator [\#382](https://github.com/doctest/doc\
test/issues/382)
- Feature Request: format PRIVATE/PUBLIC/INTERFACE entries with constant\
 indentation [\#378](https://github.com/doctest/doctest/issues/378)
- JUnit Reporter for Doctest [\#376](https://github.com/doctest/doctest/issue\
s/376)
- Avoiding Feature Bloat [\#374](https://github.com/doctest/doctest/issues/37\
4)
- StringMaker\<wchar\_t\> fail to compile with C++20 enabled \(GCC\)\
 [\#357](https://github.com/doctest/doctest/issues/357)
- doctest\_discover\_tests and FetchContent\_Declare [\#351](https://github.c\
om/doctest/doctest/issues/351)
- Junit reporter [\#318](https://github.com/doctest/doctest/issues/318)

**Merged pull requests:**

- Add a note that doctest can be installed through Homebrew\
 [\#388](https://github.com/doctest/doctest/pull/388) ([cameronwhite](https:/\
/github.com/cameronwhite))
- provide alternative implementation of has\_insertion\_operator for C++20\
 [\#387](https://github.com/doctest/doctest/pull/387) ([lukaszgemborowski](ht\
tps://github.com/lukaszgemborowski))
- Fix issue template to mention doctest [\#380](https://github.com/doctest/do\
ctest/pull/380) ([nyanpasu64](https://github.com/nyanpasu64))

## [2.3.8](https://github.com/doctest/doctest/tree/2.3.8) (2020-05-17)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.7...2.3.8)

**Closed issues:**

- Scenario name can not be passed to -tc to execute single scenario\
 [\#373](https://github.com/doctest/doctest/issues/373)
- Compile Error with CHECK\_NOTHROW when using 2 Template Arguments\
 [\#372](https://github.com/doctest/doctest/issues/372)
- dll example won't compile [\#371](https://github.com/doctest/doctest/issues\
/371)
- Build error with MinGW \(Mingw-w64\) due to missing Windows.h \(with\
 capital W\) [\#370](https://github.com/doctest/doctest/issues/370)
- How to override file\_line\_to\_stream? [\#369](https://github.com/doctest/\
doctest/issues/369)
- Memory sanitizer fails. [\#365](https://github.com/doctest/doctest/issues/3\
65)
- Warning c6319 in Visual Studio [\#359](https://github.com/doctest/doctest/i\
ssues/359)
- Any option to show each test case's execute time? [\#358](https://github.co\
m/doctest/doctest/issues/358)
- doctest in embedded [\#355](https://github.com/doctest/doctest/issues/355)
- Reloading a plugin with test cases leads to a segmentation fault\
 [\#350](https://github.com/doctest/doctest/issues/350)
- Compiling with DOCTEST\_CONFIG\_COLORS\_ANSI fails on Windows\
 [\#348](https://github.com/doctest/doctest/issues/348)
- Can I inherit ConsoleReporter? [\#344](https://github.com/doctest/doctest/i\
ssues/344)
- Noreturn and noexcept defines for Visual Studio 2013 support\
 [\#327](https://github.com/doctest/doctest/issues/327)
- Data-driven testing -- print out the deepest DOCTEST\_SUBCASE\
 [\#215](https://github.com/doctest/doctest/issues/215)
- Print the SUBCASE path when an assert fails in the TEST\_CASE body\
 [\#125](https://github.com/doctest/doctest/issues/125)

**Merged pull requests:**

- fix: possible UB with nullptr increment [\#368](https://github.com/doctest/\
doctest/pull/368) ([oktonion](https://github.com/oktonion))
- Use CMake's CMP0077 policy if available [\#363](https://github.com/doctest/\
doctest/pull/363) ([thelink2012](https://github.com/thelink2012))
- Fix warning c6319 in Visual Studio 16.5 [\#361](https://github.com/doctest/\
doctest/pull/361) ([Cvelth](https://github.com/Cvelth))

## [2.3.7](https://github.com/doctest/doctest/tree/2.3.7) (2020-02-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.6...2.3.7)

**Closed issues:**

- Some of the GitHub CI builds are failing [\#334](https://github.com/doctest\
/doctest/issues/334)
- C++20 removed std::uncaught\_exception [\#333](https://github.com/doctest/d\
octest/issues/333)
- Doctest SEH handlers are called before \_\_except handlers\
 [\#324](https://github.com/doctest/doctest/issues/324)

**Merged pull requests:**

- using std namespace where necessary and timer ticks fix [\#341](https://git\
hub.com/doctest/doctest/pull/341) ([oktonion](https://github.com/oktonion))
- fix std::uncaught\_exceptions [\#340](https://github.com/doctest/doctest/pu\
ll/340) ([cyyever](https://github.com/cyyever))
- Fix GitHub CI and add GitHub build badges [\#336](https://github.com/doctes\
t/doctest/pull/336) ([claremacrae](https://github.com/claremacrae))
- http -\> https [\#331](https://github.com/doctest/doctest/pull/331)\
 ([Coeur](https://github.com/Coeur))
- Switch to catching unhandled exceptions on Windows Closes \#324\
 [\#325](https://github.com/doctest/doctest/pull/325) ([jkriegshauser](https:\
//github.com/jkriegshauser))

## [2.3.6](https://github.com/doctest/doctest/tree/2.3.6) (2019-12-16)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.5...2.3.6)

**Closed issues:**

- Link problem w/ BUILD=Release if MESSAGE\(\) with std::string/ostream-opera\
tor is used [\#316](https://github.com/doctest/doctest/issues/316)
- the FAQ about difference to Catch2 is missing tags [\#315](https://github.c\
om/doctest/doctest/issues/315)
- include Windows.h in small caps to silence clang warnings\
 [\#312](https://github.com/doctest/doctest/issues/312)
- Mistake in generator with lgtm error [\#311](https://github.com/doctest/doc\
test/issues/311)
- CMake: cannot install target doctest\_with\_main [\#310](https://github.com\
/doctest/doctest/issues/310)
- \[bug\] INFO\(\) and CAPTURE\(\) cannot compile using MSVC when used with\
 DOCTEST\_CONFIG\_IMPLEMENTATION\_IN\_DLL [\#306](https://github.com/doctest/\
doctest/issues/306)
- Skip subcase [\#304](https://github.com/doctest/doctest/issues/304)
- Does some equivalent features from google test exist here?\
 [\#300](https://github.com/doctest/doctest/issues/300)
- How to use doctest in dll only\(without main.cpp and .exe\)\
 [\#299](https://github.com/doctest/doctest/issues/299)
- Warning: C26812: The enum type 'doctest::assertType::Enum' is unscoped.\
 Prefer 'enum class' over 'enum' \(Enum.3\). [\#298](https://github.com/docte\
st/doctest/issues/298)
- test executable\_dll\_and\_plugin fails on Linux, GCC 8.1.0,\
 -fsanitize=address [\#201](https://github.com/doctest/doctest/issues/201)

**Merged pull requests:**

- Fixed missing ostream include for MacOS when defining DOCTEST\_CONFIG\_…\
 [\#314](https://github.com/doctest/doctest/pull/314) ([NKTomHaygarth](https:\
//github.com/NKTomHaygarth))
- include windows.h in cmall caps to silence clang nonportable warnings\
 [\#313](https://github.com/doctest/doctest/pull/313) ([suoniq](https://githu\
b.com/suoniq))
- Add .editorconfig file. [\#301](https://github.com/doctest/doctest/pull/301\
) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add Github Actions CI [\#285](https://github.com/doctest/doctest/pull/285)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))

## [2.3.5](https://github.com/doctest/doctest/tree/2.3.5) (2019-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.4...2.3.5)

**Closed issues:**

- \[feature request\] Assertion macros for throwing exception of a specific\
 type with message - \<LEVEL\>\_THROWS\_WITH\_AS\(expr, string, ex\_type\)\
 [\#295](https://github.com/doctest/doctest/issues/295)
- CHECK\_THROWS\_AS of non-default constructor wants to call default\
 constructor [\#293](https://github.com/doctest/doctest/issues/293)
- Typos and spelling errors in source, documentation and scripts\
 [\#291](https://github.com/doctest/doctest/issues/291)
- Customize test names / variable substitution [\#284](https://github.com/doc\
test/doctest/issues/284)
- SUBCASE in function not behaving as expected [\#282](https://github.com/doc\
test/doctest/issues/282)
- SUPER\_FAST\_ASSERTS fails to compile CHECK\_MESSAGE [\#281](https://github\
.com/doctest/doctest/issues/281)
- CHECK\_MESSAGE no longer works with DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS\
 [\#280](https://github.com/doctest/doctest/issues/280)
- CAPTURE of structured binding element no longer works [\#279](https://githu\
b.com/doctest/doctest/issues/279)
- Reporter: `test\_case\_end` no longer fired after test case restart\
 [\#278](https://github.com/doctest/doctest/issues/278)
- Add debug break override support [\#277](https://github.com/doctest/doctest\
/issues/277)
- Running tests from within Visual Studio in a static lib project\
 [\#275](https://github.com/doctest/doctest/issues/275)
- Compile-time error when using a raw string literal inside of REQUIRE \(MSVC\
 2017\) [\#274](https://github.com/doctest/doctest/issues/274)
- Give example for having tests in production code [\#252](https://github.com\
/doctest/doctest/issues/252)
- Memory leaks just by including doctest.h [\#205](https://github.com/doctest\
/doctest/issues/205)
- Feature request: print subcase when an exception is thrown inside one\
 [\#136](https://github.com/doctest/doctest/issues/136)

**Merged pull requests:**

- Fix typos and misspellings found by codespell. [\#292](https://github.com/d\
octest/doctest/pull/292) ([warmsocks](https://github.com/warmsocks))
- Document order by issue correctly [\#290](https://github.com/doctest/doctes\
t/pull/290) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Document that -order-by=file is compiler-dependent [\#289](https://github.c\
om/doctest/doctest/pull/289) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add -order-by=name to filter\_2 test [\#288](https://github.com/doctest/doc\
test/pull/288) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Add support for compiling with clang-cl [\#286](https://github.com/doctest/\
doctest/pull/286) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- No minimum version limitation of Meson [\#283](https://github.com/doctest/d\
octest/pull/283) ([ydm](https://github.com/ydm))

## [2.3.4](https://github.com/doctest/doctest/tree/2.3.4) (2019-08-12)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.3...2.3.4)

**Closed issues:**

- Remove INFO\(\) limitation for using only lvalues and no rvalues\
 [\#269](https://github.com/doctest/doctest/issues/269)
- Compile error on MAC OS with AppleClang 8.0.0.8000042  [\#266](https://gith\
ub.com/doctest/doctest/issues/266)
- Throwing exception in a mocked method [\#265](https://github.com/doctest/do\
ctest/issues/265)
- Illegal syntax for decorators compiles and runs without warning, but has no\
 effect [\#264](https://github.com/doctest/doctest/issues/264)
- Support conditional expressions in REQUIRE [\#262](https://github.com/docte\
st/doctest/issues/262)
- Register a listener\(reporter\) that always listens [\#257](https://github.\
com/doctest/doctest/issues/257)
- Memory sanitizer complaint [\#255](https://github.com/doctest/doctest/issue\
s/255)
- Windows Clang GNU command line warnings [\#253](https://github.com/doctest/\
doctest/issues/253)
- The build writes into the source directory [\#249](https://github.com/docte\
st/doctest/issues/249)
- How to enable tests inside another exe [\#246](https://github.com/doctest/d\
octest/issues/246)
- Testing multiple headers. [\#244](https://github.com/doctest/doctest/issues\
/244)
- CMakeLists.txt: Needs CMAKE\_CXX\_STANDARD=11 [\#243](https://github.com/do\
ctest/doctest/issues/243)
- \[bug\] Can't compile the tests because of mutex, that is declared in the\
 doctest [\#242](https://github.com/doctest/doctest/issues/242)

**Merged pull requests:**

- Improve Listener docs [\#273](https://github.com/doctest/doctest/pull/273)\
 ([claremacrae](https://github.com/claremacrae))
- Rework `INFO` lazy evaluation to use lambdas. [\#270](https://github.com/do\
ctest/doctest/pull/270) ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- Prevent compile errors with AppleClang compiler [\#268](https://github.com/\
doctest/doctest/pull/268) ([ClausKlein](https://github.com/ClausKlein))
- Revert "fix : including windows.h header cause error" [\#263](https://githu\
b.com/doctest/doctest/pull/263) ([onqtam](https://github.com/onqtam))
- Fix static analyzer URLs [\#259](https://github.com/doctest/doctest/pull/25\
9) ([godbyk](https://github.com/godbyk))
- fix : including windows.h header cause error [\#258](https://github.com/doc\
test/doctest/pull/258) ([rinechran](https://github.com/rinechran))
- only look for C++ compiler with CMake [\#256](https://github.com/doctest/do\
ctest/pull/256) ([zhihaoy](https://github.com/zhihaoy))
- Fix \#253 [\#254](https://github.com/doctest/doctest/pull/254)\
 ([DaanDeMeyer](https://github.com/DaanDeMeyer))
- add alias target for doctest for use in build tree [\#247](https://github.c\
om/doctest/doctest/pull/247) ([trondhe](https://github.com/trondhe))

## [2.3.3](https://github.com/doctest/doctest/tree/2.3.3) (2019-06-02)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.2...2.3.3)

**Closed issues:**

- Build fails with gcc9 because of -Wstrict-overflow=5 which is too high\
 [\#241](https://github.com/doctest/doctest/issues/241)
- doctest given defined with short macro name [\#239](https://github.com/doct\
est/doctest/issues/239)
- Splitting templated test across different translation units\
 [\#238](https://github.com/doctest/doctest/issues/238)
- Compile errors with iosfwd.h and Visual Studio 2019 Preview\
 [\#183](https://github.com/doctest/doctest/issues/183)
- Add CMake test support as catch\_discover\_tests\(\) in Catch2\
 [\#171](https://github.com/doctest/doctest/issues/171)

**Merged pull requests:**

- fix \#239 - use long macro name [\#240](https://github.com/doctest/doctest/\
pull/240) ([m-bd](https://github.com/m-bd))
- Add doctest\_discover\_tests\(\) [\#236](https://github.com/doctest/doctest\
/pull/236) ([reddwarf69](https://github.com/reddwarf69))
- Ignore redundant-decls warning on MinGW [\#235](https://github.com/doctest/\
doctest/pull/235) ([AMS21](https://github.com/AMS21))
- Fixed meson build file dependency declaration [\#233](https://github.com/do\
ctest/doctest/pull/233) ([jormundgand](https://github.com/jormundgand))

## [2.3.2](https://github.com/doctest/doctest/tree/2.3.2) (2019-05-06)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.1...2.3.2)

**Closed issues:**

- scripts/bench/run\_all.py : module 'urllib' has no attribute 'urlretrieve'\
 [\#230](https://github.com/doctest/doctest/issues/230)
- wrong set of tests registered with TEST\_CASE\_TEMPLATE get executed\
 [\#228](https://github.com/doctest/doctest/issues/228)
- Logging not Working for me [\#227](https://github.com/doctest/doctest/issue\
s/227)
- Link test runner executable into dll? [\#226](https://github.com/doctest/do\
ctest/issues/226)
- Linking issue for executables after including doctest in library\
 [\#224](https://github.com/doctest/doctest/issues/224)
- Strange REQUIRE\_THROWS behaviour [\#223](https://github.com/doctest/doctes\
t/issues/223)
- Windows clang-cl -Wunused-variable warning [\#221](https://github.com/docte\
st/doctest/issues/221)
- Update doctest 2.3.1 in bincrafters [\#220](https://github.com/doctest/doct\
est/issues/220)
- make install, on 64 bit, installs cmake files into lib instead of lib64\
 folder  [\#218](https://github.com/doctest/doctest/issues/218)
- TSAN: data race related to hasLoggedCurrentTestStart [\#217](https://github\
.com/doctest/doctest/issues/217)
- REQUIRE\_THROWS\_AS does not support class constructors [\#216](https://git\
hub.com/doctest/doctest/issues/216)
- Build failure on clang 7.0.1 on Fedora 29 [\#214](https://github.com/doctes\
t/doctest/issues/214)
- add example compatible with -\> https://github.com/report-ci/\
 [\#212](https://github.com/doctest/doctest/issues/212)
- No DOCTEST\_WITH\_TESTS? [\#211](https://github.com/doctest/doctest/issues/\
211)

**Merged pull requests:**

- Added meson file, to declare a dependency. [\#232](https://github.com/docte\
st/doctest/pull/232) ([jormundgand](https://github.com/jormundgand))
- Explicitly specify the doctest\_with\_main C++ standard in CMake.\
 [\#231](https://github.com/doctest/doctest/pull/231) ([DaanDeMeyer](https://\
github.com/DaanDeMeyer))
- Remove architecture check from CMake package [\#225](https://github.com/doc\
test/doctest/pull/225) ([mmha](https://github.com/mmha))
- add default install prefix [\#219](https://github.com/doctest/doctest/pull/\
219) ([a4z](https://github.com/a4z))
- \[regression\] Workaround MSVC preprocessor issue triggered by\
 REQUIRE\_THROWS [\#213](https://github.com/doctest/doctest/pull/213)\
 ([zhihaoy](https://github.com/zhihaoy))

## [2.3.1](https://github.com/doctest/doctest/tree/2.3.1) (2019-03-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.3.0...2.3.1)

**Merged pull requests:**

- Add two very simple examples of using doctest with CMake\
 [\#209](https://github.com/doctest/doctest/pull/209) ([pr0g](https://github.\
com/pr0g))

## [2.3.0](https://github.com/doctest/doctest/tree/2.3.0) (2019-03-23)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.3...2.3.0)

**Closed issues:**

- Compilation with emscripten fails by default because of signal handling\
 [\#207](https://github.com/doctest/doctest/issues/207)
- Compilation fails with cl.exe /Zc:wchar\_t- [\#206](https://github.com/doct\
est/doctest/issues/206)
- Parallel invocation of doctest's own testsuite via CTest fails\
 [\#202](https://github.com/doctest/doctest/issues/202)
-  Get the number of passed/failed tests in the code [\#200](https://github.c\
om/doctest/doctest/issues/200)
- Tests alongside code with multiple executables [\#199](https://github.com/d\
octest/doctest/issues/199)
- Cppcheck 1.86 warnings [\#198](https://github.com/doctest/doctest/issues/19\
8)
- Compiling as Dll maybe is wrong [\#196](https://github.com/doctest/doctest/\
issues/196)
- Forward-declaring identifiers in std:: is UB - consider including some of\
 the cheaper C/C++ stdlib headers [\#194](https://github.com/doctest/doctest/\
issues/194)
- QtCreator + clang warning about operator \<\< precedence\
 [\#191](https://github.com/doctest/doctest/issues/191)
- run test fixture from cli [\#190](https://github.com/doctest/doctest/issues\
/190)
- Installing doctest using cmake and make fails on Ubuntu 16.04 \(C++11 is\
 not used\) [\#189](https://github.com/doctest/doctest/issues/189)
- c++17 requirement for testing private members [\#188](https://github.com/do\
ctest/doctest/issues/188)
- \[feature request\] implement a user-extendable reporter system\
 [\#138](https://github.com/doctest/doctest/issues/138)
- Same test runs multiple times when written in a header and included with\
 different unnormalized paths [\#45](https://github.com/doctest/doctest/issue\
s/45)

**Merged pull requests:**

- Fix unmatched bracket in DOCTEST\_TEST\_CASE\_CLASS [\#204](https://github.\
com/doctest/doctest/pull/204) ([patstew](https://github.com/patstew))
- Template apply [\#203](https://github.com/doctest/doctest/pull/203)\
 ([zhihaoy](https://github.com/zhihaoy))
- No undefined behavior per C++ standard in detecting endianness.\
 [\#195](https://github.com/doctest/doctest/pull/195) ([dimztimz](https://git\
hub.com/dimztimz))
- Fix propagating include directories of target doctest\_with\_main\
 [\#193](https://github.com/doctest/doctest/pull/193) ([dimztimz](https://git\
hub.com/dimztimz))
-  Move single header to a separate folder [\#187](https://github.com/doctest\
/doctest/pull/187) ([dimztimz](https://github.com/dimztimz))
- Fix Clang format to handle C++11 [\#186](https://github.com/doctest/doctest\
/pull/186) ([dimztimz](https://github.com/dimztimz))
- Rename doctest\_impl.h to doctest.cpp for less confusion.\
 [\#185](https://github.com/doctest/doctest/pull/185) ([dimztimz](https://git\
hub.com/dimztimz))

## [2.2.3](https://github.com/doctest/doctest/tree/2.2.3) (2019-02-10)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.2...2.2.3)

**Closed issues:**

- Calling convention needed on a few functions [\#182](https://github.com/doc\
test/doctest/issues/182)
- Terminal color is not reset when a test fails with some signal\
 [\#122](https://github.com/doctest/doctest/issues/122)

## [2.2.2](https://github.com/doctest/doctest/tree/2.2.2) (2019-01-28)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.1...2.2.2)

**Closed issues:**

- Add way to override getCurrentTicks\(\) implementation [\#178](https://gith\
ub.com/doctest/doctest/issues/178)
- Wrap \<csignal\> include with ifdef [\#177](https://github.com/doctest/doct\
est/issues/177)
- How to stop doctest hijack unhandled exceptions? [\#176](https://github.com\
/doctest/doctest/issues/176)
- Change the include path of the `doctest` CMake interface target so users\
 need to specify the folder as well [\#175](https://github.com/doctest/doctes\
t/issues/175)
- Reduce scope of DebugOutputWindowReporter instance [\#174](https://github.c\
om/doctest/doctest/issues/174)
- Can logging \(INFO\) be used in helper class outside of TEST\_CASE?\
 [\#169](https://github.com/doctest/doctest/issues/169)

**Merged pull requests:**

- Change the include path in examples as \#175 [\#180](https://github.com/doc\
test/doctest/pull/180) ([ncihnegn](https://github.com/ncihnegn))
- Fix CMake include path \#175 [\#179](https://github.com/doctest/doctest/pul\
l/179) ([ncihnegn](https://github.com/ncihnegn))

## [2.2.1](https://github.com/doctest/doctest/tree/2.2.1) (2019-01-15)
[Full Changelog](https://github.com/doctest/doctest/compare/2.2.0...2.2.1)

**Closed issues:**

- the `--no-throw` option shouldn't affect `\<LEVEL\>\_NOTHROW` asserts\
 [\#173](https://github.com/doctest/doctest/issues/173)
- Make doctest work with XCode 6 and 7 \(no support for C++11 thread\_local\)\
 [\#172](https://github.com/doctest/doctest/issues/172)
- Print vector content. [\#170](https://github.com/doctest/doctest/issues/170)
- Conan package [\#103](https://github.com/doctest/doctest/issues/103)
- \[feature request\] Thread-safety for asserts and logging facilities\
 [\#4](https://github.com/doctest/doctest/issues/4)

## [2.2.0](https://github.com/doctest/doctest/tree/2.2.0) (2018-12-05)
[Full Changelog](https://github.com/doctest/doctest/compare/2.1.0...2.2.0)

**Closed issues:**

- remove the FAST\_ versions of the binary asserts \(not a breaking change!\)\
 [\#167](https://github.com/doctest/doctest/issues/167)
- \[compile times\] make the DOCTEST\_CONFIG\_SUPER\_FAST\_ASSERTS identifier\
 affect normal asserts too [\#166](https://github.com/doctest/doctest/issues/\
166)

## [2.1.0](https://github.com/doctest/doctest/tree/2.1.0) (2018-11-30)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.1...2.1.0)

**Closed issues:**

- doctest::String ctor with non-zero terminated string [\#165](https://github\
.com/doctest/doctest/issues/165)
- thread\_local is not supported on iOS 9.0 [\#164](https://github.com/doctes\
t/doctest/issues/164)
- Compiler error on Android NDK r18 [\#163](https://github.com/doctest/doctes\
t/issues/163)
- \[question\] One setup for multiple tests [\#160](https://github.com/doctes\
t/doctest/issues/160)
- clang unwanted warning in user code [\#156](https://github.com/doctest/doct\
est/issues/156)
- Unsigned integer overflow in fileOrderComparator [\#151](https://github.com\
/doctest/doctest/issues/151)
- ThreadSanitizer: signal-unsafe call inside of a signal [\#147](https://gith\
ub.com/doctest/doctest/issues/147)
- Feature request: check for exception string \(like Catch's\
 CHECK\_THROWS\_WITH\) [\#97](https://github.com/doctest/doctest/issues/97)

**Merged pull requests:**

- Fixed build error under Android NDK [\#162](https://github.com/doctest/doct\
est/pull/162) ([tals](https://github.com/tals))
- Added clang-7 to travis build [\#161](https://github.com/doctest/doctest/pu\
ll/161) ([AMS21](https://github.com/AMS21))
- Remove clang-tidy warnings for static fields created by doctest\
 [\#159](https://github.com/doctest/doctest/pull/159) ([rantasub](https://git\
hub.com/rantasub))
- Make it possible to change the command line options prefix\
 [\#158](https://github.com/doctest/doctest/pull/158) ([tbleher](https://gith\
ub.com/tbleher))

## [2.0.1](https://github.com/doctest/doctest/tree/2.0.1) (2018-10-24)
[Full Changelog](https://github.com/doctest/doctest/compare/2.0.0...2.0.1)

**Closed issues:**

- macro name collision with google log [\#157](https://github.com/doctest/doc\
test/issues/157)
- Add \#define to not run tests by default [\#152](https://github.com/doctest\
/doctest/issues/152)
- REQUIRE\_THROWS\_MESSAGE not checking message correctly [\#150](https://git\
hub.com/doctest/doctest/issues/150)
- Test case passes even though subcase failed [\#149](https://github.com/doct\
est/doctest/issues/149)

**Merged pull requests:**

- Correctly document when a main\(\) entry point will be created\
 [\#155](https://github.com/doctest/doctest/pull/155) ([tbleher](https://gith\
ub.com/tbleher))
- Correct format string for unsigned char [\#154](https://github.com/doctest/\
doctest/pull/154) ([tbleher](https://github.com/tbleher))

## [2.0.0](https://github.com/doctest/doctest/tree/2.0.0) (2018-08-23)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.9...2.0.0)

**Closed issues:**

- MSVC 2017 15.8.1, New Warnings as Errors [\#144](https://github.com/doctest\
/doctest/issues/144)
- Windows clang-cl -Wdeprecated-declarations warnings [\#143](https://github.\
com/doctest/doctest/issues/143)
- Logo Proposal for Doctest [\#141](https://github.com/doctest/doctest/issues\
/141)
- PCH Support [\#140](https://github.com/doctest/doctest/issues/140)
- improve compile times even further [\#139](https://github.com/doctest/docte\
st/issues/139)
- !!! BREAKING CHANGE !!! - Move to C++11 for next version of the library\
 [\#137](https://github.com/doctest/doctest/issues/137)
- getCurrentTicks producing warning on MinGW [\#133](https://github.com/docte\
st/doctest/issues/133)
- \[enhancement\] Add support for "stand-alone assertions".\
 [\#114](https://github.com/doctest/doctest/issues/114)

**Merged pull requests:**

- Suppress compiler warning on MinGW [\#134](https://github.com/doctest/docte\
st/pull/134) ([AMS21](https://github.com/AMS21))

## [1.2.9](https://github.com/doctest/doctest/tree/1.2.9) (2018-05-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.8...1.2.9)

**Closed issues:**

- GCC 8.0 std::uncaught\_exception\(\) is deprecated  [\#130](https://github.\
com/doctest/doctest/issues/130)
- Signal stack size too small on Linux [\#129](https://github.com/doctest/doc\
test/issues/129)
- Support Intel Compiler [\#128](https://github.com/doctest/doctest/issues/12\
8)
- Please add support for MSVC 2005 [\#127](https://github.com/doctest/doctest\
/issues/127)
- scan-build report "Dereference of null pointer" for function wildcmp\
 [\#124](https://github.com/doctest/doctest/issues/124)
- !!! BREAKING CHANGE \(console output only\)  !!! - Emulate the\
 error/warning format emitted by native compiler gcc/clang/msvc when printing\
 test failures in the log [\#123](https://github.com/doctest/doctest/issues/1\
23)
- ARM builds: FTBFS on armhf - error: cast from 'const char\*' to 'const \
 [\#118](https://github.com/doctest/doctest/issues/118)

**Merged pull requests:**

- Exclude Intel from GCC compiler check [\#132](https://github.com/doctest/do\
ctest/pull/132) ([smcallis](https://github.com/smcallis))
- Fix deprecated-declarations warning with GCC-8.0 [\#131](https://github.com\
/doctest/doctest/pull/131) ([AMS21](https://github.com/AMS21))

## [1.2.8](https://github.com/doctest/doctest/tree/1.2.8) (2018-03-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.7...1.2.8)

**Closed issues:**

- ARM64 builds: templated\_test\_cases.cpp test fails [\#119](https://github.\
com/doctest/doctest/issues/119)

## [1.2.7](https://github.com/doctest/doctest/tree/1.2.7) (2018-02-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.6...1.2.7)

**Closed issues:**

- MSan has runtime error: unsigned integer overflow [\#116](https://github.co\
m/doctest/doctest/issues/116)
- clang-tidy warning about cert-err58-cpp [\#115](https://github.com/doctest/\
doctest/issues/115)
- Linking errors [\#113](https://github.com/doctest/doctest/issues/113)
- inlining function defs [\#111](https://github.com/doctest/doctest/issues/11\
1)
- Nullptr issue. [\#110](https://github.com/doctest/doctest/issues/110)
- MemorySanitizer: use-of-uninitialized-value [\#109](https://github.com/doct\
est/doctest/issues/109)
- Potential memory leak through scan-build [\#108](https://github.com/doctest\
/doctest/issues/108)
- Warnings raised to error with latest MSVC version [\#107](https://github.co\
m/doctest/doctest/issues/107)
- New solution for tests in static libraries ! \(MSVC\) [\#106](https://githu\
b.com/doctest/doctest/issues/106)
- Command line flags do not work after code formatter/beautifier\
 [\#104](https://github.com/doctest/doctest/issues/104)
- Cppcheck 1.81 warnings [\#102](https://github.com/doctest/doctest/issues/10\
2)

**Merged pull requests:**

- Fix macros WIN32\_LEAN\_AND\_MEAN typo [\#112](https://github.com/doctest/d\
octest/pull/112) ([vladimirgamalyan](https://github.com/vladimirgamalyan))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set \(\#99\)\
 [\#100](https://github.com/doctest/doctest/pull/100) ([onqtam](https://githu\
b.com/onqtam))
- Correct DOCTEST\_NO\_INSTALL logic; do install unless it is set\
 [\#99](https://github.com/doctest/doctest/pull/99) ([OdyX](https://github.co\
m/OdyX))

## [1.2.6](https://github.com/doctest/doctest/tree/1.2.6) (2017-10-29)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.5...1.2.6)

**Closed issues:**

- \[bug\] writing an exception translator in a header file results in it\
 being registered multiple times which is suboptimal [\#98](https://github.co\
m/doctest/doctest/issues/98)
- Warnings when using something more than /W4 for Visual Studio\
 [\#95](https://github.com/doctest/doctest/issues/95)

**Merged pull requests:**

- Added an option to not install Doctest in the CMake scripts\
 [\#96](https://github.com/doctest/doctest/pull/96) ([nm17](https://github.co\
m/nm17))
- Adding a defensive check against a null pointer for the current test suite\
 [\#94](https://github.com/doctest/doctest/pull/94) ([Lectem](https://github.\
com/Lectem))
- Remove incomplete copy ctor [\#93](https://github.com/doctest/doctest/pull/\
93) ([McMartin](https://github.com/McMartin))

## [1.2.5](https://github.com/doctest/doctest/tree/1.2.5) (2017-10-06)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.4...1.2.5)

**Closed issues:**

- Xcode 9 / clang - unknown warning group [\#92](https://github.com/doctest/d\
octest/issues/92)

## [1.2.4](https://github.com/doctest/doctest/tree/1.2.4) (2017-09-20)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.3...1.2.4)

**Closed issues:**

- \[bug\] test cases can end up in the wrong test suite [\#91](https://github\
.com/doctest/doctest/issues/91)

## [1.2.3](https://github.com/doctest/doctest/tree/1.2.3) (2017-09-11)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.2...1.2.3)

**Closed issues:**

- \[bug\] Defining a variable T inside a test with DOCTEST\_CONFIG\_DISABLE\
 defined does not compile [\#90](https://github.com/doctest/doctest/issues/90)
- \[support\] Using `DOCTEST\_CONFIG\_NO\_SHORT\_MACRO\_NAMES` does not\
 compile using g++ 6.3.0 [\#89](https://github.com/doctest/doctest/issues/89)
- \[question\] Why are SUBCASEs executed only once when within a function\
 called multiple times? [\#88](https://github.com/doctest/doctest/issues/88)

## [1.2.2](https://github.com/doctest/doctest/tree/1.2.2) (2017-09-05)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.1...1.2.2)

**Closed issues:**

- \[question\] Differences between doctest and googletest \(gtest\) for\
 uninitialised local variables in test cases [\#86](https://github.com/doctes\
t/doctest/issues/86)
- !!! BREAKING CHANGE !!! - remove the custom implementation of\
 std::is\_constructible and optionally use the \<type\_traits\> header\
 because of infinite template recursion issues with GCC [\#85](https://github\
.com/doctest/doctest/issues/85)
- Static Analysis results of doctest [\#83](https://github.com/doctest/doctes\
t/issues/83)
- !!! BREAKING CHANGE !!! - catch exceptions as const reference in\
 \<LEVEL\>\_THROWS\_AS [\#81](https://github.com/doctest/doctest/issues/81)
- doctest implementation as static library [\#77](https://github.com/doctest/\
doctest/issues/77)
- Provide some easy way to compare structs containing float/doubles\
 [\#73](https://github.com/doctest/doctest/issues/73)

**Merged pull requests:**

- Add support for templated scenarios [\#87](https://github.com/doctest/docte\
st/pull/87) ([Lectem](https://github.com/Lectem))
- Prefer if\(MSVC\) in CMakeLists.txt. [\#84](https://github.com/doctest/doct\
est/pull/84) ([martinmoene](https://github.com/martinmoene))
- catch throw\_as exception as const reference [\#82](https://github.com/doct\
est/doctest/pull/82) ([a4z](https://github.com/a4z))
- Added doctest\_with\_main static lib [\#78](https://github.com/doctest/doct\
est/pull/78) ([ymadzhunkov](https://github.com/ymadzhunkov))

## [1.2.1](https://github.com/doctest/doctest/tree/1.2.1) (2017-05-24)
[Full Changelog](https://github.com/doctest/doctest/compare/1.2.0...1.2.1)

**Closed issues:**

- Compile error under MSVC 2015/2017 if \<thread\> included in same file as\
 "doctest.h" [\#72](https://github.com/doctest/doctest/issues/72)

**Merged pull requests:**

- docs: TEST\_CASE\_METHOD -\> TEST\_CASE\_FIXTURE [\#71](https://github.com/\
doctest/doctest/pull/71) ([akrzemi1](https://github.com/akrzemi1))

## [1.2.0](https://github.com/doctest/doctest/tree/1.2.0) (2017-05-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.4...1.2.0)

**Closed issues:**

- Further improvements on compile time - disable inlining of functions used\
 in asserts [\#70](https://github.com/doctest/doctest/issues/70)
- Improve runtime performance - lazy stringification, more inlining, no\
 statics on the hot path, move semantics for classes such as doctest::String\
 which are used by value, etc. [\#69](https://github.com/doctest/doctest/issu\
es/69)
- Add option to show duration of test case execution and add a\
 timeout\(seconds\) decorator - marking them as failed if they exceed it\
 [\#68](https://github.com/doctest/doctest/issues/68)
- Add support for test case decorators - label, description, skip, may\_fail,\
 should\_fail, expected\_failures, etc. [\#67](https://github.com/doctest/doc\
test/issues/67)
- Integrate static analysis into the CI builds [\#66](https://github.com/doct\
est/doctest/issues/66)
- Print the test suite name on test case failure [\#65](https://github.com/do\
ctest/doctest/issues/65)
- Add signal handlers to handle crashes \(and use SEH under Windows\) -\
 report which test case failed [\#63](https://github.com/doctest/doctest/issu\
es/63)
- Add support to Approx for strong typedefs of double [\#62](https://github.c\
om/doctest/doctest/issues/62)
- \[question\] Is there a way to always have 0 as the exit code regardless of\
 test results? [\#59](https://github.com/doctest/doctest/issues/59)
- Add support for un-parenthesized expressions containing commas in asserts\
 [\#58](https://github.com/doctest/doctest/issues/58)
- Add ability to filter subcases with filters [\#57](https://github.com/docte\
st/doctest/issues/57)
- Add option to query if code is being ran inside of a test -\
 doctest::is\_running\_in\_test [\#56](https://github.com/doctest/doctest/iss\
ues/56)
- Ability for a binary \(executable / shared object\) to use the test runner\
 implementation of another binary - with exported symbols - so tests end up\
 in a single registry [\#55](https://github.com/doctest/doctest/issues/55)
- How to force the use of colors in the terminal? [\#54](https://github.com/d\
octest/doctest/issues/54)
- How can I mix production code with the Unit Tests? [\#53](https://github.co\
m/doctest/doctest/issues/53)
- add \<= and \>= operators to Approx \(and also maybe \< and \>\)\
 [\#52](https://github.com/doctest/doctest/issues/52)
- Add ability to capture variables from test scope [\#48](https://github.com/\
doctest/doctest/issues/48)
- !!! BREAKING CHANGE !!! - Make TEST\_SUITE work with blocks and add\
 TEST\_SUITE\_BEGIN [\#41](https://github.com/doctest/doctest/issues/41)
- Add option to print which test suites/cases are run [\#39](https://github.c\
om/doctest/doctest/issues/39)
- Add support for templated test cases - parameterized by type\
 [\#38](https://github.com/doctest/doctest/issues/38)
- Add custom failure messages with lazy stringification [\#23](https://github\
.com/doctest/doctest/issues/23)
- Add an exception translation mechanism + the ability for users to extend it\
 with custom exception types [\#12](https://github.com/doctest/doctest/issues\
/12)
- Add API for reporting failures [\#9](https://github.com/doctest/doctest/iss\
ues/9)

**Merged pull requests:**

- Update doctest to work with ARM DS5-compiler [\#64](https://github.com/doct\
est/doctest/pull/64) ([tomasnilefrost](https://github.com/tomasnilefrost))

## [1.1.4](https://github.com/doctest/doctest/tree/1.1.4) (2017-02-18)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.3...1.1.4)

**Closed issues:**

- Add option --force-colors - for when a tty is not detected for stdout\
 [\#51](https://github.com/doctest/doctest/issues/51)
- Issue with using lambdas in tests in gcc [\#49](https://github.com/doctest/\
doctest/issues/49)
- Add the include file to releases [\#47](https://github.com/doctest/doctest/\
issues/47)

**Merged pull requests:**

- Add translation of std::exception for exceptions that terminate a test case\
 [\#46](https://github.com/doctest/doctest/pull/46) ([eliaskosunen](https://g\
ithub.com/eliaskosunen))

## [1.1.3](https://github.com/doctest/doctest/tree/1.1.3) (2016-11-15)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.2...1.1.3)

**Closed issues:**

- Exception handlers cause warnings when exceptions are disabled\
 [\#44](https://github.com/doctest/doctest/issues/44)

## [1.1.2](https://github.com/doctest/doctest/tree/1.1.2) (2016-10-10)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.1...1.1.2)

**Closed issues:**

- clang warnings when using C++11 or newer [\#42](https://github.com/doctest/\
doctest/issues/42)
- \[support\] identical names for test suites? [\#40](https://github.com/doct\
est/doctest/issues/40)

## [1.1.1](https://github.com/doctest/doctest/tree/1.1.1) (2016-09-22)
[Full Changelog](https://github.com/doctest/doctest/compare/1.1.0...1.1.1)

## [1.1.0](https://github.com/doctest/doctest/tree/1.1.0) (2016-09-21)
[Full Changelog](https://github.com/doctest/doctest/compare/1.0.0...1.1.0)

**Closed issues:**

- char\* comparison uses the contents, not the pointer [\#36](https://github.\
com/doctest/doctest/issues/36)
- add configuration preprocessor identifier for passing by value in\
 assertions instead of by reference [\#35](https://github.com/doctest/doctest\
/issues/35)
- restrict expressions in assertion macros to binary comparisons at most with\
 a static assert [\#34](https://github.com/doctest/doctest/issues/34)
- Add clearFilters\(\) to doctest::Context [\#33](https://github.com/doctest/\
doctest/issues/33)
- A way to refrain from polluting “\#define” space for users of tested code?\
 [\#32](https://github.com/doctest/doctest/issues/32)
- drop VC++6 support [\#31](https://github.com/doctest/doctest/issues/31)
- False positive test [\#30](https://github.com/doctest/doctest/issues/30)
- Turn off coloring after tests are finished? [\#28](https://github.com/docte\
st/doctest/issues/28)
- C++11 nullptr [\#27](https://github.com/doctest/doctest/issues/27)
- Only one SUBCASE per line is executed [\#25](https://github.com/doctest/doc\
test/issues/25)
- creative formatting of chars [\#24](https://github.com/doctest/doctest/issu\
es/24)
- DOCTEST\_BREAK\_INTO\_DEBUGGER undefined under OSX [\#22](https://github.co\
m/doctest/doctest/issues/22)
- Tests inside a static library [\#21](https://github.com/doctest/doctest/iss\
ues/21)
- Add example how to remove doctest options from the command line for the\
 program after the tests run [\#20](https://github.com/doctest/doctest/issues\
/20)
- Single-letter options active even without leading '-' \(dash\)\
 [\#19](https://github.com/doctest/doctest/issues/19)
- pointer stringification not working for compilers different from MSVC\
 [\#18](https://github.com/doctest/doctest/issues/18)
- Tests that accompany code run and produce output at default\
 [\#17](https://github.com/doctest/doctest/issues/17)
- GCC 5.3.1 Compiler warning: sign compare [\#16](https://github.com/doctest/\
doctest/issues/16)
- Slower than Catch in realistic test cases [\#14](https://github.com/doctest\
/doctest/issues/14)
- Rename doctest::detail::Result res; in DOCTEST\_ASSERT\_IMPLEMENT\
 [\#10](https://github.com/doctest/doctest/issues/10)
- No red when all tests pass [\#7](https://github.com/doctest/doctest/issues/\
7)
- UNIX line feedings on GitHub please [\#6](https://github.com/doctest/doctes\
t/issues/6)

**Merged pull requests:**

- don't show green when tests fail [\#26](https://github.com/doctest/doctest/\
pull/26) ([ferkulat](https://github.com/ferkulat))
- Include "program code" in example [\#15](https://github.com/doctest/doctest\
/pull/15) ([martinmoene](https://github.com/martinmoene))

## [1.0.0](https://github.com/doctest/doctest/tree/1.0.0) (2016-05-22)
**Merged pull requests:**

- Reduce the header size for test users [\#3](https://github.com/doctest/doct\
est/pull/3) ([zah](https://github.com/zah))
- Add a Gitter chat badge to README.md [\#1](https://github.com/doctest/docte\
st/pull/1) ([gitter-badger](https://github.com/gitter-badger))



\* *This Change Log was automatically generated by [github_changelog_generato\
r](https://github.com/skywinder/Github-Changelog-Generator)*
\
changes-type: text/markdown;variant=GFM
url: https://github.com/doctest/doctest
package-url: https://github.com/build2-packaging/doctest/
email: vik.kirilov@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = doctest

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are NOT importable unless stated otherwise.
#
hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# doctest's configuration variables that either must be set globally.
#
config [bool] config.doctest.disable                 ?= false
config [bool] config.doctest.treat_char_as_string    ?= false
config [bool] config.doctest.use_std_headers         ?= false
config [bool] config.doctest.no_exceptions           ?= false
config [bool] config.doctest.no_contradicting_inline ?= false

# doctest's configuration variables that must only be set for the\
 implementation.
#
config [string] config.doctest.options_prefix      ?= [null]
config [bool] config.doctest.no_unprefixed_options ?= false
config [bool] config.doctest.colors_none           ?= false
config [bool] config.doctest.colors_windows        ?= false
config [bool] config.doctest.colors_ansi           ?= false
config [bool] config.doctest.windows_seh           ?= false
config [bool] config.doctest.no_windows_seh        ?= false
config [bool] config.doctest.posix_signals         ?= false
config [bool] config.doctest.no_posix_signals      ?= false
config [bool] config.doctest.no_multithreading     ?= false
config [bool] config.doctest.no_multi_lane_atomics ?= false


\
location: doctest/doctest-2.4.11.tar.gz
sha256sum: c5b466afeb397bd317e31263db53ed8bc2ff962e9d736799c7d4f83bbb4445f6
:
name: Eigen
version: 3.3.7+1
summary: Eigen is a C++ template library for linear algebra: matrices,\
 vectors, numerical solvers, and related algorithms.
license: MPLv2, LGPLv2.1, BSD2
license: MPLv2, LGPLv2.1
license: MPLv2
description:
\
**Eigen is a C++ template library for linear algebra: matrices, vectors,\
 numerical solvers, and related algorithms.**

For more information go to http://eigen.tuxfamily.org/.

\
description-type: text/markdown;variant=GFM
url: http://eigen.tuxfamily.org/
src-url: https://gitlab.com/libeigen/eigen
package-url: https://github.com/build2-packaging/eigen
email: eigen@lists.tuxfamily.org
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Eigen

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

test.target = $cxx.target

src_upstream = $src_root/upstream
\
location: Eigen/Eigen-3.3.7+1.tar.gz
sha256sum: 67fb893e5f59912ce0fa7e567c9ece293e1653b7c97fbd65f4a76de45067be17
:
name: Eigen
version: 3.3.8
summary: Eigen is a C++ template library for linear algebra: matrices,\
 vectors, numerical solvers, and related algorithms.
license: MPLv2, LGPLv2.1, BSD2
license: MPLv2, LGPLv2.1
license: MPLv2
description:
\
**Eigen is a C++ template library for linear algebra: matrices, vectors,\
 numerical solvers, and related algorithms.**

For more information go to http://eigen.tuxfamily.org/.

\
description-type: text/markdown;variant=GFM
url: http://eigen.tuxfamily.org/
src-url: https://gitlab.com/libeigen/eigen
package-url: https://github.com/build2-packaging/eigen
email: eigen@lists.tuxfamily.org
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Eigen

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

test.target = $cxx.target

src_upstream = $src_root/upstream
\
location: Eigen/Eigen-3.3.8.tar.gz
sha256sum: dedb1d83b5611d1b4530c8e63f1d1ecae0d1945d7f3fc9a3b34d73452e3a8072
:
name: Eigen
version: 3.3.9
summary: Eigen is a C++ template library for linear algebra: matrices,\
 vectors, numerical solvers, and related algorithms.
license: MPLv2, LGPLv2.1, BSD2
license: MPLv2, LGPLv2.1
license: MPLv2
description:
\
**Eigen is a C++ template library for linear algebra: matrices, vectors,\
 numerical solvers, and related algorithms.**

For more information go to http://eigen.tuxfamily.org/.

\
description-type: text/markdown;variant=GFM
url: http://eigen.tuxfamily.org/
src-url: https://gitlab.com/libeigen/eigen
package-url: https://github.com/build2-packaging/eigen
email: eigen@lists.tuxfamily.org
package-email: lyrahgames@mailbox.org
build-warning-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Eigen

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

test.target = $cxx.target

\
location: Eigen/Eigen-3.3.9.tar.gz
sha256sum: 55dc958df783a56b753e3d434d86e6912ea4208f77888220cd49e5d6710fa79b
:
name: Eigen
version: 3.4.0+3
summary: Eigen is a C++ template library for linear algebra: matrices,\
 vectors, numerical solvers, and related algorithms.
license: MPLv2, LGPLv2.1, BSD2
license: MPLv2, LGPLv2.1
license: MPLv2
description:
\
<h1 align="center">
    build2 Package for Eigen
</h1>

<p align="center">
    This project builds and defines the build2 package for Eigen.
    Eigen is a C++ template library for linear algebra: matrices, vectors,\
 numerical solvers, and related algorithms.
</p>

<p align="center">
    <a href="https://eigen.tuxfamily.org/index.php">
        <img src="https://img.shields.io/website/https/eigen.tuxfamily.org/in\
dex.php.svg?down_message=offline&label=Official&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/Eigen">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/Eigen.svg?down_message=offline&label=build2&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://cppget.org/Eigen">
        <img src="https://img.shields.io/website/https/cppget.org/Eigen.svg?d\
own_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_mes\
sage=online">
    </a>
    <a href="https://queue.cppget.org/Eigen">
        <img src="https://img.shields.io/website/https/queue.cppget.org/Eigen\
.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-the-\
badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable `cppget.org` repositories to your project's\
 `repositories.manifest` to be able to fetch the packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: Eigen ^ 3.4.0

The header-only C++ library to use Eigen can be imported by the following\
 declaration in a `buildfile`.

    import Eigen = Eigen%lib{Eigen}

## Configuration

### Unsupported Modules
The unsupported modules of the Eigen library can be enabled by setting the\
 following configuration variable to `true`.
In this case, the path to unsupported header files is automatically added to\
 the include directories such that unsupported may be used as if they were\
 supported Eigen modules.

    config [bool] config.Eigen.unsupported ?= false

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/Eigen/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/Eigen/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/Eigen)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
description-type: text/markdown;variant=GFM
url: http://eigen.tuxfamily.org/
src-url: https://gitlab.com/libeigen/eigen
package-url: https://github.com/build2-packaging/eigen
email: eigen@lists.tuxfamily.org
package-email: lyrahgames@mailbox.org
build-error-email: lyrahgames@mailbox.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = Eigen

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

# Eigen is configurable from the outside by macros.
# Hence, we assume headers to be not importable.
#
hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Configuration
#
config [bool] config.Eigen.unsupported ?= false

\
location: Eigen/Eigen-3.4.0+3.tar.gz
sha256sum: a62c0b35513819b0e51d5610a0b31e63754aa6bfd63eb3e418ccbe1d2472e601
:
name: entt
version: 3.4.0
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/42513718-ee6e98d0-8457-11e8-9baf-8d83f61a3097.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![GitHub version](https://badge.fury.io/gh/skypjack%2Fentt.svg)](https://git\
hub.com/skypjack/entt/releases)
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/cOUcm1)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)
[![Patreon](https://img.shields.io/badge/become-patron-red.svg)](https://www.\
patreon.com/bePatron?c=1772573)

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**, mainly known for its innovative
**entity-component-system (ECS)** model.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang and the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by
Esri.<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and meet other\
 users
like you. The more we are, the better for everyone.

Wondering why your **debug build** is so slow on Windows or how to represent a
**hierarchy** with components?<br/>
Check out the
[FAQ](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) if you have these or other\
 doubts,
your answers may already be there.

If you use `EnTT` and you want to say thanks or support the project, please
**consider becoming a
[sponsor](https://github.com/users/skypjack/sponsorship)**.<br/>
You can help me make the difference.
[Many thanks](https://skypjack.github.io/sponsorship/) to those who supported\
 me
and still support me today.

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Build Instructions](#build-instructions)
  * [Requirements](#requirements)
  * [Library](#library)
  * [Documentation](#documentation)
  * [Tests](#tests)
* [Packaging Tools](#packaging-tools)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
* [Support](#support)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Statically generated integer **identifiers** for types (assigned either at
  compile-time or at runtime).
* A `constexpr` utility for human readable **resource names**.
* A minimal **configuration system** built using the monostate pattern.
* An incredibly fast **entity-component system** based on sparse sets, with\
 its
  own _pay for what you use_ policy to adjust performance and memory usage
  according to the users' requirements.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel (dependencies, snapshot, actor
  class, support for **reactive systems** and so on).
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** (with built-in support for collectors) and a
  tiny event dispatcher for immediate and delayed events to integrate in\
 loops.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.

Currently, `EnTT` is tested on Linux, Microsoft Windows and OSX. It has proven
to work also on both Android and iOS.<br/>
Most likely it won't be problematic on other systems as well, but it hasn't\
 been
sufficiently tested so far.

## Code Example

```cpp
#include <entt/entt.hpp>
#include <cstdint>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<position, velocity>();

    for(auto entity: view) {
        // gets only the components that are going to be used ...

        auto &vel = view.get<velocity>(entity);

        vel.dx = 0.;
        vel.dy = 0.;

        // ...
    }
}

void update(std::uint64_t dt, entt::registry &registry) {
    registry.view<position, velocity>().each([dt](auto &pos, auto &vel) {
        // gets all the components of the view at once ...

        pos.x += vel.dx * dt;
        pos.y += vel.dy * dt;

        // ...
    });
}

int main() {
    entt::registry registry;
    std::uint64_t dt = 16;

    for(auto i = 0; i < 10; ++i) {
        auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(dt, registry);
    update(registry);

    // ...
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source solution both\
 in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself\
 whether
you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Build Instructions

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

If you are looking for a C++14 version of `EnTT`, check out the git tag\
 `cpp14`.

## Library

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/).
To build it:

    $ cd build
    $ cmake .. -DBUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
It's also available [online](https://skypjack.github.io/entt/) for the latest
version, that is the last stable tag.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

## Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the CMake option `BUILD_TESTING` to `ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DBUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

# Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

Consider this list a work in progress and help me to make it longer.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

`EnTT` was written initially as a faster alternative to other well known and
open source entity-component systems. Nowadays this library is moving its\
 first
steps. Much more will come in the future and hopefully I'm going to work on it
for a long time.<br/>
Requests for features, PR, suggestions ad feedback are highly appreciated.

If you find you can help me and want to contribute to the project with your
experience or you do want to get part of the project for some other reasons,
feel free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all seriously.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2020 Michele Caini.<br/>
Logo Copyright (c) 2018-2020 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
Logo released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

<!--
@cond TURN_OFF_DOXYGEN
-->
# Support

If you want to support this project, you can
[offer me](https://github.com/users/skypjack/sponsorship) an espresso.<br/>
If you find that it's not enough, feel free to
[help me](https://www.paypal.me/skypjack) the way you prefer.
<!--
@endcond TURN_OFF_DOXYGEN
-->

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = 17

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.4.0.tar.gz
sha256sum: 3862c788d13a6570aaf935df43aca5f8b56315669841a3d9e28f309f09ae2b7e
:
name: entt
version: 3.5.2
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/42513718-ee6e98d0-8457-11e8-9baf-8d83f61a3097.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![GitHub version](https://badge.fury.io/gh/skypjack%2Fentt.svg)](https://git\
hub.com/skypjack/entt/releases)
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/cOUcm1)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**, mainly known for its innovative
**entity-component-system (ECS)** model.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang and the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by
Esri.<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) or the
[discord server](https://discord.gg/5BjPWBd) and meet other users like you.\
 The
more we are, the better for everyone.

Wondering why your **debug build** is so slow on Windows or how to represent a
**hierarchy** with components?<br/>
Check out the
[FAQ](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) if you have these or other\
 doubts,
your answers may already be there.

If you use `EnTT` and you want to say thanks or support the project, please
**consider becoming a
[sponsor](https://github.com/users/skypjack/sponsorship)**.<br/>
You can help me make the difference.
[Many thanks](https://skypjack.github.io/sponsorship/) to those who supported\
 me
and still support me today.

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Build Instructions](#build-instructions)
  * [Requirements](#requirements)
  * [Library](#library)
  * [Documentation](#documentation)
  * [Tests](#tests)
* [Packaging Tools](#packaging-tools)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
* [Support](#support)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Statically generated integer **identifiers** for types (assigned either at
  compile-time or at runtime).
* A `constexpr` utility for human readable **resource names**.
* A minimal **configuration system** built using the monostate pattern.
* An incredibly fast **entity-component system** based on sparse sets, with\
 its
  own _pay for what you use_ policy to adjust performance and memory usage
  according to the users' requirements.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel (dependencies, snapshot, actor
  class, support for **reactive systems** and so on).
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** (with built-in support for collectors) and a
  tiny event dispatcher for immediate and delayed events to integrate in\
 loops.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.

It is also known that `EnTT` (version 3) is used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>
#include <cstdint>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<position, velocity>();

    for(auto entity: view) {
        // gets only the components that are going to be used ...

        auto &vel = view.get<velocity>(entity);

        vel.dx = 0.;
        vel.dy = 0.;

        // ...
    }
}

void update(std::uint64_t dt, entt::registry &registry) {
    registry.view<position, velocity>().each([dt](auto &pos, auto &vel) {
        // gets all the components of the view at once ...

        pos.x += vel.dx * dt;
        pos.y += vel.dy * dt;

        // ...
    });
}

int main() {
    entt::registry registry;
    std::uint64_t dt = 16;

    for(auto i = 0; i < 10; ++i) {
        auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(dt, registry);
    update(registry);

    // ...
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source solution both\
 in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself\
 whether
you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Build Instructions

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

If you are looking for a C++14 version of `EnTT`, check out the git tag\
 `cpp14`.

## Library

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/).
To build it:

    $ cd build
    $ cmake .. -DBUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

## Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the CMake option `BUILD_TESTING` to `ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DBUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

# Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

`EnTT` was written initially as a faster alternative to other well known and
open source entity-component systems. Nowadays this library is moving its\
 first
steps. Much more will come in the future and hopefully I'm going to work on it
for a long time.<br/>
Requests for features, PR, suggestions ad feedback are highly appreciated.

If you find you can help me and want to contribute to the project with your
experience or you do want to get part of the project for some other reasons,
feel free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all seriously.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2020 Michele Caini.<br/>
Logo Copyright (c) 2018-2020 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
Logo released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

<!--
@cond TURN_OFF_DOXYGEN
-->
# Support

If you want to support this project, you can
[offer me](https://github.com/users/skypjack/sponsorship) an espresso.<br/>
If you find that it's not enough, feel free to
[help me](https://www.paypal.me/skypjack) the way you prefer.
<!--
@endcond TURN_OFF_DOXYGEN
-->

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = 17

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.5.2.tar.gz
sha256sum: c4348ad7db000df79e769fe584fecd7ce60706352cef8efa16b010466e1bfb64
:
name: entt
version: 3.6.0
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![GitHub version](https://badge.fury.io/gh/skypjack%2Fentt.svg)](https://git\
hub.com/skypjack/entt/releases)
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/cOUcm1)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/) Autodesk Maya
plugin.<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) or the
[discord server](https://discord.gg/5BjPWBd) and meet other users like you.\
 The
more we are, the better for everyone.

Wondering why your **debug build** is so slow on Windows or how to represent a
**hierarchy** with components?<br/>
Check out the
[FAQ](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) if you have these or other\
 doubts,
your answers may already be there.

If you use `EnTT` and you want to say thanks or support the project, please
**consider becoming a
[sponsor](https://github.com/users/skypjack/sponsorship)**.<br/>
You can help me make the difference.
[Many thanks](https://skypjack.github.io/sponsorship/) to those who supported\
 me
and still support me today.

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Build Instructions](#build-instructions)
  * [Requirements](#requirements)
  * [Library](#library)
  * [Documentation](#documentation)
  * [Tests](#tests)
* [Packaging Tools](#packaging-tools)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
* [Support](#support)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Statically generated integer **identifiers** for types (assigned either at
  compile-time or at runtime).
* A `constexpr` utility for human readable **resource names**.
* A minimal **configuration system** built using the monostate pattern.
* An incredibly fast **entity-component system** based on sparse sets, with\
 its
  own _pay for what you use_ policy to adjust performance and memory usage
  according to the users' requirements.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel (dependencies, snapshot, handles,
  support for **reactive systems** and so on).
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** (with built-in support for collectors) and a
  tiny event dispatcher for immediate and delayed events to integrate in\
 loops.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.

It is also known that `EnTT` (version 3) is used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source solution both\
 in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Build Instructions

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

If you are looking for a C++14 version of `EnTT`, check out the git tag\
 `cpp14`.

## Library

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/).
To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

## Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the CMake option `ENTT_BUILD_TESTING` to\
 `ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

# Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

`EnTT` was written initially as a faster alternative to other well known and
open source entity-component systems. Nowadays this library is moving its\
 first
steps. Much more will come in the future and hopefully I'm going to work on it
for a long time.<br/>
Requests for features, PR, suggestions ad feedback are highly appreciated.

If you find you can help me and want to contribute to the project with your
experience or you do want to get part of the project for some other reasons,
feel free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all seriously.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2021 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

<!--
@cond TURN_OFF_DOXYGEN
-->
# Support

If you want to support this project, you can
[offer me](https://github.com/users/skypjack/sponsorship) an espresso.<br/>
If you find that it's not enough, feel free to
[help me](https://www.paypal.me/skypjack) the way you prefer.
<!--
@endcond TURN_OFF_DOXYGEN
-->

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
requires: c++ >= 17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = 17

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.6.0.tar.gz
sha256sum: 7d3cb9f1a3fbe268b99726f9cd445d82dd134d4bd187d1b3520abd74ac723aba
:
name: entt
version: 3.7.1
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Statically generated integer **identifiers** for types (assigned either at
  compile-time or at runtime).
* A `constexpr` utility for human readable **resource names**.
* A minimal **configuration system** built using the monostate pattern.
* An incredibly fast **entity-component system** based on sparse sets, with\
 its
  own _pay for what you use_ policy to adjust performance and memory usage
  according to the users' requirements.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel (dependencies, snapshot, handles,
  support for **reactive systems** and so on).
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** (with built-in support for collectors) and a
  tiny event dispatcher for immediate and delayed events to integrate in\
 loops.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.

It is also known that `EnTT` is used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source solution both\
 in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2021 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
requires: c++ >= 17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = 17

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.7.1.tar.gz
sha256sum: 0464ab153f59db711d4354174f332224bccab2c98ebf5839301de2a1b96ac552
:
name: entt
version: 3.8.1
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Statically generated integer **identifiers** for types (assigned either at
  compile-time or at runtime).
* A `constexpr` utility for human readable **resource names**.
* A minimal **configuration system** built using the monostate pattern.
* An incredibly fast **entity-component system** based on sparse sets, with\
 its
  own _pay for what you use_ policy to adjust performance and memory usage
  according to the users' requirements.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel (dependencies, snapshot, handles,
  support for **reactive systems** and so on).
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** (with built-in support for collectors) and a
  tiny event dispatcher for immediate and delayed events to integrate in\
 loops.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.

It is also known that `EnTT` is used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source solution both\
 in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2021 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
requires: c++ >= 17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = 17

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.8.1.tar.gz
sha256sum: eab3dcf93dfac370ba90be3abc9b3a9d3735e6eeb0a689aa28dc4ed669ccb959
:
name: entt
version: 3.9.0
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **dense hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

**Breaking news**:

* The ECS allows attaching multiple components of the same type to an entity.
* All tools work perfectly across boundaries (DLL-friendly)!!
  :slightly_smiling_face:

Consider these lists a work in progress as well as the project. The whole API\
 is
fully documented in-code for those who are brave enough to read it.

It is also known that `EnTT` is used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source solution both\
 in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2021 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
requires: c++ >= 17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = 17

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.9.0.tar.gz
sha256sum: b6b1fc951fa8a4621ea2632878e9fbe0adf8a9d2ce35b6b29b8675f3f21788c9
:
name: entt
version: 3.10.0
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider these lists a work in progress as well as the project. The whole API\
 is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2022 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.10.0.tar.gz
sha256sum: 3135573581c744b8d58a164c46529b35663cb17f97b3ec43b3d743a54a707225
:
name: entt
version: 3.10.1
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider these lists a work in progress as well as the project. The whole API\
 is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2022 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.10.1.tar.gz
sha256sum: e151c0d5f2b083c76d5cb102c33ccc5a6bb695c8542318bc9540533a5a5aa6c7
:
name: entt
version: 3.10.2
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider these lists a work in progress as well as the project. The whole API\
 is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2022 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.10.2.tar.gz
sha256sum: 61bfe099d4cb04f2190cc09bca787253f13b60e7af700c9f06819cf69a3fddac
:
name: entt
version: 3.10.3
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider these lists a work in progress as well as the project. The whole API\
 is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2022 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.10.3.tar.gz
sha256sum: 652b7818f7a6db81b5934c729e507eba9dda7dd3373f13c92263d4d233e54afe
:
name: entt
version: 3.11.1
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://e\
ntt.docsforge.com/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with
>
> -- Every EnTT User Ever

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human-readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy, unconstrained component types with optional pointer stability\
 and
  hooks for storage customization.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* General purpose **execution graph builder** for optimal scheduling.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference will be created in HTML format within the directory
`build/docs/html`. To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://entt.docsforge.com/): same documentation,\
 much
more pleasant to read.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` will download and compile the library before compiling anything else.
In order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to
`ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2022 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.11.1.tar.gz
sha256sum: eb271bd2edac20507c6e1f580272e01e52b24d7d26035541ad8e00ec7a761330
:
name: entt
version: 3.12.2
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Vcpkg port](https://img.shields.io/vcpkg/v/entt)](https://vcpkg.link/ports\
/entt)
[![Documentation](https://img.shields.io/badge/docs-doxygen-blue)](https://sk\
ypjack.github.io/entt/)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)
[![Donate](https://img.shields.io/badge/donate-paypal-blue.svg)](https://www.\
paypal.me/skypjack)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with
>
> -- Every EnTT User Ever

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship).
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Performance](#performance)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human-readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy, unconstrained component types with optional pointer stability\
 and
  hooks for storage customization.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* General purpose **execution graph builder** for optimal scheduling.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Performance

The proposed entity-component system is incredibly fast to iterate entities\
 and
components, this is a fact. Some compilers make a lot of optimizations because
of how `EnTT` works, some others aren't that good. In general, if we consider
real world cases, `EnTT` is somewhere between a bit and much faster than many\
 of
the other solutions around, although I couldn't check them all for obvious
reasons.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

Honestly I got tired of updating the README file whenever there is an
improvement.<br/>
There are already a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.

The choice to use `EnTT` should be based on its carefully designed API, its
set of features and the general performance, **not** because some single
benchmark shows it to be the fastest tool available.

In the future I'll likely try to get even better performance while still\
 adding
new features, mainly for fun.<br/>
If you want to contribute and/or have suggestions, feel free to make a PR or
open an issue to discuss your idea.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference is created in HTML format in the `build/docs/html`\
 directory.
To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` downloads and compiles the library before compiling anything else. In
order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to `ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2023 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.12.2.tar.gz
sha256sum: a6b1453ac8f8fca1bc7fda7618352da73654482ae0dcf3338d51b39947272ac4
:
name: entt
version: 3.13.0
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-doxygen-blue)](https://sk\
ypjack.github.io/entt/)
[![Vcpkg port](https://img.shields.io/vcpkg/v/entt)](https://vcpkg.link/ports\
/entt)
[![Conan Center](https://img.shields.io/conan/v/entt)](https://conan.io/cente\
r/recipes/entt)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with
>
> -- Every EnTT User Ever

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship) or making a
donation via [**PayPal**](https://www.paypal.me/skypjack).<br/>
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Benchmark](#benchmark)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human-readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy, unconstrained component types with optional pointer stability\
 and
  hooks for storage customization.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* General purpose **execution graph builder** for optimal scheduling.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Benchmark

For what it's worth, you'll **never** see me trying to make other projects\
 look
bad or offer dubious comparisons just to make this library seem cooler.<br/>
I leave this activity to others, if they enjoy it (and it seems that some\
 people
actually like it). I prefer to make better use of my time.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

There are also a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.<br/>
Out of all of them, [this](https://github.com/abeimler/ecs_benchmark) seems\
 like
the most up-to-date project and also covers a certain number of libraries. I
can't say exactly whether `EnTT` is used correctly or not. However, even if\
 used
poorly, it should still give the reader an idea of where it's going to\
 operate.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

* [`bzlmod`](https://bazel.build/external/overview#bzlmod), Bazel's external
  dependency management system.<br/>
  To use the [`entt`](https://registry.bazel.build/modules/entt) module in a
  `bazel` project, add the following to your `MODULE.bazel` file:

  ```starlark
  bazel_dep(name = "entt", version = "3.12.2")
  ```

  EnTT will now be available as `@entt` (short for `@entt//:entt`) to be used
  in your `cc_*` rule `deps`. 

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference is created in HTML format in the `build/docs/html`\
 directory.
To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` downloads and compiles the library before compiling anything else. In
order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to `ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2023 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.13.0.tar.gz
sha256sum: db8185a07584004d20288137765a00062972e778e4cab393a9f1c13b9cc5b955
:
name: entt
version: 3.13.2
summary: Gaming meets modern C++ - a fast and reliable entity-component\
 system (ECS) and much more.
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-doxygen-blue)](https://sk\
ypjack.github.io/entt/)
[![Vcpkg port](https://img.shields.io/vcpkg/v/entt)](https://vcpkg.link/ports\
/entt)
[![Conan Center](https://img.shields.io/conan/v/entt)](https://conan.io/cente\
r/recipes/entt)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with
>
> -- Every EnTT User Ever

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship) or making a
donation via [**PayPal**](https://www.paypal.me/skypjack).<br/>
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Benchmark](#benchmark)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human-readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy, unconstrained component types with optional pointer stability\
 and
  hooks for storage customization.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* General purpose **execution graph builder** for optimal scheduling.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Benchmark

For what it's worth, you'll **never** see me trying to make other projects\
 look
bad or offer dubious comparisons just to make this library seem cooler.<br/>
I leave this activity to others, if they enjoy it (and it seems that some\
 people
actually like it). I prefer to make better use of my time.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

There are also a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.<br/>
Out of all of them, [this](https://github.com/abeimler/ecs_benchmark) seems\
 like
the most up-to-date project and also covers a certain number of libraries. I
can't say exactly whether `EnTT` is used correctly or not. However, even if\
 used
poorly, it should still give the reader an idea of where it's going to\
 operate.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treaty and not a simple README\
 file,
but I'm confident that anyone reading this section also knows what it's about
and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

* [`bzlmod`](https://bazel.build/external/overview#bzlmod), Bazel's external
  dependency management system.<br/>
  To use the [`entt`](https://registry.bazel.build/modules/entt) module in a
  `bazel` project, add the following to your `MODULE.bazel` file:

  ```starlark
  bazel_dep(name = "entt", version = "3.12.2")
  ```

  EnTT will now be available as `@entt` (short for `@entt//:entt`) to be used
  in your `cc_*` rule `deps`. 

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference is created in HTML format in the `build/docs/html`\
 directory.
To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

<!--
@cond TURN_OFF_DOXYGEN
-->
The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` downloads and compiles the library before compiling anything else. In
order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to `ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

<!--
@cond TURN_OFF_DOXYGEN
-->
# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions ad feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](CONTRIBUTING.md) before to create issues or pull
requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# License

Code and documentation Copyright (c) 2017-2023 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.13.2.tar.gz
sha256sum: 6418bff913a26a4b08b6da913cc58d2560357b23dcdc15f8a993217612fb980f
:
name: entt
version: 3.14.0
summary: Modern C++ Entity-Component-System (ECS) library
license: MIT
description:
\
![EnTT: Gaming meets modern C++](https://user-images.githubusercontent.com/18\
12216/103550016-90752280-4ea8-11eb-8667-12ed2219e137.png)

[![Build Status](https://github.com/skypjack/entt/workflows/build/badge.svg)]\
(https://github.com/skypjack/entt/actions)
[![Coverage](https://codecov.io/gh/skypjack/entt/branch/master/graph/badge.sv\
g)](https://codecov.io/gh/skypjack/entt)
[![Try online](https://img.shields.io/badge/try-online-brightgreen)](https://\
godbolt.org/z/zxW73f)
[![Documentation](https://img.shields.io/badge/docs-doxygen-blue)](https://sk\
ypjack.github.io/entt/)
[![Vcpkg port](https://img.shields.io/vcpkg/v/entt)](https://vcpkg.link/ports\
/entt)
[![Conan Center](https://img.shields.io/conan/v/entt)](https://conan.io/cente\
r/recipes/entt)
[![Gitter chat](https://badges.gitter.im/skypjack/entt.png)](https://gitter.i\
m/skypjack/entt)
[![Discord channel](https://img.shields.io/discord/707607951396962417?logo=di\
scord)](https://discord.gg/5BjPWBd)

> `EnTT` has been a dream so far, we haven't found a single bug to date and\
 it's
> super easy to work with
>
> -- Every EnTT User Ever

`EnTT` is a header-only, tiny and easy to use library for game programming and
much more written in **modern C++**.<br/>
[Among others](https://github.com/skypjack/entt/wiki/EnTT-in-Action), it's\
 used
in [**Minecraft**](https://minecraft.net/en-us/attribution/) by Mojang, the
[**ArcGIS Runtime SDKs**](https://developers.arcgis.com/arcgis-runtime/) by\
 Esri
and the amazing [**Ragdoll**](https://ragdolldynamics.com/).<br/>
If you don't see your project in the list, please open an issue, submit a PR\
 or
add the [\#entt](https://github.com/topics/entt) tag to your _topics_! :+1:

---

Do you want to **keep up with changes** or do you have a **question** that
doesn't require you to open an issue?<br/>
Join the [gitter channel](https://gitter.im/skypjack/entt) and the
[discord server](https://discord.gg/5BjPWBd), meet other users like you. The
more we are, the better for everyone.<br/>
Don't forget to check the
[FAQs](https://github.com/skypjack/entt/wiki/Frequently-Asked-Questions) and\
 the
[wiki](https://github.com/skypjack/entt/wiki) too. Your answers may already be
there.

Do you want to support `EnTT`? Consider becoming a
[**sponsor**](https://github.com/users/skypjack/sponsorship) or making a
donation via [**PayPal**](https://www.paypal.me/skypjack).<br/>
Many thanks to [these people](https://skypjack.github.io/sponsorship/) and
**special** thanks to:

[![mojang](https://user-images.githubusercontent.com/1812216/106253145-67ca19\
80-6217-11eb-9c0b-d93561b37098.png)](https://mojang.com)
[![imgly](https://user-images.githubusercontent.com/1812216/106253726-271ed00\
0-6218-11eb-98e0-c9c681925770.png)](https://img.ly/)

# Table of Contents

* [Introduction](#introduction)
  * [Code Example](#code-example)
  * [Motivation](#motivation)
  * [Benchmark](#benchmark)
* [Integration](#integration)
  * [Requirements](#requirements)
  * [CMake](#cmake)
  * [Natvis support](#natvis-support)
  * [Packaging Tools](#packaging-tools)
  * [pkg-config](#pkg-config)
* [Documentation](#documentation)
* [Tests](#tests)
* [EnTT in Action](#entt-in-action)
* [Contributors](#contributors)
* [License](#license)

# Introduction

The entity-component-system (also known as _ECS_) is an architectural pattern
used mostly in game development. For further details:

* [Entity Systems Wiki](http://entity-systems.wikidot.com/)
* [Evolve Your Hierarchy](http://cowboyprogramming.com/2007/01/05/evolve-your\
-heirachy/)
* [ECS on Wikipedia](https://en.wikipedia.org/wiki/Entity%E2%80%93component%E\
2%80%93system)

This project started off as a pure entity-component system. Over time the
codebase has grown as more and more classes and functionalities were\
 added.<br/>
Here is a brief, yet incomplete list of what it offers today:

* Built-in **RTTI system** mostly similar to the standard one.
* A `constexpr` utility for human-readable **resource names**.
* Minimal **configuration system** built using the monostate pattern.
* Incredibly fast **entity-component system** with its own _pay for what you
  use_ policy, unconstrained component types with optional pointer stability\
 and
  hooks for storage customization.
* Views and groups to iterate entities and components and allow different\
 access
  patterns, from **perfect SoA** to fully random.
* A lot of **facilities** built on top of the entity-component system to help
  the users and avoid reinventing the wheel.
* General purpose **execution graph builder** for optimal scheduling.
* The smallest and most basic implementation of a **service locator** ever\
 seen.
* A built-in, non-intrusive and macro-free runtime **reflection system**.
* **Static polymorphism** made simple and within everyone's reach.
* A few homemade containers, like a sparse set based **hash map**.
* A **cooperative scheduler** for processes of any type.
* All that is needed for **resource management** (cache, loaders, handles).
* Delegates, **signal handlers** and a tiny event dispatcher.
* A general purpose **event emitter** as a CRTP idiom based class template.
* And **much more**! Check out the
  [**wiki**](https://github.com/skypjack/entt/wiki).

Consider this list a work in progress as well as the project. The whole API is
fully documented in-code for those who are brave enough to read it.<br/>
Please, do note that all tools are also DLL-friendly now and run smoothly\
 across
boundaries.

One thing known to most is that `EnTT` is also used in **Minecraft**.<br/>
Given that the game is available literally everywhere, I can confidently say 
that the library has been sufficiently tested on every platform that can come\
 to 
mind.

## Code Example

```cpp
#include <entt/entt.hpp>

struct position {
    float x;
    float y;
};

struct velocity {
    float dx;
    float dy;
};

void update(entt::registry &registry) {
    auto view = registry.view<const position, velocity>();

    // use a callback
    view.each([](const auto &pos, auto &vel) { /* ... */ });

    // use an extended callback
    view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */\
 });

    // use a range-for
    for(auto [entity, pos, vel]: view.each()) {
        // ...
    }

    // use forward iterators and get only the components of interest
    for(auto entity: view) {
        auto &vel = view.get<velocity>(entity);
        // ...
    }
}

int main() {
    entt::registry registry;

    for(auto i = 0u; i < 10u; ++i) {
        const auto entity = registry.create();
        registry.emplace<position>(entity, i * 1.f, i * 1.f);
        if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i *\
 .1f); }
    }

    update(registry);
}
```

## Motivation

I started developing `EnTT` for the _wrong_ reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.<br/>
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of `EnTT` and\
 to
add all the features I wanted to see in *my own library* at the same time.

Nowadays, `EnTT` is finally what I was looking for: still faster than its
_competitors_, lower memory usage in the average case, a really good API and\
 an
amazing set of features. And even more, of course.

## Benchmark

For what it's worth, you'll **never** see me trying to make other projects\
 look
bad or offer dubious comparisons just to make this library seem cooler.<br/>
I leave this activity to others, if they enjoy it (and it seems that some\
 people
actually like it). I prefer to make better use of my time.

If you are interested, you can compile the `benchmark` test in release mode\
 (to
enable compiler optimizations, otherwise it would make little sense) by\
 setting
the `ENTT_BUILD_BENCHMARK` option of `CMake` to `ON`, then evaluate yourself
whether you're satisfied with the results or not.

There are also a lot of projects out there that use `EnTT` as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them,\
 especially
when the library they are dealing with is actively developed.<br/>
Out of all of them, [this](https://github.com/abeimler/ecs_benchmark) seems\
 like
the most up-to-date project and also covers a certain number of libraries. I
can't say exactly whether `EnTT` is used correctly or not. However, even if\
 used
poorly, it should still give the reader an idea of where it's going to\
 operate.

# Integration

`EnTT` is a header-only library. This means that including the `entt.hpp`\
 header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
`entity/registry.hpp` header instead.<br/>
It's a matter of adding the following line to the top of a file:

```cpp
#include <entt/entt.hpp>
```

Use the line below to include only the entity-component system instead:

```cpp
#include <entt/entity/registry.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.

## Requirements

To be able to use `EnTT`, users must provide a full-featured compiler that
supports at least C++17.<br/>
The requirements below are mandatory to compile the tests and to extract the
documentation:

* `CMake` version 3.7 or later.
* `Doxygen` version 1.8 or later.

Alternatively, [Bazel](https://bazel.build) is also supported as a build\
 system
(credits to [zaucy](https://github.com/zaucy) who offered to maintain\
 it).<br/>
In the documentation below I'll still refer to `CMake`, this being the\
 official
build system of the library.

## CMake

To use `EnTT` from a `CMake` project, just link an existing target to the
`EnTT::EnTT` alias.<br/>
The library offers everything you need for locating (as in `find_package`),
embedding (as in `add_subdirectory`), fetching (as in `FetchContent`) or using
it in many of the ways that you can think of and that involve `CMake`.<br/>
Covering all possible cases would require a treatise and not a simple README
file, but I'm confident that anyone reading this section also knows what it's
about and can use `EnTT` from a `CMake` project without problems.

## Natvis support

When using `CMake`, just enable the option `ENTT_INCLUDE_NATVIS` and enjoy
it.<br/>
Otherwise, most of the tools are covered via Natvis and all files can be found
in the `natvis` directory, divided by module.<br/>
If you spot errors or have suggestions, any contribution is welcome!

## Packaging Tools

`EnTT` is available for some of the most known packaging tools. In particular:

* [`Conan`](https://github.com/conan-io/conan-center-index), the C/C++ Package
  Manager for Developers.

* [`vcpkg`](https://github.com/Microsoft/vcpkg), Microsoft VC++ Packaging
  Tool.<br/>
  You can download and install `EnTT` in just a few simple steps:

  ```
  $ git clone https://github.com/Microsoft/vcpkg.git
  $ cd vcpkg
  $ ./bootstrap-vcpkg.sh
  $ ./vcpkg integrate install
  $ vcpkg install entt
  ```

  Or you can use the `experimental` feature to test the latest changes:

  ```
  vcpkg install entt[experimental] --head
  ```

  The `EnTT` port in `vcpkg` is kept up to date by Microsoft team members and
  community contributors.<br/>
  If the version is out of date, please
  [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the
  `vcpkg` repository.

* [`Homebrew`](https://github.com/skypjack/homebrew-entt), the missing package
  manager for macOS.<br/>
  Available as a homebrew formula. Just type the following to install it:

  ```
  brew install skypjack/entt/entt
  ```

* [`build2`](https://build2.org), build toolchain for developing and\
 packaging C
  and C++ code.<br/>
  In order to use the [`entt`](https://cppget.org/entt) package in a `build2`
  project, add the following line or a similar one to the `manifest` file:

  ```
  depends: entt ^3.0.0
  ```

  Also check that the configuration refers to a valid repository, so that the
  package can be found by `build2`:

  * [`cppget.org`](https://cppget.org), the open-source community central
    repository, accessible as `https://pkg.cppget.org/1/stable`.

  * [Package source repository](https://github.com/build2-packaging/entt):
    accessible as either `https://github.com/build2-packaging/entt.git` or
    `ssh://git@github.com/build2-packaging/entt.git`.
    Feel free to [report issues](https://github.com/build2-packaging/entt)\
 with
    this package.

  Both can be used with `bpkg add-repo` or added in a project
  `repositories.manifest`. See the official
  [documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-in\
tro.xhtml#guide-repositories)
  for more details.

* [`bzlmod`](https://bazel.build/external/overview#bzlmod), Bazel's external
  dependency management system.<br/>
  To use the [`entt`](https://registry.bazel.build/modules/entt) module in a
  `bazel` project, add the following to your `MODULE.bazel` file:

  ```starlark
  bazel_dep(name = "entt", version = "3.12.2")
  ```

  EnTT will now be available as `@entt` (short for `@entt//:entt`) to be used
  in your `cc_*` rule `deps`. 

Consider this list a work in progress and help me to make it longer if you\
 like.

## pkg-config

`EnTT` also supports `pkg-config` (for some definition of _supports_ at\
 least).
A suitable file called `entt.pc` is generated and installed in a proper
directory when running `CMake`.<br/>
This should also make it easier to use with tools such as `Meson` or similar.

# Documentation

The documentation is based on [doxygen](http://www.doxygen.nl/). To build it:

    $ cd build
    $ cmake .. -DENTT_BUILD_DOCS=ON
    $ make

The API reference is created in HTML format in the `build/docs/html`\
 directory.
To navigate it with your favorite browser:

    $ cd build
    $ your_favorite_browser docs/html/index.html

The same version is also available [online](https://skypjack.github.io/entt/)
for the latest release, that is the last stable tag.<br/>
Moreover, there exists a [wiki](https://github.com/skypjack/entt/wiki)\
 dedicated
to the project where users can find all related documentation pages.

# Tests

To compile and run the tests, `EnTT` requires *googletest*.<br/>
`cmake` downloads and compiles the library before compiling anything else. In
order to build the tests, set the `CMake` option `ENTT_BUILD_TESTING` to `ON`.

To build the most basic set of tests:

* `$ cd build`
* `$ cmake -DENTT_BUILD_TESTING=ON ..`
* `$ make`
* `$ make test`

Note that benchmarks are not part of this set.

# EnTT in Action

`EnTT` is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on `EnTT` and did not hold back when it came to
documenting them.

[Here](https://github.com/skypjack/entt/wiki/EnTT-in-Action) you can find an
incomplete list of games, applications and articles that can be used as a
reference.

If you know of other resources out there that are about `EnTT`, feel free to
open an issue or a PR and I'll be glad to add them to the list.

# Contributors

Requests for features, PRs, suggestions and feedback are highly appreciated.

If you find you can help and want to contribute to the project with your
experience or you do want to get part of the project for some other reason,\
 feel
free to contact me directly (you can find the mail in the
[profile](https://github.com/skypjack)).<br/>
I can't promise that each and every contribution will be accepted, but I can
assure that I'll do my best to take them all as soon as possible.

If you decide to participate, please see the guidelines for
[contributing](https://github.com/skypjack/entt/blob/master/CONTRIBUTING.md)
before to create issues or pull requests.<br/>
Take also a look at the
[contributors list](https://github.com/skypjack/entt/blob/master/AUTHORS) to
know who has participated so far.

# License

Code and documentation Copyright (c) 2017-2024 Michele Caini.<br/>
Colorful logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/entt/blob/master/LICENSE).<br/>
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
All logos released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/skypjack/entt/wiki
src-url: https://github.com/skypjack/entt
package-url: https://github.com/build2-packaging/entt
email: michele.caini@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++17
bootstrap-build2:
\
project = entt

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/src


\
location: entt/entt-3.14.0.tar.gz
sha256sum: 43db3b128b85b83948de5542db420e2e689ba4387530d17fbcbc0c4a211c7edc
:
name: fakeit
version: 2.3.0
summary: FakeIt is a simple mocking framework for C++.
license: MIT
topics: C++, mocking, faking
description:
\
FakeIt
======
 
[![Join the chat at https://gitter.im/eranpeer/FakeIt](https://badges.gitter.\
im/Join%20Chat.svg)](https://gitter.im/eranpeer/FakeIt?utm_source=badge&utm_m\
edium=badge&utm_campaign=pr-badge&utm_content=badge)

Linux / GCC: [![Build status Linux/GCC](https://github.com/eranpeer/FakeIt/ac\
tions/workflows/ci_linux_gcc.yml/badge.svg)](https://github.com/eranpeer/Fake\
It/actions/workflows/ci_linux_gcc.yml)
[![Coverage Status](https://coveralls.io/repos/github/eranpeer/FakeIt/badge.s\
vg?branch=master)](https://coveralls.io/github/eranpeer/FakeIt?branch=master)

Linux / Clang: [![Build status Linux/Clang](https://github.com/eranpeer/FakeI\
t/actions/workflows/ci_linux_clang.yml/badge.svg)](https://github.com/eranpee\
r/FakeIt/actions/workflows/ci_linux_clang.yml)

MSC: [![Build status MSC](https://ci.appveyor.com/api/projects/status/sy2dk8s\
e2yoxaqve)](https://ci.appveyor.com/project/eranpeer/fakeit)

FakeIt is a simple mocking framework for C++. It supports GCC, Clang and MS\
 Visual C++.

FakeIt is written in C++11 and can be used for testing both C++11 and C++\
 projects.

```cpp
struct SomeInterface {
	virtual int foo(int) = 0;
	virtual int bar(string) = 0;
};
```
```cpp
// Instantiate a mock object.
Mock<SomeInterface> mock;

// Setup mock behavior.
When(Method(mock,foo)).Return(1); // Method mock.foo will return 1 once.

// Fetch the mock instance.
SomeInterface &i = mock.get();

// Will print "1". 
cout << i.foo(0);


```
Verify method invocation
```cpp
Mock<SomeInterface> mock;
		
When(Method(mock,foo)).Return(0);

SomeInterface &i = mock.get();

// Production code
i.foo(1);

// Verify method mock.foo was invoked.
Verify(Method(mock,foo));

// Verify method mock.foo was invoked with specific arguments.
Verify(Method(mock,foo).Using(1));
```

Checkout the [Quickstart](https://github.com/eranpeer/FakeIt/wiki/Quickstart)\
 for many more examples!

The master branch has the stable version of FakeIt. Include the most suitable\
 single header in your test project and you are good to go.

## Features
* Packaged as a **single header file**.
* Very simple API based on the expressiveness of C++11.
* Supports all major compilers: GCC, Clang and MSC++.
* Easily integrated with [**GTest**](https://code.google.com/p/googletest/),\
 [**MS Test**](http://en.wikipedia.org/wiki/Visual_Studio_Unit_Testing_Framew\
ork) and [**Boost Test**](http://www.boost.org/doc/libs/1_56_0/libs/test/doc/\
html/index.html).
* Expressive [Arrange-Act-Assert](http://xp123.com/articles/3a-arrange-act-as\
sert/) syntax.
* Create mock classes or **spy existing objects** instantly in one simple\
 line.
* No limitation on number of method arguments.
* Supports dynamic casting.

## Installation
FakeIt is a header only framework. It does not require any installation. For\
 extra simplicity fakeit is packaged as a single header file.

FakeIt is pre-configured to work with some of the major unit testing\
 frameworks. A pre-configured version will use the assertions mechanism of\
 the unit testing framework to integrate the generated error messages into\
 the unit testing framework output.

If you don't find your unit testing framework on the list, simply use the\
 *standalone* configuration.

### Using a pre-packaged single header file
Pre-packaged single header versions of FakeIt are located under the\
 *single_header* folder.
Depending on the unit testing framework you use, simply add one of the\
 pre-packaged versions to the include path of your test project:

* <fakeit_folder>/single\_header/[gtest](https://github.com/google/googletest)
* <fakeit_folder>/single\_header/mstest
* <fakeit_folder>/single\_header/boost
* <fakeit_folder>/single\_header/[catch](https://github.com/philsquared/Catch\
) (Tested with Catch 2.0.1)
* <fakeit_folder>/single\_header/[tpunit](https://github.com/tpounds/tpunitpp)
* <fakeit_folder>/single\_header/[mettle](https://github.com/jimporter/mettle)
* <fakeit_folder>/single\_header/qtest
* <fakeit_folder>/single\_header/nunit - (See caveats in config/nunit/fakeit\_\
instance.hpp)
* <fakeit_folder>/single\_header/[cute](https://github.com/PeterSommerlad/CUT\
E)  
* <fakeit_folder>/single\_header/standalone

For example, to use fakeit with **Google Test** simply add the\
 *single_header/gtest* folder to the include path of your test project:
```
-I"<fakeit_folder>/single_header/gtest"
```

### Using the source header files
Fakeit source code header files are located under the *include* foler. To use\
 FakeIt directly from the source code all you need to do is to download the\
 source files and add the *include* folder and the configuration folder of\
 your choice to the include path of your project.
For example:

* To use fakeit with **Google Test** add the *include* folder and the\
 *config/gtest* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/gtest"
```
* To use fakeit with **MS Test** add the *include* folder and the\
 *config/mstest* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/mstest"
```
* To use fakeit with **Boost Test** add the *include* folder and the\
 *config/boost* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/boost"
```
* To use fakeit with **Catch** add the *include* folder and the\
 *config/catch* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/catch"
```
* To use fakeit with **tpunit** add the *include* folder and the\
 *config/tpunit* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/tpunit"
```
* To use fakeit with **Mettle** add the *include* folder and the\
 *config/mettle* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/mettle"
```
* To use fakeit with **QTest** add the *include* folder and the\
 *config/qtest* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/qtest"
```
* To use fakeit with **NUnit** in a managed Visual Studio C++/CLI project,\
 add the standalone/nunit folder to your project include path. Note, it is\
 useful to define your mocks 
in `#pragma unmanaged` sections so that you can use lambda expressions.

* To use fakeit with **CUTE** add the *include* folder and the *config/cute*\
 folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/cute"
```
* To use fakeit without any testing framework integration (**standalone**)\
 add the *include* folder and the *config/standalone* folder to the include\
 path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/standalone"
```
It is recommended to build and run the unit tests to make sure FakeIt fits\
 your environment.

For GCC, it is recommended to build the test project with -O1 or -O0 flags.\
 Some features of Fakeit may not work with stonger optimizations!!

#### Building and Running the Unit Tests with GCC
```
cd build
make all
```
run the tests by typing
```
./fakeit_tests.exe
```

#### Building and Running the Unit Tests with Clang
```
cd build
make -f clang_makefile all
```
run the tests by typing
```
./fakeit_tests.exe
```

#### Building and Running the Unit Tests with Visual Studio 
Open the tests/all_tests.vcxproj project file with Visual Studio. Build and\
 run the project and check the test results. 

## Limitations
* Currently only GCC, Clang and MSC++ are supported.
* On GCC, optimization flag O2 and O3 are not supported. You must compile the\
 test project with -O1 or -O0.
* In MSC++, your project must have Edit And Continue debug mode on\
 (https://msdn.microsoft.com/en-us/library/esaeyddf.aspx) which is same of\
 /ZI compiler switch. If you don't use this, you will have exceptions mocking\
 destructors (which includes unique_ptr and other smart pointers). 
* Can't mock classes with multiple inheritance.
* Can't mock classes with virtual inheritance.
* Currently mocks are not thread safe. 

\
description-type: text/markdown;variant=GFM
url: https://github.com/eranpeer/FakeIt
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++11
bootstrap-build:
\
project = fakeit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: fakeit/fakeit-2.3.0.tar.gz
sha256sum: d0003aecc0555a34b626aee8baba2b4ec5da529972a9429d37fd6339aa8fb309
:
name: fakeit
version: 2.3.2
summary: FakeIt is a simple mocking framework for C++.
license: MIT
topics: C++, mocking, faking
description:
\
FakeIt
======
 
[![Join the chat at https://gitter.im/eranpeer/FakeIt](https://badges.gitter.\
im/Join%20Chat.svg)](https://gitter.im/eranpeer/FakeIt?utm_source=badge&utm_m\
edium=badge&utm_campaign=pr-badge&utm_content=badge)

Linux / GCC: [![Build status Linux/GCC](https://github.com/eranpeer/FakeIt/ac\
tions/workflows/ci_linux_gcc.yml/badge.svg)](https://github.com/eranpeer/Fake\
It/actions/workflows/ci_linux_gcc.yml)
[![Coverage Status](https://coveralls.io/repos/github/eranpeer/FakeIt/badge.s\
vg?branch=master)](https://coveralls.io/github/eranpeer/FakeIt?branch=master)

Linux / Clang: [![Build status Linux/Clang](https://github.com/eranpeer/FakeI\
t/actions/workflows/ci_linux_clang.yml/badge.svg)](https://github.com/eranpee\
r/FakeIt/actions/workflows/ci_linux_clang.yml)

MSC: [![Build status MSC](https://ci.appveyor.com/api/projects/status/sy2dk8s\
e2yoxaqve)](https://ci.appveyor.com/project/eranpeer/fakeit)

FakeIt is a simple mocking framework for C++. It supports GCC, Clang and MS\
 Visual C++.

FakeIt is written in C++11 and can be used for testing both C++11 and C++\
 projects.

```cpp
struct SomeInterface {
	virtual int foo(int) = 0;
	virtual int bar(string) = 0;
};
```
```cpp
// Instantiate a mock object.
Mock<SomeInterface> mock;

// Setup mock behavior.
When(Method(mock,foo)).Return(1); // Method mock.foo will return 1 once.

// Fetch the mock instance.
SomeInterface &i = mock.get();

// Will print "1". 
cout << i.foo(0);


```
Verify method invocation
```cpp
Mock<SomeInterface> mock;
		
When(Method(mock,foo)).Return(0);

SomeInterface &i = mock.get();

// Production code
i.foo(1);

// Verify method mock.foo was invoked.
Verify(Method(mock,foo));

// Verify method mock.foo was invoked with specific arguments.
Verify(Method(mock,foo).Using(1));
```

Checkout the [Quickstart](https://github.com/eranpeer/FakeIt/wiki/Quickstart)\
 for many more examples!

The master branch has the stable version of FakeIt. Include the most suitable\
 single header in your test project and you are good to go.

## Features
* Packaged as a **single header file**.
* Very simple API based on the expressiveness of C++11.
* Supports all major compilers: GCC, Clang and MSC++.
* Easily integrated with [**GTest**](https://code.google.com/p/googletest/),\
 [**MS Test**](http://en.wikipedia.org/wiki/Visual_Studio_Unit_Testing_Framew\
ork) and [**Boost Test**](http://www.boost.org/doc/libs/1_56_0/libs/test/doc/\
html/index.html).
* Expressive [Arrange-Act-Assert](http://xp123.com/articles/3a-arrange-act-as\
sert/) syntax.
* Create mock classes or **spy existing objects** instantly in one simple\
 line.
* No limitation on number of method arguments.
* Supports dynamic casting.

## Installation
FakeIt is a header only framework. It does not require any installation. For\
 extra simplicity fakeit is packaged as a single header file.

FakeIt is pre-configured to work with some of the major unit testing\
 frameworks. A pre-configured version will use the assertions mechanism of\
 the unit testing framework to integrate the generated error messages into\
 the unit testing framework output.

If you don't find your unit testing framework on the list, simply use the\
 *standalone* configuration.

### Using a pre-packaged single header file
Pre-packaged single header versions of FakeIt are located under the\
 *single_header* folder.
Depending on the unit testing framework you use, simply add one of the\
 pre-packaged versions to the include path of your test project:

* <fakeit_folder>/single\_header/[gtest](https://github.com/google/googletest)
* <fakeit_folder>/single\_header/mstest
* <fakeit_folder>/single\_header/boost
* <fakeit_folder>/single\_header/[catch](https://github.com/philsquared/Catch\
) (Tested with Catch 2.0.1)
* <fakeit_folder>/single\_header/[tpunit](https://github.com/tpounds/tpunitpp)
* <fakeit_folder>/single\_header/[mettle](https://github.com/jimporter/mettle)
* <fakeit_folder>/single\_header/qtest
* <fakeit_folder>/single\_header/nunit - (See caveats in config/nunit/fakeit\_\
instance.hpp)
* <fakeit_folder>/single\_header/[cute](https://github.com/PeterSommerlad/CUT\
E)  
* <fakeit_folder>/single\_header/standalone

For example, to use fakeit with **Google Test** simply add the\
 *single_header/gtest* folder to the include path of your test project:
```
-I"<fakeit_folder>/single_header/gtest"
```

### Using the source header files
Fakeit source code header files are located under the *include* foler. To use\
 FakeIt directly from the source code all you need to do is to download the\
 source files and add the *include* folder and the configuration folder of\
 your choice to the include path of your project.
For example:

* To use fakeit with **Google Test** add the *include* folder and the\
 *config/gtest* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/gtest"
```
* To use fakeit with **MS Test** add the *include* folder and the\
 *config/mstest* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/mstest"
```
* To use fakeit with **Boost Test** add the *include* folder and the\
 *config/boost* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/boost"
```
* To use fakeit with **Catch** add the *include* folder and the\
 *config/catch* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/catch"
```
* To use fakeit with **tpunit** add the *include* folder and the\
 *config/tpunit* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/tpunit"
```
* To use fakeit with **Mettle** add the *include* folder and the\
 *config/mettle* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/mettle"
```
* To use fakeit with **QTest** add the *include* folder and the\
 *config/qtest* folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/qtest"
```
* To use fakeit with **NUnit** in a managed Visual Studio C++/CLI project,\
 add the standalone/nunit folder to your project include path. Note, it is\
 useful to define your mocks 
in `#pragma unmanaged` sections so that you can use lambda expressions.

* To use fakeit with **CUTE** add the *include* folder and the *config/cute*\
 folder to the include path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/cute"
```
* To use fakeit without any testing framework integration (**standalone**)\
 add the *include* folder and the *config/standalone* folder to the include\
 path of your test project:
```
-I"<fakeit_folder>/include" -I"<fakeit_folder>/config/standalone"
```
It is recommended to build and run the unit tests to make sure FakeIt fits\
 your environment.

For GCC, it is recommended to build the test project with -O1 or -O0 flags.\
 Some features of Fakeit may not work with stonger optimizations!!

#### Building and Running the Unit Tests with GCC
```
cd build
make all
```
run the tests by typing
```
./fakeit_tests.exe
```

#### Building and Running the Unit Tests with Clang
```
cd build
make -f clang_makefile all
```
run the tests by typing
```
./fakeit_tests.exe
```

#### Building and Running the Unit Tests with Visual Studio 
Open the tests/all_tests.vcxproj project file with Visual Studio. Build and\
 run the project and check the test results. 

## Limitations
* Currently only GCC, Clang and MSC++ are supported.
* On GCC, optimization flag O2 and O3 are not supported. You must compile the\
 test project with -O1 or -O0.
* In MSC++, your project must have Edit And Continue debug mode on\
 (https://msdn.microsoft.com/en-us/library/esaeyddf.aspx) which is same of\
 /ZI compiler switch. If you don't use this, you will have exceptions mocking\
 destructors (which includes unique_ptr and other smart pointers). 
* Can't mock classes with multiple inheritance.
* Can't mock classes with virtual inheritance.
* Currently mocks are not thread safe. 

\
description-type: text/markdown;variant=GFM
url: https://github.com/eranpeer/FakeIt
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++11
bootstrap-build:
\
project = fakeit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: fakeit/fakeit-2.3.2.tar.gz
sha256sum: 1378d66e0483f6427688b23aea2e13d36a17d26f959c55220997f905f5f84dbd
:
name: fmt
version: 6.1.2+1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

This is the source code for the build2 package of the `{fmt}` C++ library.

 - Build2 : https://build2.org
 - `{fmt}` : https://github.com/fmtlib/fmt/

See ./upstream/Readme.rst for the library's details.

\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
build-exclude: windows_*-gcc_9.1_mingw_w64-*; Linking errors in this specific\
 version.
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-6.1.2+1.tar.gz
sha256sum: b972c9cf9208f4101bac69d7e4e6bbdcb0feca7f2e2c67ba75cc86212b6a3d94
:
name: fmt
version: 6.2.0+2
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
build-exclude: windows_10-gcc_9.2_mingw_w64; Linking errors in this specific\
 version (shared only).
build-exclude: windows_10-gcc_9.2_mingw_w64-O3; Linking errors in this\
 specific version (shared only).
build-exclude: windows_10-gcc_9.1_mingw_w64; Linking errors in this specific\
 version (shared only).
build-exclude: windows_10-gcc_9.1_mingw_w64-O3; Linking errors in this\
 specific version (shared only).
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-6.2.0+2.tar.gz
sha256sum: 4fe0bffadd1eff6131e73b9f995ea3f4347e1771f6117078c43bbeb511ec6084
:
name: fmt
version: 6.2.1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
build-exclude: windows_10-gcc_9.2_mingw_w64; Linking errors in this specific\
 version (shared only).
build-exclude: windows_10-gcc_9.2_mingw_w64-O3; Linking errors in this\
 specific version (shared only).
build-exclude: windows_10-gcc_9.1_mingw_w64; Linking errors in this specific\
 version (shared only).
build-exclude: windows_10-gcc_9.1_mingw_w64-O3; Linking errors in this\
 specific version (shared only).
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-6.2.1.tar.gz
sha256sum: ccd5ab77e0612bc60ddfa9798a522bdcdb2ade58a6c5b9c37fa37ebf2f2a9f94
:
name: fmt
version: 7.0.1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-7.0.1.tar.gz
sha256sum: 7807c5e610207e5d9db1a7ebfa7d85eabd4adcd2d0d09d208b89d290362be332
:
name: fmt
version: 7.0.3
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-7.0.3.tar.gz
sha256sum: e093d8f55d7d4c62195eba849bfaab71f015e323d0e3c2dadefe607c10dbb4f0
:
name: fmt
version: 7.1.0
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-7.1.0.tar.gz
sha256sum: fd1e45800df5a53ea8419dacfd5c423437f37239d8f9c4896bce19f7cc487bd1
:
name: fmt
version: 7.1.1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-7.1.1.tar.gz
sha256sum: 07e80bd57b6a88e520d841c8e4011a7d09a8eb97c6fc979a5e4d731efda5e862
:
name: fmt
version: 7.1.2
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-7.1.2.tar.gz
sha256sum: 9700ad959ee76d0ad1f9c1ce79f93a8b4054906b3ccd9bf16b5b33d30ce347a5
:
name: fmt
version: 7.1.3
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.


\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Used in buildfiles
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src
test_dir = $src_root/upstream/test
doc_dir = $src_root/upstream/doc

\
location: fmt/fmt-7.1.3.tar.gz
sha256sum: 9091f94d68bc6a9c97bc0516e961ae2f0fdd36a670d7b9d1cd105fa808707301
:
name: fmt
version: 8.0.0+1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

include $src_root/build/config-options.build2

\
location: fmt/fmt-8.0.0+1.tar.gz
sha256sum: c314682927cb2229b0ccad14a52cc5777d024fda9a81cf398ba38b872a7fb469
:
name: fmt
version: 8.0.1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

include $src_root/build/config-options.build2

\
location: fmt/fmt-8.0.1.tar.gz
sha256sum: 15dd40408fc247d34af3a7324be2758fa953795fe0c756e8ea9d7c67e4454517
:
name: fmt
version: 8.1.0
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

include $src_root/build/config-options.build2

\
location: fmt/fmt-8.1.0.tar.gz
sha256sum: c708cd053b3eaf636bd26487f833aee69607b2dfcc792abf0051daec60992c96
:
name: fmt
version: 8.1.1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

include $src_root/build/config-options.build2

\
location: fmt/fmt-8.1.1.tar.gz
sha256sum: 618209adc4a5f323e2664e4b5d552d14fa0ba324a8c69fef4eefc834ec5a028a
:
name: fmt
version: 9.0.0+1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


##############################
# Project-specific options:

# Set to true to build and provide the `fmt` C++ module.
config [bool] config.fmt.enable_modules ?= $cxx.features.modules #\
 $($cxx.features.modules == true)


\
location: fmt/fmt-9.0.0+1.tar.gz
sha256sum: 94be3a504ab6f8e834fbb1936e2e4991b276b6897ce4b669403eb04d5c46a91e
:
name: fmt
version: 9.1.0
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


##############################
# Project-specific options:

# Set to true to build and provide the `fmt` C++ module.
config [bool] config.fmt.enable_modules ?= $cxx.features.modules #\
 $($cxx.features.modules == true)


\
location: fmt/fmt-9.1.0.tar.gz
sha256sum: 98abc6ecb35a585fd1eead68c8a383ca93472353842fce497c50f81d022e37b9
:
name: fmt
version: 10.0.0
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


##############################
# Project-specific options:

# Set to true to build and provide the `fmt` C++ module.
config [bool] config.fmt.enable_modules ?= $cxx.features.modules #\
 $($cxx.features.modules == true)


\
location: fmt/fmt-10.0.0.tar.gz
sha256sum: e92ed1acaff3fba5b0fa0948560d51c4a11f6f8176b0ff79f82b18ba987e8751
:
name: fmt
version: 10.1.1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


##############################
# Project-specific options:

# Set to true to build and provide the `fmt` C++ module.
config [bool] config.fmt.enable_modules ?= $cxx.features.modules #\
 $($cxx.features.modules == true)


\
location: fmt/fmt-10.1.1.tar.gz
sha256sum: 41642f7205d1c9a5e3ccbeb6ccaac924cbce0994c6f00369988f72cf1720ef52
:
name: fmt
version: 10.2.1
summary: "{fmt} is an open-source formatting library for C++. It can be used\
 as a safe and fast alternative to (s)printf and iostreams."
license: MIT
description:
\
`{fmt}` library - Build2 package
================================

See [`{fmt}` documentation](https://fmt.dev/) for usage and details.

 - `{fmt}` : https://github.com/fmtlib/fmt/
 - Build2 : https://build2.org

Note: This is the source code for the build2 package of the `{fmt}` C++\
 library,
the actual library sources snapshot can be found in the `./upstream/`\
 submodule.

## Configuration Options:

 - `config.fmt.enable_modules` : Set to `true` to build and provide the `fmt`\
 C++ modules. If the compiler and C++ version don't support C++ modules\
 (which is C++ > 20), this will result in a compilation failure. Set to\
 `true` if `$cxx.features.modules == true` which means the configuration is\
 set to enable C++ modules, `false` otherwise.




\
description-type: text/markdown;variant=GFM
url: https://github.com/fmtlib/fmt/
doc-url: https://fmt.dev/
package-url: https://github.com/build2-packaging/fmt/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = fmt

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc
mxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


##############################
# Project-specific options:

# Set to true to build and provide the `fmt` C++ module.
config [bool] config.fmt.enable_modules ?= $cxx.features.modules #\
 $($cxx.features.modules == true)


\
location: fmt/fmt-10.2.1.tar.gz
sha256sum: 3b35c3d5ad72aa18e1bee7751727214b629c7a1fe727dbdd1b3fe7800c82c44a
:
name: frozen
version: 1.0.1
summary: a header-only, constexpr alternative to gperf for C++14 users
license: Apache-2.0
description:
\
Frozen
######

.. image:: https://travis-ci.org/serge-sans-paille/frozen.svg?branch=master
   :target: https://travis-ci.org/serge-sans-paille/frozen

Header-only library that provides 0 cost initialization for immutable\
 containers, fixed-size containers, and various algorithms.

Frozen provides:

- immutable (a.k.a. frozen), ``constexpr``-compatible versions of\
 ``std::set``,
  ``std::unordered_set``, ``std::map`` and ``std::unordered_map``.
  
- fixed-capacity, ``constinit``-compatible versions of ``std::map`` and 
  ``std::unordered_map`` with immutable, compile-time selected keys mapped
  to mutable values.

- 0-cost initialization version of ``std::search`` for frozen needles using
  Boyer-Moore or Knuth-Morris-Pratt algorithms.


The ``unordered_*`` containers are guaranteed *perfect* (a.k.a. no hash
collision) and the extra storage is linear with respect to the number of keys.

Once initialized, the container keys cannot be updated, and in exchange,\
 lookups
are faster. And initialization is free when ``constexpr`` or ``constinit`` is 
used :-).


Installation
------------

Just copy the ``include/frozen`` directory somewhere and points to it using\
 the ``-I`` flag. Alternatively, using CMake:

.. code:: sh

    > mkdir build
    > cd build
    > cmake -D CMAKE_BUILD_TYPE=Release ..
    > make install


Installation via CMake populates configuration files into the\
 ``/usr/local/share``
directory which can be consumed by CMake's ``find_package`` instrinsic\
 function.

Requirements
------------

A C++ compiler that supports C++14. Clang version 5 is a good pick, GCC\
 version
6 lags behind in terms of ``constexpr`` compilation time (At least on my
setup), but compiles correctly. Visual Studio 2017 also works correctly!

Note that gcc 5 isn't supported. (Here's an `old compat branch`_ where a\
 small amount of stuff was ported.)

.. _old compat branch: https://github.com/cbeck88/frozen/tree/gcc5-support

Usage
-----

Compiled with ``-std=c++14`` flag:

.. code:: C++

    #include <frozen/set.h>

    constexpr frozen::set<int, 4> some_ints = {1,2,3,5};

    constexpr bool letitgo = some_ints.count(8);

    extern int n;
    bool letitgoooooo = some_ints.count(n);


As the constructor and some methods are ``constexpr``, it's also possible to\
 write weird stuff like:

.. code:: C++

    #include <frozen/set.h>

    template<std::size_t N>
    std::enable_if_t< frozen::set<int, 3>{{1,11,111}}.count(N), int> foo();

String support is built-in:

.. code:: C++

    #include <frozen/unordered_map.h>
    #include <frozen/string.h>

    constexpr frozen::unordered_map<frozen::string, int, 2> olaf = {
        {"19", 19},
        {"31", 31},
    };
    constexpr auto val = olaf.at("19");

The associative containers have different functionality with and without\
 ``constexpr``. 
With ``constexpr``, frozen maps have immutable keys and values. Without\
 ``constexpr``, the 
values can be updated in runtime (the keys, however, remain immutable):

.. code:: C++


    #include <frozen/unordered_map.h>
    #include <frozen/string.h>

    static constinit frozen::unordered_map<frozen::string, frozen::string, 2>\
 voice = {
        {"Anna", "???"},
        {"Elsa", "???"}
    };
    
    int main() {
    	voice.at("Anna") = "Kristen";
	voice.at("Elsa") = "Idina";
    }

You may also prefer a slightly more DRY initialization syntax:

.. code:: C++

    #include <frozen/set.h>

    constexpr auto some_ints = frozen::make_set<int>({1,2,3,5});

There are similar ``make_X`` functions for all frozen containers.

Exception Handling
------------------

For compatibility with STL's API, Frozen may eventually throw exceptions, as\
 in
``frozen::map::at``. If you build your code without exception support, or
define the ``FROZEN_NO_EXCEPTIONS`` macro variable, they will be turned into\
 an
``std::abort``.

Extending
---------

Just like the regular C++14 container, you can specialize the hash function,
the key equality comparator for ``unordered_*`` containers, and the comparison
functions for the ordered version.

It's also possible to specialize the ``frozen::elsa`` structure used for
hashing. Note that unlike `std::hash`, the hasher also takes a seed in\
 addition
to the value being hashed.

.. code:: C++

    template <class T> struct elsa {
      // in case of collisions, different seeds are tried
      constexpr std::size_t operator()(T const &value, std::size_t seed)\
 const;
    };

Ideally, the hash function should have nice statistical properties like\
 *pairwise-independence*:

If ``x`` and ``y`` are different values, the chance that ``elsa<T>{}(x, seed)\
 == elsa<T>{}(y, seed)``
should be very low for a random value of ``seed``.

Note that frozen always ultimately produces a perfect hash function, and you\
 will always have ``O(1)``
lookup with frozen. It's just that if the input hasher performs poorly, the\
 search will take longer and
your project will take longer to compile.

Troubleshooting
---------------

If you hit a message like this:

.. code:: none

    [...]
    note: constexpr evaluation hit maximum step limit; possible infinite loop?

Then either you've got a very big container and you should increase Clang's
thresholds, using ``-fconstexpr-steps=1000000000`` for instance, or the hash
functions used by frozen do not suit your data, and you should change them, as
in the following:

.. code:: c++

    struct olaf {
      constexpr std::size_t operator()(frozen::string const &value,\
 std::size_t seed) const { return seed ^ value[0];}
    };

    constexpr frozen::unordered_set<frozen::string, 2, olaf/*custom hash*/>\
 hans = { "a", "b" };

Tests and Benchmarks
--------------------

Using hand-written Makefiles crafted with love and care:

.. code:: sh

    > # running tests
    > make -C tests check
    > # running benchmarks
    > make -C benchmarks GOOGLE_BENCHMARK_PREFIX=<GOOGLE-BENCHMARK_INSTALL_DI\
R>

Using CMake to generate a static configuration build system:

.. code:: sh

    > mkdir build
    > cd build
    > cmake -D CMAKE_BUILD_TYPE=Release \\
            -D frozen.benchmark=ON \\
	    -G <"Unix Makefiles" or "Ninja"> ..
    > # building the tests and benchmarks...
    > make                               # ... with make
    > ninja                              # ... with ninja
    > cmake --build .                    # ... with cmake
    > # running the tests...
    > make test                          # ... with make
    > ninja test                         # ... with ninja
    > cmake --build . --target test      # ... with cmake
    > ctest                              # ... with ctest
    > # running the benchmarks...
    > make benchmark                     # ... with make
    > ninja benchmark                    # ... with ninja
    > cmake --build . --target benchmark # ... with cmake

Using CMake to generate an IDE build system with test and benchmark targets

.. code:: sh

    > mkdir build
    > cd build
    > cmake -D frozen.benchmark=ON -G <"Xcode" or "Visual Studio 15 2017"> ..
    > # using cmake to drive the IDE build, test, and benchmark
    > cmake --build . --config Release
    > cmake --build . --target test
    > cmake --build . --target benchmark


Credits
-------

The perfect hashing is strongly inspired by the blog post `Throw away the\
 keys:
Easy, Minimal Perfect Hashing <http://stevehanov.ca/blog/index.php?id=119>`_.

Thanks a lot to Jérôme Dumesnil for his high-quality reviews, and to Chris\
 Beck
for his contributions on perfect hashing.

Contact
-------

Serge sans Paille ``<serge.guelton@telecom-bretagne.eu>``


\
description-type: text/plain
url: https://github.com/serge-sans-paille/frozen
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = frozen

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h

src_upstream = $src_root/upstream

\
location: frozen/frozen-1.0.1.tar.gz
sha256sum: dceb7abe2f660d98fb6e00396a7d26b47c8fe5d1f25e72649b83b90482bdbb92
:
name: glbinding
version: 3.1.0+1
project: glbinding
summary: glbinding is a cross-platform C++ binding for the OpenGL API,\
 generated using the gl.xml specification.
license: MIT
description:
\
[//]: # (Comment)

<br><a href="https://glbinding.org"><img src="https://raw.githubusercontent.c\
om/cginternals/glbinding/master/glbinding-logo.svg?sanitize=true"\
 width="50%"></a>

*glbinding* is a cross-platform C++ binding for the [OpenGL\
 API](http://www.opengl.org).

![GitHub release](https://img.shields.io/github/release/cginternals/glbinding\
.svg)
[![Travis](https://img.shields.io/travis/cginternals/glbinding/master.svg?sty\
le=flat&logo=travis)](https://travis-ci.org/cginternals/glbinding)
[![Appveyor](https://img.shields.io/appveyor/build/scheibel/glbinding/master.\
svg?style=flat&logo=appveyor)](https://ci.appveyor.com/project/scheibel/glbin\
ding)
[![Tokei](https://tokei.rs/b1/github/cginternals/glbinding)](https://github.c\
om/Aaronepower/tokei)

[![Documentation](https://img.shields.io/badge/documentation-online-blue.svg?\
style=flat&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL\
3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMC41IDEzLjciPjxwYXRoIGQ9Ik0xMS\
41IDYuOGwtMy43IDYuNEwuNS41aDE0LjdsLTEuMyAyLjFINC4yTDcuOCA5bDIuNS00LjN6bTcuMyA\
0LjNsMS4yIDIuMWgtOS43TDE3LjYuNWwxLjIgMi4xLTQuOSA4LjV6IiBmaWxsPSIjZmZmIi8%2BPC\
9zdmc%2B)](https://www.glbinding.org/docs.html)
[![Examples](https://img.shields.io/badge/examples-wiki-blue.svg?style=flat&l\
ogo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vc\
mcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMC41IDEzLjciPjxwYXRoIGQ9Ik0xMS41IDYuOGwtMy\
43IDYuNEwuNS41aDE0LjdsLTEuMyAyLjFINC4yTDcuOCA5bDIuNS00LjN6bTcuMyA0LjNsMS4yIDI\
uMWgtOS43TDE3LjYuNWwxLjIgMi4xLTQuOSA4LjV6IiBmaWxsPSIjZmZmIi8%2BPC9zdmc%2B)](h\
ttps://github.com/cginternals/glbinding/wiki/Examples)
[![Tools](https://img.shields.io/badge/tools-wiki-blue.svg?style=flat&logo=da\
ta%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjA\
wMC9zdmciIHZpZXdCb3g9IjAgMCAyMC41IDEzLjciPjxwYXRoIGQ9Ik0xMS41IDYuOGwtMy43IDYu\
NEwuNS41aDE0LjdsLTEuMyAyLjFINC4yTDcuOCA5bDIuNS00LjN6bTcuMyA0LjNsMS4yIDIuMWgtO\
S43TDE3LjYuNWwxLjIgMi4xLTQuOSA4LjV6IiBmaWxsPSIjZmZmIi8%2BPC9zdmc%2B)](https:/\
/github.com/cginternals/glbinding/wiki/Tools)

[//]: # (HEADER_END)

*glbinding* leverages C++11 features like enum classes, lambdas, and variadic\
 templates, instead of relying on macros;
all OpenGL symbols are real functions and variables.
It provides type-safe parameters, per-feature API headers, lazy function\
 resolution, multi-context and multi-thread support, global and local\
 function callbacks, meta information about the generated OpenGL binding and\
 the OpenGL runtime, as well as tools and examples for quick-starting your\
 projects.
Based on the OpenGL API specification ([gl.xml](https://cvs.khronos.org/svn/r\
epos/ogl/trunk/doc/registry/public/api/gl.xml)) *glbinding* is generated\
 using [python scripts and templates](https://github.com/cginternals/khrbindi\
ng-generator) that can be easily adapted to fit custom needs.

![what-is-glbinding](https://raw.githubusercontent.com/cginternals/glbinding/\
master/docs/what-is-glbinding-v2.png)

Code that is written using a typical C binding for OpenGL, e.g.,\
 [GLEW](http://glew.sourceforge.net/), is fully compatible for the use with\
 *glbinding* and causes no significant impact on runtime performance (see\
 [compare example](https://github.com/cginternals/glbinding/wiki/examples#com\
pare)): just replace all includes to the former binding, replace the\
 initialization code and *use* the appropriate API namespace, e.g., ```gl```\
 for full availability of the OpenGL API.

```cpp
#include <glbinding/gl/gl.h>
using namespace gl;

// ...
auto shader = glCreateShader(GL_COMPUTE_SHADER);
// ...
```

# Resources

* [Tools](https://github.com/cginternals/glbinding/wiki/tools)
* [Examples](https://github.com/cginternals/glbinding/wiki/examples)
* [Context Creation Cheat Sheet](https://github.com/cginternals/glbinding/wik\
i/Context-Creation-Cheat-Sheet)

### Installation and Development

* [Install Instructions](#install-instructions)
* [Build form Source](#build-instructions)
* [Updating the Generated Source Code](#update-generated-source-code)
* [Tips for Linking](#tips-for-linking)
* [Dependency on KHR Headers](#dependency-on-khr-headers)
* [Basic Example](#basic-example)

### Feature Documentation and Code Snippets

* [Type-safe Parameters](#type-safe-parameters)
* [Compilation-Centered Header Design](#compilation-centered-header-design)
* [Feature-Centered Header Design](#feature-centered-header-design)
* [Lazy Function Resolution](#lazy-function-pointer-resolution)
* [Multi-context Support](#multi-context-support)
* [Multi-thread Support](#multi-threading-support)
* [Global and Local Function Callbacks](#function-callbacks)
* [Alternative Signatures for GLboolean and GLenum types](#alternative-signat\
ures)
* [Meta Information System](#meta-information)
* [Doxygen Documentations](https://glbinding.org/docs.html)\
 ([stable](https://www.glbinding.org/docs/v3.1/), [master](https://www.glbind\
ing.org/docs/master))

# Install Instructions

*glbinding* is available for different platforms using different distribution\
 channels.
You can either download the source and manually [compile](#build-instructions\
) it or use one of the [pre-compiled releases](https://github.com/cginternals\
/glbinding/releases) of this repository.
For systems providing package managers, we generally strive for packages in\
 these package managers.

## Windows

The various *glbinding* packages can be installed either by downloading an\
 installer, e.g., the [x64 installer for glbinding v3.1.0](https://github.com\
/cginternals/glbinding/releases/download/v3.1.0/glbinding-3.1.0-msvc2017-x64-\
installer.exe) for Microsoft Visual Studio 2015, or downloading and\
 extracting one of the precompiled archives, e.g. [runtime](https://github.co\
m/cginternals/glbinding/releases/download/v3.1.0/glbinding-3.1.0-msvc2017-x64\
-runtime.zip),
[examples](https://github.com/cginternals/glbinding/releases/download/v3.1.0/\
glbinding-3.1.0-msvc2017-x64-examples.zip),
[dev](https://github.com/cginternals/glbinding/releases/download/v3.1.0/glbin\
ding-3.1.0-msvc2017-x64-dev.zip), and
[tools](https://github.com/cginternals/glbinding/releases/download/v3.1.0/glb\
inding-3.1.0-msvc2017-x64-tools.zip).
Since lately, glbinding is also available on [vcpkg](https://github.com/Micro\
soft/vcpkg/tree/master/ports/glbinding) with more recent releases:
```bash
> vcpkg install glbinding
```
Alternatively, download the source code and commence [building from\
 source](#build-instructions).

## Ubuntu

*glbinding* is provided on Ubuntu using PPAs and in [Ubuntu\
 universe](https://packages.ubuntu.com/source/artful/glbinding) since Artful\
 Aardvark. We maintain our own PPA for most recent releases. For Ubuntu 16.04\
 (xenial), 17.10 (artful), and 18.04 (bionic) use the [standard\
 PPA](https://launchpad.net/~cginternals/+archive/ubuntu/ppa), for Ubuntu\
 14.04 (trusty) use the [backports PPA](https://launchpad.net/~cginternals/+a\
rchive/ubuntu/backports-ppa).
Using the current PPA as example, the following lines install *glbinding*\
 including the GLFW examples:

```shell
> sudo apt-add-repository ppa:cginternals/ppa
> sudo apt-get update
> sudo apt-get install libglbinding-examples-glfw
> # start example
> /usr/share/glbinding/cubescape
```

To use *glbinding* as dependency, install the development package:

```shell
> sudo apt-get install libglbinding-dev libglbinding-dbg
```

Alternatively, download the source code and commence [building from\
 source](#build-instructions).

## Arch Linux

On Arch, *glbinding* is provided by the [glbinding](https://www.archlinux.org\
/packages/community/x86_64/glbinding/) package in the community repository.\
 To install *glbinding* execute the following line:

```shell
> sudo pacman -S glbinding
```

Alternatively, download the source code and commence [building from\
 source](#build-instructions).

## macOS

The package manager on macOS we depend on is homebrew. The package there is\
 called [glbinding](http://formulae.brew.sh/formula/glbinding).
To install *glbinding* using homebrew, execute the following line:

```bash
> brew install glbinding
```

Alternatively, download the source code and commence [building from\
 source](#build-instructions).

## Debian-based Systems

*glbinding* is available for Debian 9 (Stretch), 10 (Buster) and Sid. Install\
 it using `apt-get install glbinding`.
For advanced use, download the source code and commence [building from\
 source](#build-instructions).


## Cross-Platform Package Managers

As one of the cross-platform package managers, *conan* provides glbinding in\
 its [center index](https://conan.io/center/glbinding). You can use the\
 folling line to install glbinding using conan:

```bash
> conan install glbinding/3.1.0@
```


# Build Instructions

### Prerequisites and Dependencies

The only mandatory run-time dependencies of *glbinding* are the STL of the\
 used compiler and an OpenGL driver library, dynamically linked with your\
 application.
Building *glbinding* from source has several mandatory and optional\
 dependencies:

* [CMake](https://cmake.org/) 3.0 or higher for building *glbinding* from\
 source (mandatory for any build from source)
* [git](https://git-scm.com/) for version control and script supporting tasks
* [GLFW](http://www.glfw.org/) 3.2 or higher for examples and tools
* [GLEW](http://glew.sourceforge.net/) 1.6 or higher for the comparison\
 example (optional)
* [cpplocate](https://github.com/cginternals/cpplocate) for the examples\
 (optional)
* [Qt5](http://www.qt.io/developers/) 5.0 or higher for the qt-based example\
 (optional)
* [Doxygen](http://www.stack.nl/~dimitri/doxygen/) 1.8 or higher for\
 generating the documentation on your system
  * [graphviz](http://www.graphviz.org/) for generating diagrams (optional)

### Compile Instructions

For compilation, a C++11 compliant compiler, e.g., GCC 4.8, Clang 3.3, MSVC\
 2013 **Update 3**, is required.
First, download the source code [as archive](https://github.com/cginternals/g\
lbinding/releases) or via git:

```bash
> git clone https://github.com/cginternals/glbinding.git
> cd glbinding
```

Then, depending on the version of *glbinding* you want to build, choose the\
 appropriate tag or branch, e.g., for the 2.1.4 release:

```bash
> git fetch --tags
> git checkout v2.1.4
```

The actual compilation can be done using CMake and your favorite compiler and\
 IDE.

For building *glbinding* CMake via command line can be used (should work on\
 all systems):

First, create a build directory (we do not recommend in-source builds):

```bash
> mkdir build
> cd build
```

Configure *glbinding* with your preferred or default generator, e.g., for\
 Visual Studio 2015 in x64 use
(note: some IDEs have integrated support for CMake projects, e.g., Qt\
 Creator, and allow you to skip the manual project configuration):

```bash
> cmake .. -G "Visual Studio 14 2015 Win64"
```

In order to compile the project, either use you favorite Editor/IDE with the\
 created project or use CMake as follows:

```bash
> cmake --build .
```

For multi-configuration projects specific configuration (e.g., on Windows\
 using MSVC) can be built using:

```bash
> cmake --build . --config Release
> cmake --build . --config Debug
```

### Update Generated Source Code

The generation scripts for *glbinding* are maintained within the\
 [khrbinding-generator](https://github.com/cginternals/khrbinding-generator)\
 project.
Assuming a directory structure with both projects such as `<projects>/glbindi\
ng` and `<projects>/khrbinding-generator`, updating the source code is\
 started as follows:

```bash
> python3 update.py -p "profiles/gl.json"
> python3 generate.py -p "profiles/gl.json" -d "../glbinding/source"
```

# Tips for Linking

We suggest using the build system [CMake](https://cmake.org/) for a smooth\
 integration.
For it, *glbinding* provides a configuration script that should be installed\
 into your system or at least accessible by CMake.
In your projects' `CMakeLists.txt`, add one of the following lines:

```cmake
find_package(glbinding QUIET) # if you want to check for existence
find_package(glbinding REQUIRED) # if it is really required in your project
```

Finally, just link *glbinding* to your own library or executable:

```cmake
target_link_libraries(${target} ... PUBLIC
    glbinding::glbinding
    glbinding::glbinding-aux # for additional, auxiliary features as logging,\
 meta information, or debugging functionality
)
```

# Dependency on KHR Headers

As of mid 2019, the OpenGL API depends on the platform headers from the\
 Khronos group, even on desktop systems.
This introduced a direct dependency of *glbinding* to the `KHR/khrplatform.h`\
 header file. For most Linux systems, these headers are easily available\
 (e.g., by installing `libegl1-mesa-dev` on Ubuntu), whereas on other\
 systems, pre-existing packages are scarce. Even in the case of Ubuntu, one\
 can argue that installing the EGL dependency is strange, as glbinding does\
 not depend on EGL in any way.

For those cases, glbinding comes with a copy of the headers for internal use.

This solution has one significant downside: As those headers are used by the\
 types of the OpenGL API and the types are used within the public interface\
 of glbinding, the `khrplatform.h` headers needs to be present when building\
 downstream projects, i.e., they need to be installed along glbinding. In\
 order to not conflict with packages providing the official headers, this\
 internal header has to be installed on a separate location. This complicates\
 the project setup and results in the following usage scenarios for you to\
 choose from:

### KHR/khrplatform.h Usage

For this usage scenario, glbinding needs to get built with the CMake option\
 `OPTION_BUILD_OWN_KHR_HEADERS` set to `Off` and system-wide availability of\
 the `KHR/khrplatform.h` headers, e.g., by having `libegl1-mesa-dev`\
 installed. If either the option is `On` or the system-wide headers are not\
 found, the internally provided headers are used instead.

This decision is stored as property of the glbinding CMake target and will be\
 used for downstream projects as well.
The use and propagation of this decision is transparent to the user as well,\
 i.e., the user should not need to handle this downstream. The only thing to\
 consider is to have the system-wide `KHR/khrplatform.h` headers available\
 when building the downstream project.

### glbinding-internal khrplatform.h Usage

For this usage scenario, glbinding should get built with the CMake option\
 `OPTION_BUILD_OWN_KHR_HEADERS` set to `On`. Alternatively, this scenario is\
 the fallback if the official `KHR/khrplatform.h` headers are not found.

This decision is stored as property of the glbinding CMake target and will be\
 used for downstream projects as well.
The use and propagation of this decision is transparent to the user as well,\
 i.e., the user should not need to handle this downstream.

# Basic Example

The following examples are tailored for use with *glbinding* 3.0 and above.

*glbinding* has to be initialized once on the active OpenGL context you want\
 to use *glbinding* with. For initialization, a callback for function pointer\
 resolution must be passed, which your context creation API should provide.
In the most basic case, you call ```glbinding::initialize``` once:

```cpp
#include <glbinding/gl/gl.h>
#include <glbinding/glbinding.h>

using namespace gl;

int main()
{
  // create context, e.g. using GLFW, Qt, SDL, GLUT, ...

  // Assume context creation using GLFW
  glbinding::initialize(glfwGetProcAddress);

  glBegin(GL_TRIANGLES);
  // ...
  glEnd();
}
```


# Features

The following examples are tailored for use with *glbinding* 3.0 and above.

### Type-Safe Parameters

The original OpenGL API provides several concepts in their interface, namely\
 functions, booleans, bitfields, enums, as well as special values and basic\
 types but mostly does not differentiate between these types.
Hence, actual knowledge about each function and its parameters is required;\
 there is no way for a basic code assistance.
As *glbinding* differentiates between all these types, IDEs and compilers can\
 detect wrong usages of the OpenGL API.

One example is the passing of a named constant in places where a bit\
 combination is expected:

```cpp
glClear(GL_COLOR_BUFFER_BIT); // valid
glClear(GL_FRAMEBUFFER);      // compilation error: bitfield of group\
 ClearBufferMask expected, got GLenum
```

In the case of bitfields, the OpenGL API offers groups and each parameter\
 states the group valid values must come from.
*glbinding* uses this information to prevent invalid bit combinations:

```cpp
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // valid
glClear(GL_COLOR_BUFFER_BIT | GL_MAP_READ_BIT);     // compile error: both\
 bitfields share no group

glClear(GL_STENCIL_BUFFER_BIT | GL_LIGHTING_BIT);   // compile error: bitwise\
 or operation is valid,
                                                    // the shared group is\
 AttribMask, but the
                                                    // resulting group does\
 not match the expected.
```

Unfortunately, such groups are incomplete and unmaintained for enums (named\
 values).
Thus, *glbinding* could not provide any assistance for cases such as:

```cpp
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); // All good
GLuint colorShader = glCreateShader(GL_COLOR);          // No compilation\
 error but a runtime error!
```

### Compilation-Centered Header Design

C++ strictly separates interface from implementation.
For improving the compilation time of a program or system written in C++\
 forward declarations of types are commonly used and includes of unnecessary\
 symbols are omitted.

For an interface of a library, class, or module providing OpenGL related\
 functionality, it is likely that only the type information of OpenGL is\
 needed, not actual functions or constants usually required for\
 implementation.
In addition to the customary all-in-one header ```gl.h``` *glbinding* also\
 provides specialized headers:

```cpp
#include <glbinding/gl/gl.h>        // all of the headers below, meaning the\
 complete OpenGL API

#include <glbinding/gl/bitfield.h>  // bitfield constants (e.g.,\
 GL_COLOR_BUFFER_BIT)
#include <glbinding/gl/boolean.h>   // boolean constants (GL_TRUE and\
 GL_FALSE)
#include <glbinding/gl/enum.h>      // symbol constants (e.g.,\
 GL_VERTEX_SHADER)
#include <glbinding/gl/functions.h> // functions
#include <glbinding/gl/types.h>     // type declarations of the OpenGL API\
 (including bitfields, boolean, enum, and extensions)
#include <glbinding/gl/values.h>    // special values (e.g., GL_INVALID_INDEX)
```

There is one additional header that provides all extensions and provide them\
 as an enumeration in terms of C++ enums.

```cpp
#include <glbinding/gl/extension.h>
```

### Feature-Centered Header Design

The OpenGL API is iteratively developed and released in versions, internally\
 (for the API specification) named *features*.
The latest feature/version of OpenGL is 4.6.
The previous version are 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1,\
 3.2, 3.3, 4.0, 4.1, 4.2, 4.3, 4.4., and 4.5.
OpenGL uses a deprecation model for removing outdated parts of its API which\
 results in compatibility (with deprecated API) and core (without deprecated\
 API) usage that is manifested in the targeted OpenGL context.
On top of that, new API concepts are suggested as extensions (often vendor\
 specific) that might be integrated into future versions.
All this results in many possible specific manifestations of the OpenGL API\
 you can use in your program.

One tough task is to adhere to one agreed set of functions in your own OpenGL\
 program (e.g., OpenGL 3.2 Core if you want to develop for every Windows,\
 macOS, and Linux released in the last 4 years).
*glbinding* facilitates this by providing per-feature headers by means of\
 well-defined/generated subsets of the OpenGL API.

#### All-Features OpenGL Headers

If you do not use per-feature headers the OpenGL program can look like this:

```cpp
#include <glbinding/gl/gl.h>

// draw code
gl::glClear(gl::GL_COLOR_BUFFER_BIT | gl::GL_DEPTH_BUFFER_BIT);
gl::glUniform1i(u_numcubes, m_numcubes);
gl::glDrawElementsInstanced(gl::GL_TRIANGLES, 18, gl::GL_UNSIGNED_BYTE, 0,\
 m_numcubes * m_numcubes);
```

#### Single-Feature OpenGL Headers

When developing your code on Windows with latest drivers installed, the code\
 above is likely to compile and run.
But if you want to port it to systems with less mature driver support (e.g.,\
 macOS or Linux using open source drivers), you may wonder if\
 ```glDrawElementsInstanced``` is available.
In this case, just switch to per-feature headers of *glbinding* and choose\
 the OpenGL 3.2 Core headers (as you know that at least this version is\
 available on all target platforms):

```cpp
#include <glbinding/gl32core/gl.h>

// draw code
gl32core::glClear(gl32core::GL_COLOR_BUFFER_BIT | gl32core::GL_DEPTH_BUFFER_B\
IT);
gl32core::glUniform1i(u_numcubes, m_numcubes);
gl32core::glDrawElementsInstanced(gl32core::GL_TRIANGLES, 18,\
 gl32core::GL_UNSIGNED_BYTE, 0, m_numcubes * m_numcubes);
```

If the code compiles you can be sure it is OpenGL 3.2 Core compliant.
Using functions that are not yet available or relying on deprecated\
 functionality is prevented.

### Lazy Function Pointer Resolution

By default, *glbinding* tries to resolve all OpenGL function pointers during\
 initialization, which can consume some time:

```cpp
// Assume context creation using GLFW
glbinding::initialize(glfwGetProcAddress); // immediate function pointer\
 resolution
```

Alternatively, the user can decide that functions pointers are resolved only\
 when used for the first time. This is achieved by:

```cpp
// Assume context creation using GLFW
glbinding::initialize(glfwGetProcAddress, false); // lazy function pointer\
 resolution
```

### Multi-Context Support

*glbinding* has built-in support for multiple contexts. The only requirement\
 is, that the currently active context has to be specified. This feature\
 mixes well with multi-threaded applications, but keep in mind that\
 concurrent use of one context often results in non-meaningful communication\
 with the OpenGL driver.

In order to use multiple contexts, use your favorite context creation library\
 (e.g., glut, SDL, egl, glfw, Qt) to request the required contexts.
The functions to make a context current should be provided by these libraries\
 and is not part of *glbinding* (except that you can get the current context\
 handle).
When using multiple contexts, *glbinding* has to be initialized for each\
 context (when current).

Since each context can correspond to a different feature set of OpenGL and\
 the drivers are free to assign their function pointers, *glbinding* cannot\
 assume any equalities of requested function pointers.
Thus, contexts switches have to be communicated to *glbinding* explicitly in\
 order to have correctly dispatched function pointers:

```cpp
// use the current active context
glbinding::useCurrentContext();

// use another context, identified by platform-specific handle
glbinding::useContext(ContextHandle context);
```

### Multi-Threading Support

Concurrent use of *glbinding* is mainly intended for usage over multiple\
 contexts in different threads (multiple threads operating on a single OpenGL\
 context requires locking, which *glbinding* will not provide).
For it, *glbinding* supports multiple active contexts, one per thread.
This necessitates that *glbinding* gets informed in each thread which context\
 is currently active (see [multi-context example](https://github.com/cgintern\
als/glbinding/tree/master/source/examples/multi-context)).

Note: multi-threaded communication with OpenGL will most likely result in a\
 meaningless sequence of OpenGL calls.
To avoid this, semantic groups of OpenGL calls should be treated as critical\
 sections.

Example for usage of multiple contexts:
```cpp
// Context 1 creation
// GLFWwindow * window1 = glfwCreateWindow(640, 480, "", nullptr, nullptr);
// glfwMakeContextCurrent(window1);
glbinding::initialize(0, glbinding::getProcAddress); // 0 here is the context\
 identifier
// Context 1 initialization
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

// Context 2 creation
// GLFWwindow * window2 = glfwCreateWindow(640, 480, "", nullptr, nullptr);
// glfwMakeContextCurrent(window2);
glbinding::initialize(1, glbinding::getProcAddress); // 1 here is the context\
 identifier
// Context 1 initialization
glClearColor(0.0f, 1.0f, 0.0f, 0.0f);

// Rendering
while (doNotClose()) {
  // Make context 1 active
  // glfwMakeContextCurrent(window1);
  glbinding::useContext(0);

  // Context 1 rendering
  glViewport(0, 0, width, height);
  glClear(GL_COLOR_BUFFER_BIT);

  // Swap buffer for context 1
  // glfwSwapBuffers(window1);

  // Make context 2 active
  // glfwMakeContextCurrent(window2);
  glbinding::useContext(1);

  // Context 2 rendering
  glViewport(0, 0, width, height);
  glClear(GL_COLOR_BUFFER_BIT);

  // Swap buffer for context 2
  // glfwSwapBuffers(window2);
}
```

### Multiple OpenGL Contexts in Multiple Threads

The combination of multiple OpenGL contexts and multiple threads for OpenGL\
 usage is supported by *glbinding* in general.
You must tell *glbinding* which OpenGL context is used in which thread by\
 calling the initialize method once the context is used first\
 (```glbinding::initialize```) and if you want to switch the current context\
 for one thread, you have to update the current context, too\
 (```glbinding::useContext```).
However, we discourage the use of one context in multiple threads.

### Function Callbacks

To support orthogonal features of the OpenGL API, *glbinding* allows\
 attaching a number of callbacks to several concepts of the OpenGL API (e.g.\
 a function).
Such orthogonal features include runtime error checking (i.e.,\
 ```glGetError``` after each function call), logging, and caching of driver\
 information.

*glbinding* supports different types of callbacks that can be registered.
The main types are

 * global and local (per-function) before callbacks, that are called before\
 the OpenGL function call,
 * global and local (per-function) after callbacks, that are called after the\
 OpenGL function call,
 * unresolved callbacks, that are called each time an unresolved OpenGL\
 function should be called (instead of a segmentation fault),
 * context switch callbacks, that are called if the internal current OpenGL\
 context of *glbinding* is changed.

The before callbacks are useful , e.g., for tracing or application-specific\
 parameter checking.
The available information in this callback is the wrapped OpenGL function\
 (including its name and bound function address) and all parameters.
The after callbacks are useful, e.g., for tracing, logging, or the obligatory\
 error check (```glGetError```).
Available information is extended by the return value.
The unresolved callback provides information about the (unresolved) wrapped\
 OpenGL function object.

Example for error checking:

```cpp
setCallbackMaskExcept(CallbackMask::After, { "glGetError" });
setAfterCallback([](const FunctionCall &)
{
  const auto error = glGetError();
  if (error != GL_NO_ERROR)
    std::cout << "error: " << std::hex << error << std::endl;
});

// OpenGL Code ...
```

As a shortcut, *glbinding* 3.0 introduced a debugging interface for\
 error-checking after callbacks within the *glbinding-aux* library:

```cpp
#include <glbinding-aux/debug.h>

glbinding::aux::enableGetErrorCallback();

// OpenGL Code ...
```

Example for logging:

```cpp
setCallbackMask(CallbackMask::After | CallbackMask::ParametersAndReturnValue);
setAfterCallback([](const FunctionCall & call)
{
  std::cout << call.function->name() << "(";
  for (unsigned i = 0; i < call.parameters.size(); ++i)
  {
    std::cout << call.parameters[i].get();
    if (i < call.parameters.size() - 1)
      std::cout << ", ";
  }
  std::cout << ")";

  if (call.returnValue)
    std::cout << " -> " << call.returnValue.get();

  std::cout << std::endl;
});

// OpenGL Code ...
```

### Alternative Signatures

The OpenGL API is designed without function overloading using only simple\
 parameter types.
This results in explicit parameter encoding in function names for\
 conceptually overloaded functions (e.g., glTexParameteri and\
 glTexParameterf).
Another design decision for the OpenGL API is the high similarity of the\
 integer, boolean, enum, and bitfield data types.
This means, that for *overloaded* functions, there is no separate function\
 for ```GLboolean```, ```GLenum```, and ```GLbitfield``` types.
Using type-save functions of *glbinding*, some typically compiling code\
 constructs are now deliberately broken.
For most of those cases, we provide alternative *overloaded* function\
 signatures.
Additionally, we also fix signatures that are semantically broken in the\
 OpenGL API specification, i.e., when base types (C types) are similar such\
 as in the case of enums and integers.

Alternative function signatures are enabled by default, so the following\
 example works out-of-the-box:

```cpp
#include <glbinding/gl/gl.h>

using namespace gl;

// ...
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, 64, 64, 0, GL_RED, GL_UNSIGNED_BYTE,\
 terrain.data());
```

### Meta Information

Besides an actual OpenGL binding, *glbinding* also supports queries for both\
 compile time and runtime information about the gl.xml and your OpenGL driver\
 within the *glbinding-aux* library. This library comes with own includes and\
 needs to be linked seperately.
Typical use cases are querying the available OpenGL extensions or the\
 associated extensions to an OpenGL feature and their functions and enums.

The following example prints out a list of all available OpenGL\
 versions/features:

```cpp
#include <iostream>

#include <glbinding/Version.h>

#include <glbinding-aux/Meta.h>
#include <glbinding-aux/types_to_string.h>

// ...
using glbinding::Meta;

for (const Version & v : Meta::versions())
  std::cout << v << std::endl;
```

\
description-type: text/markdown;variant=GFM
url: https://glbinding.org/
doc-url: https://glbinding.org/docs.html
src-url: https://github.com/cginternals/glbinding
package-url: https://github.com/build2-packaging/glbinding
email: opensource@cginternals.com
package-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = glbinding

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using in

hxx{*}: extension = h
ixx{*}: extension = inl
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
# hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Configuration for setting which KHR header should be used.
config [bool] config.glbinding.use_packaged_khr ?= true

# Export Macros
project.macro.import = '__attribute__((visibility("default")))'
project.macro.export = '__attribute__((visibility("default")))'
project.macro.hidden = '__attribute__((visibility("hidden")))'
project.macro.deprecated = '__attribute__((__deprecated__))'

if ($cxx.target.class == 'windows')
{
  if ($cxx.id == 'msvc')
  {
    project.macro.import = '__declspec(dllimport)'
    project.macro.export = '__declspec(dllexport)'
    project.macro.hidden = ''
    project.macro.deprecated = '__declspec(deprecated)'
  }
  else
  {
    project.macro.import = ''
    project.macro.export = ''
    project.macro.hidden = ''
    project.macro.deprecated = '__attribute__((__deprecated__))'
  }
}

# Build Options
default.export.poptions =
default.export.coptions =
default.export.loptions =
default.export.libs =

default.poptions =
default.coptions =
default.loptions =
default.libs =

switch ($cxx.target.class)
{
  case 'linux'
  {
    default.export.poptions += -DSYSTEM_LINUX
    default.coptions += -fPIC -fvisibility=hidden -flto
    default.loptions += -flto
    default.export.libs += -pthread -ldl
  }

  case 'macos'
  {
    default.export.poptions += -DSYSTEM_DARWIN
    default.coptions += -fPIC -fvisibility=hidden -flto
    default.loptions += -flto
    default.export.libs += -pthread -ldl
  }

  case 'windows'
  {
    default.export.poptions += -DSYSTEM_WINDOWS
    if ($cxx.id == 'msvc')
    {
      default.poptions += /D_SCL_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_WARNINGS
      default.coptions += /MP /W4 /wd4251 /wd4592 /wd4127 /Zm200 \\
                          /Gw /GS- /GL /GF
    }
    elif ($cxx.target.system == 'mingw32')
    {
      default.coptions += -fvisibility-ms-compat
      default.loptions += -fPIC
    }
  }
}

\
location: glbinding/glbinding-3.1.0+1.tar.gz
sha256sum: a7d348f222e31c19958bd358e31a6d10756661c63fd1af08168a3d5bcdae37f8
:
name: glew
version: 2.2.0+1
summary: glew C library
license: MIT
description:
\
# GLEW - The OpenGL Extension Wrangler Library

The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source\
 C/C++ extension loading library. GLEW provides efficient run-time mechanisms\
 for determining which OpenGL extensions are supported on the target\
 platform. OpenGL core and extension functionality is exposed in a single\
 header file. GLEW has been tested on a variety of operating systems,\
 including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris.

![](http://glew.sourceforge.net/glew.png)

http://glew.sourceforge.net/

https://github.com/nigels-com/glew

[![Build Status](https://travis-ci.org/nigels-com/glew.svg?branch=master)](ht\
tps://travis-ci.org/nigels-com/glew)
[![Gitter](https://badges.gitter.im/nigels-com/glew.svg)](https://gitter.im/n\
igels-com/glew?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![Download](https://img.shields.io/sourceforge/dm/glew.svg)](https://sourcef\
orge.net/projects/glew/files/latest/download)

## Table of Contents

* [Downloads](#downloads)
	* [Recent snapshots](#recent-snapshots)
* [Build](#build)
	* [Linux and Mac](#linux-and-mac)
		* [Using GNU Make](#using-gnu-make)
		* [Install build tools](#install-build-tools)
		* [Build](#build-1)
		* [Linux EGL](#linux-egl)
		* [Linux OSMesa](#linux-osmesa)
		* [Linux mingw-w64](#linux-mingw-w64)
	* [Using cmake](#using-cmake)
		* [Install build tools](#install-build-tools-1)
		* [Build](#build-2)
	* [Windows](#windows)
		* [Visual Studio](#visual-studio)
		* [MSYS/Mingw](#msysmingw)
		* [MSYS2/Mingw-w64](#msys2mingw-w64)
* [glewinfo](#glewinfo)
* [Code Generation](#code-generation)
* [Authors](#authors)
* [Contributions](#contributions)
* [Copyright and Licensing](#copyright-and-licensing)

## Downloads

Current release is [2.2.0](https://github.com/nigels-com/glew/releases/tag/gl\
ew-2.2.0).
[(Change Log)](http://glew.sourceforge.net/log.html)

Sources available as
[ZIP](https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.\
2.0.zip) or
[TGZ](https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.\
2.0.tgz).

Windows binaries for [32-bit and 64-bit](https://github.com/nigels-com/glew/r\
eleases/download/glew-2.2.0/glew-2.2.0-win32.zip).

### Recent snapshots

Snapshots may contain new features, bug-fixes or new OpenGL extensions ahead\
 of tested, official releases.

<!--- [glew-20190928.tgz](https://sourceforge.net/projects/glew/files/glew/sn\
apshots/glew-20190928.tgz/download) *GLEW 2.2.0 RC2: New extensions, bug\
 fixes* -->

## Build

It is highly recommended to build from a tgz or zip release snapshot.
The code generation workflow is a complex brew of gnu make, perl and python,\
 that works best on Linux or Mac.
The code generation is known to work on Windows using [MSYS2](https://www.msy\
s2.org/).
For most end-users of GLEW the official releases are the best choice, with\
 first class support.

### Linux and Mac

#### Using GNU Make

GNU make is the primary build system for GLEW, historically.
It includes targets for building the sources and headers, for maintenance\
 purposes.

##### Install build tools

Debian/Ubuntu/Mint:    `$ sudo apt-get install build-essential libxmu-dev\
 libxi-dev libgl-dev`

RedHat/CentOS/Fedora:  `$ sudo yum install libXmu-devel libXi-devel\
 libGL-devel`

FreeBSD: `# pkg install xorg lang/gcc git cmake gmake bash python perl5`

##### Build

	$ make
	$ sudo make install
	$ make clean

Targets:    `all, glew.lib (sub-targets: glew.lib.shared, glew.lib.static),\
 glew.bin, clean, install, uninstall`

Variables:  `SYSTEM=linux-clang, GLEW_DEST=/usr/local, STRIP=`

_Note: you may need to call `make` in the  **auto** folder first_

##### Linux EGL

	$ sudo apt install libegl1-mesa-dev
	$ make SYSTEM=linux-egl

##### Linux OSMesa

	$ sudo apt install libosmesa-dev
	$ make SYSTEM=linux-osmesa

##### Linux mingw-w64

	$ sudo apt install mingw-w64
	$ make SYSTEM=linux-mingw32
	$ make SYSTEM=linux-mingw64

#### Using cmake

The cmake build is mostly contributer maintained.
Due to the multitude of use cases this is maintained on a _best effort_ basis.
Pull requests are welcome.

*CMake 2.8.12 or higher is required.*

##### Install build tools

Debian/Ubuntu/Mint:   `$ sudo apt-get install build-essential libxmu-dev\
 libxi-dev libgl-dev cmake git`

RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel\
 libGL-devel cmake git`

##### Build

	$ cd build
	$ cmake ./cmake
	$ make -j4

| Target     | Description |
| ---------- | ----------- |
| glew       | Build the glew shared library. |
| glew_s     | Build the glew static library. |
| glewinfo   | Build the `glewinfo` executable (requires `BUILD_UTILS` to be\
 `ON`). |
| visualinfo | Build the `visualinfo` executable (requires `BUILD_UTILS` to\
 be `ON`). |
| install    | Install all enabled targets into `CMAKE_INSTALL_PREFIX`. |
| clean      | Clean up build artifacts. |
| all        | Build all enabled targets (default target). |

| Variables       | Description |
| --------------- | ----------- |
| BUILD_UTILS     | Build the `glewinfo` and `visualinfo` executables. |
| GLEW_REGAL      | Build in Regal mode. |
| GLEW_OSMESA     | Build in off-screen Mesa mode. |
| BUILD_FRAMEWORK | Build as MacOSX Framework.  Setting `CMAKE_INSTALL_PREFIX\
` to `/Library/Frameworks` is recommended. |

### Windows

#### Visual Studio

Use the provided Visual Studio project file in build/vc15/

Projects for vc6, vc10, vc12 and vc14 are also provided

#### MSYS/Mingw

Available from [Mingw](http://www.mingw.org/)

Requirements: bash, make, gcc

	$ mingw32-make
	$ mingw32-make install
	$ mingw32-make install.all

Alternative toolchain:  `SYSTEM=mingw-win32`

#### MSYS2/Mingw-w64

Available from [Msys2](http://msys2.github.io/) and/or [Mingw-w64](http://min\
gw-w64.org/)

Requirements: bash, make, gcc

	$ pacman -S gcc make mingw-w64-i686-gcc mingw-w64-x86_64-gcc
	$ make
	$ make install
	$ make install.all

Alternative toolchain:  `SYSTEM=msys, SYSTEM=msys-win32, SYSTEM=msys-win64`

## glewinfo

`glewinfo` is a command-line tool useful for inspecting the capabilities of an
OpenGL implementation and GLEW support for that.  Please include\
 `glewinfo.txt`
with bug reports, as appropriate.

	---------------------------
	    GLEW Extension Info
	---------------------------

	GLEW version 2.0.0
	Reporting capabilities of pixelformat 3
	Running on a Intel(R) HD Graphics 3000 from Intel
	OpenGL version 3.1.0 - Build 9.17.10.4229 is supported

	GL_VERSION_1_1:                                                OK
	---------------

	GL_VERSION_1_2:                                                OK
	---------------
	  glCopyTexSubImage3D:                                         OK
	  glDrawRangeElements:                                         OK
	  glTexImage3D:                                                OK
	  glTexSubImage3D:                                             OK

	...

## Code Generation

A Unix or Mac environment is needed for building GLEW from scratch to
include new extensions, or customize the code generation. The extension
data is regenerated from the top level source directory with:

	make extensions

An alternative to generating the GLEW sources from scratch is to
download a pre-generated (unsupported) snapshot:

https://sourceforge.net/projects/glew/files/glew/snapshots/

## Authors

GLEW is currently maintained by [Nigel Stewart](https://github.com/nigels-com)
with bug fixes, new OpenGL extension support and new releases.

GLEW was developed by [Milan Ikits](http://www.cs.utah.edu/~ikits/)
and [Marcelo Magallon](http://wwwvis.informatik.uni-stuttgart.de/~magallon/).
Aaron Lefohn, Joe Kniss, and Chris Wyman were the first users and also
assisted with the design and debugging process.

The acronym GLEW originates from Aaron Lefohn.
Pasi K&auml;rkk&auml;inen identified and fixed several problems with
GLX and SDL.  Nate Robins created the `wglinfo` utility, to
which modifications were made by Michael Wimmer.

## Contributions

GLEW welcomes community contributions.  Typically these are co-ordinated
via [Issues](https://github.com/nigels-com/glew/issues) or
[Pull Requests](https://github.com/nigels-com/glew/pulls) in the
GitHub web interface.

Be sure to mention platform and compiler toolchain details when filing
a bug report.  The output of `glewinfo` can be quite useful for discussion
also.

Generally GLEW is usually released once a year, around the time of the\
 Siggraph
computer graphics conference.  If you're not using the current release
version of GLEW, be sure to check if the issue or bug is fixed there.

## Copyright and Licensing

GLEW is originally derived from the EXTGL project by Lev Povalahev.
The source code is licensed under the
[Modified BSD License](http://glew.sourceforge.net/glew.txt), the
[Mesa 3-D License](http://glew.sourceforge.net/mesa.txt) (MIT) and the
[Khronos License](http://glew.sourceforge.net/khronos.txt) (MIT).

The automatic code generation scripts are released under the
[GNU GPL](http://glew.sourceforge.net/gpl.txt).

\
description-type: text/markdown;variant=GFM
url: http://glew.sourceforge.net
package-url: https://github.com/Swat-SomeBug/glew.git
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpenGL libraries/framework(Apple). Mostly installed with system\
 or with SDK on windows. They are called differently on different platforms.
requires: ; X11 libs incase building on Linux
bootstrap-build:
\
project = glew

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

config [bool] config.glew.regal ?= false
config [bool] config.glew.osmesa ?= false


\
location: glew/glew-2.2.0+1.tar.gz
sha256sum: 6126bc160972c1aff04a4c46289c29d59f1ac5f08629dd8099c282cec2aea058
:
name: glfw
version: 3.3.4+1
summary: GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES\
 and Vulkan application development. It provides a simple,\
 platform-independent API for creating windows, contexts and surfaces,\
 reading input, handling events, etc.
license: Zlib
description:
\
# GLFW

[![Build status](https://travis-ci.org/glfw/glfw.svg?branch=master)](https://\
travis-ci.org/glfw/glfw)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](http://www.glfw.org/license.html).

You can [download](http://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](http://www.glfw.org/docs/latest/) is available online and\
 is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](http://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](http://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](http://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](http://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](http://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](http://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](http://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](http://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - [X11] Bugfix: Some window attributes were not applied on leaving fullscreen
   (#1863)


## Contact

On [glfw.org](http://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Freenode](http://freenode.net/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


## Acknowledgements

GLFW exists because people around the world donated their time and lent their
skills.

 - Bobyshev Alexander
 - Laurent Aphecetche
 - Matt Arsenault
 - ashishgamedev
 - David Avedissian
 - Keith Bauer
 - John Bartholomew
 - Coşku Baş
 - Niklas Behrens
 - Andrew Belt
 - Nevyn Bengtsson
 - Niklas Bergström
 - Denis Bernard
 - Doug Binks
 - blanco
 - Kyle Brenneman
 - Rok Breulj
 - Kai Burjack
 - Martin Capitanio
 - Nicolas Caramelli
 - David Carlier
 - Arturo Castro
 - Chi-kwan Chan
 - Ian Clarkson
 - Michał Cichoń
 - Lambert Clara
 - Anna Clarke
 - Yaron Cohen-Tal
 - Omar Cornut
 - Andrew Corrigan
 - Bailey Cosier
 - Noel Cower
 - Jason Daly
 - Jarrod Davis
 - Olivier Delannoy
 - Paul R. Deppe
 - Michael Dickens
 - Роман Донченко
 - Mario Dorn
 - Wolfgang Draxinger
 - Jonathan Dummer
 - Ralph Eastwood
 - Fredrik Ehnbom
 - Robin Eklind
 - Siavash Eliasi
 - Felipe Ferreira
 - Michael Fogleman
 - Gerald Franz
 - Mário Freitas
 - GeO4d
 - Marcus Geelnard
 - Charles Giessen
 - Ryan C. Gordon
 - Stephen Gowen
 - Kovid Goyal
 - Eloi Marín Gratacós
 - Stefan Gustavson
 - Jonathan Hale
 - hdf89shfdfs
 - Sylvain Hellegouarch
 - Matthew Henry
 - heromyth
 - Lucas Hinderberger
 - Paul Holden
 - Warren Hu
 - Charles Huber
 - IntellectualKitty
 - Aaron Jacobs
 - Erik S. V. Jansson
 - Toni Jovanoski
 - Arseny Kapoulkine
 - Cem Karan
 - Osman Keskin
 - Josh Kilmer
 - Byunghoon Kim
 - Cameron King
 - Peter Knut
 - Christoph Kubisch
 - Yuri Kunde Schlesner
 - Rokas Kupstys
 - Konstantin Käfer
 - Eric Larson
 - Francis Lecavalier
 - Jong Won Lee
 - Robin Leffmann
 - Glenn Lewis
 - Shane Liesegang
 - Anders Lindqvist
 - Leon Linhart
 - Marco Lizza
 - Eyal Lotem
 - Aaron Loucks
 - Luflosi
 - lukect
 - Tristam MacDonald
 - Hans Mackowiak
 - Дмитри Малышев
 - Zbigniew Mandziejewicz
 - Adam Marcus
 - Célestin Marot
 - Kyle McDonald
 - David Medlock
 - Bryce Mehring
 - Jonathan Mercier
 - Marcel Metz
 - Liam Middlebrook
 - Ave Milia
 - Jonathan Miller
 - Kenneth Miller
 - Bruce Mitchener
 - Jack Moffitt
 - Jeff Molofee
 - Alexander Monakov
 - Pierre Morel
 - Jon Morton
 - Pierre Moulon
 - Martins Mozeiko
 - Julian Møller
 - ndogxj
 - Kristian Nielsen
 - Kamil Nowakowski
 - onox
 - Denis Ovod
 - Ozzy
 - Andri Pálsson
 - Peoro
 - Braden Pellett
 - Christopher Pelloux
 - Arturo J. Pérez
 - Vladimir Perminov
 - Anthony Pesch
 - Orson Peters
 - Emmanuel Gil Peyrot
 - Cyril Pichard
 - Keith Pitt
 - Stanislav Podgorskiy
 - Konstantin Podsvirov
 - Nathan Poirier
 - Alexandre Pretyman
 - Pablo Prietz
 - przemekmirek
 - pthom
 - Guillaume Racicot
 - Philip Rideout
 - Eddie Ringle
 - Max Risuhin
 - Jorge Rodriguez
 - Luca Rood
 - Ed Ropple
 - Aleksey Rybalkin
 - Mikko Rytkönen
 - Riku Salminen
 - Brandon Schaefer
 - Sebastian Schuberth
 - Christian Sdunek
 - Matt Sealey
 - Steve Sexton
 - Arkady Shapkin
 - Ali Sherief
 - Yoshiki Shibukawa
 - Dmitri Shuralyov
 - Daniel Skorupski
 - Bradley Smith
 - Cliff Smolinsky
 - Patrick Snape
 - Erlend Sogge Heggen
 - Julian Squires
 - Johannes Stein
 - Pontus Stenetorp
 - Michael Stocker
 - Justin Stoecker
 - Elviss Strazdins
 - Paul Sultana
 - Nathan Sweet
 - TTK-Bandit
 - Sergey Tikhomirov
 - Arthur Tombs
 - Ioannis Tsakpinis
 - Samuli Tuomola
 - Matthew Turner
 - urraka
 - Elias Vanderstuyft
 - Stef Velzel
 - Jari Vetoniemi
 - Ricardo Vieira
 - Nicholas Vitovitch
 - Simon Voordouw
 - Corentin Wallez
 - Torsten Walluhn
 - Patrick Walton
 - Xo Wang
 - Waris
 - Jay Weisskopf
 - Frank Wille
 - Richard A. Wilkes
 - Tatsuya Yatagawa
 - Ryogo Yoshimura
 - Lukas Zanner
 - Andrey Zholos
 - Aihui Zhu
 - Santi Zupancic
 - Jonas Ådahl
 - Lasse Öörni
 - Leonard König
 - All the unmentioned and anonymous contributors in the GLFW community, for\
 bug
   reports, patches, feedback, testing and encouragement


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 (default) or Wayland when building for Linux
requires: ; Wayland build requires pkg-config and wayland libraries and\
 utilites
tests: glfw-tests == 3.3.4
examples: glfw-examples == 3.3.4
builds: -freebsd
build-exclude: macos*-gcc**; GCC not supported on macos -> Cannot parse Cocoa
bootstrap-build:
\
project = glfw

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = gnu99

using c
using in

c{*}: extension = c
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

tcls = $c.target.class
tsys = $c.target.system

config [bool] config.glfw.usewayland ?= false
config [bool] config.glfw.useosmesa ?= false
config [bool] config.glfw.vulkan ?= false
config [bool] config.glfw.usehybridhpg ?= false

usewayland = ($tcls == 'linux' && $config.glfw.usewayland == true)
useosmesa = ($tcls == 'linux' && $config.glfw.useosmesa)
usex11 = ($tcls == 'linux' && !$config.glfw.usewayland)
win32 = ($tcls == 'windows')
cocoa = ($tcls == 'macos')
hybridhpg = ($win32 && $config.glfw.usehybridhpg)
\
location: glfw/glfw-3.3.4+1.tar.gz
sha256sum: 4328b1a3068536c2e8e501223f5f0dbf5581be702c5f1efad2772f85bf9eb50d
:
name: glfw
version: 3.3.5
summary: GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES\
 and Vulkan application development. It provides a simple,\
 platform-independent API for creating windows, contexts and surfaces,\
 reading input, handling events, etc.
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Updated gamepad mappings from upstream
 - Bugfix: Buffers were swapped at creation on single-buffered windows (#1873)
 - Bugfix: Gamepad mapping updates could spam `GLFW_INVALID_VALUE` due to
   incompatible controllers sharing hardware ID (#1763)
 - Bugfix: Native access functions for context handles did not check that the\
 API matched
 - [Win32] Bugfix: `USE_MSVC_RUNTIME_LIBRARY_DLL` had no effect on CMake 3.15\
 or
   later (#1783,#1796)
 - [Win32] Bugfix: Compilation with LLVM for Windows failed\
 (#1807,#1824,#1874)
 - [Cocoa] Bugfix: The MoltenVK layer contents scale was updated only after
   related events were emitted
 - [Cocoa] Bugfix: Moving the cursor programmatically would freeze it for
   a fraction of a second (#1962)
 - [Cocoa] Bugfix: `kIOMasterPortDefault` was deprecated in macOS 12.0 (#1980)
 - [X11] Bugfix: Changing `GLFW_FLOATING` could leak memory
 - [Wayland] Bugfix: Some keys were not repeating in Wayland (#1908)
 - [Wayland] Bugfix: Non-arrow cursors are offset from the hotspot\
 (#1706,#1899)
 - [Wayland] Bugfix: The `O_CLOEXEC` flag was not defined on FreeBSD
 - [NSGL] Bugfix: Defining `GL_SILENCE_DEPRECATION` externally caused
   a duplicate definition warning (#1840)
 - [EGL] Bugfix: The `GLFW_DOUBLEBUFFER` context attribute was ignored (#1843)


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 (default) or Wayland when building for Linux
requires: ; Wayland build requires pkg-config and wayland libraries and\
 utilites
tests: glfw-tests == 3.3.5
examples: glfw-examples == 3.3.5
builds: -freebsd
build-exclude: macos*-gcc**; GCC not supported on macos -> Cannot parse Cocoa
bootstrap-build:
\
project = glfw

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = gnu99

using c
using in

c{*}: extension = c
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

tcls = $c.target.class
tsys = $c.target.system

config [bool] config.glfw.usewayland ?= false
config [bool] config.glfw.useosmesa ?= false
config [bool] config.glfw.vulkan ?= false
config [bool] config.glfw.usehybridhpg ?= false

usewayland = ($tcls == 'linux' && $config.glfw.usewayland == true)
useosmesa = ($tcls == 'linux' && $config.glfw.useosmesa)
usex11 = ($tcls == 'linux' && !$config.glfw.usewayland)
win32 = ($tcls == 'windows')
cocoa = ($tcls == 'macos')
hybridhpg = ($win32 && $config.glfw.usehybridhpg)
\
location: glfw/glfw-3.3.5.tar.gz
sha256sum: 24d5b2a100a2908a686163ec6719f91e1f76bafc2bc09da6f767ab471b17692d
:
name: glfw
version: 3.3.6+1
summary: GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES\
 and Vulkan application development. It provides a simple,\
 platform-independent API for creating windows, contexts and surfaces,\
 reading input, handling events, etc.
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Bugfix: Joysticks connected before init did not get gamepad mappings\
 (#1996)
 - [Win32] Bugfix: Content scale queries could fail silently (#1615)
 - [Win32] Bugfix: Content scales could have garbage values if monitor was\
 recently
   disconnected (#1615)
 - [Cocoa] Bugfix: A dependency on an external constant caused crashes on\
 macOS
   11 and earlier (#1985,#1994)
 - [X11] Bugfix: Icon pixel format conversion worked only by accident,\
 relying on
   undefined behavior (#1986)


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 (default), Wayland or libOSMesa when building for Linux
requires: ; Wayland build requires pkg-config and wayland libraries and\
 utilites
tests: glfw-tests == 3.3.6
examples: glfw-examples == 3.3.6
builds: -freebsd
build-exclude: macos*-gcc**; GCC not supported on macos -> Cannot parse Cocoa
bootstrap-build:
\
project = glfw

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = gnu99

using c
using in

c{*}: extension = c
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

tcls = $c.target.class
tsys = $c.target.system

config [bool] config.glfw.usewayland ?= false
config [bool] config.glfw.useosmesa ?= false
config [bool] config.glfw.vulkan ?= false
config [bool] config.glfw.usehybridhpg ?= false

useosmesa = (($tcls == 'linux' || $tsys == 'freebsd') && $config.glfw.useosme\
sa)
usewayland = ($tcls == 'linux' && $config.glfw.usewayland == true &&\
 !$config.glfw.useosmesa)
usex11 = ($tcls == 'linux' && !$config.glfw.usewayland && !$config.glfw.useos\
mesa)
win32 = ($tcls == 'windows')
cocoa = ($tcls == 'macos')
hybridhpg = ($win32 && $config.glfw.usehybridhpg)

\
location: glfw/glfw-3.3.6+1.tar.gz
sha256sum: 53504f9191b3ae2be39c7aee91c7edad1a3fa90552b284e1d9f840b1ab31d10a
:
name: glfw
version: 3.3.7
summary: GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES\
 and Vulkan application development. It provides a simple,\
 platform-independent API for creating windows, contexts and surfaces,\
 reading input, handling events, etc.
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - [Win32] Bugfix: A window created maximized and undecorated would cover the\
 whole
   monitor (#1806)
 - [Win32] Bugfix: The default restored window position was lost when\
 creating a maximized
   window
 - [Win32] Bugfix: `glfwMaximizeWindow` would make a hidden window visible
 - [Cocoa] Bugfix: `kUTTypeURL` was deprecated in macOS 12.0 (#2003)
 - [X11] Bugfix: Dynamic loading on OpenBSD failed due to soname differences
 - [X11] Bugfix: Waiting for events would fail if file descriptor was too\
 large
   (#2024)
 - [X11] Bugfix: Joystick events could lead to busy-waiting (#1872)
 - [X11] Bugfix: `glfwWaitEvents*` did not continue for joystick events
 - [X11] Bugfix: `glfwPostEmptyEvent` could be ignored due to race condition
   (#379,#1281,#1285,#2033)
 - [X11] Bugfix: Dynamic loading on NetBSD failed due to soname differences
 - [X11] Bugfix: Left shift of int constant relied on undefined behavior\
 (#1951)
 - [Wayland] Added support for key names via xkbcommon
 - [Wayland] Bugfix: Key repeat could lead to a race condition (#1710)
 - [Wayland] Bugfix: Activating a window would emit two input focus events
 - [Wayland] Bugfix: Disable key repeat mechanism when window loses input\
 focus
 - [Wayland] Bugfix: Window hiding and showing did not work (#1492,#1731)
 - [Wayland] Bugfix: A key being repeated was not released when window lost\
 focus
 - [Wayland] Bugfix: Showing a hidden window did not emit a window refresh\
 event
 - [Wayland] Bugfix: Full screen window creation did not ignore `GLFW_VISIBLE`
 - [Wayland] Bugfix: Some keys were reported as wrong key or\
 `GLFW_KEY_UNKNOWN`
 - [Wayland] Bugfix: Text input did not repeat along with key repeat
 - [Wayland] Bugfix: `glfwPostEmptyEvent` sometimes had no effect\
 (#1520,#1521)
 - [GLX] Bugfix: Context creation failed if GLX 1.4 was not exported by GLX\
 library


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 (default), Wayland or libOSMesa when building for Linux
requires: ; Wayland build requires pkg-config and wayland libraries and\
 utilites
tests: glfw-tests == 3.3.7
examples: glfw-examples == 3.3.7
builds: -freebsd
build-exclude: macos*-gcc**; GCC not supported on macos -> Cannot parse Cocoa
bootstrap-build:
\
project = glfw

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = gnu99

using c
using in

c{*}: extension = c
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

tcls = $c.target.class
tsys = $c.target.system

config [bool] config.glfw.usewayland ?= false
config [bool] config.glfw.useosmesa ?= false
config [bool] config.glfw.vulkan ?= false
config [bool] config.glfw.usehybridhpg ?= false

useosmesa = (($tcls == 'linux' || $tsys == 'freebsd') && $config.glfw.useosme\
sa)
usewayland = ($tcls == 'linux' && $config.glfw.usewayland == true &&\
 !$config.glfw.useosmesa)
usex11 = ($tcls == 'linux' && !$config.glfw.usewayland && !$config.glfw.useos\
mesa)
win32 = ($tcls == 'windows')
cocoa = ($tcls == 'macos')
hybridhpg = ($win32 && $config.glfw.usehybridhpg)

\
location: glfw/glfw-3.3.7.tar.gz
sha256sum: 5a3d254fe7d12ba83874f7eed0f60d394973b766d559181a01c61f760a69def2
:
name: glfw
version: 3.3.8+1
summary: GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES\
 and Vulkan application development. It provides a simple,\
 platform-independent API for creating windows, contexts and surfaces,\
 reading input, handling events, etc.
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Added `GLFW_NATIVE_INCLUDE_NONE` for disabling inclusion of native headers\
 (#1348)
 - Bugfix: `glfwMakeContextCurrent` would access TLS slot before\
 initialization
 - Bugfix: `glfwSetGammaRamp` could emit `GLFW_INVALID_VALUE` before\
 initialization
 - Bugfix: `glfwGetJoystickUserPointer` returned `NULL` during disconnection\
 (#2092)
 - [Win32] Bugfix: `Alt+PrtSc` would emit `GLFW_KEY_UNKNOWN` and a different
   scancode than `PrtSc` (#1993)
 - [Win32] Bugfix: `GLFW_KEY_PAUSE` scancode from `glfwGetKeyScancode` did not
   match event scancode (#1993)
 - [Win32] Bugfix: Instance-local operations used executable instance\
 (#469,#1296,#1395)
 - [Win32] Bugfix: The OSMesa library was not unloaded on termination
 - [Win32] Bugfix: Right shift emitted `GLFW_KEY_UNKNOWN` when using a CJK\
 IME (#2050)
 - [Cocoa] Disabled macOS fullscreen when `GLFW_RESIZABLE` is false
 - [Cocoa] Bugfix: A connected Apple AirPlay would emit a useless error\
 (#1791)
 - [Cocoa] Bugfix: The EGL and OSMesa libraries were not unloaded on\
 termination
 - [Cocoa] Bugfix: `GLFW_MAXIMIZED` was always true when `GLFW_RESIZABLE` was\
 false
 - [Cocoa] Bugfix: Changing `GLFW_DECORATED` in macOS fullscreen would abort
   application (#1886)
 - [Cocoa] Bugfix: Setting a monitor from macOS fullscreen would abort
   application (#2110)
 - [Cocoa] Bugfix: The Vulkan loader was not loaded from the `Frameworks`\
 bundle
   subdirectory (#2113,#2120)
 - [X11] Bugfix: The OSMesa libray was not unloaded on termination
 - [X11] Bugfix: A malformed response during selection transfer could cause a\
 segfault
 - [X11] Bugfix: Some calls would reset Xlib to the default error handler\
 (#2108)
 - [Wayland] Added support for file path drop events (#2040)
 - [Wayland] Added support for more human-readable monitor names where\
 available
 - [Wayland] Removed support for the deprecated wl\_shell protocol
 - [Wayland] Bugfix: `glfwSetClipboardString` would fail if set to result of
   `glfwGetClipboardString`
 - [Wayland] Bugfix: Data source creation error would cause double free at\
 termination
 - [Wayland] Bugfix: Partial writes of clipboard string would cause beginning\
 to repeat
 - [Wayland] Bugfix: Some errors would cause clipboard string transfer to hang
 - [Wayland] Bugfix: Drag and drop data was misinterpreted as clipboard string
 - [Wayland] Bugfix: MIME type matching was not performed for clipboard string
 - [Wayland] Bugfix: The OSMesa library was not unloaded on termination
 - [Wayland] Bugfix: `glfwCreateWindow` could emit `GLFW_PLATFORM_ERROR`
 - [Wayland] Bugfix: Lock key modifier bits were only set when lock keys were\
 pressed
 - [Wayland] Bugfix: A window leaving full screen mode would be iconified\
 (#1995)
 - [Wayland] Bugfix: A window leaving full screen mode ignored its desired\
 size
 - [Wayland] Bugfix: `glfwSetWindowMonitor` did not update windowed mode size
 - [Wayland] Bugfix: `glfwRestoreWindow` would make a full screen window\
 windowed
 - [Wayland] Bugfix: A window maximized or restored by the user would enter an
   inconsistent state
 - [Wayland] Bugfix: Window maximization events were not emitted
 - [Wayland] Bugfix: `glfwRestoreWindow` assumed it was always in windowed\
 mode
 - [Wayland] Bugfix: `glfwSetWindowSize` would resize a full screen window
 - [Wayland] Bugfix: A window content scale event would be emitted every time
   the window resized
 - [Wayland] Bugfix: If `glfwInit` failed it would close stdin
 - [Wayland] Bugfix: Manual resizing with fallback decorations behaved\
 erratically
   (#1991,#2115,#2127)
 - [Wayland] Bugfix: Size limits included frame size for fallback decorations
 - [Wayland] Bugfix: Updating `GLFW_DECORATED` had no effect on server-side
   decorations
 - [Wayland] Bugfix: A monitor would be reported as connected again if its\
 scale
   changed
 - [Wayland] Bugfix: `glfwTerminate` would segfault if any monitor had changed
   scale
 - [Wayland] Bugfix: Window content scale events were not emitted when monitor
   scale changed
 - [Wayland] Bugfix: `glfwSetWindowAspectRatio` reported an error instead of
   applying the specified ratio
 - [Wayland] Bugfix: `GLFW_MAXIMIZED` window hint had no effect
 - [Wayland] Bugfix: `glfwRestoreWindow` had no effect before first show
 - [Wayland] Bugfix: Hiding and then showing a window caused program abort on
   wlroots compositors (#1268)
 - [Wayland] Bugfix: `GLFW_DECORATED` was ignored when showing a window with\
 XDG
   decorations


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 (default), Wayland or libOSMesa when building for Linux
requires: ; Wayland build requires pkg-config and wayland libraries and\
 utilites
tests: glfw-tests == 3.3.8
examples: glfw-examples == 3.3.8
builds: -freebsd
build-exclude: macos*-gcc**; GCC not supported on macos -> Cannot parse Cocoa
bootstrap-build:
\
project = glfw

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = 99

using c
using in

c{*}: extension = c
h{*}: extension = h

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

tcls = $c.target.class
tsys = $c.target.system

config [bool] config.glfw.usewayland ?= false
config [bool] config.glfw.useosmesa ?= false
config [bool] config.glfw.vulkan ?= false
config [bool] config.glfw.usehybridhpg ?= false

useosmesa = (($tcls == 'linux' || $tsys == 'freebsd') && $config.glfw.useosme\
sa)
usewayland = ($tcls == 'linux' && $config.glfw.usewayland == true &&\
 !$config.glfw.useosmesa)
usex11 = ($tcls == 'linux' && !$config.glfw.usewayland && !$config.glfw.useos\
mesa)
win32 = ($tcls == 'windows')
cocoa = ($tcls == 'macos')
hybridhpg = ($win32 && $config.glfw.usehybridhpg)

\
location: glfw/glfw-3.3.8+1.tar.gz
sha256sum: 3d7a540bb0842b63bec61b2aca13fe7aeb6cd90840f3ddfa6cfefe9cadf896fa
:
name: glfw-examples
version: 3.3.4+1
project: glfw
summary: GLFW examples library
license: Zlib
description:
\
# GLFW

[![Build status](https://travis-ci.org/glfw/glfw.svg?branch=master)](https://\
travis-ci.org/glfw/glfw)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](http://www.glfw.org/license.html).

You can [download](http://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](http://www.glfw.org/docs/latest/) is available online and\
 is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](http://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](http://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](http://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](http://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](http://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](http://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](http://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](http://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - [X11] Bugfix: Some window attributes were not applied on leaving fullscreen
   (#1863)


## Contact

On [glfw.org](http://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Freenode](http://freenode.net/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


## Acknowledgements

GLFW exists because people around the world donated their time and lent their
skills.

 - Bobyshev Alexander
 - Laurent Aphecetche
 - Matt Arsenault
 - ashishgamedev
 - David Avedissian
 - Keith Bauer
 - John Bartholomew
 - Coşku Baş
 - Niklas Behrens
 - Andrew Belt
 - Nevyn Bengtsson
 - Niklas Bergström
 - Denis Bernard
 - Doug Binks
 - blanco
 - Kyle Brenneman
 - Rok Breulj
 - Kai Burjack
 - Martin Capitanio
 - Nicolas Caramelli
 - David Carlier
 - Arturo Castro
 - Chi-kwan Chan
 - Ian Clarkson
 - Michał Cichoń
 - Lambert Clara
 - Anna Clarke
 - Yaron Cohen-Tal
 - Omar Cornut
 - Andrew Corrigan
 - Bailey Cosier
 - Noel Cower
 - Jason Daly
 - Jarrod Davis
 - Olivier Delannoy
 - Paul R. Deppe
 - Michael Dickens
 - Роман Донченко
 - Mario Dorn
 - Wolfgang Draxinger
 - Jonathan Dummer
 - Ralph Eastwood
 - Fredrik Ehnbom
 - Robin Eklind
 - Siavash Eliasi
 - Felipe Ferreira
 - Michael Fogleman
 - Gerald Franz
 - Mário Freitas
 - GeO4d
 - Marcus Geelnard
 - Charles Giessen
 - Ryan C. Gordon
 - Stephen Gowen
 - Kovid Goyal
 - Eloi Marín Gratacós
 - Stefan Gustavson
 - Jonathan Hale
 - hdf89shfdfs
 - Sylvain Hellegouarch
 - Matthew Henry
 - heromyth
 - Lucas Hinderberger
 - Paul Holden
 - Warren Hu
 - Charles Huber
 - IntellectualKitty
 - Aaron Jacobs
 - Erik S. V. Jansson
 - Toni Jovanoski
 - Arseny Kapoulkine
 - Cem Karan
 - Osman Keskin
 - Josh Kilmer
 - Byunghoon Kim
 - Cameron King
 - Peter Knut
 - Christoph Kubisch
 - Yuri Kunde Schlesner
 - Rokas Kupstys
 - Konstantin Käfer
 - Eric Larson
 - Francis Lecavalier
 - Jong Won Lee
 - Robin Leffmann
 - Glenn Lewis
 - Shane Liesegang
 - Anders Lindqvist
 - Leon Linhart
 - Marco Lizza
 - Eyal Lotem
 - Aaron Loucks
 - Luflosi
 - lukect
 - Tristam MacDonald
 - Hans Mackowiak
 - Дмитри Малышев
 - Zbigniew Mandziejewicz
 - Adam Marcus
 - Célestin Marot
 - Kyle McDonald
 - David Medlock
 - Bryce Mehring
 - Jonathan Mercier
 - Marcel Metz
 - Liam Middlebrook
 - Ave Milia
 - Jonathan Miller
 - Kenneth Miller
 - Bruce Mitchener
 - Jack Moffitt
 - Jeff Molofee
 - Alexander Monakov
 - Pierre Morel
 - Jon Morton
 - Pierre Moulon
 - Martins Mozeiko
 - Julian Møller
 - ndogxj
 - Kristian Nielsen
 - Kamil Nowakowski
 - onox
 - Denis Ovod
 - Ozzy
 - Andri Pálsson
 - Peoro
 - Braden Pellett
 - Christopher Pelloux
 - Arturo J. Pérez
 - Vladimir Perminov
 - Anthony Pesch
 - Orson Peters
 - Emmanuel Gil Peyrot
 - Cyril Pichard
 - Keith Pitt
 - Stanislav Podgorskiy
 - Konstantin Podsvirov
 - Nathan Poirier
 - Alexandre Pretyman
 - Pablo Prietz
 - przemekmirek
 - pthom
 - Guillaume Racicot
 - Philip Rideout
 - Eddie Ringle
 - Max Risuhin
 - Jorge Rodriguez
 - Luca Rood
 - Ed Ropple
 - Aleksey Rybalkin
 - Mikko Rytkönen
 - Riku Salminen
 - Brandon Schaefer
 - Sebastian Schuberth
 - Christian Sdunek
 - Matt Sealey
 - Steve Sexton
 - Arkady Shapkin
 - Ali Sherief
 - Yoshiki Shibukawa
 - Dmitri Shuralyov
 - Daniel Skorupski
 - Bradley Smith
 - Cliff Smolinsky
 - Patrick Snape
 - Erlend Sogge Heggen
 - Julian Squires
 - Johannes Stein
 - Pontus Stenetorp
 - Michael Stocker
 - Justin Stoecker
 - Elviss Strazdins
 - Paul Sultana
 - Nathan Sweet
 - TTK-Bandit
 - Sergey Tikhomirov
 - Arthur Tombs
 - Ioannis Tsakpinis
 - Samuli Tuomola
 - Matthew Turner
 - urraka
 - Elias Vanderstuyft
 - Stef Velzel
 - Jari Vetoniemi
 - Ricardo Vieira
 - Nicholas Vitovitch
 - Simon Voordouw
 - Corentin Wallez
 - Torsten Walluhn
 - Patrick Walton
 - Xo Wang
 - Waris
 - Jay Weisskopf
 - Frank Wille
 - Richard A. Wilkes
 - Tatsuya Yatagawa
 - Ryogo Yoshimura
 - Lukas Zanner
 - Andrey Zholos
 - Aihui Zhu
 - Santi Zupancic
 - Jonas Ådahl
 - Lasse Öörni
 - Leonard König
 - All the unmentioned and anonymous contributors in the GLFW community, for\
 bug
   reports, patches, feedback, testing and encouragement


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-examples

using config
using test
using dist
using version
\
root-build:
\
using cc
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target
\
location: glfw/glfw-examples-3.3.4+1.tar.gz
sha256sum: c211b6da30c2c1eebf0e9798ea4cde662f368a0be36eb64c2e62946eb8cf7753
:
name: glfw-examples
version: 3.3.5
project: glfw
summary: GLFW examples library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Updated gamepad mappings from upstream
 - Bugfix: Buffers were swapped at creation on single-buffered windows (#1873)
 - Bugfix: Gamepad mapping updates could spam `GLFW_INVALID_VALUE` due to
   incompatible controllers sharing hardware ID (#1763)
 - Bugfix: Native access functions for context handles did not check that the\
 API matched
 - [Win32] Bugfix: `USE_MSVC_RUNTIME_LIBRARY_DLL` had no effect on CMake 3.15\
 or
   later (#1783,#1796)
 - [Win32] Bugfix: Compilation with LLVM for Windows failed\
 (#1807,#1824,#1874)
 - [Cocoa] Bugfix: The MoltenVK layer contents scale was updated only after
   related events were emitted
 - [Cocoa] Bugfix: Moving the cursor programmatically would freeze it for
   a fraction of a second (#1962)
 - [Cocoa] Bugfix: `kIOMasterPortDefault` was deprecated in macOS 12.0 (#1980)
 - [X11] Bugfix: Changing `GLFW_FLOATING` could leak memory
 - [Wayland] Bugfix: Some keys were not repeating in Wayland (#1908)
 - [Wayland] Bugfix: Non-arrow cursors are offset from the hotspot\
 (#1706,#1899)
 - [Wayland] Bugfix: The `O_CLOEXEC` flag was not defined on FreeBSD
 - [NSGL] Bugfix: Defining `GL_SILENCE_DEPRECATION` externally caused
   a duplicate definition warning (#1840)
 - [EGL] Bugfix: The `GLFW_DOUBLEBUFFER` context attribute was ignored (#1843)


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-examples

using config
using test
using dist
using version
\
root-build:
\
using cc
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target
\
location: glfw/glfw-examples-3.3.5.tar.gz
sha256sum: 744cff29c31b24999767196ee60bba4937b16ef7f6586a3b2c77f03a36914ff5
:
name: glfw-examples
version: 3.3.6+1
project: glfw
summary: GLFW examples library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Bugfix: Joysticks connected before init did not get gamepad mappings\
 (#1996)
 - [Win32] Bugfix: Content scale queries could fail silently (#1615)
 - [Win32] Bugfix: Content scales could have garbage values if monitor was\
 recently
   disconnected (#1615)
 - [Cocoa] Bugfix: A dependency on an external constant caused crashes on\
 macOS
   11 and earlier (#1985,#1994)
 - [X11] Bugfix: Icon pixel format conversion worked only by accident,\
 relying on
   undefined behavior (#1986)


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-examples

using config
using test
using dist
using version
\
root-build:
\
using cc
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target
\
location: glfw/glfw-examples-3.3.6+1.tar.gz
sha256sum: 84130f1d9d55ef9f52f2659d0fa8388cd813fd03e4cd152a784aa93d2a17c961
:
name: glfw-examples
version: 3.3.7
project: glfw
summary: GLFW examples library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - [Win32] Bugfix: A window created maximized and undecorated would cover the\
 whole
   monitor (#1806)
 - [Win32] Bugfix: The default restored window position was lost when\
 creating a maximized
   window
 - [Win32] Bugfix: `glfwMaximizeWindow` would make a hidden window visible
 - [Cocoa] Bugfix: `kUTTypeURL` was deprecated in macOS 12.0 (#2003)
 - [X11] Bugfix: Dynamic loading on OpenBSD failed due to soname differences
 - [X11] Bugfix: Waiting for events would fail if file descriptor was too\
 large
   (#2024)
 - [X11] Bugfix: Joystick events could lead to busy-waiting (#1872)
 - [X11] Bugfix: `glfwWaitEvents*` did not continue for joystick events
 - [X11] Bugfix: `glfwPostEmptyEvent` could be ignored due to race condition
   (#379,#1281,#1285,#2033)
 - [X11] Bugfix: Dynamic loading on NetBSD failed due to soname differences
 - [X11] Bugfix: Left shift of int constant relied on undefined behavior\
 (#1951)
 - [Wayland] Added support for key names via xkbcommon
 - [Wayland] Bugfix: Key repeat could lead to a race condition (#1710)
 - [Wayland] Bugfix: Activating a window would emit two input focus events
 - [Wayland] Bugfix: Disable key repeat mechanism when window loses input\
 focus
 - [Wayland] Bugfix: Window hiding and showing did not work (#1492,#1731)
 - [Wayland] Bugfix: A key being repeated was not released when window lost\
 focus
 - [Wayland] Bugfix: Showing a hidden window did not emit a window refresh\
 event
 - [Wayland] Bugfix: Full screen window creation did not ignore `GLFW_VISIBLE`
 - [Wayland] Bugfix: Some keys were reported as wrong key or\
 `GLFW_KEY_UNKNOWN`
 - [Wayland] Bugfix: Text input did not repeat along with key repeat
 - [Wayland] Bugfix: `glfwPostEmptyEvent` sometimes had no effect\
 (#1520,#1521)
 - [GLX] Bugfix: Context creation failed if GLX 1.4 was not exported by GLX\
 library


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-examples

using config
using test
using dist
using version
\
root-build:
\
using cc
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target
\
location: glfw/glfw-examples-3.3.7.tar.gz
sha256sum: 2ab41a27ff0f082b1cbbda9fa74ca93b0ab7867d94d5fa65f039438db11da376
:
name: glfw-examples
version: 3.3.8+1
project: glfw
summary: GLFW examples library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Added `GLFW_NATIVE_INCLUDE_NONE` for disabling inclusion of native headers\
 (#1348)
 - Bugfix: `glfwMakeContextCurrent` would access TLS slot before\
 initialization
 - Bugfix: `glfwSetGammaRamp` could emit `GLFW_INVALID_VALUE` before\
 initialization
 - Bugfix: `glfwGetJoystickUserPointer` returned `NULL` during disconnection\
 (#2092)
 - [Win32] Bugfix: `Alt+PrtSc` would emit `GLFW_KEY_UNKNOWN` and a different
   scancode than `PrtSc` (#1993)
 - [Win32] Bugfix: `GLFW_KEY_PAUSE` scancode from `glfwGetKeyScancode` did not
   match event scancode (#1993)
 - [Win32] Bugfix: Instance-local operations used executable instance\
 (#469,#1296,#1395)
 - [Win32] Bugfix: The OSMesa library was not unloaded on termination
 - [Win32] Bugfix: Right shift emitted `GLFW_KEY_UNKNOWN` when using a CJK\
 IME (#2050)
 - [Cocoa] Disabled macOS fullscreen when `GLFW_RESIZABLE` is false
 - [Cocoa] Bugfix: A connected Apple AirPlay would emit a useless error\
 (#1791)
 - [Cocoa] Bugfix: The EGL and OSMesa libraries were not unloaded on\
 termination
 - [Cocoa] Bugfix: `GLFW_MAXIMIZED` was always true when `GLFW_RESIZABLE` was\
 false
 - [Cocoa] Bugfix: Changing `GLFW_DECORATED` in macOS fullscreen would abort
   application (#1886)
 - [Cocoa] Bugfix: Setting a monitor from macOS fullscreen would abort
   application (#2110)
 - [Cocoa] Bugfix: The Vulkan loader was not loaded from the `Frameworks`\
 bundle
   subdirectory (#2113,#2120)
 - [X11] Bugfix: The OSMesa libray was not unloaded on termination
 - [X11] Bugfix: A malformed response during selection transfer could cause a\
 segfault
 - [X11] Bugfix: Some calls would reset Xlib to the default error handler\
 (#2108)
 - [Wayland] Added support for file path drop events (#2040)
 - [Wayland] Added support for more human-readable monitor names where\
 available
 - [Wayland] Removed support for the deprecated wl\_shell protocol
 - [Wayland] Bugfix: `glfwSetClipboardString` would fail if set to result of
   `glfwGetClipboardString`
 - [Wayland] Bugfix: Data source creation error would cause double free at\
 termination
 - [Wayland] Bugfix: Partial writes of clipboard string would cause beginning\
 to repeat
 - [Wayland] Bugfix: Some errors would cause clipboard string transfer to hang
 - [Wayland] Bugfix: Drag and drop data was misinterpreted as clipboard string
 - [Wayland] Bugfix: MIME type matching was not performed for clipboard string
 - [Wayland] Bugfix: The OSMesa library was not unloaded on termination
 - [Wayland] Bugfix: `glfwCreateWindow` could emit `GLFW_PLATFORM_ERROR`
 - [Wayland] Bugfix: Lock key modifier bits were only set when lock keys were\
 pressed
 - [Wayland] Bugfix: A window leaving full screen mode would be iconified\
 (#1995)
 - [Wayland] Bugfix: A window leaving full screen mode ignored its desired\
 size
 - [Wayland] Bugfix: `glfwSetWindowMonitor` did not update windowed mode size
 - [Wayland] Bugfix: `glfwRestoreWindow` would make a full screen window\
 windowed
 - [Wayland] Bugfix: A window maximized or restored by the user would enter an
   inconsistent state
 - [Wayland] Bugfix: Window maximization events were not emitted
 - [Wayland] Bugfix: `glfwRestoreWindow` assumed it was always in windowed\
 mode
 - [Wayland] Bugfix: `glfwSetWindowSize` would resize a full screen window
 - [Wayland] Bugfix: A window content scale event would be emitted every time
   the window resized
 - [Wayland] Bugfix: If `glfwInit` failed it would close stdin
 - [Wayland] Bugfix: Manual resizing with fallback decorations behaved\
 erratically
   (#1991,#2115,#2127)
 - [Wayland] Bugfix: Size limits included frame size for fallback decorations
 - [Wayland] Bugfix: Updating `GLFW_DECORATED` had no effect on server-side
   decorations
 - [Wayland] Bugfix: A monitor would be reported as connected again if its\
 scale
   changed
 - [Wayland] Bugfix: `glfwTerminate` would segfault if any monitor had changed
   scale
 - [Wayland] Bugfix: Window content scale events were not emitted when monitor
   scale changed
 - [Wayland] Bugfix: `glfwSetWindowAspectRatio` reported an error instead of
   applying the specified ratio
 - [Wayland] Bugfix: `GLFW_MAXIMIZED` window hint had no effect
 - [Wayland] Bugfix: `glfwRestoreWindow` had no effect before first show
 - [Wayland] Bugfix: Hiding and then showing a window caused program abort on
   wlroots compositors (#1268)
 - [Wayland] Bugfix: `GLFW_DECORATED` was ignored when showing a window with\
 XDG
   decorations


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-examples

using config
using test
using dist
using version
\
root-build:
\
using cc
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target
\
location: glfw/glfw-examples-3.3.8+1.tar.gz
sha256sum: afeb999be4dc4b364d5a215f1e2de44e9905b24c5c4f55ca507f1af44e80052e
:
name: glfw-tests
version: 3.3.4+1
project: glfw
summary: GLFW tests library
license: Zlib
description:
\
# GLFW

[![Build status](https://travis-ci.org/glfw/glfw.svg?branch=master)](https://\
travis-ci.org/glfw/glfw)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](http://www.glfw.org/license.html).

You can [download](http://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](http://www.glfw.org/docs/latest/) is available online and\
 is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](http://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](http://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](http://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](http://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](http://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](http://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](http://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](http://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - [X11] Bugfix: Some window attributes were not applied on leaving fullscreen
   (#1863)


## Contact

On [glfw.org](http://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Freenode](http://freenode.net/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


## Acknowledgements

GLFW exists because people around the world donated their time and lent their
skills.

 - Bobyshev Alexander
 - Laurent Aphecetche
 - Matt Arsenault
 - ashishgamedev
 - David Avedissian
 - Keith Bauer
 - John Bartholomew
 - Coşku Baş
 - Niklas Behrens
 - Andrew Belt
 - Nevyn Bengtsson
 - Niklas Bergström
 - Denis Bernard
 - Doug Binks
 - blanco
 - Kyle Brenneman
 - Rok Breulj
 - Kai Burjack
 - Martin Capitanio
 - Nicolas Caramelli
 - David Carlier
 - Arturo Castro
 - Chi-kwan Chan
 - Ian Clarkson
 - Michał Cichoń
 - Lambert Clara
 - Anna Clarke
 - Yaron Cohen-Tal
 - Omar Cornut
 - Andrew Corrigan
 - Bailey Cosier
 - Noel Cower
 - Jason Daly
 - Jarrod Davis
 - Olivier Delannoy
 - Paul R. Deppe
 - Michael Dickens
 - Роман Донченко
 - Mario Dorn
 - Wolfgang Draxinger
 - Jonathan Dummer
 - Ralph Eastwood
 - Fredrik Ehnbom
 - Robin Eklind
 - Siavash Eliasi
 - Felipe Ferreira
 - Michael Fogleman
 - Gerald Franz
 - Mário Freitas
 - GeO4d
 - Marcus Geelnard
 - Charles Giessen
 - Ryan C. Gordon
 - Stephen Gowen
 - Kovid Goyal
 - Eloi Marín Gratacós
 - Stefan Gustavson
 - Jonathan Hale
 - hdf89shfdfs
 - Sylvain Hellegouarch
 - Matthew Henry
 - heromyth
 - Lucas Hinderberger
 - Paul Holden
 - Warren Hu
 - Charles Huber
 - IntellectualKitty
 - Aaron Jacobs
 - Erik S. V. Jansson
 - Toni Jovanoski
 - Arseny Kapoulkine
 - Cem Karan
 - Osman Keskin
 - Josh Kilmer
 - Byunghoon Kim
 - Cameron King
 - Peter Knut
 - Christoph Kubisch
 - Yuri Kunde Schlesner
 - Rokas Kupstys
 - Konstantin Käfer
 - Eric Larson
 - Francis Lecavalier
 - Jong Won Lee
 - Robin Leffmann
 - Glenn Lewis
 - Shane Liesegang
 - Anders Lindqvist
 - Leon Linhart
 - Marco Lizza
 - Eyal Lotem
 - Aaron Loucks
 - Luflosi
 - lukect
 - Tristam MacDonald
 - Hans Mackowiak
 - Дмитри Малышев
 - Zbigniew Mandziejewicz
 - Adam Marcus
 - Célestin Marot
 - Kyle McDonald
 - David Medlock
 - Bryce Mehring
 - Jonathan Mercier
 - Marcel Metz
 - Liam Middlebrook
 - Ave Milia
 - Jonathan Miller
 - Kenneth Miller
 - Bruce Mitchener
 - Jack Moffitt
 - Jeff Molofee
 - Alexander Monakov
 - Pierre Morel
 - Jon Morton
 - Pierre Moulon
 - Martins Mozeiko
 - Julian Møller
 - ndogxj
 - Kristian Nielsen
 - Kamil Nowakowski
 - onox
 - Denis Ovod
 - Ozzy
 - Andri Pálsson
 - Peoro
 - Braden Pellett
 - Christopher Pelloux
 - Arturo J. Pérez
 - Vladimir Perminov
 - Anthony Pesch
 - Orson Peters
 - Emmanuel Gil Peyrot
 - Cyril Pichard
 - Keith Pitt
 - Stanislav Podgorskiy
 - Konstantin Podsvirov
 - Nathan Poirier
 - Alexandre Pretyman
 - Pablo Prietz
 - przemekmirek
 - pthom
 - Guillaume Racicot
 - Philip Rideout
 - Eddie Ringle
 - Max Risuhin
 - Jorge Rodriguez
 - Luca Rood
 - Ed Ropple
 - Aleksey Rybalkin
 - Mikko Rytkönen
 - Riku Salminen
 - Brandon Schaefer
 - Sebastian Schuberth
 - Christian Sdunek
 - Matt Sealey
 - Steve Sexton
 - Arkady Shapkin
 - Ali Sherief
 - Yoshiki Shibukawa
 - Dmitri Shuralyov
 - Daniel Skorupski
 - Bradley Smith
 - Cliff Smolinsky
 - Patrick Snape
 - Erlend Sogge Heggen
 - Julian Squires
 - Johannes Stein
 - Pontus Stenetorp
 - Michael Stocker
 - Justin Stoecker
 - Elviss Strazdins
 - Paul Sultana
 - Nathan Sweet
 - TTK-Bandit
 - Sergey Tikhomirov
 - Arthur Tombs
 - Ioannis Tsakpinis
 - Samuli Tuomola
 - Matthew Turner
 - urraka
 - Elias Vanderstuyft
 - Stef Velzel
 - Jari Vetoniemi
 - Ricardo Vieira
 - Nicholas Vitovitch
 - Simon Voordouw
 - Corentin Wallez
 - Torsten Walluhn
 - Patrick Walton
 - Xo Wang
 - Waris
 - Jay Weisskopf
 - Frank Wille
 - Richard A. Wilkes
 - Tatsuya Yatagawa
 - Ryogo Yoshimura
 - Lukas Zanner
 - Andrey Zholos
 - Aihui Zhu
 - Santi Zupancic
 - Jonas Ådahl
 - Lasse Öörni
 - Leonard König
 - All the unmentioned and anonymous contributors in the GLFW community, for\
 bug
   reports, patches, feedback, testing and encouragement


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-tests

using config
using test
using dist
using version

\
root-build:
\
using cc
using c

c{*}: extension = c
h{*}: extension = h

exe{*}: install = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: glfw/glfw-tests-3.3.4+1.tar.gz
sha256sum: 7f783e26e4bc1b592ddfaa01e85ac53d28b8a7d47ec1c6d3f9ddac8fcdbd931c
:
name: glfw-tests
version: 3.3.5
project: glfw
summary: GLFW tests library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Updated gamepad mappings from upstream
 - Bugfix: Buffers were swapped at creation on single-buffered windows (#1873)
 - Bugfix: Gamepad mapping updates could spam `GLFW_INVALID_VALUE` due to
   incompatible controllers sharing hardware ID (#1763)
 - Bugfix: Native access functions for context handles did not check that the\
 API matched
 - [Win32] Bugfix: `USE_MSVC_RUNTIME_LIBRARY_DLL` had no effect on CMake 3.15\
 or
   later (#1783,#1796)
 - [Win32] Bugfix: Compilation with LLVM for Windows failed\
 (#1807,#1824,#1874)
 - [Cocoa] Bugfix: The MoltenVK layer contents scale was updated only after
   related events were emitted
 - [Cocoa] Bugfix: Moving the cursor programmatically would freeze it for
   a fraction of a second (#1962)
 - [Cocoa] Bugfix: `kIOMasterPortDefault` was deprecated in macOS 12.0 (#1980)
 - [X11] Bugfix: Changing `GLFW_FLOATING` could leak memory
 - [Wayland] Bugfix: Some keys were not repeating in Wayland (#1908)
 - [Wayland] Bugfix: Non-arrow cursors are offset from the hotspot\
 (#1706,#1899)
 - [Wayland] Bugfix: The `O_CLOEXEC` flag was not defined on FreeBSD
 - [NSGL] Bugfix: Defining `GL_SILENCE_DEPRECATION` externally caused
   a duplicate definition warning (#1840)
 - [EGL] Bugfix: The `GLFW_DOUBLEBUFFER` context attribute was ignored (#1843)


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-tests

using config
using test
using dist
using version

\
root-build:
\
using cc
using c

c{*}: extension = c
h{*}: extension = h

exe{*}: install = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: glfw/glfw-tests-3.3.5.tar.gz
sha256sum: d9babea39242113d5417813f2b0bce6e78616c550ddb3af10eda0cfd3810172d
:
name: glfw-tests
version: 3.3.6+1
project: glfw
summary: GLFW tests library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Bugfix: Joysticks connected before init did not get gamepad mappings\
 (#1996)
 - [Win32] Bugfix: Content scale queries could fail silently (#1615)
 - [Win32] Bugfix: Content scales could have garbage values if monitor was\
 recently
   disconnected (#1615)
 - [Cocoa] Bugfix: A dependency on an external constant caused crashes on\
 macOS
   11 and earlier (#1985,#1994)
 - [X11] Bugfix: Icon pixel format conversion worked only by accident,\
 relying on
   undefined behavior (#1986)


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-tests

using config
using test
using dist
using version

\
root-build:
\
using cc
using c

c{*}: extension = c
h{*}: extension = h

exe{*}: install = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: glfw/glfw-tests-3.3.6+1.tar.gz
sha256sum: abfc7403bd8ae9a658757a54221a70a8131726254038e22d06149094b4524199
:
name: glfw-tests
version: 3.3.7
project: glfw
summary: GLFW tests library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - [Win32] Bugfix: A window created maximized and undecorated would cover the\
 whole
   monitor (#1806)
 - [Win32] Bugfix: The default restored window position was lost when\
 creating a maximized
   window
 - [Win32] Bugfix: `glfwMaximizeWindow` would make a hidden window visible
 - [Cocoa] Bugfix: `kUTTypeURL` was deprecated in macOS 12.0 (#2003)
 - [X11] Bugfix: Dynamic loading on OpenBSD failed due to soname differences
 - [X11] Bugfix: Waiting for events would fail if file descriptor was too\
 large
   (#2024)
 - [X11] Bugfix: Joystick events could lead to busy-waiting (#1872)
 - [X11] Bugfix: `glfwWaitEvents*` did not continue for joystick events
 - [X11] Bugfix: `glfwPostEmptyEvent` could be ignored due to race condition
   (#379,#1281,#1285,#2033)
 - [X11] Bugfix: Dynamic loading on NetBSD failed due to soname differences
 - [X11] Bugfix: Left shift of int constant relied on undefined behavior\
 (#1951)
 - [Wayland] Added support for key names via xkbcommon
 - [Wayland] Bugfix: Key repeat could lead to a race condition (#1710)
 - [Wayland] Bugfix: Activating a window would emit two input focus events
 - [Wayland] Bugfix: Disable key repeat mechanism when window loses input\
 focus
 - [Wayland] Bugfix: Window hiding and showing did not work (#1492,#1731)
 - [Wayland] Bugfix: A key being repeated was not released when window lost\
 focus
 - [Wayland] Bugfix: Showing a hidden window did not emit a window refresh\
 event
 - [Wayland] Bugfix: Full screen window creation did not ignore `GLFW_VISIBLE`
 - [Wayland] Bugfix: Some keys were reported as wrong key or\
 `GLFW_KEY_UNKNOWN`
 - [Wayland] Bugfix: Text input did not repeat along with key repeat
 - [Wayland] Bugfix: `glfwPostEmptyEvent` sometimes had no effect\
 (#1520,#1521)
 - [GLX] Bugfix: Context creation failed if GLX 1.4 was not exported by GLX\
 library


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-tests

using config
using test
using dist
using version

\
root-build:
\
using cc
using c

c{*}: extension = c
h{*}: extension = h

exe{*}: install = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: glfw/glfw-tests-3.3.7.tar.gz
sha256sum: f25dc6e105a33b51065ee41e621097113fcdfdbfd19791f27741720e29a6c8de
:
name: glfw-tests
version: 3.3.8+1
project: glfw
summary: GLFW tests library
license: Zlib
description:
\
# GLFW

[![Build status](https://github.com/glfw/glfw/actions/workflows/build.yml/bad\
ge.svg)](https://github.com/glfw/glfw/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp\
/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw)
[![Coverity Scan](https://scan.coverity.com/projects/4884/badge.svg)](https:/\
/scan.coverity.com/projects/glfw-glfw)

## Introduction

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and\
 Vulkan
application development.  It provides a simple, platform-independent API for
creating windows, contexts and surfaces, reading input, handling events, etc.

GLFW natively supports Windows, macOS and Linux and other Unix-like systems. \
 On
Linux both X11 and Wayland are supported.

GLFW is licensed under the [zlib/libpng
license](https://www.glfw.org/license.html).

You can [download](https://www.glfw.org/download.html) the latest stable\
 release
as source or Windows binaries, or fetch the `latest` branch from GitHub.  Each
release starting with 3.0 also has a corresponding [annotated
tag](https://github.com/glfw/glfw/releases) with source and binary archives.

The [documentation](https://www.glfw.org/docs/latest/) is available online\
 and is
included in all source and binary archives.  See the [release
notes](https://www.glfw.org/docs/latest/news.html) for new features, caveats\
 and
deprecations in the latest release.  For more details see the [version
history](https://www.glfw.org/changelog.html).

The `master` branch is the stable integration branch and _should_ always\
 compile
and run on all supported platforms, although details of newly added features\
 may
change until they have been included in a release.  New features and many bug
fixes live in [other branches](https://github.com/glfw/glfw/branches/all)\
 until
they are stable enough to merge.

If you are new to GLFW, you may find the
[tutorial](https://www.glfw.org/docs/latest/quick.html) for GLFW 3 useful.  If
you have used GLFW 2 in the past, there is a [transition
guide](https://www.glfw.org/docs/latest/moving.html) for moving to the GLFW
3 API.

GLFW exists because of the contributions of [many people](CONTRIBUTORS.md)
around the world, whether by reporting bugs, providing community support,\
 adding
features, reviewing or testing code, debugging, proofreading docs, suggesting
features or fixing bugs.


## Compiling GLFW

GLFW itself requires only the headers and libraries for your OS and window
system.  It does not need the headers for any context creation API (WGL, GLX,
EGL, NSGL, OSMesa) or rendering API (OpenGL, OpenGL ES, Vulkan) to enable
support for them.

GLFW supports compilation on Windows with Visual C++ 2010 and later, MinGW and
MinGW-w64, on macOS with Clang and on Linux and other Unix-like systems with\
 GCC
and Clang.  It will likely compile in other environments as well, but this is
not regularly tested.

There are [pre-compiled Windows binaries](https://www.glfw.org/download.html)
available for all supported compilers.

See the [compilation guide](https://www.glfw.org/docs/latest/compile.html) for
more information about how to compile GLFW yourself.


## Using GLFW

See the [documentation](https://www.glfw.org/docs/latest/) for tutorials,\
 guides
and the API reference.


## Contributing to GLFW

See the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
more information.


## System requirements

GLFW supports Windows XP and later and macOS 10.8 and later.  Linux and other
Unix-like systems running the X Window System are supported even without
a desktop environment or modern extensions, although some features require
a running window or clipboard manager.  The OSMesa backend requires Mesa 6.3.

See the [compatibility guide](https://www.glfw.org/docs/latest/compat.html)
in the documentation for more information.


## Dependencies

GLFW itself depends only on the headers and libraries for your window system.

The (experimental) Wayland backend also depends on the `extra-cmake-modules`
package, which is used to generate Wayland protocol headers.

The examples and test programs depend on a number of tiny libraries.  These\
 are
located in the `deps/` directory.

 - [getopt\_port](https://github.com/kimgr/getopt_port/) for examples
   with command-line options
 - [TinyCThread](https://github.com/tinycthread/tinycthread) for threaded
   examples
 - [glad2](https://github.com/Dav1dde/glad) for loading OpenGL and Vulkan
   functions
 - [linmath.h](https://github.com/datenwolf/linmath.h) for linear algebra in
   examples
 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for test and\
 example UI
 - [stb\_image\_write](https://github.com/nothings/stb) for writing images to\
 disk

The documentation is generated with [Doxygen](https://doxygen.org/) if CMake\
 can
find that tool.


## Reporting bugs

Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues).
Please check the [contribution
guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for
information on what to include when reporting a bug.


## Changelog

 - Added `GLFW_NATIVE_INCLUDE_NONE` for disabling inclusion of native headers\
 (#1348)
 - Bugfix: `glfwMakeContextCurrent` would access TLS slot before\
 initialization
 - Bugfix: `glfwSetGammaRamp` could emit `GLFW_INVALID_VALUE` before\
 initialization
 - Bugfix: `glfwGetJoystickUserPointer` returned `NULL` during disconnection\
 (#2092)
 - [Win32] Bugfix: `Alt+PrtSc` would emit `GLFW_KEY_UNKNOWN` and a different
   scancode than `PrtSc` (#1993)
 - [Win32] Bugfix: `GLFW_KEY_PAUSE` scancode from `glfwGetKeyScancode` did not
   match event scancode (#1993)
 - [Win32] Bugfix: Instance-local operations used executable instance\
 (#469,#1296,#1395)
 - [Win32] Bugfix: The OSMesa library was not unloaded on termination
 - [Win32] Bugfix: Right shift emitted `GLFW_KEY_UNKNOWN` when using a CJK\
 IME (#2050)
 - [Cocoa] Disabled macOS fullscreen when `GLFW_RESIZABLE` is false
 - [Cocoa] Bugfix: A connected Apple AirPlay would emit a useless error\
 (#1791)
 - [Cocoa] Bugfix: The EGL and OSMesa libraries were not unloaded on\
 termination
 - [Cocoa] Bugfix: `GLFW_MAXIMIZED` was always true when `GLFW_RESIZABLE` was\
 false
 - [Cocoa] Bugfix: Changing `GLFW_DECORATED` in macOS fullscreen would abort
   application (#1886)
 - [Cocoa] Bugfix: Setting a monitor from macOS fullscreen would abort
   application (#2110)
 - [Cocoa] Bugfix: The Vulkan loader was not loaded from the `Frameworks`\
 bundle
   subdirectory (#2113,#2120)
 - [X11] Bugfix: The OSMesa libray was not unloaded on termination
 - [X11] Bugfix: A malformed response during selection transfer could cause a\
 segfault
 - [X11] Bugfix: Some calls would reset Xlib to the default error handler\
 (#2108)
 - [Wayland] Added support for file path drop events (#2040)
 - [Wayland] Added support for more human-readable monitor names where\
 available
 - [Wayland] Removed support for the deprecated wl\_shell protocol
 - [Wayland] Bugfix: `glfwSetClipboardString` would fail if set to result of
   `glfwGetClipboardString`
 - [Wayland] Bugfix: Data source creation error would cause double free at\
 termination
 - [Wayland] Bugfix: Partial writes of clipboard string would cause beginning\
 to repeat
 - [Wayland] Bugfix: Some errors would cause clipboard string transfer to hang
 - [Wayland] Bugfix: Drag and drop data was misinterpreted as clipboard string
 - [Wayland] Bugfix: MIME type matching was not performed for clipboard string
 - [Wayland] Bugfix: The OSMesa library was not unloaded on termination
 - [Wayland] Bugfix: `glfwCreateWindow` could emit `GLFW_PLATFORM_ERROR`
 - [Wayland] Bugfix: Lock key modifier bits were only set when lock keys were\
 pressed
 - [Wayland] Bugfix: A window leaving full screen mode would be iconified\
 (#1995)
 - [Wayland] Bugfix: A window leaving full screen mode ignored its desired\
 size
 - [Wayland] Bugfix: `glfwSetWindowMonitor` did not update windowed mode size
 - [Wayland] Bugfix: `glfwRestoreWindow` would make a full screen window\
 windowed
 - [Wayland] Bugfix: A window maximized or restored by the user would enter an
   inconsistent state
 - [Wayland] Bugfix: Window maximization events were not emitted
 - [Wayland] Bugfix: `glfwRestoreWindow` assumed it was always in windowed\
 mode
 - [Wayland] Bugfix: `glfwSetWindowSize` would resize a full screen window
 - [Wayland] Bugfix: A window content scale event would be emitted every time
   the window resized
 - [Wayland] Bugfix: If `glfwInit` failed it would close stdin
 - [Wayland] Bugfix: Manual resizing with fallback decorations behaved\
 erratically
   (#1991,#2115,#2127)
 - [Wayland] Bugfix: Size limits included frame size for fallback decorations
 - [Wayland] Bugfix: Updating `GLFW_DECORATED` had no effect on server-side
   decorations
 - [Wayland] Bugfix: A monitor would be reported as connected again if its\
 scale
   changed
 - [Wayland] Bugfix: `glfwTerminate` would segfault if any monitor had changed
   scale
 - [Wayland] Bugfix: Window content scale events were not emitted when monitor
   scale changed
 - [Wayland] Bugfix: `glfwSetWindowAspectRatio` reported an error instead of
   applying the specified ratio
 - [Wayland] Bugfix: `GLFW_MAXIMIZED` window hint had no effect
 - [Wayland] Bugfix: `glfwRestoreWindow` had no effect before first show
 - [Wayland] Bugfix: Hiding and then showing a window caused program abort on
   wlroots compositors (#1268)
 - [Wayland] Bugfix: `GLFW_DECORATED` was ignored when showing a window with\
 XDG
   decorations


## Contact

On [glfw.org](https://www.glfw.org/) you can find the latest version of GLFW,\
 as
well as news, documentation and other information about the project.

If you have questions related to the use of GLFW, we have a
[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on
[Libera.Chat](https://libera.chat/).

If you have a bug to report, a patch to submit or a feature you'd like to
request, please file it in the
[issue tracker](https://github.com/glfw/glfw/issues) on GitHub.

Finally, if you're interested in helping out with the development of GLFW or
porting it to your favorite platform, join us on the forum, GitHub or IRC.


\
description-type: text/markdown;variant=GFM
url: https://www.glfw.org
package-url: https://github.com/Swat-SomeBug/glfw.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: ; OpengGL/Vulkan libraries. Usually installed with system or SDK on\
 Windows.
requires: ; X11 when building for Linux
bootstrap-build:
\
project = glfw-tests

using config
using test
using dist
using version

\
root-build:
\
using cc
using c

c{*}: extension = c
h{*}: extension = h

exe{*}: install = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: glfw/glfw-tests-3.3.8+1.tar.gz
sha256sum: 3687f7ffa963be36789136285a739be3f76891440fbeaaf55446236b226b4403
:
name: glm
version: 0.9.9+2
upstream-version: 0.9.9.8
type: lib,binless
language: c++
summary: Header-only C++ mathematics library for graphics software based on\
 the OpenGL Shading Language (GLSL) specifications
license: MIT
license: The Happy Bunny License
description:
\
![glm](/doc/manual/logo-mini.png)

[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++\
 mathematics library for graphics software based on the [OpenGL Shading\
 Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangS\
pec.4.50.diff.pdf).

*GLM* provides classes and functions designed and implemented with the same\
 naming conventions and functionality than *GLSL* so that anyone who knows\
 *GLSL*, can use *GLM* as well in C++.

This project isn't limited to *GLSL* features. An extension system, based on\
 the *GLSL* extension conventions, provides extended capabilities: matrix\
 transformations, quaternions, data packing, random numbers, noise, etc...

This library works perfectly with *[OpenGL](https://www.opengl.org)* but it\
 also ensures interoperability with other third party libraries and SDK. It\
 is a good candidate for software rendering (raytracing / rasterisation),\
 image processing, physic simulations and any development context that\
 requires a simple and convenient mathematics library.

*GLM* is written in C++98 but can take advantage of C++11 when supported by\
 the compiler. It is a platform independent library with no dependence and it\
 officially supports the following compilers:
- [Apple Clang 6.0](https://developer.apple.com/library/mac/documentation/Com\
pilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher
- [GCC](http://gcc.gnu.org/) 4.7 and higher
- [Intel C++ Composer](https://software.intel.com/en-us/intel-compilers) XE\
 2013 and higher
- [LLVM](http://llvm.org/) 3.4 and higher
- [Visual C++](http://www.visualstudio.com/) 2013 and higher
- [CUDA](https://developer.nvidia.com/about-cuda) 9.0 and higher\
 (experimental)
- [SYCL](https://www.khronos.org/sycl/) (experimental: only\
 [ComputeCpp](https://codeplay.com/products/computesuite/computecpp)\
 implementation has been tested).
- Any C++11 compiler

For more information about *GLM*, please have a look at the\
 [manual](manual.md) and the [API reference documentation](http://glm.g-truc.\
net/0.9.8/api/index.html).
The source code and the documentation are licensed under either the [Happy\
 Bunny License (Modified MIT) or the MIT License](manual.md#section0).

Thanks for contributing to the project by [submitting issues](https://github.\
com/g-truc/glm/issues) for bug reports and feature requests. Any feedback is\
 welcome at [glm@g-truc.net](mailto://glm@g-truc.net).

```cpp
#include <glm/vec3.hpp> // glm::vec3
#include <glm/vec4.hpp> // glm::vec4
#include <glm/mat4x4.hpp> // glm::mat4
#include <glm/ext/matrix_transform.hpp> // glm::translate, glm::rotate,\
 glm::scale
#include <glm/ext/matrix_clip_space.hpp> // glm::perspective
#include <glm/ext/constants.hpp> // glm::pi

glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
{
	glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f /\
 3.0f, 0.1f, 100.f);
	glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f,\
 -Translate));
	View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));
	View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));
	glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
	return Projection * View * Model;
}
```

## [Lastest release](https://github.com/g-truc/glm/releases/latest)

## Project Health

| Service | System | Compiler | Status |
| ------- | ------ | -------- | ------ |
| [Travis CI](https://travis-ci.org/g-truc/glm)| MacOSX, Linux 64 bits |\
 Clang 3.6, Clang 5.0, GCC 4.9, GCC 7.3 | [![Travis CI](https://travis-ci.org\
/g-truc/glm.svg?branch=master)](https://travis-ci.org/g-truc/glm)
| [AppVeyor](https://ci.appveyor.com/project/Groovounet/glm)| Windows 32 and\
 64 | Visual Studio 2013, Visual Studio 2015, Visual Studio 2017 |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?sv\
g=true)](https://ci.appveyor.com/project/Groovounet/glm)

## Release notes

### [GLM 0.9.9.8](https://github.com/g-truc/glm/releases/tag/0.9.9.8) -\
 2020-04-13
#### Features:
- Added GLM_EXT_vector_intX* and GLM_EXT_vector_uintX* extensions
- Added GLM_EXT_matrix_intX* and GLM_EXT_matrix_uintX* extensions

#### Improvements:
- Added clamp, repeat, mirrorClamp and mirrorRepeat function to\
 GLM_EXT_scalar_commond and GLM_EXT_vector_commond extensions with tests

#### Fixes:
- Fixed unnecessary warnings from matrix_projection.inl #995
- Fixed quaternion slerp overload which interpolates with extra spins #996
- Fixed for glm::length using arch64 #992
- Fixed singularity check for quatLookAt #770

### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) -\
 2020-01-05
#### Improvements:
- Improved Neon support with more functions optimized #950
- Added CMake GLM interface #963
- Added fma implementation based on std::fma #969
- Added missing quat constexpr #955
- Added GLM_FORCE_QUAT_DATA_WXYZ to store quat data as w,x,y,z instead of\
 x,y,z,w #983

#### Fixes:
- Fixed equal ULP variation when using negative sign #965
- Fixed for intersection ray/plane and added related tests #953
- Fixed ARM 64bit detection #949
- Fixed GLM_EXT_matrix_clip_space warnings #980
- Fixed Wimplicit-int-float-conversion warnings with clang 10+ #986
- Fixed EXT_matrix_clip_space perspectiveFov

### [GLM 0.9.9.6](https://github.com/g-truc/glm/releases/tag/0.9.9.6) -\
 2019-09-08
#### Features:
- Added Neon support #945
- Added SYCL support #914
- Added EXT_scalar_integer extension with power of two and multiple scalar\
 functions
- Added EXT_vector_integer extension with power of two and multiple vector\
 functions

#### Improvements:
- Added Visual C++ 2019 detection
- Added Visual C++ 2017 15.8 and 15.9 detection
- Added missing genType check for bitCount and bitfieldReverse #893

#### Fixes:
- Fixed for g++6 where -std=c++1z sets __cplusplus to 201500 instead of\
 201402 #921
- Fixed hash hashes qua instead of tquat #919
- Fixed .natvis as structs renamed #915
- Fixed ldexp and frexp declaration #895
- Fixed missing const to quaternion conversion operators #890
- Fixed EXT_scalar_ulp and EXT_vector_ulp API coding style
- Fixed quaternion componant order: w, {x, y, z} #916
- Fixed GLM_HAS_CXX11_STL broken on Clang with Linux #926
- Fixed Clang or GCC build due to wrong GLM_HAS_IF_CONSTEXPR definition #907
- Fixed CUDA 9 build #910

#### Deprecation:
 - Removed CMake install and uninstall scripts

### [GLM 0.9.9.5](https://github.com/g-truc/glm/releases/tag/0.9.9.5) -\
 2019-04-01
#### Fixes:
- Fixed build errors when defining GLM_ENABLE_EXPERIMENTAL #884 #883
- Fixed 'if constexpr' warning #887
- Fixed missing declarations for frexp and ldexp #886

### [GLM 0.9.9.4](https://github.com/g-truc/glm/releases/tag/0.9.9.4) -\
 2019-03-19
#### Features:
- Added mix implementation for matrices in EXT_matrix_common #842
- Added BUILD_SHARED_LIBS and BUILD_STATIC_LIBS build options #871

#### Improvements:
- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By\
 default, it's disabled allowing constexpr support by default. #865
- Optimized inverseTransform #867

#### Fixes:
- Fixed in mat4x3 conversion #829
- Fixed constexpr issue on GCC #832 #865
- Fixed mix implementation to improve GLSL conformance #866
- Fixed int8 being defined as unsigned char with some compiler #839
- Fixed vec1 include #856
- Ignore .vscode #848

### [GLM 0.9.9.3](https://github.com/g-truc/glm/releases/tag/0.9.9.3) -\
 2018-10-31
#### Features:
- Added equal and notEqual overload with max ULPs parameters for scalar\
 numbers #121
- Added GLM_FORCE_SILENT_WARNINGS to silent GLM warnings when using language\
 extensions but using W4 or Wpedantic warnings #814 #775
- Added adjugate functions to GTX_matrix_operation #151
- Added GLM_FORCE_ALIGNED_GENTYPES to enable aligned types and SIMD\
 instruction are not enabled. This disable constexpr #816

#### Improvements:
- Added constant time ULP distance between float #121
- Added GLM_FORCE_SILENT_WARNINGS to suppress GLM warnings #822

#### Fixes:
- Fixed simplex noise build with double #734
- Fixed bitfieldInsert according to GLSL spec #818
- Fixed refract for negative 'k' #808

### [GLM 0.9.9.2](https://github.com/g-truc/glm/releases/tag/0.9.9.2) -\
 2018-09-14
#### Fixes:
- Fixed GLM_FORCE_CXX** section in the manual
- Fixed default initialization with vector and quaternion types using\
 GLM_FORCE_CTOR_INIT #812

### [GLM 0.9.9.1](https://github.com/g-truc/glm/releases/tag/0.9.9.1) -\
 2018-09-03
#### Features:
- Added bitfieldDeinterleave to GTC_bitfield
- Added missing equal and notEqual with epsilon for quaternion types to\
 GTC_quaternion
- Added EXT_matrix_relational: equal and notEqual with epsilon for matrix\
 types
- Added missing aligned matrix types to GTC_type_aligned
- Added C++17 detection
- Added Visual C++ language standard version detection
- Added PDF manual build from markdown

#### Improvements:
- Added a section to the manual for contributing to GLM
- Refactor manual, lists all configuration defines
- Added missing vec1 based constructors
- Redesigned constexpr support which excludes both SIMD and constexpr #783
- Added detection of Visual C++ 2017 toolsets
- Added identity functions #765
- Splitted headers into EXT extensions to improve compilation time #670
- Added separated performance tests
- Clarified refract valid range of the indices of refraction, between -1 and\
 1 inclusively #806

#### Fixes:
- Fixed SIMD detection on Clang and GCC
- Fixed build problems due to printf and std::clock_t #778
- Fixed int mod
- Anonymous unions require C++ language extensions
- Fixed ortho #790
- Fixed Visual C++ 2013 warnings in vector relational code #782
- Fixed ICC build errors with constexpr #704
- Fixed defaulted operator= and constructors #791
- Fixed invalid conversion from int scalar with vec4 constructor when using\
 SSE instruction
- Fixed infinite loop in random functions when using negative radius values\
 using an assert #739

### [GLM 0.9.9.0](https://github.com/g-truc/glm/releases/tag/0.9.9.0) -\
 2018-05-22
#### Features:
- Added RGBM encoding in GTC_packing #420
- Added GTX_color_encoding extension
- Added GTX_vec_swizzle, faster compile time swizzling then swizzle operator\
 #558
- Added GTX_exterior_product with a vec2 cross implementation #621
- Added GTX_matrix_factorisation to factor matrices in various forms #654
- Added [GLM_ENABLE_EXPERIMENTAL](manual.md#section7_4) to enable\
 experimental features.
- Added packing functions for integer vectors #639
- Added conan packaging configuration #643 #641
- Added quatLookAt to GTX_quaternion #659
- Added fmin, fmax and fclamp to GTX_extended_min_max #372
- Added EXT_vector_relational: extend equal and notEqual to take an epsilon\
 argument
- Added EXT_vector_relational: openBounded and closeBounded
- Added EXT_vec1: *vec1 types
- Added GTX_texture: levels function
- Added spearate functions to use both nagative one and zero near clip plans\
 #680
- Added GLM_FORCE_SINGLE_ONLY to use GLM on platforms that don't support\
 double #627
- Added GTX_easing for interpolation functions #761

#### Improvements:
- No more default initialization of vector, matrix and quaternion types
- Added lowp variant of GTC_color_space convertLinearToSRGB #419
- Replaced the manual by a markdown version #458
- Improved API documentation #668
- Optimized GTC_packing implementation
- Optimized GTC_noise functions
- Optimized GTC_color_space HSV to RGB conversions
- Optimised GTX_color_space_YCoCg YCoCgR conversions
- Optimized GTX_matrix_interpolation axisAngle function
- Added FAQ 12: Windows headers cause build errors... #557
- Removed GCC shadow warnings #595
- Added error for including of different versions of GLM #619
- Added GLM_FORCE_IGNORE_VERSION to ignore error caused by including\
 different version of GLM #619
- Reduced warnings when using very strict compilation flags #646
- length() member functions are constexpr #657
- Added support of -Weverything with Clang #646
- Improved exponential function test coverage
- Enabled warnings as error with Clang unit tests
- Conan package is an external repository: https://github.com/bincrafters/con\
an-glm
- Clarify quat_cast documentation, applying on pure rotation matrices #759

#### Fixes:
- Removed doxygen references to GTC_half_float which was removed in 0.9.4
- Fixed glm::decompose #448
- Fixed intersectRayTriangle #6
- Fixed dual quaternion != operator #629
- Fixed usused variable warning in GTX_spline #618
- Fixed references to GLM_FORCE_RADIANS which was removed #642
- Fixed glm::fastInverseSqrt to use fast inverse square #640
- Fixed axisAngle NaN #638
- Fixed integer pow from GTX_integer with null exponent #658
- Fixed quat normalize build error #656
- Fixed Visual C++ 2017.2 warning regarding __has_feature definision #655
- Fixed documentation warnings
- Fixed GLM_HAS_OPENMP when OpenMP is not enabled
- Fixed Better follow GLSL min and max specification #372
- Fixed quaternion constructor from two vectors special cases #469
- Fixed glm::to_string on quaternions wrong components order #681
- Fixed acsch #698
- Fixed isnan on CUDA #727

#### Deprecation:
- Requires Visual Studio 2013, GCC 4.7, Clang 3.4, Cuda 7, ICC 2013 or a\
 C++11 compiler
- Removed GLM_GTX_simd_vec4 extension
- Removed GLM_GTX_simd_mat4 extension
- Removed GLM_GTX_simd_quat extension
- Removed GLM_SWIZZLE, use GLM_FORCE_SWIZZLE instead
- Removed GLM_MESSAGES, use GLM_FORCE_MESSAGES instead
- Removed GLM_DEPTH_ZERO_TO_ONE, use GLM_FORCE_DEPTH_ZERO_TO_ONE instead
- Removed GLM_LEFT_HANDED, use GLM_FORCE_LEFT_HANDED instead
- Removed GLM_FORCE_NO_CTOR_INIT
- Removed glm::uninitialize

---
### [GLM 0.9.8.5](https://github.com/g-truc/glm/releases/tag/0.9.8.5) -\
 2017-08-16
#### Features:
- Added Conan package support #647

#### Fixes:
- Fixed Clang version detection from source #608
- Fixed packF3x9_E1x5 exponent packing #614
- Fixed build error min and max specializations with integer #616
- Fixed simd_mat4 build error #652

---
### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) -\
 2017-01-22
#### Fixes:
- Fixed GTC_packing test failing on GCC x86 due to denorms #212 #577
- Fixed POPCNT optimization build in Clang #512
- Fixed intersectRayPlane returns true in parallel case #578
- Fixed GCC 6.2 compiler warnings #580
- Fixed GTX_matrix_decompose decompose #582 #448
- Fixed GCC 4.5 and older build #566
- Fixed Visual C++ internal error when declaring a global vec type with\
 siwzzle expression enabled #594
- Fixed GLM_FORCE_CXX11 with Clang and libstlc++ which wasn't using C++11 STL\
 features. #604

---
### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) -\
 2016-11-12
#### Improvements:
- Broader support of GLM_FORCE_UNRESTRICTED_GENTYPE #378

#### Fixes:
- Fixed Android build error with C++11 compiler but C++98 STL #284 #564
- Fixed GTX_transform2 shear* functions #403
- Fixed interaction between GLM_FORCE_UNRESTRICTED_GENTYPE and ortho function\
 #568
- Fixed bitCount with AVX on 32 bit builds #567
- Fixed CMake find_package with version specification #572 #573

---
### [GLM 0.9.8.2](https://github.com/g-truc/glm/releases/tag/0.9.8.2) -\
 2016-11-01
#### Improvements:
- Added Visual C++ 15 detection
- Added Clang 4.0 detection
- Added warning messages when using GLM_FORCE_CXX** but the compiler
  is known to not fully support the requested C++ version #555
- Refactored GLM_COMPILER_VC values
- Made quat, vec, mat type component length() static #565

#### Fixes:
- Fixed Visual C++ constexpr build error #555, #556

---
### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) -\
 2016-09-25
#### Improvements:
- Optimized quaternion log function #554

#### Fixes:
- Fixed GCC warning filtering, replaced -pedantic by -Wpedantic
- Fixed SIMD faceforward bug. #549
- Fixed GCC 4.8 with C++11 compilation option #550
- Fixed Visual Studio aligned type W4 warning #548
- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552

---
### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) -\
 2016-09-11
#### Features:
- Added right and left handed projection and clip control support #447 #415\
 #119
- Added compNormalize and compScale functions to GTX_component_wise
- Added packF3x9_E1x5 and unpackF3x9_E1x5 to GTC_packing for RGB9E5 #416
- Added (un)packHalf to GTC_packing
- Added (un)packUnorm and (un)packSnorm to GTC_packing
- Added 16bit pack and unpack to GTC_packing
- Added 8bit pack and unpack to GTC_packing
- Added missing bvec* && and || operators
- Added iround and uround to GTC_integer, fast round on positive values
- Added raw SIMD API
- Added 'aligned' qualifiers
- Added GTC_type_aligned with aligned *vec* types
- Added GTC_functions extension
- Added quaternion version of isnan and isinf #521
- Added lowestBitValue to GTX_bit #536
- Added GLM_FORCE_UNRESTRICTED_GENTYPE allowing non basic genType #543

#### Improvements:
- Improved SIMD and swizzle operators interactions with GCC and Clang #474
- Improved GTC_random linearRand documentation
- Improved GTC_reciprocal documentation
- Improved GLM_FORCE_EXPLICIT_CTOR coverage #481
- Improved OpenMP support detection for Clang, GCC, ICC and VC
- Improved GTX_wrap for SIMD friendliness
- Added constexpr for *vec*, *mat*, *quat* and *dual_quat* types #493
- Added NEON instruction set detection
- Added MIPS CPUs detection
- Added PowerPC CPUs detection
- Use Cuda built-in function for abs function implementation with Cuda\
 compiler
- Factorized GLM_COMPILER_LLVM and GLM_COMPILER_APPLE_CLANG into\
 GLM_COMPILER_CLANG
- No more warnings for use of long long
- Added more information to build messages

#### Fixes:
- Fixed GTX_extended_min_max filename typo #386
- Fixed intersectRayTriangle to not do any unintentional backface culling
- Fixed long long warnings when using C++98 on GCC and Clang #482
- Fixed sign with signed integer function on non-x86 architecture
- Fixed strict aliasing warnings #473
- Fixed missing vec1 overload to length2 and distance2 functions #431
- Fixed GLM test '/fp:fast' and '/Za' command-line options are incompatible
- Fixed quaterion to mat3 cast function mat3_cast from GTC_quaternion #542
- Fixed GTX_io for Cuda #547 #546

#### Deprecation:
- Removed GLM_FORCE_SIZE_FUNC define
- Deprecated GLM_GTX_simd_vec4 extension
- Deprecated GLM_GTX_simd_mat4 extension
- Deprecated GLM_GTX_simd_quat extension
- Deprecated GLM_SWIZZLE, use GLM_FORCE_SWIZZLE instead
- Deprecated GLM_MESSAGES, use GLM_FORCE_MESSAGES instead

---
### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) -\
 2016-07-16
#### Improvements:
- Added pkg-config file #509
- Updated list of compiler versions detected
- Improved C++ 11 STL detection #523

#### Fixes:
- Fixed STL for C++11 detection on ICC #510
- Fixed missing vec1 overload to length2 and distance2 functions #431
- Fixed long long warnings when using C++98 on GCC and Clang #482
- Fixed scalar reciprocal functions (GTC_reciprocal) #520

---
### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) -\
 2016-05-24
#### Improvements:
- Added Visual C++ Clang toolset detection

#### Fixes:
- Fixed uaddCarry warning #497
- Fixed roundPowerOfTwo and floorPowerOfTwo #503
- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits
- Fixed to_string when used with GLM_FORCE_INLINE #506
- Fixed GLM_FORCE_INLINE with binary vec4 operators
- Fixed GTX_extended_min_max filename typo #386
- Fixed intersectRayTriangle to not do any unintentional backface culling

---
### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) -\
 2016-03-19
#### Fixes:
- Fixed asinh and atanh warning with C++98 STL #484
- Fixed polar coordinates function latitude #485
- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4\
 #475
- Fixed eulerAngles precision error, returns NaN  #451
- Fixed undefined reference errors #489
- Fixed missing GLM_PLATFORM_CYGWIN declaration #495
- Fixed various undefined reference errors #490

---
### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) -\
 2016-02-21
#### Improvements:
- Added AVX512 detection

#### Fixes:
- Fixed CMake policy warning
- Fixed GCC 6.0 detection #477
- Fixed Clang build on Windows #479
- Fixed 64 bits constants warnings on GCC #463

---
### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) -\
 2016-01-03
#### Fixes:
- Fixed GTC_round floorMultiple/ceilMultiple #412
- Fixed GTC_packing unpackUnorm3x10_1x2 #414
- Fixed GTC_matrix_inverse affineInverse #192
- Fixed ICC on Linux build errors #449
- Fixed ldexp and frexp compilation errors
- Fixed "Declaration shadows a field" warning #468
- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468
- Fixed various 'X is not defined' warnings #468
- Fixed missing unary + operator #435
- Fixed Cygwin build errors when using C++11 #405

---
### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) -\
 2015-09-07
#### Improvements:
- Improved constexpr for constant functions coverage #198
- Added to_string for quat and dual_quat in GTX_string_cast #375
- Improved overall execution time of unit tests #396

#### Fixes:
- Fixed strict alignment warnings #235 #370
- Fixed link errors on compilers not supported default function #377
- Fixed compilation warnings in vec4
- Fixed non-identity quaternions for equal vectors #234
- Fixed excessive GTX_fast_trigonometry execution time #396
- Fixed Visual Studio 2015 'hides class member' warnings #394
- Fixed builtin bitscan never being used #392
- Removed unused func_noise.* files #398

---
### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) -\
 2015-08-02
#### Features:
- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions
- Added 'fmod' overload to GTX_common with tests #308
- Left handed perspective and lookAt functions #314
- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311
- Added <glm/gtx/hash.hpp> to perform std::hash on GLM types #320 #367
- Added <glm/gtx/wrap.hpp> for texcoord wrapping
- Added static components and precision members to all vector and quat types\
 #350
- Added .gitignore #349
- Added support of defaulted functions to GLM types, to use them in unions\
 #366

#### Improvements:
- Changed usage of __has_include to support Intel compiler #307
- Specialized integer implementation of YCoCg-R #310
- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317
- Added master branch continuous integration service on Linux 64 #332
- Clarified manual regarding angle unit in GLM, added FAQ 11 #326
- Updated list of compiler versions

#### Fixes:
- Fixed default precision for quat and dual_quat type #312
- Fixed (u)int64 MSB/LSB handling on BE archs #306
- Fixed multi-line comment warning in g++. #315
- Fixed specifier removal by 'std::make_pair<>' #333
- Fixed perspective fovy argument documentation #327
- Removed -m64 causing build issues on Linux 32 #331
- Fixed isfinite with C++98 compilers #343
- Fixed Intel compiler build error on Linux #354
- Fixed use of libstdc++ with Clang #351
- Fixed quaternion pow #346
- Fixed decompose warnings #373
- Fixed matrix conversions #371

#### Deprecation:
- Removed integer specification for 'mod' in GTC_integer #308
- Removed GTX_multiple, replaced by GTC_round

---
### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) -\
 2015-02-15
- Fixed Android doesn't have C++ 11 STL #284

---
### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) -\
 2015-02-15
#### Features:
- Added display of GLM version with other GLM_MESSAGES
- Added ARM instruction set detection

#### Improvements:
- Removed assert for perspective with zFar < zNear #298
- Added Visual Studio natvis support for vec1, quat and dualqual types
- Cleaned up C++11 feature detections
- Clarify GLM licensing

#### Fixes:
- Fixed faceforward build #289
- Fixed conflict with Xlib #define True 1 #293
- Fixed decompose function VS2010 templating issues #294
- Fixed mat4x3 = mat2x3 * mat4x2 operator #297
- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295
- Fixed Visual Studio natvis support for vec4 #288
- Fixed GTC_packing *pack*norm*x* build and added tests #292
- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242
- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support
- Fixed functions not inlined with Clang #302
- Fixed memory corruption (undefined behaviour) #303

---
### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) -\
 2014-12-10
#### Features:
- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags
- Added C++14 detection

#### Improvements:
- Clean up GLM_MESSAGES compilation log to report only detected capabilities

#### Fixes:
- Fixed scalar uaddCarry build error with Cuda #276
- Fixed C++11 explicit conversion operators detection #282
- Fixed missing explicit conversion when using integer log2 with *vec1 types
- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler
- Fixed Android build issue, STL C++11 is not supported by the NDK #284
- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10
- Fixed Visual C++ 32 bit build #283
- Fixed GLM_FORCE_SIZE_FUNC pragma message
- Fixed C++98 only build
- Fixed conflict between GTX_compatibility and GTC_quaternion #286
- Fixed C++ language restriction using GLM_FORCE_CXX**

---
### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) -\
 2014-11-30
#### Features:
- Exposed template vector and matrix types in 'glm' namespace #239, #244
- Added GTX_scalar_multiplication for C++ 11 compiler only #242
- Added GTX_range for C++ 11 compiler only #240
- Added closestPointOnLine function for tvec2 to GTX_closest_point #238
- Added GTC_vec1 extension, *vec1 support to *vec* types
- Updated GTX_associated_min_max with vec1 support
- Added support of precision and integers to linearRand #230
- Added Integer types support to GTX_string_cast #249
- Added vec3 slerp #237
- Added GTX_common with isdenomal #223
- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245
- Added GLM_FORCE_NO_CTOR_INIT
- Added 'uninitialize' to explicitly not initialize a GLM type
- Added GTC_bitfield extension, promoted GTX_bit
- Added GTC_integer extension, promoted GTX_bit and GTX_integer
- Added GTC_round extension, promoted GTX_bit
- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269
- Added GTX_type_aligned for aligned vector, matrix and quaternion types

#### Improvements:
- Rely on C++11 to implement isinf and isnan
- Removed GLM_FORCE_CUDA, Cuda is implicitly detected
- Separated Apple Clang and LLVM compiler detection
- Used pragma once
- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and 
  GLM_FORCE_PURE
- Added not function (from GLSL specification) on VC12
- Optimized bitfieldReverse and bitCount functions
- Optimized findLSB and findMSB functions.
- Optimized matrix-vector multiple performance with Cuda #257, #258
- Reduced integer type redifinitions #233
- Rewrited of GTX_fast_trigonometry #264 #265
- Made types trivially copyable #263
- Removed <iostream> in GLM tests
- Used std features within GLM without redeclaring
- Optimized cot function #272
- Optimized sign function #272
- Added explicit cast from quat to mat3 and mat4 #275

#### Fixes:
- Fixed std::nextafter not supported with C++11 on Android #217
- Fixed missing value_type for dual quaternion
- Fixed return type of dual quaternion length
- Fixed infinite loop in isfinite function with GCC #221
- Fixed Visual Studio 14 compiler warnings
- Fixed implicit conversion from another tvec2 type to another tvec2 #241
- Fixed lack of consistency of quat and dualquat constructors
- Fixed uaddCarray #253
- Fixed float comparison warnings #270

#### Deprecation:
- Requires Visual Studio 2010, GCC 4.2, Apple Clang 4.0, LLVM 3.0, Cuda 4,\
 ICC 2013 or a C++98 compiler
- Removed degrees for function parameters
- Removed GLM_FORCE_RADIANS, active by default
- Removed VC 2005 / 8 and 2008 / 9 support
- Removed GCC 3.4 to 4.3 support
- Removed LLVM GCC support
- Removed LLVM 2.6 to 3.1 support
- Removed CUDA 3.0 to 3.2 support

---
### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9\
.5.4)
- Fixed non-utf8 character #196
- Added FindGLM install for CMake #189
- Fixed GTX_color_space - saturation #195
- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191
- Fixed builtin GLM_ARCH_SSE4 #204
- Optimized Quaternion vector rotation #205
- Fixed missing doxygen @endcond tag #211
- Fixed instruction set detection with Clang #158
- Fixed orientate3 function #207
- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210
- Added GTX_io for io with <iostream> #144
- Fixed fastDistance ambiguity #215
- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to
  tweakedInfinitePerspective
- Fixed std::copy and std::vector with GLM types #214
- Fixed strict aliasing issues #212, #152
- Fixed std::nextafter not supported with C++11 on Android #213
- Fixed corner cases in exp and log functions for quaternions #199

---
### GLM 0.9.5.3 - 2014-04-02
- Added instruction set auto detection with Visual C++ using _M_IX86_FP -\
 /arch
  compiler argument
- Fixed GTX_raw_data code dependency
- Fixed GCC instruction set detection
- Added GLM_GTX_matrix_transform_2d extension (#178, #176)
- Fixed CUDA issues (#169, #168, #183, #182)
- Added support for all extensions but GTX_string_cast to CUDA
- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152)
- Fixed missing bitfieldInterleave definisions
- Fixed usubBorrow (#171)
- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173)
- Added full tests for eulerAngle*** functions (#173)
- Added workaround for a CUDA compiler bug (#186, #185)

---
### GLM 0.9.5.2 - 2014-02-08
- Fixed initializer list ambiguity (#159, #160)
- Fixed warnings with the Android NDK 9c
- Fixed non power of two matrix products
- Fixed mix function link error
- Fixed SSE code included in GLM tests on "pure" platforms
- Fixed undefined reference to fastInverseSqrt (#161)
- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165)
- Fix dot product clamp range for vector angle functions. (#163)
- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c\
 (#152)
- Fixed GLM_GTC_constants description brief (#162)

---
### GLM 0.9.5.1 - 2014-01-11
- Fixed angle and orientedAngle that sometimes return NaN values (#145)
- Deprecated degrees for function parameters and display a message
- Added possible static_cast conversion of GLM types (#72)
- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146)
- Fixed mismatch between some declarations and definitions
- Fixed inverse link error when using namespace glm; (#147)
- Optimized matrix inverse and division code (#149)
- Added intersectRayPlane function (#153)
- Fixed outerProduct return type (#155)

---
### GLM 0.9.5.0 - 2013-12-25
- Added forward declarations (glm/fwd.hpp) for faster compilations
- Added per feature headers
- Minimized GLM internal dependencies
- Improved Intel Compiler detection
- Added bitfieldInterleave and _mm_bit_interleave_si128 functions
- Added GTX_scalar_relational
- Added GTX_dual_quaternion
- Added rotation function to GTX_quaternion (#22)
- Added precision variation of each type
- Added quaternion comparison functions
- Fixed GTX_multiple for negative value
- Removed GTX_ocl_type extension
- Fixed post increment and decrement operators
- Fixed perspective with zNear == 0 (#71)
- Removed l-value swizzle operators
- Cleaned up compiler detection code for unsupported compilers
- Replaced C cast by C++ casts
- Fixed .length() that should return a int and not a size_t
- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t
- Removed unnecessary conversions
- Optimized packing and unpacking functions
- Removed the normalization of the up argument of lookAt function (#114)
- Added low precision specializations of inversesqrt
- Fixed ldexp and frexp implementations
- Increased assert coverage
- Increased static_assert coverage
- Replaced GLM traits by STL traits when possible
- Allowed including individual core feature
- Increased unit tests completness
- Added creating of a quaternion from two vectors
- Added C++11 initializer lists
- Fixed umulExtended and imulExtended implementations for vector types (#76)
- Fixed CUDA coverage for GTC extensions
- Added GTX_io extension
- Improved GLM messages enabled when defining GLM_MESSAGES
- Hidden matrix _inverse function implementation detail into private section

---
### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) -\
 2013-09-20
- Fixed detection to select the last known compiler if newer version #106
- Fixed is_int and is_uint code duplication with GCC and C++11 #107 
- Fixed test suite build while using Clang in C++11 mode
- Added c++1y mode support in CMake test suite
- Removed ms extension mode to CMake when no using Visual C++
- Added pedantic mode to CMake test suite for Clang and GCC
- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows
  for ICC
- Added compilation errors for unsupported compiler versions
- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112
- Fixed const ref issue on assignment operator taking a scalar parameter #116
- Fixed glm::eulerAngleY implementation #117

---
### GLM 0.9.4.5 - 2013-08-12
- Fixed CUDA support
- Fixed inclusion of intrinsics in "pure" mode #92
- Fixed language detection on GCC when the C++0x mode isn't enabled #95
- Fixed issue #97: register is deprecated in C++11
- Fixed issue #96: CUDA issues
- Added Windows CE detection #92
- Added missing value_ptr for quaternions #99

---
### GLM 0.9.4.4 - 2013-05-29
- Fixed slerp when costheta is close to 1 #65
- Fixed mat4x2 value_type constructor #70
- Fixed glm.natvis for Visual C++ 12 #82
- Added assert in inversesqrt to detect division by zero #61
- Fixed missing swizzle operators #86
- Fixed CUDA warnings #86
- Fixed GLM natvis for VC11 #82
- Fixed GLM_GTX_multiple with negative values #79
- Fixed glm::perspective when zNear is zero #71

---
### GLM 0.9.4.3 - 2013-03-20
- Detected qualifier for Clang
- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions
- Fixed squad, intermediate and exp quaternion functions
- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a\
 vec3
- Clarify the license applying on the manual
- Added a docx copy of the manual
- Fixed GLM_GTX_matrix_interpolation
- Fixed isnan and isinf on Android with Clang
- Autodetected C++ version using __cplusplus value
- Fixed mix for bool and bvec* third parameter

---
### GLM 0.9.4.2 - 2013-02-14
- Fixed compAdd from GTX_component_wise
- Fixed SIMD support for Intel compiler on Windows
- Fixed isnan and isinf for CUDA compiler
- Fixed GLM_FORCE_RADIANS on glm::perspective
- Fixed GCC warnings
- Fixed packDouble2x32 on Xcode
- Fixed mix for vec4 SSE implementation
- Fixed 0x2013 dash character in comments that cause issue in Windows 
  Japanese mode
- Fixed documentation warnings
- Fixed CUDA warnings

---
### GLM 0.9.4.1 - 2012-12-22
- Improved half support: -0.0 case and implicit conversions
- Fixed Intel Composer Compiler support on Linux
- Fixed interaction between quaternion and euler angles
- Fixed GTC_constants build
- Fixed GTX_multiple
- Fixed quat slerp using mix function when cosTheta close to 1
- Improved fvec4SIMD and fmat4x4SIMD implementations
- Fixed assert messages
- Added slerp and lerp quaternion functions and tests

---
### GLM 0.9.4.0 - 2012-11-18
- Added Intel Composer Compiler support
- Promoted GTC_espilon extension
- Promoted GTC_ulp extension
- Removed GLM website from the source repository
- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments
- Fixed detection of Clang and LLVM GCC on MacOS X
- Added debugger visualizers for Visual C++ 2012
- Requires Visual Studio 2005, GCC 4.2, Clang 2.6, Cuda 3, ICC 2013 or a\
 C++98 compiler

---
### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) -\
 2012-06-30
- Added SSE4 and AVX2 detection.
- Removed VIRTREV_xstream and the incompatibility generated with GCC
- Fixed C++11 compiler option for GCC
- Removed MS language extension option for GCC (not fonctionnal)
- Fixed bitfieldExtract for vector types
- Fixed warnings
- Fixed SSE includes

---
### GLM 0.9.3.3 - 2012-05-10
- Fixed isinf and isnan
- Improved compatibility with Intel compiler
- Added CMake test build options: SIMD, C++11, fast math and MS land ext
- Fixed SIMD mat4 test on GCC
- Fixed perspectiveFov implementation
- Fixed matrixCompMult for none-square matrices
- Fixed namespace issue on stream operators
- Fixed various warnings
- Added VC11 support

---
### GLM 0.9.3.2 - 2012-03-15
- Fixed doxygen documentation
- Fixed Clang version detection
- Fixed simd mat4 /= operator

---
### GLM 0.9.3.1 - 2012-01-25
- Fixed platform detection
- Fixed warnings
- Removed detail code from Doxygen doc

---
### GLM 0.9.3.0 - 2012-01-09
- Added CPP Check project
- Fixed conflict with Windows headers
- Fixed isinf implementation
- Fixed Boost conflict
- Fixed warnings

---
### GLM 0.9.3.B - 2011-12-12
- Added support for Chrone Native Client
- Added epsilon constant
- Removed value_size function from vector types
- Fixed roundEven on GCC
- Improved API documentation
- Fixed modf implementation
- Fixed step function accuracy
- Fixed outerProduct

---
### GLM 0.9.3.A - 2011-11-11
- Improved doxygen documentation
- Added new swizzle operators for C++11 compilers
- Added new swizzle operators declared as functions
- Added GLSL 4.20 length for vector and matrix types
- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions
- Promoted GLM_GTC_random extension: linear, gaussian and various random\
 number 
generation distribution
- Added GLM_GTX_constants: provides useful constants
- Added extension versioning
- Removed many unused namespaces
- Fixed half based type contructors
- Added GLSL core noise functions

---
### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) -\
 2011-10-24
- Added more swizzling constructors
- Added missing none-squared matrix products

---
### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) -\
 2011-10-01
- Fixed half based type build on old GCC
- Fixed /W4 warnings on Visual C++
- Fixed some missing l-value swizzle operators

---
### GLM 0.9.2.5 - 2011-09-20
- Fixed floatBitToXint functions
- Fixed pack and unpack functions
- Fixed round functions

---
### GLM 0.9.2.4 - 2011-09-03
- Fixed extensions bugs

---
### GLM 0.9.2.3 - 2011-06-08
- Fixed build issues

---
### GLM 0.9.2.2 - 2011-06-02
- Expend matrix constructors flexibility
- Improved quaternion implementation
- Fixed many warnings across platforms and compilers

---
### GLM 0.9.2.1 - 2011-05-24
- Automatically detect CUDA support
- Improved compiler detection
- Fixed errors and warnings in VC with C++ extensions disabled
- Fixed and tested GLM_GTX_vector_angle
- Fixed and tested GLM_GTX_rotate_vector

---
### GLM 0.9.2.0 - 2011-05-09
- Added CUDA support
- Added CTest test suite
- Added GLM_GTX_ulp extension
- Added GLM_GTX_noise extension
- Added GLM_GTX_matrix_interpolation extension
- Updated quaternion slerp interpolation

---
### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) -\
 2011-05-07
- Fixed bugs

---
### GLM 0.9.1.2 - 2011-04-15
- Fixed bugs

---
### GLM 0.9.1.1 - 2011-03-17
- Fixed bugs

---
### GLM 0.9.1.0 - 2011-03-03
- Fixed bugs

---
### GLM 0.9.1.B - 2011-02-13
- Updated API documentation
- Improved SIMD implementation
- Fixed Linux build

---
### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) -\
 2011-02-13
- Added quaternion product operator.
- Clarify that GLM is a header only library.

---
### GLM 0.9.1.A - 2011-01-31
- Added SIMD support
- Added new swizzle functions
- Improved static assert error message with C++0x static_assert
- New setup system
- Reduced branching
- Fixed trunc implementation

---
### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) -\
 2011-01-30
- Added GLSL 4.10 packing functions
- Added == and != operators for every types.

---
### GLM 0.9.0.6 - 2010-12-21
- Many matrices bugs fixed

---
### GLM 0.9.0.5 - 2010-11-01
- Improved Clang support
- Fixed bugs

---
### GLM 0.9.0.4 - 2010-10-04
- Added autoexp for GLM
- Fixed bugs

---
### GLM 0.9.0.3 - 2010-08-26
- Fixed non-squared matrix operators

---
### GLM 0.9.0.2 - 2010-07-08
- Added GLM_GTX_int_10_10_10_2
- Fixed bugs

---
### GLM 0.9.0.1 - 2010-06-21
- Fixed extensions errors

---
### GLM 0.9.0.0 - 2010-05-25
- Objective-C support
- Fixed warnings
- Updated documentation

---
### GLM 0.9.B.2 - 2010-04-30
- Git transition
- Removed experimental code from releases
- Fixed bugs

---
### GLM 0.9.B.1 - 2010-04-03
- Based on GLSL 4.00 specification
- Added the new core functions
- Added some implicit conversion support

---
### GLM 0.9.A.2 - 2010-02-20
- Improved some possible errors messages
- Improved declarations and definitions match

---
### GLM 0.9.A.1 - 2010-02-09
- Removed deprecated features
- Internal redesign

---
### GLM 0.8.4.4 final - 2010-01-25
- Fixed warnings

---
### GLM 0.8.4.3 final - 2009-11-16
- Fixed Half float arithmetic
- Fixed setup defines

---
### GLM 0.8.4.2 final - 2009-10-19
- Fixed Half float adds

---
### GLM 0.8.4.1 final - 2009-10-05
- Updated documentation
- Fixed MacOS X build

---
### GLM 0.8.4.0 final - 2009-09-16
- Added GCC 4.4 and VC2010 support
- Added matrix optimizations

---
### GLM 0.8.3.5 final - 2009-08-11
- Fixed bugs

---
### GLM 0.8.3.4 final - 2009-08-10
- Updated GLM according GLSL 1.5 spec
- Fixed bugs

---
### GLM 0.8.3.3 final - 2009-06-25
- Fixed bugs

---
### GLM 0.8.3.2 final - 2009-06-04
- Added GLM_GTC_quaternion
- Added GLM_GTC_type_precision

---
### GLM 0.8.3.1 final - 2009-05-21
- Fixed old extension system.

---
### GLM 0.8.3.0 final - 2009-05-06
- Added stable extensions.
- Added new extension system.

---
### GLM 0.8.2.3 final - 2009-04-01
- Fixed bugs.

---
### GLM 0.8.2.2 final - 2009-02-24
- Fixed bugs.

---
### GLM 0.8.2.1 final - 2009-02-13
- Fixed bugs.

---
### GLM 0.8.2 final - 2009-01-21
- Fixed bugs.

---
### GLM 0.8.1 final - 2008-10-30
- Fixed bugs.

---
### GLM 0.8.0 final - 2008-10-23
- New method to use extension.

---
### GLM 0.8.0 beta3 - 2008-10-10
- Added CMake support for GLM tests.

---
### GLM 0.8.0 beta2 - 2008-10-04
- Improved half scalars and vectors support.

---
### GLM 0.8.0 beta1 - 2008-09-26
- Improved GLSL conformance
- Added GLSL 1.30 support
- Improved API documentation

---
### GLM 0.7.6 final - 2008-08-08
- Improved C++ standard comformance
- Added Static assert for types checking

---
### GLM 0.7.5 final - 2008-07-05
- Added build message system with Visual Studio
- Pedantic build with GCC

---
### GLM 0.7.4 final - 2008-06-01
- Added external dependencies system.

---
### GLM 0.7.3 final - 2008-05-24
- Fixed bugs
- Added new extension group

---
### GLM 0.7.2 final - 2008-04-27
- Updated documentation
- Added preprocessor options

---
### GLM 0.7.1 final - 2008-03-24
- Disabled half on GCC
- Fixed extensions

---
### GLM 0.7.0 final - 2008-03-22
- Changed to MIT license
- Added new documentation

---
### GLM 0.6.4 - 2007-12-10
- Fixed swizzle operators

---
### GLM 0.6.3 - 2007-11-05
- Fixed type data accesses
- Fixed 3DSMax sdk conflict

---
### GLM 0.6.2 - 2007-10-08
- Fixed extension

---
### GLM 0.6.1 - 2007-10-07
- Fixed a namespace error
- Added extensions

---
### GLM 0.6.0 : 2007-09-16
- Added new extension namespace mecanium
- Added Automatic compiler detection

---
### GLM 0.5.1 - 2007-02-19
- Fixed swizzle operators

---
### GLM 0.5.0 - 2007-01-06
- Upgrated to GLSL 1.2
- Added swizzle operators
- Added setup settings

---
### GLM 0.4.1 - 2006-05-22
- Added OpenGL examples

---
### GLM 0.4.0 - 2006-05-17
- Added missing operators to vec* and mat*
- Added first GLSL 1.2 features
- Fixed windows.h before glm.h when windows.h required

---
### GLM 0.3.2 - 2006-04-21
- Fixed texcoord components access.
- Fixed mat4 and imat4 division operators.

---
### GLM 0.3.1 - 2006-03-28
- Added GCC 4.0 support under MacOS X.
- Added GCC 4.0 and 4.1 support under Linux.
- Added code optimisations.

---
### GLM 0.3 - 2006-02-19
- Improved GLSL type conversion and construction compliance.
- Added experimental extensions.
- Added Doxygen Documentation.
- Added code optimisations.
- Fixed bugs.

---
### GLM 0.2 - 2005-05-05
- Improve adaptative from GLSL.
- Add experimental extensions based on OpenGL extension process.
- Fixe bugs.

---
### GLM 0.1 - 2005-02-21
- Add vec2, vec3, vec4 GLSL types
- Add ivec2, ivec3, ivec4 GLSL types
- Add bvec2, bvec3, bvec4 GLSL types
- Add mat2, mat3, mat4 GLSL types
- Add almost all functions


\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for GLM

This project builds and defines the build2 package for [GLM](https://github.c\
om/g-truc/glm), also known as the OpenGL Mathematics (GLM) header-only C++\
 library for graphics software based on OpenGL Shading Language (GLSL)\
 specifications.

[![Official](https://img.shields.io/website/https/github.com/richgel999/miniz\
.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up\
_message=online)](https://github.com/g-truc/glm)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/m\
iniz.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blue&\
up_message=online)](https://github.com/build2-packaging/glm)
[![cppget.org](https://img.shields.io/website/https/cppget.org/glm.svg?down_m\
essage=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_message=\
online)](https://cppget.org/glm)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/gl\
m.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-the\
-badge&up_color=orange&up_message=running)](https://queue.cppget.org/glm)

## Usage
Make sure to add the stable or alpha section of the `cppget.org` repository\
 to your project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/glm.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: glm ^0.9.9

The library can be imported by the following declaration in a `buildfile`.

    import glm = glm%lib{glm}

## Configuration
There are no configuration options available.

## Issues and Notes
- As there are too many configuration macros, no precompiled library target\
 is provided.
- `inconsistent C++ compiler behavior` bug for GCC version 12: `g++` seems\
 not to be able to consistently process `tests/core/core_setup_message.cpp`\
 because the preprocessing of `glm/detail/setup.hpp` leads to `internal\
 compiler error: unspellable token PRAGMA_EOL`. As it is working for GCC\
 version 13, this might be caused by an older bug in GCC 12 that already has\
 been fixed.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/glm/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/glm/iss\
ues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/glm)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/g-truc/glm
package-url: https://github.com/build2-packaging/glm
email: mail@g-truc.net
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = glm

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = inl
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

test.target = $cxx.target

\
location: glm/glm-0.9.9+2.tar.gz
sha256sum: 4083eb2d34e66738432ede69a315849e456fd1c8fccc32f31bd6ed5d1fb4b259
:
name: glm
version: 1.0.0
type: lib,binless
language: c++
summary: Header-only C++ mathematics library for graphics software based on\
 the OpenGL Shading Language (GLSL) specifications
license: MIT
license: The Happy Bunny License
description:
\
![glm](/doc/manual/logo-mini.png)

[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++\
 mathematics library for graphics software based on the [OpenGL Shading\
 Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangS\
pec.4.50.diff.pdf).

*GLM* provides classes and functions designed and implemented with the same\
 naming conventions and functionality than *GLSL* so that anyone who knows\
 *GLSL*, can use *GLM* as well in C++.

This project isn't limited to *GLSL* features. An extension system, based on\
 the *GLSL* extension conventions, provides extended capabilities: matrix\
 transformations, quaternions, data packing, random numbers, noise, etc...

This library works perfectly with *[OpenGL](https://www.opengl.org)* but it\
 also ensures interoperability with other third party libraries and SDK. It\
 is a good candidate for software rendering (raytracing / rasterisation),\
 image processing, physics simulations and any development context that\
 requires a simple and convenient mathematics library.

*GLM* is written in C++98 but can take advantage of C++11 when supported by\
 the compiler. It is a platform independent library with no dependence and it\
 officially supports the following compilers:
- [*GCC*](http://gcc.gnu.org/) 4.7 and higher
- [*Intel C++ Compose*](https://software.intel.com/en-us/intel-compilers) XE\
 2013 and higher
- [*Clang*](http://llvm.org/) 3.4 and higher
- [*Apple Clang 6.0*](https://developer.apple.com/library/mac/documentation/C\
ompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher
- [*Visual C++*](http://www.visualstudio.com/) 2013 and higher
- [*CUDA*](https://developer.nvidia.com/about-cuda) 9.0 and higher\
 (experimental)
- Any C++11 compiler

For more information about *GLM*, please have a look at the\
 [manual](manual.md) and the [API reference documentation](http://glm.g-truc.\
net/0.9.9/api/modules.html).
The source code and the documentation are licensed under either the [Happy\
 Bunny License (Modified MIT) or the MIT License](manual.md#section0).

Thanks for contributing to the project by [submitting pull\
 requests](https://github.com/g-truc/glm/pulls).

```cpp
#include <glm/vec3.hpp> // glm::vec3
#include <glm/vec4.hpp> // glm::vec4
#include <glm/mat4x4.hpp> // glm::mat4
#include <glm/ext/matrix_transform.hpp> // glm::translate, glm::rotate,\
 glm::scale
#include <glm/ext/matrix_clip_space.hpp> // glm::perspective
#include <glm/ext/scalar_constants.hpp> // glm::pi

glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
{
	glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f /\
 3.0f, 0.1f, 100.f);
	glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f,\
 -Translate));
	View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));
	View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));
	glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
	return Projection * View * Model;
}
```

## [Lastest release](https://github.com/g-truc/glm/releases/latest)

## Project Health

| Service | Status |
| ------- | ------ |
| [GitHub actions](https://github.com/g-truc/glm/actions)|\
 [![.github/workflows/ci.yml](https://github.com/g-truc/glm/actions/workflows\
/ci.yml/badge.svg)](https://github.com/g-truc/glm/actions/workflows/ci.yml)

## Build and Install

```shell
cd /path/to/glm
cmake \\
    -DGLM_BUILD_TESTS=OFF \\
    -DBUILD_SHARED_LIBS=OFF \\
    -B build .
cmake --build build -- all
cmake --build build -- install
```

Passing `-DBUILD_SHARED_LIBS=ON` to build shared library

And then in your `CMakeLists.txt`:

```cmake
find_package(glm CONFIG REQUIRED)
target_link_libraries(main PRIVATE glm::glm)
```

If your perfer to use header-only version of GLM

```cmake
find_package(glm CONFIG REQUIRED)
target_link_libraries(main PRIVATE glm::glm-header-only)
```

## Vcpkg

```shell
vcpkg install glm
```

## CMake using FetchContent
You can add glm to your CMake project to be built together.

Add to the `CMakeLists.txt` file:
```cmake
cmake_minimum_required(VERSION 3.11) # FetchContent is new in version 3.11.

include(FetchContent)

FetchContent_Declare(
	glm
	GIT_REPOSITORY	https://github.com/g-truc/glm.git
	GIT_TAG 	bf71a834948186f4097caa076cd2663c69a10e1e #refs/tags/0.9.9.8
)

FetchContent_MakeAvailable(glm)

target_link_libraries(main PRIVATE glm::glm)
```

## Release notes

### [GLM 1.0.0](https://github.com/g-truc/glm/releases/tag/1.0.0) - 2024-01-24
#### Features:
- Added *GLM_EXT_scalar_reciprocal* with tests
- Added *GLM_EXT_vector_reciprocal* with tests
- Added `glm::iround` and `glm::uround` to *GLM_EXT_scalar_common* and\
 *GLM_EXT_vector_common*
- Added *GLM_EXT_matrix_integer* with tests
- Added Github Actions
- Added GLM_FORCE_UNRESTRICTED_FLOAT to prevent static asserts when using\
 other scalar types with function expecting floats. 

#### Improvements:
- Added `constexpr` qualifier for `cross` product #1040
- Added `constexpr` qualifier for `dot` product #1040

#### Fixes:
- Fixed incorrect assertion for `glm::min` and `glm::max` #1009
- Fixed quaternion orientation in `glm::decompose` #1012
- Fixed singularity in quaternion to euler angle roll conversion #1019
- Fixed `quat` `glm::pow` handling of small magnitude quaternions #1022
- Fixed `glm::fastNormalize` build error #1033
- Fixed `glm::isMultiple` build error #1034
- Fixed `glm::adjugate` calculation #1035
- Fixed `glm::angle` discards the sign of result for angles in range (2*pi-1,\
 2*pi) #1038
- Removed ban on using `glm::string_cast` with *CUDA* host code #1041

### [GLM 0.9.9.8](https://github.com/g-truc/glm/releases/tag/0.9.9.8) -\
 2020-04-13
#### Features:
- Added *GLM_EXT_vector_intX* and *GLM_EXT_vector_uintX* extensions
- Added *GLM_EXT_matrix_intX* and *GLM_EXT_matrix_uintX* extensions

#### Improvements:
- Added `glm::clamp`, `glm::repeat`, `glm::mirrorClamp` and\
 `glm::mirrorRepeat` function to `GLM_EXT_scalar_commond` and\
 `GLM_EXT_vector_commond` extensions with tests

#### Fixes:
- Fixed unnecessary warnings from `matrix_projection.inl` #995
- Fixed quaternion `glm::slerp` overload which interpolates with extra spins\
 #996
- Fixed for `glm::length` using arch64 #992
- Fixed singularity check for `glm::quatLookAt` #770

### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) -\
 2020-01-05
#### Improvements:
- Improved *Neon* support with more functions optimized #950
- Added *CMake* *GLM* interface #963
- Added `glm::fma` implementation based on `std::fma` #969
- Added missing quat constexpr #955
- Added `GLM_FORCE_QUAT_DATA_WXYZ` to store quat data as w,x,y,z instead of\
 x,y,z,w #983

#### Fixes:
- Fixed equal *ULP* variation when using negative sign #965
- Fixed for intersection ray/plane and added related tests #953
- Fixed ARM 64bit detection #949
- Fixed *GLM_EXT_matrix_clip_space* warnings #980
- Fixed Wimplicit-int-float-conversion warnings with clang 10+ #986
- Fixed *GLM_EXT_matrix_clip_space* `perspectiveFov`

### [GLM 0.9.9.6](https://github.com/g-truc/glm/releases/tag/0.9.9.6) -\
 2019-09-08
#### Features:
- Added *Neon* support #945
- Added *SYCL* support #914
- Added *GLM_EXT_scalar_integer* extension with power of two and multiple\
 scalar functions
- Added *GLM_EXT_vector_integer* extension with power of two and multiple\
 vector functions

#### Improvements:
- Added *Visual C++ 2019* detection
- Added *Visual C++ 2017* 15.8 and 15.9 detection
- Added missing genType check for `glm::bitCount` and `glm::bitfieldReverse`\
 #893

#### Fixes:
- Fixed for g++6 where -std=c++1z sets __cplusplus to 201500 instead of\
 201402 #921
- Fixed hash hashes qua instead of tquat #919
- Fixed `.natvis` as structs renamed #915
- Fixed `glm::ldexp` and `glm::frexp` declaration #895
- Fixed missing const to quaternion conversion operators #890
- Fixed *GLM_EXT_scalar_ulp* and *GLM_EXT_vector_ulp* API coding style
- Fixed quaternion componant order: `w, {x, y, z}` #916
- Fixed `GLM_HAS_CXX11_STL` broken on Clang with Linux #926
- Fixed *Clang* or *GCC* build due to wrong `GLM_HAS_IF_CONSTEXPR` definition\
 #907
- Fixed *CUDA* 9 build #910

#### Deprecation:
 - Removed CMake install and uninstall scripts

### [GLM 0.9.9.5](https://github.com/g-truc/glm/releases/tag/0.9.9.5) -\
 2019-04-01
#### Fixes:
- Fixed build errors when defining `GLM_ENABLE_EXPERIMENTAL` #884 #883
- Fixed `if constexpr` warning #887
- Fixed missing declarations for `glm::frexp` and `glm::ldexp` #886

### [GLM 0.9.9.4](https://github.com/g-truc/glm/releases/tag/0.9.9.4) -\
 2019-03-19
#### Features:
- Added `glm::mix` implementation for matrices in *GLM_EXT_matrix_common/ #842
- Added *CMake* `BUILD_SHARED_LIBS` and `BUILD_STATIC_LIBS` build options #871

#### Improvements:
- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By\
 default, it's disabled allowing constexpr support by default. #865
- Optimized inverseTransform #867

#### Fixes:
- Fixed in `glm::mat4x3` conversion #829
- Fixed `constexpr` issue on GCC #832 #865
- Fixed `glm::mix` implementation to improve GLSL conformance #866
- Fixed `glm::int8` being defined as unsigned char with some compiler #839
- Fixed `glm::vec1` include #856
- Ignore `.vscode` #848

### [GLM 0.9.9.3](https://github.com/g-truc/glm/releases/tag/0.9.9.3) -\
 2018-10-31
#### Features:
- Added `glm::equal` and `glm::notEqual` overload with max ULPs parameters\
 for scalar numbers #121
- Added `GLM_FORCE_SILENT_WARNINGS` to silent *GLM* warnings when using\
 language extensions but using W4 or Wpedantic warnings #814 #775
- Added adjugate functions to `GLM_GTX_matrix_operation` #151
- Added `GLM_FORCE_ALIGNED_GENTYPES` to enable aligned types and SIMD\
 instruction are not enabled. This disable `constexpr` #816

#### Improvements:
- Added constant time ULP distance between float #121
- Added `GLM_FORCE_SILENT_WARNINGS` to suppress *GLM* warnings #822

#### Fixes:
- Fixed `glm::simplex` noise build with double #734
- Fixed `glm::bitfieldInsert` according to GLSL spec #818
- Fixed `glm::refract` for negative 'k' #808

### [GLM 0.9.9.2](https://github.com/g-truc/glm/releases/tag/0.9.9.2) -\
 2018-09-14
#### Fixes:
- Fixed `GLM_FORCE_CXX**` section in the manual
- Fixed default initialization with vector and quaternion types using\
 `GLM_FORCE_CTOR_INIT` #812

### [GLM 0.9.9.1](https://github.com/g-truc/glm/releases/tag/0.9.9.1) -\
 2018-09-03
#### Features:
- Added `bitfieldDeinterleave` to *GLM_GTC_bitfield*
- Added missing `glm::equal` and `glm::notEqual` with epsilon for quaternion\
 types to *GLM_GTC_quaternion*
- Added *GLM_EXT_matrix_relational*: `glm::equal` and `glm::notEqual` with\
 epsilon for matrix types
- Added missing aligned matrix types to *GLM_GTC_type_aligned*
- Added C++17 detection
- Added *Visual C++* language standard version detection
- Added PDF manual build from markdown

#### Improvements:
- Added a section to the manual for contributing to *GLM*
- Refactor manual, lists all configuration defines
- Added missing `glm::vec1` based constructors
- Redesigned constexpr support which excludes both SIMD and `constexpr` #783
- Added detection of *Visual C++ 2017* toolsets
- Added identity functions #765
- Splitted headers into EXT extensions to improve compilation time #670
- Added separated performance tests
- Clarified refract valid range of the indices of refraction, between -1 and\
 1 inclusively #806

#### Fixes:
- Fixed SIMD detection on *Clang* and *GCC*
- Fixed build problems due to `std::printf` and `std::clock_t` #778
- Fixed int mod
- Anonymous unions require C++ language extensions
- Fixed `glm::ortho` #790
- Fixed *Visual C++* 2013 warnings in vector relational code #782
- Fixed *ICC* build errors with constexpr #704
- Fixed defaulted operator= and constructors #791
- Fixed invalid conversion from int scalar with vec4 constructor when using\
 SSE instruction
- Fixed infinite loop in random functions when using negative radius values\
 using an assert #739

### [GLM 0.9.9.0](https://github.com/g-truc/glm/releases/tag/0.9.9.0) -\
 2018-05-22
#### Features:
- Added *RGBM* encoding in *GLM_GTC_packing* #420
- Added *GLM_GTX_color_encoding* extension
- Added *GLM_GTX_vec_swizzle*, faster compile time swizzling then swizzle\
 operator #558
- Added *GLM_GTX_exterior_product* with a `vec2` `glm::cross` implementation\
 #621
- Added *GLM_GTX_matrix_factorisation* to factor matrices in various forms\
 #654
- Added [`GLM_ENABLE_EXPERIMENTAL`](manual.md#section7_4) to enable\
 experimental features.
- Added packing functions for integer vectors #639
- Added conan packaging configuration #643 #641
- Added `glm::quatLookAt` to *GLM_GTX_quaternion* #659
- Added `glm::fmin`, `glm::fmax` and `glm::fclamp` to *GLM_GTX_extended_min_m\
ax* #372
- Added *GLM_EXT_vector_relational*: extend `glm::equal` and `glm::notEqual`\
 to take an epsilon argument
- Added *GLM_EXT_vector_relational*: `glm::openBounded` and\
 `glm::closeBounded`
- Added *GLM_EXT_vec1*: `*vec1` types
- Added *GLM_GTX_texture*: `levels` function
- Added spearate functions to use both nagative one and zero near clip plans\
 #680
- Added `GLM_FORCE_SINGLE_ONLY` to use *GLM* on platforms that don't support\
 double #627
- Added *GLM_GTX_easing* for interpolation functions #761

#### Improvements:
- No more default initialization of vector, matrix and quaternion types
- Added lowp variant of GTC_color_space convertLinearToSRGB #419
- Replaced the manual by a markdown version #458
- Improved API documentation #668
- Optimized GTC_packing implementation
- Optimized GTC_noise functions
- Optimized GTC_color_space HSV to RGB conversions
- Optimised GTX_color_space_YCoCg YCoCgR conversions
- Optimized GTX_matrix_interpolation axisAngle function
- Added FAQ 12: Windows headers cause build errors... #557
- Removed GCC shadow warnings #595
- Added error for including of different versions of GLM #619
- Added GLM_FORCE_IGNORE_VERSION to ignore error caused by including\
 different version of GLM #619
- Reduced warnings when using very strict compilation flags #646
- length() member functions are constexpr #657
- Added support of -Weverything with Clang #646
- Improved exponential function test coverage
- Enabled warnings as error with Clang unit tests
- Conan package is an external repository: https://github.com/bincrafters/con\
an-glm
- Clarify quat_cast documentation, applying on pure rotation matrices #759

#### Fixes:
- Removed doxygen references to *GLM_GTC_half_float* which was removed in\
 0.9.4
- Fixed `glm::decompose` #448
- Fixed `glm::intersectRayTriangle` #6
- Fixed dual quaternion != operator #629
- Fixed usused variable warning in *GLM_GTX_spline* #618
- Fixed references to `GLM_FORCE_RADIANS` which was removed #642
- Fixed `glm::fastInverseSqrt` to use fast inverse square #640
- Fixed `glm::axisAngle` NaN #638
- Fixed integer pow from *GLM_GTX_integer* with null exponent #658
- Fixed `quat` `normalize` build error #656
- Fixed *Visual C++ 2017.2* warning regarding `__has_feature` definision #655
- Fixed documentation warnings
- Fixed `GLM_HAS_OPENMP` when *OpenMP* is not enabled
- Fixed Better follow GLSL `min` and `max` specification #372
- Fixed quaternion constructor from two vectors special cases #469
- Fixed `glm::to_string` on quaternions wrong components order #681
- Fixed `glm::acsch` #698
- Fixed `glm::isnan` on *CUDA* #727

#### Deprecation:
- Requires *Visual Studio 2013*, *GCC 4.7*, *Clang 3.4*, *Cuda 7*, *ICC 2013*\
 or a C++11 compiler
- Removed *GLM_GTX_simd_vec4* extension
- Removed *GLM_GTX_simd_mat4* extension
- Removed *GLM_GTX_simd_quat* extension
- Removed `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead
- Removed `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead
- Removed `GLM_DEPTH_ZERO_TO_ONE`, use `GLM_FORCE_DEPTH_ZERO_TO_ONE` instead
- Removed `GLM_LEFT_HANDED`, use `GLM_FORCE_LEFT_HANDED` instead
- Removed `GLM_FORCE_NO_CTOR_INIT`
- Removed `glm::uninitialize`

---
### [GLM 0.9.8.5](https://github.com/g-truc/glm/releases/tag/0.9.8.5) -\
 2017-08-16
#### Features:
- Added *Conan* package support #647

#### Fixes:
- Fixed *Clang* version detection from source #608
- Fixed `glm::packF3x9_E1x5` exponent packing #614
- Fixed build error `min` and `max` specializations with integer #616
- Fixed `simd_mat4` build error #652

---
### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) -\
 2017-01-22
#### Fixes:
- Fixed *GLM_GTC_packing* test failing on *GCC* x86 due to denorms #212 #577
- Fixed `POPCNT` optimization build in *Clang* #512
- Fixed `glm::intersectRayPlane` returns true in parallel case #578
- Fixed *GCC* 6.2 compiler warnings #580
- Fixed *GLM_GTX_matrix_decompose* `glm::decompose` #582 #448
- Fixed *GCC* 4.5 and older build #566
- Fixed *Visual C++* internal error when declaring a global vec type with\
 siwzzle expression enabled #594
- Fixed `GLM_FORCE_CXX11` with Clang and libstlc++ which wasn't using C++11\
 STL features. #604

---
### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) -\
 2016-11-12
#### Improvements:
- Broader support of `GLM_FORCE_UNRESTRICTED_GENTYPE` #378

#### Fixes:
- Fixed Android build error with C++11 compiler but C++98 STL #284 #564
- Fixed *GLM_GTX_transform2* shear* functions #403
- Fixed interaction between `GLM_FORCE_UNRESTRICTED_GENTYPE` and `glm::ortho`\
 function #568
- Fixed `glm::bitCount` with AVX on 32 bit builds #567
- Fixed *CMake* `find_package` with version specification #572 #573

---
### [GLM 0.9.8.2](https://github.com/g-truc/glm/releases/tag/0.9.8.2) -\
 2016-11-01
#### Improvements:
- Added *Visual C++* 15 detection
- Added *Clang* 4.0 detection
- Added warning messages when using `GLM_FORCE_CXX**` but the compiler
  is known to not fully support the requested C++ version #555
- Refactored `GLM_COMPILER_VC` values
- Made quat, vec, mat type component `length()` static #565

#### Fixes:
- Fixed *Visual C++* `constexpr` build error #555, #556

---
### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) -\
 2016-09-25
#### Improvements:
- Optimized quaternion `glm::log` function #554

#### Fixes:
- Fixed *GCC* warning filtering, replaced -pedantic by -Wpedantic
- Fixed SIMD faceforward bug. #549
- Fixed *GCC* 4.8 with C++11 compilation option #550
- Fixed *Visual Studio* aligned type W4 warning #548
- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552

---
### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) -\
 2016-09-11
#### Features:
- Added right and left handed projection and clip control support #447 #415\
 #119
- Added `glm::compNormalize` and `glm::compScale` functions to\
 *GLM_GTX_component_wise*
- Added `glm::packF3x9_E1x5` and `glm::unpackF3x9_E1x5` to *GLM_GTC_packing*\
 for RGB9E5 #416
- Added `(un)packHalf` to *GLM_GTC_packing*
- Added `(un)packUnorm` and `(un)packSnorm` to *GLM_GTC_packing*
- Added 16bit pack and unpack to *GLM_GTC_packing*
- Added 8bit pack and unpack to *GLM_GTC_packing*
- Added missing `bvec*` && and || operators
- Added `glm::iround` and `glm::uround` to *GLM_GTC_integer*, fast round on\
 positive values
- Added raw SIMD API
- Added 'aligned' qualifiers
- Added *GLM_GTC_type_aligned* with aligned *vec* types
- Added *GLM_GTC_functions* extension
- Added quaternion version of `glm::isnan` and `glm::isinf` #521
- Added `glm::lowestBitValue` to *GLM_GTX_bit* #536
- Added `GLM_FORCE_UNRESTRICTED_GENTYPE` allowing non basic `genType` #543

#### Improvements:
- Improved SIMD and swizzle operators interactions with *GCC* and *Clang* #474
- Improved *GLM_GTC_random* `linearRand` documentation
- Improved *GLM_GTC_reciprocal* documentation
- Improved `GLM_FORCE_EXPLICIT_CTOR` coverage #481
- Improved *OpenMP* support detection for *Clang*, *GCC*, *ICC* and *VC*
- Improved *GLM_GTX_wrap* for SIMD friendliness
- Added `constexpr` for `*vec*`, `*mat*`, `*quat*` and `*dual_quat*` types\
 #493
- Added *NEON* instruction set detection
- Added *MIPS* CPUs detection
- Added *PowerPC* CPUs detection
- Use *Cuda* built-in function for abs function implementation with Cuda\
 compiler
- Factorized `GLM_COMPILER_LLVM` and `GLM_COMPILER_APPLE_CLANG` into\
 `GLM_COMPILER_CLANG`
- No more warnings for use of long long
- Added more information to build messages

#### Fixes:
- Fixed *GLM_GTX_extended_min_max* filename typo #386
- Fixed `glm::intersectRayTriangle` to not do any unintentional backface\
 culling
- Fixed long long warnings when using C++98 on *GCC* and *Clang* #482
- Fixed sign with signed integer function on non-x86 architecture
- Fixed strict aliasing warnings #473
- Fixed missing `glm::vec1` overload to `glm::length2` and `glm::distance2`\
 functions #431
- Fixed *GLM* test '/fp:fast' and '/Za' command-line options are incompatible
- Fixed quaterion to mat3 cast function `glm::mat3_cast` from\
 *GLM_GTC_quaternion* #542
- Fixed *GLM_GTX_io* for *Cuda* #547 #546

#### Deprecation:
- Removed `GLM_FORCE_SIZE_FUNC` define
- Deprecated *GLM_GTX_simd_vec4* extension
- Deprecated *GLM_GTX_simd_mat4* extension
- Deprecated *GLM_GTX_simd_quat* extension
- Deprecated `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead
- Deprecated `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead

---
### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) -\
 2016-07-16
#### Improvements:
- Added pkg-config file #509
- Updated list of compiler versions detected
- Improved C++ 11 STL detection #523

#### Fixes:
- Fixed STL for C++11 detection on ICC #510
- Fixed missing vec1 overload to length2 and distance2 functions #431
- Fixed long long warnings when using C++98 on GCC and Clang #482
- Fixed scalar reciprocal functions (GTC_reciprocal) #520

---
### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) -\
 2016-05-24
#### Improvements:
- Added Visual C++ Clang toolset detection

#### Fixes:
- Fixed uaddCarry warning #497
- Fixed roundPowerOfTwo and floorPowerOfTwo #503
- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits
- Fixed to_string when used with GLM_FORCE_INLINE #506
- Fixed GLM_FORCE_INLINE with binary vec4 operators
- Fixed GTX_extended_min_max filename typo #386
- Fixed intersectRayTriangle to not do any unintentional backface culling

---
### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) -\
 2016-03-19
#### Fixes:
- Fixed asinh and atanh warning with C++98 STL #484
- Fixed polar coordinates function latitude #485
- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4\
 #475
- Fixed eulerAngles precision error, returns NaN  #451
- Fixed undefined reference errors #489
- Fixed missing GLM_PLATFORM_CYGWIN declaration #495
- Fixed various undefined reference errors #490

---
### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) -\
 2016-02-21
#### Improvements:
- Added AVX512 detection

#### Fixes:
- Fixed CMake policy warning
- Fixed GCC 6.0 detection #477
- Fixed Clang build on Windows #479
- Fixed 64 bits constants warnings on GCC #463

---
### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) -\
 2016-01-03
#### Fixes:
- Fixed GTC_round floorMultiple/ceilMultiple #412
- Fixed GTC_packing unpackUnorm3x10_1x2 #414
- Fixed GTC_matrix_inverse affineInverse #192
- Fixed ICC on Linux build errors #449
- Fixed ldexp and frexp compilation errors
- Fixed "Declaration shadows a field" warning #468
- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468
- Fixed various 'X is not defined' warnings #468
- Fixed missing unary + operator #435
- Fixed Cygwin build errors when using C++11 #405

---
### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) -\
 2015-09-07
#### Improvements:
- Improved constexpr for constant functions coverage #198
- Added to_string for quat and dual_quat in GTX_string_cast #375
- Improved overall execution time of unit tests #396

#### Fixes:
- Fixed strict alignment warnings #235 #370
- Fixed link errors on compilers not supported default function #377
- Fixed compilation warnings in vec4
- Fixed non-identity quaternions for equal vectors #234
- Fixed excessive GTX_fast_trigonometry execution time #396
- Fixed Visual Studio 2015 'hides class member' warnings #394
- Fixed builtin bitscan never being used #392
- Removed unused func_noise.* files #398

---
### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) -\
 2015-08-02
#### Features:
- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions
- Added 'fmod' overload to GTX_common with tests #308
- Left handed perspective and lookAt functions #314
- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311
- Added <glm/gtx/hash.hpp> to perform std::hash on GLM types #320 #367
- Added <glm/gtx/wrap.hpp> for texcoord wrapping
- Added static components and precision members to all vector and quat types\
 #350
- Added .gitignore #349
- Added support of defaulted functions to GLM types, to use them in unions\
 #366

#### Improvements:
- Changed usage of __has_include to support Intel compiler #307
- Specialized integer implementation of YCoCg-R #310
- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317
- Added master branch continuous integration service on Linux 64 #332
- Clarified manual regarding angle unit in GLM, added FAQ 11 #326
- Updated list of compiler versions

#### Fixes:
- Fixed default precision for quat and dual_quat type #312
- Fixed (u)int64 MSB/LSB handling on BE archs #306
- Fixed multi-line comment warning in g++. #315
- Fixed specifier removal by 'std::make_pair<>' #333
- Fixed perspective fovy argument documentation #327
- Removed -m64 causing build issues on Linux 32 #331
- Fixed isfinite with C++98 compilers #343
- Fixed Intel compiler build error on Linux #354
- Fixed use of libstdc++ with Clang #351
- Fixed quaternion pow #346
- Fixed decompose warnings #373
- Fixed matrix conversions #371

#### Deprecation:
- Removed integer specification for 'mod' in GTC_integer #308
- Removed GTX_multiple, replaced by GTC_round

---
### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) -\
 2015-02-15
- Fixed Android doesn't have C++ 11 STL #284

---
### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) -\
 2015-02-15
#### Features:
- Added display of GLM version with other GLM_MESSAGES
- Added ARM instruction set detection

#### Improvements:
- Removed assert for perspective with zFar < zNear #298
- Added Visual Studio natvis support for vec1, quat and dualqual types
- Cleaned up C++11 feature detections
- Clarify GLM licensing

#### Fixes:
- Fixed faceforward build #289
- Fixed conflict with Xlib #define True 1 #293
- Fixed decompose function VS2010 templating issues #294
- Fixed mat4x3 = mat2x3 * mat4x2 operator #297
- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295
- Fixed Visual Studio natvis support for vec4 #288
- Fixed GTC_packing *pack*norm*x* build and added tests #292
- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242
- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support
- Fixed functions not inlined with Clang #302
- Fixed memory corruption (undefined behaviour) #303

---
### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) -\
 2014-12-10
#### Features:
- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags
- Added C++14 detection

#### Improvements:
- Clean up GLM_MESSAGES compilation log to report only detected capabilities

#### Fixes:
- Fixed scalar uaddCarry build error with Cuda #276
- Fixed C++11 explicit conversion operators detection #282
- Fixed missing explicit conversion when using integer log2 with *vec1 types
- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler
- Fixed Android build issue, STL C++11 is not supported by the NDK #284
- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10
- Fixed Visual C++ 32 bit build #283
- Fixed GLM_FORCE_SIZE_FUNC pragma message
- Fixed C++98 only build
- Fixed conflict between GTX_compatibility and GTC_quaternion #286
- Fixed C++ language restriction using GLM_FORCE_CXX**

---
### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) -\
 2014-11-30
#### Features:
- Exposed template vector and matrix types in 'glm' namespace #239, #244
- Added GTX_scalar_multiplication for C++ 11 compiler only #242
- Added GTX_range for C++ 11 compiler only #240
- Added closestPointOnLine function for tvec2 to GTX_closest_point #238
- Added GTC_vec1 extension, *vec1 support to *vec* types
- Updated GTX_associated_min_max with vec1 support
- Added support of precision and integers to linearRand #230
- Added Integer types support to GTX_string_cast #249
- Added vec3 slerp #237
- Added GTX_common with isdenomal #223
- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245
- Added GLM_FORCE_NO_CTOR_INIT
- Added 'uninitialize' to explicitly not initialize a GLM type
- Added GTC_bitfield extension, promoted GTX_bit
- Added GTC_integer extension, promoted GTX_bit and GTX_integer
- Added GTC_round extension, promoted GTX_bit
- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269
- Added GTX_type_aligned for aligned vector, matrix and quaternion types

#### Improvements:
- Rely on C++11 to implement isinf and isnan
- Removed GLM_FORCE_CUDA, Cuda is implicitly detected
- Separated Apple Clang and LLVM compiler detection
- Used pragma once
- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and 
  GLM_FORCE_PURE
- Added not function (from GLSL specification) on VC12
- Optimized bitfieldReverse and bitCount functions
- Optimized findLSB and findMSB functions.
- Optimized matrix-vector multiple performance with Cuda #257, #258
- Reduced integer type redifinitions #233
- Rewrited of GTX_fast_trigonometry #264 #265
- Made types trivially copyable #263
- Removed <iostream> in GLM tests
- Used std features within GLM without redeclaring
- Optimized cot function #272
- Optimized sign function #272
- Added explicit cast from quat to mat3 and mat4 #275

#### Fixes:
- Fixed std::nextafter not supported with C++11 on Android #217
- Fixed missing value_type for dual quaternion
- Fixed return type of dual quaternion length
- Fixed infinite loop in isfinite function with GCC #221
- Fixed Visual Studio 14 compiler warnings
- Fixed implicit conversion from another tvec2 type to another tvec2 #241
- Fixed lack of consistency of quat and dualquat constructors
- Fixed uaddCarray #253
- Fixed float comparison warnings #270

#### Deprecation:
- Requires Visual Studio 2010, GCC 4.2, Apple Clang 4.0, LLVM 3.0, Cuda 4,\
 ICC 2013 or a C++98 compiler
- Removed degrees for function parameters
- Removed GLM_FORCE_RADIANS, active by default
- Removed VC 2005 / 8 and 2008 / 9 support
- Removed GCC 3.4 to 4.3 support
- Removed LLVM GCC support
- Removed LLVM 2.6 to 3.1 support
- Removed CUDA 3.0 to 3.2 support

---
### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9\
.5.4)
- Fixed non-utf8 character #196
- Added FindGLM install for CMake #189
- Fixed GTX_color_space - saturation #195
- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191
- Fixed builtin GLM_ARCH_SSE4 #204
- Optimized Quaternion vector rotation #205
- Fixed missing doxygen @endcond tag #211
- Fixed instruction set detection with Clang #158
- Fixed orientate3 function #207
- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210
- Added GTX_io for io with <iostream> #144
- Fixed fastDistance ambiguity #215
- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to
  tweakedInfinitePerspective
- Fixed std::copy and std::vector with GLM types #214
- Fixed strict aliasing issues #212, #152
- Fixed std::nextafter not supported with C++11 on Android #213
- Fixed corner cases in exp and log functions for quaternions #199

---
### GLM 0.9.5.3 - 2014-04-02
- Added instruction set auto detection with Visual C++ using _M_IX86_FP -\
 /arch
  compiler argument
- Fixed GTX_raw_data code dependency
- Fixed GCC instruction set detection
- Added GLM_GTX_matrix_transform_2d extension (#178, #176)
- Fixed CUDA issues (#169, #168, #183, #182)
- Added support for all extensions but GTX_string_cast to CUDA
- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152)
- Fixed missing bitfieldInterleave definisions
- Fixed usubBorrow (#171)
- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173)
- Added full tests for eulerAngle*** functions (#173)
- Added workaround for a CUDA compiler bug (#186, #185)

---
### GLM 0.9.5.2 - 2014-02-08
- Fixed initializer list ambiguity (#159, #160)
- Fixed warnings with the Android NDK 9c
- Fixed non power of two matrix products
- Fixed mix function link error
- Fixed SSE code included in GLM tests on "pure" platforms
- Fixed undefined reference to fastInverseSqrt (#161)
- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165)
- Fix dot product clamp range for vector angle functions. (#163)
- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c\
 (#152)
- Fixed GLM_GTC_constants description brief (#162)

---
### GLM 0.9.5.1 - 2014-01-11
- Fixed angle and orientedAngle that sometimes return NaN values (#145)
- Deprecated degrees for function parameters and display a message
- Added possible static_cast conversion of GLM types (#72)
- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146)
- Fixed mismatch between some declarations and definitions
- Fixed inverse link error when using namespace glm; (#147)
- Optimized matrix inverse and division code (#149)
- Added intersectRayPlane function (#153)
- Fixed outerProduct return type (#155)

---
### GLM 0.9.5.0 - 2013-12-25
- Added forward declarations (glm/fwd.hpp) for faster compilations
- Added per feature headers
- Minimized GLM internal dependencies
- Improved Intel Compiler detection
- Added bitfieldInterleave and _mm_bit_interleave_si128 functions
- Added GTX_scalar_relational
- Added GTX_dual_quaternion
- Added rotation function to GTX_quaternion (#22)
- Added precision variation of each type
- Added quaternion comparison functions
- Fixed GTX_multiple for negative value
- Removed GTX_ocl_type extension
- Fixed post increment and decrement operators
- Fixed perspective with zNear == 0 (#71)
- Removed l-value swizzle operators
- Cleaned up compiler detection code for unsupported compilers
- Replaced C cast by C++ casts
- Fixed .length() that should return a int and not a size_t
- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t
- Removed unnecessary conversions
- Optimized packing and unpacking functions
- Removed the normalization of the up argument of lookAt function (#114)
- Added low precision specializations of inversesqrt
- Fixed ldexp and frexp implementations
- Increased assert coverage
- Increased static_assert coverage
- Replaced GLM traits by STL traits when possible
- Allowed including individual core feature
- Increased unit tests completeness
- Added creating of a quaternion from two vectors
- Added C++11 initializer lists
- Fixed umulExtended and imulExtended implementations for vector types (#76)
- Fixed CUDA coverage for GTC extensions
- Added GTX_io extension
- Improved GLM messages enabled when defining GLM_MESSAGES
- Hidden matrix_inverse function implementation detail into private section

---
### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) -\
 2013-09-20
- Fixed detection to select the last known compiler if newer version #106
- Fixed is_int and is_uint code duplication with GCC and C++11 #107 
- Fixed test suite build while using Clang in C++11 mode
- Added c++1y mode support in CMake test suite
- Removed ms extension mode to CMake when no using Visual C++
- Added pedantic mode to CMake test suite for Clang and GCC
- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows
  for ICC
- Added compilation errors for unsupported compiler versions
- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112
- Fixed const ref issue on assignment operator taking a scalar parameter #116
- Fixed glm::eulerAngleY implementation #117

---
### GLM 0.9.4.5 - 2013-08-12
- Fixed CUDA support
- Fixed inclusion of intrinsics in "pure" mode #92
- Fixed language detection on GCC when the C++0x mode isn't enabled #95
- Fixed issue #97: register is deprecated in C++11
- Fixed issue #96: CUDA issues
- Added Windows CE detection #92
- Added missing value_ptr for quaternions #99

---
### GLM 0.9.4.4 - 2013-05-29
- Fixed slerp when costheta is close to 1 #65
- Fixed mat4x2 value_type constructor #70
- Fixed glm.natvis for Visual C++ 12 #82
- Added assert in inversesqrt to detect division by zero #61
- Fixed missing swizzle operators #86
- Fixed CUDA warnings #86
- Fixed GLM natvis for VC11 #82
- Fixed GLM_GTX_multiple with negative values #79
- Fixed glm::perspective when zNear is zero #71

---
### GLM 0.9.4.3 - 2013-03-20
- Detected qualifier for Clang
- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions
- Fixed squad, intermediate and exp quaternion functions
- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a\
 vec3
- Clarify the license applying on the manual
- Added a docx copy of the manual
- Fixed GLM_GTX_matrix_interpolation
- Fixed isnan and isinf on Android with Clang
- Autodetected C++ version using __cplusplus value
- Fixed mix for bool and bvec* third parameter

---
### GLM 0.9.4.2 - 2013-02-14
- Fixed compAdd from GTX_component_wise
- Fixed SIMD support for Intel compiler on Windows
- Fixed isnan and isinf for CUDA compiler
- Fixed GLM_FORCE_RADIANS on glm::perspective
- Fixed GCC warnings
- Fixed packDouble2x32 on Xcode
- Fixed mix for vec4 SSE implementation
- Fixed 0x2013 dash character in comments that cause issue in Windows 
  Japanese mode
- Fixed documentation warnings
- Fixed CUDA warnings

---
### GLM 0.9.4.1 - 2012-12-22
- Improved half support: -0.0 case and implicit conversions
- Fixed Intel Composer Compiler support on Linux
- Fixed interaction between quaternion and euler angles
- Fixed GTC_constants build
- Fixed GTX_multiple
- Fixed quat slerp using mix function when cosTheta close to 1
- Improved fvec4SIMD and fmat4x4SIMD implementations
- Fixed assert messages
- Added slerp and lerp quaternion functions and tests

---
### GLM 0.9.4.0 - 2012-11-18
- Added Intel Composer Compiler support
- Promoted GTC_espilon extension
- Promoted GTC_ulp extension
- Removed GLM website from the source repository
- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments
- Fixed detection of Clang and LLVM GCC on MacOS X
- Added debugger visualizers for Visual C++ 2012
- Requires Visual Studio 2005, GCC 4.2, Clang 2.6, Cuda 3, ICC 2013 or a\
 C++98 compiler

---
### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) -\
 2012-06-30
- Added SSE4 and AVX2 detection.
- Removed VIRTREV_xstream and the incompatibility generated with GCC
- Fixed C++11 compiler option for GCC
- Removed MS language extension option for GCC (not fonctionnal)
- Fixed bitfieldExtract for vector types
- Fixed warnings
- Fixed SSE includes

---
### GLM 0.9.3.3 - 2012-05-10
- Fixed isinf and isnan
- Improved compatibility with Intel compiler
- Added CMake test build options: SIMD, C++11, fast math and MS land ext
- Fixed SIMD mat4 test on GCC
- Fixed perspectiveFov implementation
- Fixed matrixCompMult for none-square matrices
- Fixed namespace issue on stream operators
- Fixed various warnings
- Added VC11 support

---
### GLM 0.9.3.2 - 2012-03-15
- Fixed doxygen documentation
- Fixed Clang version detection
- Fixed simd mat4 /= operator

---
### GLM 0.9.3.1 - 2012-01-25
- Fixed platform detection
- Fixed warnings
- Removed detail code from Doxygen doc

---
### GLM 0.9.3.0 - 2012-01-09
- Added CPP Check project
- Fixed conflict with Windows headers
- Fixed isinf implementation
- Fixed Boost conflict
- Fixed warnings

---
### GLM 0.9.3.B - 2011-12-12
- Added support for Chrone Native Client
- Added epsilon constant
- Removed value_size function from vector types
- Fixed roundEven on GCC
- Improved API documentation
- Fixed modf implementation
- Fixed step function accuracy
- Fixed outerProduct

---
### GLM 0.9.3.A - 2011-11-11
- Improved doxygen documentation
- Added new swizzle operators for C++11 compilers
- Added new swizzle operators declared as functions
- Added GLSL 4.20 length for vector and matrix types
- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions
- Promoted GLM_GTC_random extension: linear, gaussian and various random\
 number 
generation distribution
- Added GLM_GTX_constants: provides useful constants
- Added extension versioning
- Removed many unused namespaces
- Fixed half based type contructors
- Added GLSL core noise functions

---
### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) -\
 2011-10-24
- Added more swizzling constructors
- Added missing non-squared matrix products

---
### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) -\
 2011-10-01
- Fixed half based type build on old GCC
- Fixed /W4 warnings on Visual C++
- Fixed some missing l-value swizzle operators

---
### GLM 0.9.2.5 - 2011-09-20
- Fixed floatBitToXint functions
- Fixed pack and unpack functions
- Fixed round functions

---
### GLM 0.9.2.4 - 2011-09-03
- Fixed extensions bugs

---
### GLM 0.9.2.3 - 2011-06-08
- Fixed build issues

---
### GLM 0.9.2.2 - 2011-06-02
- Expend matrix constructors flexibility
- Improved quaternion implementation
- Fixed many warnings across platforms and compilers

---
### GLM 0.9.2.1 - 2011-05-24
- Automatically detect CUDA support
- Improved compiler detection
- Fixed errors and warnings in VC with C++ extensions disabled
- Fixed and tested GLM_GTX_vector_angle
- Fixed and tested GLM_GTX_rotate_vector

---
### GLM 0.9.2.0 - 2011-05-09
- Added CUDA support
- Added CTest test suite
- Added GLM_GTX_ulp extension
- Added GLM_GTX_noise extension
- Added GLM_GTX_matrix_interpolation extension
- Updated quaternion slerp interpolation

---
### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) -\
 2011-05-07
- Fixed bugs

---
### GLM 0.9.1.2 - 2011-04-15
- Fixed bugs

---
### GLM 0.9.1.1 - 2011-03-17
- Fixed bugs

---
### GLM 0.9.1.0 - 2011-03-03
- Fixed bugs

---
### GLM 0.9.1.B - 2011-02-13
- Updated API documentation
- Improved SIMD implementation
- Fixed Linux build

---
### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) -\
 2011-02-13
- Added quaternion product operator.
- Clarify that GLM is a header only library.

---
### GLM 0.9.1.A - 2011-01-31
- Added SIMD support
- Added new swizzle functions
- Improved static assert error message with C++0x static_assert
- New setup system
- Reduced branching
- Fixed trunc implementation

---
### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) -\
 2011-01-30
- Added GLSL 4.10 packing functions
- Added == and != operators for every types.

---
### GLM 0.9.0.6 - 2010-12-21
- Many matrices bugs fixed

---
### GLM 0.9.0.5 - 2010-11-01
- Improved Clang support
- Fixed bugs

---
### GLM 0.9.0.4 - 2010-10-04
- Added autoexp for GLM
- Fixed bugs

---
### GLM 0.9.0.3 - 2010-08-26
- Fixed non-squared matrix operators

---
### GLM 0.9.0.2 - 2010-07-08
- Added GLM_GTX_int_10_10_10_2
- Fixed bugs

---
### GLM 0.9.0.1 - 2010-06-21
- Fixed extensions errors

---
### GLM 0.9.0.0 - 2010-05-25
- Objective-C support
- Fixed warnings
- Updated documentation

---
### GLM 0.9.B.2 - 2010-04-30
- Git transition
- Removed experimental code from releases
- Fixed bugs

---
### GLM 0.9.B.1 - 2010-04-03
- Based on GLSL 4.00 specification
- Added the new core functions
- Added some implicit conversion support

---
### GLM 0.9.A.2 - 2010-02-20
- Improved some possible errors messages
- Improved declarations and definitions match

---
### GLM 0.9.A.1 - 2010-02-09
- Removed deprecated features
- Internal redesign

---
### GLM 0.8.4.4 final - 2010-01-25
- Fixed warnings

---
### GLM 0.8.4.3 final - 2009-11-16
- Fixed Half float arithmetic
- Fixed setup defines

---
### GLM 0.8.4.2 final - 2009-10-19
- Fixed Half float adds

---
### GLM 0.8.4.1 final - 2009-10-05
- Updated documentation
- Fixed MacOS X build

---
### GLM 0.8.4.0 final - 2009-09-16
- Added GCC 4.4 and VC2010 support
- Added matrix optimizations

---
### GLM 0.8.3.5 final - 2009-08-11
- Fixed bugs

---
### GLM 0.8.3.4 final - 2009-08-10
- Updated GLM according GLSL 1.5 spec
- Fixed bugs

---
### GLM 0.8.3.3 final - 2009-06-25
- Fixed bugs

---
### GLM 0.8.3.2 final - 2009-06-04
- Added GLM_GTC_quaternion
- Added GLM_GTC_type_precision

---
### GLM 0.8.3.1 final - 2009-05-21
- Fixed old extension system.

---
### GLM 0.8.3.0 final - 2009-05-06
- Added stable extensions.
- Added new extension system.

---
### GLM 0.8.2.3 final - 2009-04-01
- Fixed bugs.

---
### GLM 0.8.2.2 final - 2009-02-24
- Fixed bugs.

---
### GLM 0.8.2.1 final - 2009-02-13
- Fixed bugs.

---
### GLM 0.8.2 final - 2009-01-21
- Fixed bugs.

---
### GLM 0.8.1 final - 2008-10-30
- Fixed bugs.

---
### GLM 0.8.0 final - 2008-10-23
- New method to use extension.

---
### GLM 0.8.0 beta3 - 2008-10-10
- Added CMake support for GLM tests.

---
### GLM 0.8.0 beta2 - 2008-10-04
- Improved half scalars and vectors support.

---
### GLM 0.8.0 beta1 - 2008-09-26
- Improved GLSL conformance
- Added GLSL 1.30 support
- Improved API documentation

---
### GLM 0.7.6 final - 2008-08-08
- Improved C++ standard comformance
- Added Static assert for types checking

---
### GLM 0.7.5 final - 2008-07-05
- Added build message system with Visual Studio
- Pedantic build with GCC

---
### GLM 0.7.4 final - 2008-06-01
- Added external dependencies system.

---
### GLM 0.7.3 final - 2008-05-24
- Fixed bugs
- Added new extension group

---
### GLM 0.7.2 final - 2008-04-27
- Updated documentation
- Added preprocessor options

---
### GLM 0.7.1 final - 2008-03-24
- Disabled half on GCC
- Fixed extensions

---
### GLM 0.7.0 final - 2008-03-22
- Changed to MIT license
- Added new documentation

---
### GLM 0.6.4 - 2007-12-10
- Fixed swizzle operators

---
### GLM 0.6.3 - 2007-11-05
- Fixed type data accesses
- Fixed 3DSMax sdk conflict

---
### GLM 0.6.2 - 2007-10-08
- Fixed extension

---
### GLM 0.6.1 - 2007-10-07
- Fixed a namespace error
- Added extensions

---
### GLM 0.6.0 : 2007-09-16
- Added new extension namespace mecanium
- Added Automatic compiler detection

---
### GLM 0.5.1 - 2007-02-19
- Fixed swizzle operators

---
### GLM 0.5.0 - 2007-01-06
- Upgrated to GLSL 1.2
- Added swizzle operators
- Added setup settings

---
### GLM 0.4.1 - 2006-05-22
- Added OpenGL examples

---
### GLM 0.4.0 - 2006-05-17
- Added missing operators to vec* and mat*
- Added first GLSL 1.2 features
- Fixed windows.h before glm.h when windows.h required

---
### GLM 0.3.2 - 2006-04-21
- Fixed texcoord components access.
- Fixed mat4 and imat4 division operators.

---
### GLM 0.3.1 - 2006-03-28
- Added GCC 4.0 support under MacOS X.
- Added GCC 4.0 and 4.1 support under Linux.
- Added code optimisations.

---
### GLM 0.3 - 2006-02-19
- Improved GLSL type conversion and construction compliance.
- Added experimental extensions.
- Added Doxygen Documentation.
- Added code optimisations.
- Fixed bugs.

---
### GLM 0.2 - 2005-05-05
- Improve adaptative from GLSL.
- Add experimental extensions based on OpenGL extension process.
- Fixed bugs.

---
### GLM 0.1 - 2005-02-21
- Add vec2, vec3, vec4 GLSL types
- Add ivec2, ivec3, ivec4 GLSL types
- Add bvec2, bvec3, bvec4 GLSL types
- Add mat2, mat3, mat4 GLSL types
- Add almost all functions


\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for GLM

This project builds and defines the build2 package for [GLM](https://github.c\
om/g-truc/glm), also known as the OpenGL Mathematics (GLM) header-only C++\
 library for graphics software based on OpenGL Shading Language (GLSL)\
 specifications.

[![Official](https://img.shields.io/website/https/github.com/richgel999/miniz\
.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up\
_message=online)](https://github.com/g-truc/glm)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/m\
iniz.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blue&\
up_message=online)](https://github.com/build2-packaging/glm)
[![cppget.org](https://img.shields.io/website/https/cppget.org/glm.svg?down_m\
essage=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_message=\
online)](https://cppget.org/glm)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/gl\
m.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-the\
-badge&up_color=orange&up_message=running)](https://queue.cppget.org/glm)

## Usage
Make sure to add the stable or alpha section of the `cppget.org` repository\
 to your project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/glm.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: glm ^1.0.0

The library can be imported by the following declaration in a `buildfile`.

    import glm = glm%lib{glm}

## Configuration
There are no configuration options available.

## Issues and Notes
- This package does not support the GLM C++ module that has been added in\
 version 1.0.0 because support for C++ modules is still lacking in compilers.
- As there are too many configuration macros, no precompiled library target\
 is provided. The file `details/glm.cpp` is not part of the package.
- The original `gtx/matrix_factorization.inl` file is not UTF-8 encoded and\
 has therefore been replaced by a copy that was first transformed to encoded\
 it with UTF-8.
- The `gtc/gtc_bitfield.cpp` test fails for optimized Clang 16 configurations.
- Trying to compile the `core/core_setup_message.cpp` test leads inconsistent\
 compiler behavior errors on some target configurations and has therefore\
 been disabled.
- Some tests have been disabled to make the package with its tests compilable.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/glm/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/glm/iss\
ues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/glm)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/g-truc/glm
package-url: https://github.com/build2-packaging/glm
email: mail@g-truc.net
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = glm

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = inl
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

test.target = $cxx.target

\
location: glm/glm-1.0.0.tar.gz
sha256sum: 710b4f0daf7a298c84627f6e30c6fc7dc1adafad38b2a0e3dd56cd8707c716bc
:
name: glm
version: 1.0.1
type: lib,binless
language: c++
summary: Header-only C++ mathematics library for graphics software based on\
 the OpenGL Shading Language (GLSL) specifications
license: MIT
license: The Happy Bunny License
description:
\
![glm](/doc/manual/logo-mini.png)

[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++\
 mathematics library for graphics software based on the [OpenGL Shading\
 Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangS\
pec.4.50.diff.pdf).

*GLM* provides classes and functions designed and implemented with the same\
 naming conventions and functionality than *GLSL* so that anyone who knows\
 *GLSL*, can use *GLM* as well in C++.

This project isn't limited to *GLSL* features. An extension system, based on\
 the *GLSL* extension conventions, provides extended capabilities: matrix\
 transformations, quaternions, data packing, random numbers, noise, etc...

This library works perfectly with *[OpenGL](https://www.opengl.org)* but it\
 also ensures interoperability with other third party libraries and SDK. It\
 is a good candidate for software rendering (raytracing / rasterisation),\
 image processing, physics simulations and any development context that\
 requires a simple and convenient mathematics library.

*GLM* is written in C++98 but can take advantage of C++11 when supported by\
 the compiler. It is a platform independent library with no dependence and it\
 officially supports the following compilers:
- [*GCC*](http://gcc.gnu.org/) 4.7 and higher
- [*Intel C++ Compose*](https://software.intel.com/en-us/intel-compilers) XE\
 2013 and higher
- [*Clang*](http://llvm.org/) 3.4 and higher
- [*Apple Clang 6.0*](https://developer.apple.com/library/mac/documentation/C\
ompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher
- [*Visual C++*](http://www.visualstudio.com/) 2013 and higher
- [*CUDA*](https://developer.nvidia.com/about-cuda) 9.0 and higher\
 (experimental)
- Any C++11 compiler

For more information about *GLM*, please have a look at the\
 [manual](manual.md) and the [API reference documentation](http://glm.g-truc.\
net/0.9.9/api/modules.html).
The source code and the documentation are licensed under either the [Happy\
 Bunny License (Modified MIT) or the MIT License](manual.md#section0).

Thanks for contributing to the project by [submitting pull\
 requests](https://github.com/g-truc/glm/pulls).

```cpp
#include <glm/vec3.hpp> // glm::vec3
#include <glm/vec4.hpp> // glm::vec4
#include <glm/mat4x4.hpp> // glm::mat4
#include <glm/ext/matrix_transform.hpp> // glm::translate, glm::rotate,\
 glm::scale
#include <glm/ext/matrix_clip_space.hpp> // glm::perspective
#include <glm/ext/scalar_constants.hpp> // glm::pi

glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
{
	glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f /\
 3.0f, 0.1f, 100.f);
	glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f,\
 -Translate));
	View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));
	View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));
	glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
	return Projection * View * Model;
}
```

## [Lastest release](https://github.com/g-truc/glm/releases/latest)

## Project Health

| Service | Status |
| ------- | ------ |
| [GitHub actions](https://github.com/g-truc/glm/actions)|\
 [![.github/workflows/ci.yml](https://github.com/g-truc/glm/actions/workflows\
/ci.yml/badge.svg)](https://github.com/g-truc/glm/actions/workflows/ci.yml)

## Build and Install

```shell
cd /path/to/glm
cmake \\
    -DGLM_BUILD_TESTS=OFF \\
    -DBUILD_SHARED_LIBS=OFF \\
    -B build .
cmake --build build -- all
cmake --build build -- install
```

Passing `-DBUILD_SHARED_LIBS=ON` to build shared library

And then in your `CMakeLists.txt`:

```cmake
find_package(glm CONFIG REQUIRED)
target_link_libraries(main PRIVATE glm::glm)
```

If your perfer to use header-only version of GLM

```cmake
find_package(glm CONFIG REQUIRED)
target_link_libraries(main PRIVATE glm::glm-header-only)
```

## Vcpkg

```shell
vcpkg install glm
```

## CMake using FetchContent
You can add glm to your CMake project to be built together.

Add to the `CMakeLists.txt` file:
```cmake
cmake_minimum_required(VERSION 3.11) # FetchContent is new in version 3.11.

include(FetchContent)

FetchContent_Declare(
	glm
	GIT_REPOSITORY	https://github.com/g-truc/glm.git
	GIT_TAG 	bf71a834948186f4097caa076cd2663c69a10e1e #refs/tags/0.9.9.8
)

FetchContent_MakeAvailable(glm)

target_link_libraries(main PRIVATE glm::glm)
```

## Release notes

### [GLM 1.0.1](https://github.com/g-truc/glm/releases/tag/1.0.1) - 2024-02-26

#### Features:
- Added C++17 [[nodiscard]] support

#### Improvements:
- Enables only warnings as errors while building unit tests
- Added aligned_*vec3 simd support #1245

#### Fixes:
- Fixed C++ language auto detection build, disable C++98 warnings with Clang\
 #1235, #1231
- Fixed `GTX_color_space` missing <glm/ext/scalar_constants.hpp> include\
 #1233 #1238
- Fixed `EXT_matrix_transform` `shear` implementation #1140 #1182
- Fixed `smoothstep` SIMD implementation #1222

### [GLM 1.0.0](https://github.com/g-truc/glm/releases/tag/1.0.0) - 2024-01-24
#### Features:
- Added *GLM_EXT_scalar_reciprocal* with tests
- Added *GLM_EXT_vector_reciprocal* with tests
- Added `glm::iround` and `glm::uround` to *GLM_EXT_scalar_common* and\
 *GLM_EXT_vector_common*
- Added *GLM_EXT_matrix_integer* with tests
- Added Github Actions
- Added GLM_FORCE_UNRESTRICTED_FLOAT to prevent static asserts when using\
 other scalar types with function expecting floats. 

#### Improvements:
- Added `constexpr` qualifier for `cross` product #1040
- Added `constexpr` qualifier for `dot` product #1040

#### Fixes:
- Fixed incorrect assertion for `glm::min` and `glm::max` #1009
- Fixed quaternion orientation in `glm::decompose` #1012
- Fixed singularity in quaternion to euler angle roll conversion #1019
- Fixed `quat` `glm::pow` handling of small magnitude quaternions #1022
- Fixed `glm::fastNormalize` build error #1033
- Fixed `glm::isMultiple` build error #1034
- Fixed `glm::adjugate` calculation #1035
- Fixed `glm::angle` discards the sign of result for angles in range (2*pi-1,\
 2*pi) #1038
- Removed ban on using `glm::string_cast` with *CUDA* host code #1041

### [GLM 0.9.9.8](https://github.com/g-truc/glm/releases/tag/0.9.9.8) -\
 2020-04-13
#### Features:
- Added *GLM_EXT_vector_intX* and *GLM_EXT_vector_uintX* extensions
- Added *GLM_EXT_matrix_intX* and *GLM_EXT_matrix_uintX* extensions

#### Improvements:
- Added `glm::clamp`, `glm::repeat`, `glm::mirrorClamp` and\
 `glm::mirrorRepeat` function to `GLM_EXT_scalar_commond` and\
 `GLM_EXT_vector_commond` extensions with tests

#### Fixes:
- Fixed unnecessary warnings from `matrix_projection.inl` #995
- Fixed quaternion `glm::slerp` overload which interpolates with extra spins\
 #996
- Fixed for `glm::length` using arch64 #992
- Fixed singularity check for `glm::quatLookAt` #770

### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) -\
 2020-01-05
#### Improvements:
- Improved *Neon* support with more functions optimized #950
- Added *CMake* *GLM* interface #963
- Added `glm::fma` implementation based on `std::fma` #969
- Added missing quat constexpr #955
- Added `GLM_FORCE_QUAT_DATA_WXYZ` to store quat data as w,x,y,z instead of\
 x,y,z,w #983

#### Fixes:
- Fixed equal *ULP* variation when using negative sign #965
- Fixed for intersection ray/plane and added related tests #953
- Fixed ARM 64bit detection #949
- Fixed *GLM_EXT_matrix_clip_space* warnings #980
- Fixed Wimplicit-int-float-conversion warnings with clang 10+ #986
- Fixed *GLM_EXT_matrix_clip_space* `perspectiveFov`

### [GLM 0.9.9.6](https://github.com/g-truc/glm/releases/tag/0.9.9.6) -\
 2019-09-08
#### Features:
- Added *Neon* support #945
- Added *SYCL* support #914
- Added *GLM_EXT_scalar_integer* extension with power of two and multiple\
 scalar functions
- Added *GLM_EXT_vector_integer* extension with power of two and multiple\
 vector functions

#### Improvements:
- Added *Visual C++ 2019* detection
- Added *Visual C++ 2017* 15.8 and 15.9 detection
- Added missing genType check for `glm::bitCount` and `glm::bitfieldReverse`\
 #893

#### Fixes:
- Fixed for g++6 where -std=c++1z sets __cplusplus to 201500 instead of\
 201402 #921
- Fixed hash hashes qua instead of tquat #919
- Fixed `.natvis` as structs renamed #915
- Fixed `glm::ldexp` and `glm::frexp` declaration #895
- Fixed missing const to quaternion conversion operators #890
- Fixed *GLM_EXT_scalar_ulp* and *GLM_EXT_vector_ulp* API coding style
- Fixed quaternion componant order: `w, {x, y, z}` #916
- Fixed `GLM_HAS_CXX11_STL` broken on Clang with Linux #926
- Fixed *Clang* or *GCC* build due to wrong `GLM_HAS_IF_CONSTEXPR` definition\
 #907
- Fixed *CUDA* 9 build #910

#### Deprecation:
 - Removed CMake install and uninstall scripts

### [GLM 0.9.9.5](https://github.com/g-truc/glm/releases/tag/0.9.9.5) -\
 2019-04-01
#### Fixes:
- Fixed build errors when defining `GLM_ENABLE_EXPERIMENTAL` #884 #883
- Fixed `if constexpr` warning #887
- Fixed missing declarations for `glm::frexp` and `glm::ldexp` #886

### [GLM 0.9.9.4](https://github.com/g-truc/glm/releases/tag/0.9.9.4) -\
 2019-03-19
#### Features:
- Added `glm::mix` implementation for matrices in *GLM_EXT_matrix_common/ #842
- Added *CMake* `BUILD_SHARED_LIBS` and `BUILD_STATIC_LIBS` build options #871

#### Improvements:
- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By\
 default, it's disabled allowing constexpr support by default. #865
- Optimized inverseTransform #867

#### Fixes:
- Fixed in `glm::mat4x3` conversion #829
- Fixed `constexpr` issue on GCC #832 #865
- Fixed `glm::mix` implementation to improve GLSL conformance #866
- Fixed `glm::int8` being defined as unsigned char with some compiler #839
- Fixed `glm::vec1` include #856
- Ignore `.vscode` #848

### [GLM 0.9.9.3](https://github.com/g-truc/glm/releases/tag/0.9.9.3) -\
 2018-10-31
#### Features:
- Added `glm::equal` and `glm::notEqual` overload with max ULPs parameters\
 for scalar numbers #121
- Added `GLM_FORCE_SILENT_WARNINGS` to silent *GLM* warnings when using\
 language extensions but using W4 or Wpedantic warnings #814 #775
- Added adjugate functions to `GLM_GTX_matrix_operation` #151
- Added `GLM_FORCE_ALIGNED_GENTYPES` to enable aligned types and SIMD\
 instruction are not enabled. This disable `constexpr` #816

#### Improvements:
- Added constant time ULP distance between float #121
- Added `GLM_FORCE_SILENT_WARNINGS` to suppress *GLM* warnings #822

#### Fixes:
- Fixed `glm::simplex` noise build with double #734
- Fixed `glm::bitfieldInsert` according to GLSL spec #818
- Fixed `glm::refract` for negative 'k' #808

### [GLM 0.9.9.2](https://github.com/g-truc/glm/releases/tag/0.9.9.2) -\
 2018-09-14
#### Fixes:
- Fixed `GLM_FORCE_CXX**` section in the manual
- Fixed default initialization with vector and quaternion types using\
 `GLM_FORCE_CTOR_INIT` #812

### [GLM 0.9.9.1](https://github.com/g-truc/glm/releases/tag/0.9.9.1) -\
 2018-09-03
#### Features:
- Added `bitfieldDeinterleave` to *GLM_GTC_bitfield*
- Added missing `glm::equal` and `glm::notEqual` with epsilon for quaternion\
 types to *GLM_GTC_quaternion*
- Added *GLM_EXT_matrix_relational*: `glm::equal` and `glm::notEqual` with\
 epsilon for matrix types
- Added missing aligned matrix types to *GLM_GTC_type_aligned*
- Added C++17 detection
- Added *Visual C++* language standard version detection
- Added PDF manual build from markdown

#### Improvements:
- Added a section to the manual for contributing to *GLM*
- Refactor manual, lists all configuration defines
- Added missing `glm::vec1` based constructors
- Redesigned constexpr support which excludes both SIMD and `constexpr` #783
- Added detection of *Visual C++ 2017* toolsets
- Added identity functions #765
- Splitted headers into EXT extensions to improve compilation time #670
- Added separated performance tests
- Clarified refract valid range of the indices of refraction, between -1 and\
 1 inclusively #806

#### Fixes:
- Fixed SIMD detection on *Clang* and *GCC*
- Fixed build problems due to `std::printf` and `std::clock_t` #778
- Fixed int mod
- Anonymous unions require C++ language extensions
- Fixed `glm::ortho` #790
- Fixed *Visual C++* 2013 warnings in vector relational code #782
- Fixed *ICC* build errors with constexpr #704
- Fixed defaulted operator= and constructors #791
- Fixed invalid conversion from int scalar with vec4 constructor when using\
 SSE instruction
- Fixed infinite loop in random functions when using negative radius values\
 using an assert #739

### [GLM 0.9.9.0](https://github.com/g-truc/glm/releases/tag/0.9.9.0) -\
 2018-05-22
#### Features:
- Added *RGBM* encoding in *GLM_GTC_packing* #420
- Added *GLM_GTX_color_encoding* extension
- Added *GLM_GTX_vec_swizzle*, faster compile time swizzling then swizzle\
 operator #558
- Added *GLM_GTX_exterior_product* with a `vec2` `glm::cross` implementation\
 #621
- Added *GLM_GTX_matrix_factorisation* to factor matrices in various forms\
 #654
- Added [`GLM_ENABLE_EXPERIMENTAL`](manual.md#section7_4) to enable\
 experimental features.
- Added packing functions for integer vectors #639
- Added conan packaging configuration #643 #641
- Added `glm::quatLookAt` to *GLM_GTX_quaternion* #659
- Added `glm::fmin`, `glm::fmax` and `glm::fclamp` to *GLM_GTX_extended_min_m\
ax* #372
- Added *GLM_EXT_vector_relational*: extend `glm::equal` and `glm::notEqual`\
 to take an epsilon argument
- Added *GLM_EXT_vector_relational*: `glm::openBounded` and\
 `glm::closeBounded`
- Added *GLM_EXT_vec1*: `*vec1` types
- Added *GLM_GTX_texture*: `levels` function
- Added spearate functions to use both nagative one and zero near clip plans\
 #680
- Added `GLM_FORCE_SINGLE_ONLY` to use *GLM* on platforms that don't support\
 double #627
- Added *GLM_GTX_easing* for interpolation functions #761

#### Improvements:
- No more default initialization of vector, matrix and quaternion types
- Added lowp variant of GTC_color_space convertLinearToSRGB #419
- Replaced the manual by a markdown version #458
- Improved API documentation #668
- Optimized GTC_packing implementation
- Optimized GTC_noise functions
- Optimized GTC_color_space HSV to RGB conversions
- Optimised GTX_color_space_YCoCg YCoCgR conversions
- Optimized GTX_matrix_interpolation axisAngle function
- Added FAQ 12: Windows headers cause build errors... #557
- Removed GCC shadow warnings #595
- Added error for including of different versions of GLM #619
- Added GLM_FORCE_IGNORE_VERSION to ignore error caused by including\
 different version of GLM #619
- Reduced warnings when using very strict compilation flags #646
- length() member functions are constexpr #657
- Added support of -Weverything with Clang #646
- Improved exponential function test coverage
- Enabled warnings as error with Clang unit tests
- Conan package is an external repository: https://github.com/bincrafters/con\
an-glm
- Clarify quat_cast documentation, applying on pure rotation matrices #759

#### Fixes:
- Removed doxygen references to *GLM_GTC_half_float* which was removed in\
 0.9.4
- Fixed `glm::decompose` #448
- Fixed `glm::intersectRayTriangle` #6
- Fixed dual quaternion != operator #629
- Fixed usused variable warning in *GLM_GTX_spline* #618
- Fixed references to `GLM_FORCE_RADIANS` which was removed #642
- Fixed `glm::fastInverseSqrt` to use fast inverse square #640
- Fixed `glm::axisAngle` NaN #638
- Fixed integer pow from *GLM_GTX_integer* with null exponent #658
- Fixed `quat` `normalize` build error #656
- Fixed *Visual C++ 2017.2* warning regarding `__has_feature` definision #655
- Fixed documentation warnings
- Fixed `GLM_HAS_OPENMP` when *OpenMP* is not enabled
- Fixed Better follow GLSL `min` and `max` specification #372
- Fixed quaternion constructor from two vectors special cases #469
- Fixed `glm::to_string` on quaternions wrong components order #681
- Fixed `glm::acsch` #698
- Fixed `glm::isnan` on *CUDA* #727

#### Deprecation:
- Requires *Visual Studio 2013*, *GCC 4.7*, *Clang 3.4*, *Cuda 7*, *ICC 2013*\
 or a C++11 compiler
- Removed *GLM_GTX_simd_vec4* extension
- Removed *GLM_GTX_simd_mat4* extension
- Removed *GLM_GTX_simd_quat* extension
- Removed `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead
- Removed `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead
- Removed `GLM_DEPTH_ZERO_TO_ONE`, use `GLM_FORCE_DEPTH_ZERO_TO_ONE` instead
- Removed `GLM_LEFT_HANDED`, use `GLM_FORCE_LEFT_HANDED` instead
- Removed `GLM_FORCE_NO_CTOR_INIT`
- Removed `glm::uninitialize`

---
### [GLM 0.9.8.5](https://github.com/g-truc/glm/releases/tag/0.9.8.5) -\
 2017-08-16
#### Features:
- Added *Conan* package support #647

#### Fixes:
- Fixed *Clang* version detection from source #608
- Fixed `glm::packF3x9_E1x5` exponent packing #614
- Fixed build error `min` and `max` specializations with integer #616
- Fixed `simd_mat4` build error #652

---
### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) -\
 2017-01-22
#### Fixes:
- Fixed *GLM_GTC_packing* test failing on *GCC* x86 due to denorms #212 #577
- Fixed `POPCNT` optimization build in *Clang* #512
- Fixed `glm::intersectRayPlane` returns true in parallel case #578
- Fixed *GCC* 6.2 compiler warnings #580
- Fixed *GLM_GTX_matrix_decompose* `glm::decompose` #582 #448
- Fixed *GCC* 4.5 and older build #566
- Fixed *Visual C++* internal error when declaring a global vec type with\
 siwzzle expression enabled #594
- Fixed `GLM_FORCE_CXX11` with Clang and libstlc++ which wasn't using C++11\
 STL features. #604

---
### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) -\
 2016-11-12
#### Improvements:
- Broader support of `GLM_FORCE_UNRESTRICTED_GENTYPE` #378

#### Fixes:
- Fixed Android build error with C++11 compiler but C++98 STL #284 #564
- Fixed *GLM_GTX_transform2* shear* functions #403
- Fixed interaction between `GLM_FORCE_UNRESTRICTED_GENTYPE` and `glm::ortho`\
 function #568
- Fixed `glm::bitCount` with AVX on 32 bit builds #567
- Fixed *CMake* `find_package` with version specification #572 #573

---
### [GLM 0.9.8.2](https://github.com/g-truc/glm/releases/tag/0.9.8.2) -\
 2016-11-01
#### Improvements:
- Added *Visual C++* 15 detection
- Added *Clang* 4.0 detection
- Added warning messages when using `GLM_FORCE_CXX**` but the compiler
  is known to not fully support the requested C++ version #555
- Refactored `GLM_COMPILER_VC` values
- Made quat, vec, mat type component `length()` static #565

#### Fixes:
- Fixed *Visual C++* `constexpr` build error #555, #556

---
### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) -\
 2016-09-25
#### Improvements:
- Optimized quaternion `glm::log` function #554

#### Fixes:
- Fixed *GCC* warning filtering, replaced -pedantic by -Wpedantic
- Fixed SIMD faceforward bug. #549
- Fixed *GCC* 4.8 with C++11 compilation option #550
- Fixed *Visual Studio* aligned type W4 warning #548
- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552

---
### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) -\
 2016-09-11
#### Features:
- Added right and left handed projection and clip control support #447 #415\
 #119
- Added `glm::compNormalize` and `glm::compScale` functions to\
 *GLM_GTX_component_wise*
- Added `glm::packF3x9_E1x5` and `glm::unpackF3x9_E1x5` to *GLM_GTC_packing*\
 for RGB9E5 #416
- Added `(un)packHalf` to *GLM_GTC_packing*
- Added `(un)packUnorm` and `(un)packSnorm` to *GLM_GTC_packing*
- Added 16bit pack and unpack to *GLM_GTC_packing*
- Added 8bit pack and unpack to *GLM_GTC_packing*
- Added missing `bvec*` && and || operators
- Added `glm::iround` and `glm::uround` to *GLM_GTC_integer*, fast round on\
 positive values
- Added raw SIMD API
- Added 'aligned' qualifiers
- Added *GLM_GTC_type_aligned* with aligned *vec* types
- Added *GLM_GTC_functions* extension
- Added quaternion version of `glm::isnan` and `glm::isinf` #521
- Added `glm::lowestBitValue` to *GLM_GTX_bit* #536
- Added `GLM_FORCE_UNRESTRICTED_GENTYPE` allowing non basic `genType` #543

#### Improvements:
- Improved SIMD and swizzle operators interactions with *GCC* and *Clang* #474
- Improved *GLM_GTC_random* `linearRand` documentation
- Improved *GLM_GTC_reciprocal* documentation
- Improved `GLM_FORCE_EXPLICIT_CTOR` coverage #481
- Improved *OpenMP* support detection for *Clang*, *GCC*, *ICC* and *VC*
- Improved *GLM_GTX_wrap* for SIMD friendliness
- Added `constexpr` for `*vec*`, `*mat*`, `*quat*` and `*dual_quat*` types\
 #493
- Added *NEON* instruction set detection
- Added *MIPS* CPUs detection
- Added *PowerPC* CPUs detection
- Use *Cuda* built-in function for abs function implementation with Cuda\
 compiler
- Factorized `GLM_COMPILER_LLVM` and `GLM_COMPILER_APPLE_CLANG` into\
 `GLM_COMPILER_CLANG`
- No more warnings for use of long long
- Added more information to build messages

#### Fixes:
- Fixed *GLM_GTX_extended_min_max* filename typo #386
- Fixed `glm::intersectRayTriangle` to not do any unintentional backface\
 culling
- Fixed long long warnings when using C++98 on *GCC* and *Clang* #482
- Fixed sign with signed integer function on non-x86 architecture
- Fixed strict aliasing warnings #473
- Fixed missing `glm::vec1` overload to `glm::length2` and `glm::distance2`\
 functions #431
- Fixed *GLM* test '/fp:fast' and '/Za' command-line options are incompatible
- Fixed quaterion to mat3 cast function `glm::mat3_cast` from\
 *GLM_GTC_quaternion* #542
- Fixed *GLM_GTX_io* for *Cuda* #547 #546

#### Deprecation:
- Removed `GLM_FORCE_SIZE_FUNC` define
- Deprecated *GLM_GTX_simd_vec4* extension
- Deprecated *GLM_GTX_simd_mat4* extension
- Deprecated *GLM_GTX_simd_quat* extension
- Deprecated `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead
- Deprecated `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead

---
### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) -\
 2016-07-16
#### Improvements:
- Added pkg-config file #509
- Updated list of compiler versions detected
- Improved C++ 11 STL detection #523

#### Fixes:
- Fixed STL for C++11 detection on ICC #510
- Fixed missing vec1 overload to length2 and distance2 functions #431
- Fixed long long warnings when using C++98 on GCC and Clang #482
- Fixed scalar reciprocal functions (GTC_reciprocal) #520

---
### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) -\
 2016-05-24
#### Improvements:
- Added Visual C++ Clang toolset detection

#### Fixes:
- Fixed uaddCarry warning #497
- Fixed roundPowerOfTwo and floorPowerOfTwo #503
- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits
- Fixed to_string when used with GLM_FORCE_INLINE #506
- Fixed GLM_FORCE_INLINE with binary vec4 operators
- Fixed GTX_extended_min_max filename typo #386
- Fixed intersectRayTriangle to not do any unintentional backface culling

---
### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) -\
 2016-03-19
#### Fixes:
- Fixed asinh and atanh warning with C++98 STL #484
- Fixed polar coordinates function latitude #485
- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4\
 #475
- Fixed eulerAngles precision error, returns NaN  #451
- Fixed undefined reference errors #489
- Fixed missing GLM_PLATFORM_CYGWIN declaration #495
- Fixed various undefined reference errors #490

---
### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) -\
 2016-02-21
#### Improvements:
- Added AVX512 detection

#### Fixes:
- Fixed CMake policy warning
- Fixed GCC 6.0 detection #477
- Fixed Clang build on Windows #479
- Fixed 64 bits constants warnings on GCC #463

---
### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) -\
 2016-01-03
#### Fixes:
- Fixed GTC_round floorMultiple/ceilMultiple #412
- Fixed GTC_packing unpackUnorm3x10_1x2 #414
- Fixed GTC_matrix_inverse affineInverse #192
- Fixed ICC on Linux build errors #449
- Fixed ldexp and frexp compilation errors
- Fixed "Declaration shadows a field" warning #468
- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468
- Fixed various 'X is not defined' warnings #468
- Fixed missing unary + operator #435
- Fixed Cygwin build errors when using C++11 #405

---
### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) -\
 2015-09-07
#### Improvements:
- Improved constexpr for constant functions coverage #198
- Added to_string for quat and dual_quat in GTX_string_cast #375
- Improved overall execution time of unit tests #396

#### Fixes:
- Fixed strict alignment warnings #235 #370
- Fixed link errors on compilers not supported default function #377
- Fixed compilation warnings in vec4
- Fixed non-identity quaternions for equal vectors #234
- Fixed excessive GTX_fast_trigonometry execution time #396
- Fixed Visual Studio 2015 'hides class member' warnings #394
- Fixed builtin bitscan never being used #392
- Removed unused func_noise.* files #398

---
### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) -\
 2015-08-02
#### Features:
- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions
- Added 'fmod' overload to GTX_common with tests #308
- Left handed perspective and lookAt functions #314
- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311
- Added <glm/gtx/hash.hpp> to perform std::hash on GLM types #320 #367
- Added <glm/gtx/wrap.hpp> for texcoord wrapping
- Added static components and precision members to all vector and quat types\
 #350
- Added .gitignore #349
- Added support of defaulted functions to GLM types, to use them in unions\
 #366

#### Improvements:
- Changed usage of __has_include to support Intel compiler #307
- Specialized integer implementation of YCoCg-R #310
- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317
- Added master branch continuous integration service on Linux 64 #332
- Clarified manual regarding angle unit in GLM, added FAQ 11 #326
- Updated list of compiler versions

#### Fixes:
- Fixed default precision for quat and dual_quat type #312
- Fixed (u)int64 MSB/LSB handling on BE archs #306
- Fixed multi-line comment warning in g++. #315
- Fixed specifier removal by 'std::make_pair<>' #333
- Fixed perspective fovy argument documentation #327
- Removed -m64 causing build issues on Linux 32 #331
- Fixed isfinite with C++98 compilers #343
- Fixed Intel compiler build error on Linux #354
- Fixed use of libstdc++ with Clang #351
- Fixed quaternion pow #346
- Fixed decompose warnings #373
- Fixed matrix conversions #371

#### Deprecation:
- Removed integer specification for 'mod' in GTC_integer #308
- Removed GTX_multiple, replaced by GTC_round

---
### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) -\
 2015-02-15
- Fixed Android doesn't have C++ 11 STL #284

---
### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) -\
 2015-02-15
#### Features:
- Added display of GLM version with other GLM_MESSAGES
- Added ARM instruction set detection

#### Improvements:
- Removed assert for perspective with zFar < zNear #298
- Added Visual Studio natvis support for vec1, quat and dualqual types
- Cleaned up C++11 feature detections
- Clarify GLM licensing

#### Fixes:
- Fixed faceforward build #289
- Fixed conflict with Xlib #define True 1 #293
- Fixed decompose function VS2010 templating issues #294
- Fixed mat4x3 = mat2x3 * mat4x2 operator #297
- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295
- Fixed Visual Studio natvis support for vec4 #288
- Fixed GTC_packing *pack*norm*x* build and added tests #292
- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242
- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support
- Fixed functions not inlined with Clang #302
- Fixed memory corruption (undefined behaviour) #303

---
### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) -\
 2014-12-10
#### Features:
- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags
- Added C++14 detection

#### Improvements:
- Clean up GLM_MESSAGES compilation log to report only detected capabilities

#### Fixes:
- Fixed scalar uaddCarry build error with Cuda #276
- Fixed C++11 explicit conversion operators detection #282
- Fixed missing explicit conversion when using integer log2 with *vec1 types
- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler
- Fixed Android build issue, STL C++11 is not supported by the NDK #284
- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10
- Fixed Visual C++ 32 bit build #283
- Fixed GLM_FORCE_SIZE_FUNC pragma message
- Fixed C++98 only build
- Fixed conflict between GTX_compatibility and GTC_quaternion #286
- Fixed C++ language restriction using GLM_FORCE_CXX**

---
### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) -\
 2014-11-30
#### Features:
- Exposed template vector and matrix types in 'glm' namespace #239, #244
- Added GTX_scalar_multiplication for C++ 11 compiler only #242
- Added GTX_range for C++ 11 compiler only #240
- Added closestPointOnLine function for tvec2 to GTX_closest_point #238
- Added GTC_vec1 extension, *vec1 support to *vec* types
- Updated GTX_associated_min_max with vec1 support
- Added support of precision and integers to linearRand #230
- Added Integer types support to GTX_string_cast #249
- Added vec3 slerp #237
- Added GTX_common with isdenomal #223
- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245
- Added GLM_FORCE_NO_CTOR_INIT
- Added 'uninitialize' to explicitly not initialize a GLM type
- Added GTC_bitfield extension, promoted GTX_bit
- Added GTC_integer extension, promoted GTX_bit and GTX_integer
- Added GTC_round extension, promoted GTX_bit
- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269
- Added GTX_type_aligned for aligned vector, matrix and quaternion types

#### Improvements:
- Rely on C++11 to implement isinf and isnan
- Removed GLM_FORCE_CUDA, Cuda is implicitly detected
- Separated Apple Clang and LLVM compiler detection
- Used pragma once
- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and 
  GLM_FORCE_PURE
- Added not function (from GLSL specification) on VC12
- Optimized bitfieldReverse and bitCount functions
- Optimized findLSB and findMSB functions.
- Optimized matrix-vector multiple performance with Cuda #257, #258
- Reduced integer type redifinitions #233
- Rewrited of GTX_fast_trigonometry #264 #265
- Made types trivially copyable #263
- Removed <iostream> in GLM tests
- Used std features within GLM without redeclaring
- Optimized cot function #272
- Optimized sign function #272
- Added explicit cast from quat to mat3 and mat4 #275

#### Fixes:
- Fixed std::nextafter not supported with C++11 on Android #217
- Fixed missing value_type for dual quaternion
- Fixed return type of dual quaternion length
- Fixed infinite loop in isfinite function with GCC #221
- Fixed Visual Studio 14 compiler warnings
- Fixed implicit conversion from another tvec2 type to another tvec2 #241
- Fixed lack of consistency of quat and dualquat constructors
- Fixed uaddCarray #253
- Fixed float comparison warnings #270

#### Deprecation:
- Requires Visual Studio 2010, GCC 4.2, Apple Clang 4.0, LLVM 3.0, Cuda 4,\
 ICC 2013 or a C++98 compiler
- Removed degrees for function parameters
- Removed GLM_FORCE_RADIANS, active by default
- Removed VC 2005 / 8 and 2008 / 9 support
- Removed GCC 3.4 to 4.3 support
- Removed LLVM GCC support
- Removed LLVM 2.6 to 3.1 support
- Removed CUDA 3.0 to 3.2 support

---
### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9\
.5.4)
- Fixed non-utf8 character #196
- Added FindGLM install for CMake #189
- Fixed GTX_color_space - saturation #195
- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191
- Fixed builtin GLM_ARCH_SSE4 #204
- Optimized Quaternion vector rotation #205
- Fixed missing doxygen @endcond tag #211
- Fixed instruction set detection with Clang #158
- Fixed orientate3 function #207
- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210
- Added GTX_io for io with <iostream> #144
- Fixed fastDistance ambiguity #215
- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to
  tweakedInfinitePerspective
- Fixed std::copy and std::vector with GLM types #214
- Fixed strict aliasing issues #212, #152
- Fixed std::nextafter not supported with C++11 on Android #213
- Fixed corner cases in exp and log functions for quaternions #199

---
### GLM 0.9.5.3 - 2014-04-02
- Added instruction set auto detection with Visual C++ using _M_IX86_FP -\
 /arch
  compiler argument
- Fixed GTX_raw_data code dependency
- Fixed GCC instruction set detection
- Added GLM_GTX_matrix_transform_2d extension (#178, #176)
- Fixed CUDA issues (#169, #168, #183, #182)
- Added support for all extensions but GTX_string_cast to CUDA
- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152)
- Fixed missing bitfieldInterleave definisions
- Fixed usubBorrow (#171)
- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173)
- Added full tests for eulerAngle*** functions (#173)
- Added workaround for a CUDA compiler bug (#186, #185)

---
### GLM 0.9.5.2 - 2014-02-08
- Fixed initializer list ambiguity (#159, #160)
- Fixed warnings with the Android NDK 9c
- Fixed non power of two matrix products
- Fixed mix function link error
- Fixed SSE code included in GLM tests on "pure" platforms
- Fixed undefined reference to fastInverseSqrt (#161)
- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165)
- Fix dot product clamp range for vector angle functions. (#163)
- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c\
 (#152)
- Fixed GLM_GTC_constants description brief (#162)

---
### GLM 0.9.5.1 - 2014-01-11
- Fixed angle and orientedAngle that sometimes return NaN values (#145)
- Deprecated degrees for function parameters and display a message
- Added possible static_cast conversion of GLM types (#72)
- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146)
- Fixed mismatch between some declarations and definitions
- Fixed inverse link error when using namespace glm; (#147)
- Optimized matrix inverse and division code (#149)
- Added intersectRayPlane function (#153)
- Fixed outerProduct return type (#155)

---
### GLM 0.9.5.0 - 2013-12-25
- Added forward declarations (glm/fwd.hpp) for faster compilations
- Added per feature headers
- Minimized GLM internal dependencies
- Improved Intel Compiler detection
- Added bitfieldInterleave and _mm_bit_interleave_si128 functions
- Added GTX_scalar_relational
- Added GTX_dual_quaternion
- Added rotation function to GTX_quaternion (#22)
- Added precision variation of each type
- Added quaternion comparison functions
- Fixed GTX_multiple for negative value
- Removed GTX_ocl_type extension
- Fixed post increment and decrement operators
- Fixed perspective with zNear == 0 (#71)
- Removed l-value swizzle operators
- Cleaned up compiler detection code for unsupported compilers
- Replaced C cast by C++ casts
- Fixed .length() that should return a int and not a size_t
- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t
- Removed unnecessary conversions
- Optimized packing and unpacking functions
- Removed the normalization of the up argument of lookAt function (#114)
- Added low precision specializations of inversesqrt
- Fixed ldexp and frexp implementations
- Increased assert coverage
- Increased static_assert coverage
- Replaced GLM traits by STL traits when possible
- Allowed including individual core feature
- Increased unit tests completeness
- Added creating of a quaternion from two vectors
- Added C++11 initializer lists
- Fixed umulExtended and imulExtended implementations for vector types (#76)
- Fixed CUDA coverage for GTC extensions
- Added GTX_io extension
- Improved GLM messages enabled when defining GLM_MESSAGES
- Hidden matrix_inverse function implementation detail into private section

---
### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) -\
 2013-09-20
- Fixed detection to select the last known compiler if newer version #106
- Fixed is_int and is_uint code duplication with GCC and C++11 #107 
- Fixed test suite build while using Clang in C++11 mode
- Added c++1y mode support in CMake test suite
- Removed ms extension mode to CMake when no using Visual C++
- Added pedantic mode to CMake test suite for Clang and GCC
- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows
  for ICC
- Added compilation errors for unsupported compiler versions
- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112
- Fixed const ref issue on assignment operator taking a scalar parameter #116
- Fixed glm::eulerAngleY implementation #117

---
### GLM 0.9.4.5 - 2013-08-12
- Fixed CUDA support
- Fixed inclusion of intrinsics in "pure" mode #92
- Fixed language detection on GCC when the C++0x mode isn't enabled #95
- Fixed issue #97: register is deprecated in C++11
- Fixed issue #96: CUDA issues
- Added Windows CE detection #92
- Added missing value_ptr for quaternions #99

---
### GLM 0.9.4.4 - 2013-05-29
- Fixed slerp when costheta is close to 1 #65
- Fixed mat4x2 value_type constructor #70
- Fixed glm.natvis for Visual C++ 12 #82
- Added assert in inversesqrt to detect division by zero #61
- Fixed missing swizzle operators #86
- Fixed CUDA warnings #86
- Fixed GLM natvis for VC11 #82
- Fixed GLM_GTX_multiple with negative values #79
- Fixed glm::perspective when zNear is zero #71

---
### GLM 0.9.4.3 - 2013-03-20
- Detected qualifier for Clang
- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions
- Fixed squad, intermediate and exp quaternion functions
- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a\
 vec3
- Clarify the license applying on the manual
- Added a docx copy of the manual
- Fixed GLM_GTX_matrix_interpolation
- Fixed isnan and isinf on Android with Clang
- Autodetected C++ version using __cplusplus value
- Fixed mix for bool and bvec* third parameter

---
### GLM 0.9.4.2 - 2013-02-14
- Fixed compAdd from GTX_component_wise
- Fixed SIMD support for Intel compiler on Windows
- Fixed isnan and isinf for CUDA compiler
- Fixed GLM_FORCE_RADIANS on glm::perspective
- Fixed GCC warnings
- Fixed packDouble2x32 on Xcode
- Fixed mix for vec4 SSE implementation
- Fixed 0x2013 dash character in comments that cause issue in Windows 
  Japanese mode
- Fixed documentation warnings
- Fixed CUDA warnings

---
### GLM 0.9.4.1 - 2012-12-22
- Improved half support: -0.0 case and implicit conversions
- Fixed Intel Composer Compiler support on Linux
- Fixed interaction between quaternion and euler angles
- Fixed GTC_constants build
- Fixed GTX_multiple
- Fixed quat slerp using mix function when cosTheta close to 1
- Improved fvec4SIMD and fmat4x4SIMD implementations
- Fixed assert messages
- Added slerp and lerp quaternion functions and tests

---
### GLM 0.9.4.0 - 2012-11-18
- Added Intel Composer Compiler support
- Promoted GTC_espilon extension
- Promoted GTC_ulp extension
- Removed GLM website from the source repository
- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments
- Fixed detection of Clang and LLVM GCC on MacOS X
- Added debugger visualizers for Visual C++ 2012
- Requires Visual Studio 2005, GCC 4.2, Clang 2.6, Cuda 3, ICC 2013 or a\
 C++98 compiler

---
### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) -\
 2012-06-30
- Added SSE4 and AVX2 detection.
- Removed VIRTREV_xstream and the incompatibility generated with GCC
- Fixed C++11 compiler option for GCC
- Removed MS language extension option for GCC (not fonctionnal)
- Fixed bitfieldExtract for vector types
- Fixed warnings
- Fixed SSE includes

---
### GLM 0.9.3.3 - 2012-05-10
- Fixed isinf and isnan
- Improved compatibility with Intel compiler
- Added CMake test build options: SIMD, C++11, fast math and MS land ext
- Fixed SIMD mat4 test on GCC
- Fixed perspectiveFov implementation
- Fixed matrixCompMult for none-square matrices
- Fixed namespace issue on stream operators
- Fixed various warnings
- Added VC11 support

---
### GLM 0.9.3.2 - 2012-03-15
- Fixed doxygen documentation
- Fixed Clang version detection
- Fixed simd mat4 /= operator

---
### GLM 0.9.3.1 - 2012-01-25
- Fixed platform detection
- Fixed warnings
- Removed detail code from Doxygen doc

---
### GLM 0.9.3.0 - 2012-01-09
- Added CPP Check project
- Fixed conflict with Windows headers
- Fixed isinf implementation
- Fixed Boost conflict
- Fixed warnings

---
### GLM 0.9.3.B - 2011-12-12
- Added support for Chrone Native Client
- Added epsilon constant
- Removed value_size function from vector types
- Fixed roundEven on GCC
- Improved API documentation
- Fixed modf implementation
- Fixed step function accuracy
- Fixed outerProduct

---
### GLM 0.9.3.A - 2011-11-11
- Improved doxygen documentation
- Added new swizzle operators for C++11 compilers
- Added new swizzle operators declared as functions
- Added GLSL 4.20 length for vector and matrix types
- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions
- Promoted GLM_GTC_random extension: linear, gaussian and various random\
 number 
generation distribution
- Added GLM_GTX_constants: provides useful constants
- Added extension versioning
- Removed many unused namespaces
- Fixed half based type contructors
- Added GLSL core noise functions

---
### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) -\
 2011-10-24
- Added more swizzling constructors
- Added missing non-squared matrix products

---
### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) -\
 2011-10-01
- Fixed half based type build on old GCC
- Fixed /W4 warnings on Visual C++
- Fixed some missing l-value swizzle operators

---
### GLM 0.9.2.5 - 2011-09-20
- Fixed floatBitToXint functions
- Fixed pack and unpack functions
- Fixed round functions

---
### GLM 0.9.2.4 - 2011-09-03
- Fixed extensions bugs

---
### GLM 0.9.2.3 - 2011-06-08
- Fixed build issues

---
### GLM 0.9.2.2 - 2011-06-02
- Expend matrix constructors flexibility
- Improved quaternion implementation
- Fixed many warnings across platforms and compilers

---
### GLM 0.9.2.1 - 2011-05-24
- Automatically detect CUDA support
- Improved compiler detection
- Fixed errors and warnings in VC with C++ extensions disabled
- Fixed and tested GLM_GTX_vector_angle
- Fixed and tested GLM_GTX_rotate_vector

---
### GLM 0.9.2.0 - 2011-05-09
- Added CUDA support
- Added CTest test suite
- Added GLM_GTX_ulp extension
- Added GLM_GTX_noise extension
- Added GLM_GTX_matrix_interpolation extension
- Updated quaternion slerp interpolation

---
### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) -\
 2011-05-07
- Fixed bugs

---
### GLM 0.9.1.2 - 2011-04-15
- Fixed bugs

---
### GLM 0.9.1.1 - 2011-03-17
- Fixed bugs

---
### GLM 0.9.1.0 - 2011-03-03
- Fixed bugs

---
### GLM 0.9.1.B - 2011-02-13
- Updated API documentation
- Improved SIMD implementation
- Fixed Linux build

---
### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) -\
 2011-02-13
- Added quaternion product operator.
- Clarify that GLM is a header only library.

---
### GLM 0.9.1.A - 2011-01-31
- Added SIMD support
- Added new swizzle functions
- Improved static assert error message with C++0x static_assert
- New setup system
- Reduced branching
- Fixed trunc implementation

---
### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) -\
 2011-01-30
- Added GLSL 4.10 packing functions
- Added == and != operators for every types.

---
### GLM 0.9.0.6 - 2010-12-21
- Many matrices bugs fixed

---
### GLM 0.9.0.5 - 2010-11-01
- Improved Clang support
- Fixed bugs

---
### GLM 0.9.0.4 - 2010-10-04
- Added autoexp for GLM
- Fixed bugs

---
### GLM 0.9.0.3 - 2010-08-26
- Fixed non-squared matrix operators

---
### GLM 0.9.0.2 - 2010-07-08
- Added GLM_GTX_int_10_10_10_2
- Fixed bugs

---
### GLM 0.9.0.1 - 2010-06-21
- Fixed extensions errors

---
### GLM 0.9.0.0 - 2010-05-25
- Objective-C support
- Fixed warnings
- Updated documentation

---
### GLM 0.9.B.2 - 2010-04-30
- Git transition
- Removed experimental code from releases
- Fixed bugs

---
### GLM 0.9.B.1 - 2010-04-03
- Based on GLSL 4.00 specification
- Added the new core functions
- Added some implicit conversion support

---
### GLM 0.9.A.2 - 2010-02-20
- Improved some possible errors messages
- Improved declarations and definitions match

---
### GLM 0.9.A.1 - 2010-02-09
- Removed deprecated features
- Internal redesign

---
### GLM 0.8.4.4 final - 2010-01-25
- Fixed warnings

---
### GLM 0.8.4.3 final - 2009-11-16
- Fixed Half float arithmetic
- Fixed setup defines

---
### GLM 0.8.4.2 final - 2009-10-19
- Fixed Half float adds

---
### GLM 0.8.4.1 final - 2009-10-05
- Updated documentation
- Fixed MacOS X build

---
### GLM 0.8.4.0 final - 2009-09-16
- Added GCC 4.4 and VC2010 support
- Added matrix optimizations

---
### GLM 0.8.3.5 final - 2009-08-11
- Fixed bugs

---
### GLM 0.8.3.4 final - 2009-08-10
- Updated GLM according GLSL 1.5 spec
- Fixed bugs

---
### GLM 0.8.3.3 final - 2009-06-25
- Fixed bugs

---
### GLM 0.8.3.2 final - 2009-06-04
- Added GLM_GTC_quaternion
- Added GLM_GTC_type_precision

---
### GLM 0.8.3.1 final - 2009-05-21
- Fixed old extension system.

---
### GLM 0.8.3.0 final - 2009-05-06
- Added stable extensions.
- Added new extension system.

---
### GLM 0.8.2.3 final - 2009-04-01
- Fixed bugs.

---
### GLM 0.8.2.2 final - 2009-02-24
- Fixed bugs.

---
### GLM 0.8.2.1 final - 2009-02-13
- Fixed bugs.

---
### GLM 0.8.2 final - 2009-01-21
- Fixed bugs.

---
### GLM 0.8.1 final - 2008-10-30
- Fixed bugs.

---
### GLM 0.8.0 final - 2008-10-23
- New method to use extension.

---
### GLM 0.8.0 beta3 - 2008-10-10
- Added CMake support for GLM tests.

---
### GLM 0.8.0 beta2 - 2008-10-04
- Improved half scalars and vectors support.

---
### GLM 0.8.0 beta1 - 2008-09-26
- Improved GLSL conformance
- Added GLSL 1.30 support
- Improved API documentation

---
### GLM 0.7.6 final - 2008-08-08
- Improved C++ standard comformance
- Added Static assert for types checking

---
### GLM 0.7.5 final - 2008-07-05
- Added build message system with Visual Studio
- Pedantic build with GCC

---
### GLM 0.7.4 final - 2008-06-01
- Added external dependencies system.

---
### GLM 0.7.3 final - 2008-05-24
- Fixed bugs
- Added new extension group

---
### GLM 0.7.2 final - 2008-04-27
- Updated documentation
- Added preprocessor options

---
### GLM 0.7.1 final - 2008-03-24
- Disabled half on GCC
- Fixed extensions

---
### GLM 0.7.0 final - 2008-03-22
- Changed to MIT license
- Added new documentation

---
### GLM 0.6.4 - 2007-12-10
- Fixed swizzle operators

---
### GLM 0.6.3 - 2007-11-05
- Fixed type data accesses
- Fixed 3DSMax sdk conflict

---
### GLM 0.6.2 - 2007-10-08
- Fixed extension

---
### GLM 0.6.1 - 2007-10-07
- Fixed a namespace error
- Added extensions

---
### GLM 0.6.0 : 2007-09-16
- Added new extension namespace mecanium
- Added Automatic compiler detection

---
### GLM 0.5.1 - 2007-02-19
- Fixed swizzle operators

---
### GLM 0.5.0 - 2007-01-06
- Upgrated to GLSL 1.2
- Added swizzle operators
- Added setup settings

---
### GLM 0.4.1 - 2006-05-22
- Added OpenGL examples

---
### GLM 0.4.0 - 2006-05-17
- Added missing operators to vec* and mat*
- Added first GLSL 1.2 features
- Fixed windows.h before glm.h when windows.h required

---
### GLM 0.3.2 - 2006-04-21
- Fixed texcoord components access.
- Fixed mat4 and imat4 division operators.

---
### GLM 0.3.1 - 2006-03-28
- Added GCC 4.0 support under MacOS X.
- Added GCC 4.0 and 4.1 support under Linux.
- Added code optimisations.

---
### GLM 0.3 - 2006-02-19
- Improved GLSL type conversion and construction compliance.
- Added experimental extensions.
- Added Doxygen Documentation.
- Added code optimisations.
- Fixed bugs.

---
### GLM 0.2 - 2005-05-05
- Improve adaptative from GLSL.
- Add experimental extensions based on OpenGL extension process.
- Fixed bugs.

---
### GLM 0.1 - 2005-02-21
- Add vec2, vec3, vec4 GLSL types
- Add ivec2, ivec3, ivec4 GLSL types
- Add bvec2, bvec3, bvec4 GLSL types
- Add mat2, mat3, mat4 GLSL types
- Add almost all functions


\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for GLM

This project builds and defines the build2 package for [GLM](https://github.c\
om/g-truc/glm), also known as the OpenGL Mathematics (GLM) header-only C++\
 library for graphics software based on OpenGL Shading Language (GLSL)\
 specifications.

[![Official](https://img.shields.io/website/https/github.com/g-truc/glm.svg?d\
own_message=offline&label=Official&style=for-the-badge&up_color=blue&up_messa\
ge=online)](https://github.com/g-truc/glm)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/g\
lm.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blue&up\
_message=online)](https://github.com/build2-packaging/glm)
[![cppget.org](https://img.shields.io/website/https/cppget.org/glm.svg?down_m\
essage=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_message=\
online)](https://cppget.org/glm)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/gl\
m.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-the\
-badge&up_color=orange&up_message=running)](https://queue.cppget.org/glm)

## Usage
Make sure to add the stable or alpha section of the `cppget.org` repository\
 to your project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/glm.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: glm ^1.0.1

The library can be imported by the following declaration in a `buildfile`.

    import glm = glm%lib{glm}

## Configuration
There are no configuration options available.

## Issues and Notes
- This package does not support the GLM C++ module that has been added in\
 version 1.0.0 because support for C++ modules is still lacking in compilers.
- As there are too many configuration macros, no precompiled library target\
 is provided. The file `details/glm.cpp` is not part of the package.
- The original `gtx/matrix_factorization.inl` file is not UTF-8 encoded and\
 has therefore been replaced by a copy that was first transformed to encode\
 it with UTF-8.
- The `gtc/gtc_bitfield.cpp` test randomly fails for optimized Clang\
 configurations.
- Trying to compile the `core/core_setup_message.cpp` test leads to\
 inconsistent compiler behavior errors on some target configurations and has\
 therefore been disabled.
- Some tests have been disabled to make the package with its tests compilable.

## Contributing
Thank you in advance for your help and contribution to keep this package\
 up-to-date.
Please, file an issue on [GitHub](https://github.com/build2-packaging/glm/iss\
ues) for questions, bug reports, or to recommend updating the package version.
If you're making a pull request to fix bugs or update the package version\
 yourself, refer to the [`build2` Packaging Guidelines](https://build2.org/bu\
ild2-toolchain/doc/build2-toolchain-packaging.xhtml#core-version-management).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/g-truc/glm
package-url: https://github.com/build2-packaging/glm
email: mail@g-truc.net
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = glm

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = inl
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

test.target = $cxx.target

\
location: glm/glm-1.0.1.tar.gz
sha256sum: 892a85093151faa332edb35a3f1d5d096ba5a721d1c27031e6687e377eefd1d1
:
name: gmock
version: 1.11.0+1
project: googletest
summary: Google Mocking Framework
license: BSD-3-Clause
description:
\
# GoogleTest

### Announcements

#### Live at Head

GoogleTest now follows the
[Abseil Live at Head philosophy](https://abseil.io/about/philosophy#upgrade-s\
upport).
We recommend using the latest commit in the `master` branch in your projects.

#### Documentation Updates

Our documentation is now live on GitHub Pages at
https://google.github.io/googletest/. We recommend browsing the documentation\
 on
GitHub Pages rather than directly in the repository.

#### Release 1.10.x

[Release 1.10.x](https://github.com/google/googletest/releases/tag/release-1.\
10.0)
is now available.

#### Coming Soon

*   We are planning to take a dependency on
    [Abseil](https://github.com/abseil/abseil-cpp).
*   More documentation improvements are planned.

## Welcome to **GoogleTest**, Google's C++ test framework!

This repository is a merger of the formerly separate GoogleTest and GoogleMock
projects. These were so closely related that it makes sense to maintain and
release them together.

### Getting Started

See the [GoogleTest User's Guide](https://google.github.io/googletest/) for
documentation. We recommend starting with the
[GoogleTest Primer](https://google.github.io/googletest/primer.html).

More information about building GoogleTest can be found at
[googletest/README.md](googletest/README.md).

## Features

*   An [xUnit](https://en.wikipedia.org/wiki/XUnit) test framework.
*   Test discovery.
*   A rich set of assertions.
*   User-defined assertions.
*   Death tests.
*   Fatal and non-fatal failures.
*   Value-parameterized tests.
*   Type-parameterized tests.
*   Various options for running the tests.
*   XML test report generation.

## Supported Platforms

GoogleTest requires a codebase and compiler compliant with the C++11 standard\
 or
newer.

The GoogleTest code is officially supported on the following platforms.
Operating systems or tools not listed below are community-supported. For
community-supported platforms, patches that do not complicate the code may be
considered.

If you notice any problems on your platform, please file an issue on the
[GoogleTest GitHub Issue Tracker](https://github.com/google/googletest/issues\
).
Pull requests containing fixes are welcome!

### Operating Systems

*   Linux
*   macOS
*   Windows

### Compilers

*   gcc 5.0+
*   clang 5.0+
*   MSVC 2015+

**macOS users:** Xcode 9.3+ provides clang 5.0+.

### Build Systems

*   [Bazel](https://bazel.build/)
*   [CMake](https://cmake.org/)

**Note:** Bazel is the build system used by the team internally and in tests.
CMake is supported on a best-effort basis and by the community.

## Who Is Using GoogleTest?

In addition to many internal projects at Google, GoogleTest is also used by\
 the
following notable projects:

*   The [Chromium projects](http://www.chromium.org/) (behind the Chrome\
 browser
    and Chrome OS).
*   The [LLVM](http://llvm.org/) compiler.
*   [Protocol Buffers](https://github.com/google/protobuf), Google's data
    interchange format.
*   The [OpenCV](http://opencv.org/) computer vision library.

## Related Open Source Projects

[GTest Runner](https://github.com/nholthaus/gtest-runner) is a Qt5 based
automated test-runner and Graphical User Interface with powerful features for
Windows and Linux platforms.

[GoogleTest UI](https://github.com/ospector/gtest-gbar) is a test runner that
runs your test binary, allows you to track its progress via a progress bar,\
 and
displays a list of test failures. Clicking on one shows failure text. Google
Test UI is written in C#.

[GTest TAP Listener](https://github.com/kinow/gtest-tap-listener) is an event
listener for GoogleTest that implements the
[TAP protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol) for test
result output. If your test runner understands TAP, you may find it useful.

[gtest-parallel](https://github.com/google/gtest-parallel) is a test runner\
 that
runs tests from your binary in parallel to provide significant speed-up.

[GoogleTest Adapter](https://marketplace.visualstudio.com/items?itemName=Davi\
dSchuldenfrei.gtest-adapter)
is a VS Code extension allowing to view GoogleTest in a tree view, and\
 run/debug
your tests.

[C++ TestMate](https://github.com/matepek/vscode-catch2-test-adapter) is a VS
Code extension allowing to view GoogleTest in a tree view, and run/debug your
tests.

[Cornichon](https://pypi.org/project/cornichon/) is a small Gherkin DSL parser
that generates stub code for GoogleTest.

## Contributing Changes

Please read
[`CONTRIBUTING.md`](https://github.com/google/googletest/blob/master/CONTRIBU\
TING.md)
for details on how to contribute to this project.

Happy testing!

\
description-type: text/markdown;variant=GFM
url: https://google.github.io/googletest/
doc-url: https://google.github.io/googletest/
src-url: https://github.com/google/googletest
package-url: https://github.com/build2-packaging/googletest/
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: gtest == 1.11.0
bootstrap-build:
\
project = gmock

using config
using version
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

\
location: googletest/gmock-1.11.0+1.tar.gz
sha256sum: 3ab0fd051c00198ade6950d72803516ee48f6294f49a83150e7e38a430dda216
:
name: google-benchmark
version: 1.6.0+1
summary: Build2 package for google benchmark
license: Apache-2.0
description:
\
# Benchmark

[![build-and-test](https://github.com/google/benchmark/workflows/build-and-te\
st/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ab\
uild-and-test)
[![bazel](https://github.com/google/benchmark/actions/workflows/bazel.yml/bad\
ge.svg)](https://github.com/google/benchmark/actions/workflows/bazel.yml)
[![pylint](https://github.com/google/benchmark/workflows/pylint/badge.svg)](h\
ttps://github.com/google/benchmark/actions?query=workflow%3Apylint)
[![test-bindings](https://github.com/google/benchmark/workflows/test-bindings\
/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ates\
t-bindings)

[![Build Status](https://travis-ci.org/google/benchmark.svg?branch=master)](h\
ttps://travis-ci.org/google/benchmark)
[![Coverage Status](https://coveralls.io/repos/google/benchmark/badge.svg)](h\
ttps://coveralls.io/r/google/benchmark)


A library to benchmark code snippets, similar to unit tests. Example:

```c++
#include <benchmark/benchmark.h>

static void BM_SomeFunction(benchmark::State& state) {
  // Perform setup here
  for (auto _ : state) {
    // This code gets timed
    SomeFunction();
  }
}
// Register the function as a benchmark
BENCHMARK(BM_SomeFunction);
// Run the benchmark
BENCHMARK_MAIN();
```

## Getting Started

To get started, see [Requirements](#requirements) and
[Installation](#installation). See [Usage](#usage) for a full example and the
[User Guide](docs/user_guide.md) for a more comprehensive feature overview.

It may also help to read the [Google Test documentation](https://github.com/g\
oogle/googletest/blob/master/docs/primer.md)
as some of the structural aspects of the APIs are similar.

## Resources

[Discussion group](https://groups.google.com/d/forum/benchmark-discuss)

IRC channels:
* [libera](https://libera.chat) #benchmark

[Additional Tooling Documentation](docs/tools.md)

[Assembly Testing Documentation](docs/AssemblyTests.md)

## Requirements

The library can be used with C++03. However, it requires C++11 to build,
including compiler and standard library support.

The following minimum versions are required to build the library:

* GCC 4.8
* Clang 3.4
* Visual Studio 14 2015
* Intel 2015 Update 1

See [Platform-Specific Build Instructions](docs/platform_specific_build_instr\
uctions.md).

## Installation

This describes the installation process using cmake. As pre-requisites, you'll
need git and cmake installed.

_See [dependencies.md](docs/dependencies.md) for more details regarding\
 supported
versions of build tools._

```bash
# Check out the library.
$ git clone https://github.com/google/benchmark.git
# Go to the library root directory
$ cd benchmark
# Make a build directory to place the build output.
$ cmake -E make_directory "build"
# Generate build system files with cmake, and download any dependencies.
$ cmake -E chdir "build" cmake -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on\
 -DCMAKE_BUILD_TYPE=Release ../
# or, starting with CMake 3.13, use a simpler form:
# cmake -DCMAKE_BUILD_TYPE=Release -S . -B "build"
# Build the library.
$ cmake --build "build" --config Release
```
This builds the `benchmark` and `benchmark_main` libraries and tests.
On a unix system, the build directory should now look something like this:

```
/benchmark
  /build
    /src
      /libbenchmark.a
      /libbenchmark_main.a
    /test
      ...
```

Next, you can run the tests to check the build.

```bash
$ cmake -E chdir "build" ctest --build-config Release
```

If you want to install the library globally, also run:

```
sudo cmake --build "build" --config Release --target install
```

Note that Google Benchmark requires Google Test to build and run the tests.\
 This
dependency can be provided two ways:

* Checkout the Google Test sources into `benchmark/googletest`.
* Otherwise, if `-DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON` is specified during
  configuration as above, the library will automatically download and build
  any required dependencies.

If you do not wish to build and run the tests, add `-DBENCHMARK_ENABLE_GTEST_\
TESTS=OFF`
to `CMAKE_ARGS`.

### Debug vs Release

By default, benchmark builds as a debug library. You will see a warning in the
output when this is the case. To build it as a release library instead, add
`-DCMAKE_BUILD_TYPE=Release` when generating the build system files, as shown
above. The use of `--config Release` in build commands is needed to properly
support multi-configuration tools (like Visual Studio for example) and can be
skipped for other build systems (like Makefile).

To enable link-time optimisation, also add `-DBENCHMARK_ENABLE_LTO=true` when
generating the build system files.

If you are using gcc, you might need to set `GCC_AR` and `GCC_RANLIB` cmake
cache variables, if autodetection fails.

If you are using clang, you may need to set `LLVMAR_EXECUTABLE`,
`LLVMNM_EXECUTABLE` and `LLVMRANLIB_EXECUTABLE` cmake cache variables.

### Stable and Experimental Library Versions

The main branch contains the latest stable version of the benchmarking\
 library;
the API of which can be considered largely stable, with source breaking\
 changes
being made only upon the release of a new major version.

Newer, experimental, features are implemented and tested on the
[`v2` branch](https://github.com/google/benchmark/tree/v2). Users who wish
to use, test, and provide feedback on the new features are encouraged to try
this branch. However, this branch provides no stability guarantees and\
 reserves
the right to change and break the API at any time.

## Usage

### Basic usage

Define a function that executes the code to measure, register it as a\
 benchmark
function using the `BENCHMARK` macro, and ensure an appropriate `main`\
 function
is available:

```c++
#include <benchmark/benchmark.h>

static void BM_StringCreation(benchmark::State& state) {
  for (auto _ : state)
    std::string empty_string;
}
// Register the function as a benchmark
BENCHMARK(BM_StringCreation);

// Define another benchmark
static void BM_StringCopy(benchmark::State& state) {
  std::string x = "hello";
  for (auto _ : state)
    std::string copy(x);
}
BENCHMARK(BM_StringCopy);

BENCHMARK_MAIN();
```

To run the benchmark, compile and link against the `benchmark` library
(libbenchmark.a/.so). If you followed the build steps above, this library\
 will 
be under the build directory you created.

```bash
# Example on linux after running the build steps above. Assumes the
# `benchmark` and `build` directories are under the current directory.
$ g++ mybenchmark.cc -std=c++11 -isystem benchmark/include \\
  -Lbenchmark/build/src -lbenchmark -lpthread -o mybenchmark
```

Alternatively, link against the `benchmark_main` library and remove
`BENCHMARK_MAIN();` above to get the same behavior.

The compiled executable will run all benchmarks by default. Pass the `--help`
flag for option information or see the [User Guide](docs/user_guide.md).

### Usage with CMake

If using CMake, it is recommended to link against the project-provided
`benchmark::benchmark` and `benchmark::benchmark_main` targets using
`target_link_libraries`.
It is possible to use ```find_package``` to import an installed version of the
library.
```cmake
find_package(benchmark REQUIRED)
```
Alternatively, ```add_subdirectory``` will incorporate the library directly in
to one's CMake project.
```cmake
add_subdirectory(benchmark)
```
Either way, link to the library as follows.
```cmake
target_link_libraries(MyTarget benchmark::benchmark)
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/google/benchmark.git
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++11
builds: default
builds: -( +msvc &!static )
bootstrap-build:
\
project = google-benchmark

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Disable support for building shared libs on windows with msvc
# Upstream does not support this
# Public headers are not marked appropriately with declspec(dllimport) and\
 declspec(dllexport)
# Causes severe problems with linking due to static variables and inline\
 functions in headers
if ($cxx.target.system == 'win32-msvc')
{
  switch $bin.lib
  {
    case 'both'
      bin.lib = static
    case 'shared'
      fail 'Google Benchmark does not support building shared libs with MSVC.'
  }
}

\
location: google-benchmark/google-benchmark-1.6.0+1.tar.gz
sha256sum: d60933d484501d09bfe3d94e8fa743c83902192654a1ce1bccbf9b3b3c78e1e2
:
name: google-benchmark
version: 1.6.1+1
summary: Build2 package for google benchmark
license: Apache-2.0
description:
\
# Benchmark

[![build-and-test](https://github.com/google/benchmark/workflows/build-and-te\
st/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ab\
uild-and-test)
[![bazel](https://github.com/google/benchmark/actions/workflows/bazel.yml/bad\
ge.svg)](https://github.com/google/benchmark/actions/workflows/bazel.yml)
[![pylint](https://github.com/google/benchmark/workflows/pylint/badge.svg)](h\
ttps://github.com/google/benchmark/actions?query=workflow%3Apylint)
[![test-bindings](https://github.com/google/benchmark/workflows/test-bindings\
/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ates\
t-bindings)

[![Build Status](https://travis-ci.org/google/benchmark.svg?branch=master)](h\
ttps://travis-ci.org/google/benchmark)
[![Coverage Status](https://coveralls.io/repos/google/benchmark/badge.svg)](h\
ttps://coveralls.io/r/google/benchmark)


A library to benchmark code snippets, similar to unit tests. Example:

```c++
#include <benchmark/benchmark.h>

static void BM_SomeFunction(benchmark::State& state) {
  // Perform setup here
  for (auto _ : state) {
    // This code gets timed
    SomeFunction();
  }
}
// Register the function as a benchmark
BENCHMARK(BM_SomeFunction);
// Run the benchmark
BENCHMARK_MAIN();
```

## Getting Started

To get started, see [Requirements](#requirements) and
[Installation](#installation). See [Usage](#usage) for a full example and the
[User Guide](docs/user_guide.md) for a more comprehensive feature overview.

It may also help to read the [Google Test documentation](https://github.com/g\
oogle/googletest/blob/master/docs/primer.md)
as some of the structural aspects of the APIs are similar.

## Resources

[Discussion group](https://groups.google.com/d/forum/benchmark-discuss)

IRC channels:
* [libera](https://libera.chat) #benchmark

[Additional Tooling Documentation](docs/tools.md)

[Assembly Testing Documentation](docs/AssemblyTests.md)

## Requirements

The library can be used with C++03. However, it requires C++11 to build,
including compiler and standard library support.

The following minimum versions are required to build the library:

* GCC 4.8
* Clang 3.4
* Visual Studio 14 2015
* Intel 2015 Update 1

See [Platform-Specific Build Instructions](docs/platform_specific_build_instr\
uctions.md).

## Installation

This describes the installation process using cmake. As pre-requisites, you'll
need git and cmake installed.

_See [dependencies.md](docs/dependencies.md) for more details regarding\
 supported
versions of build tools._

```bash
# Check out the library.
$ git clone https://github.com/google/benchmark.git
# Go to the library root directory
$ cd benchmark
# Make a build directory to place the build output.
$ cmake -E make_directory "build"
# Generate build system files with cmake, and download any dependencies.
$ cmake -E chdir "build" cmake -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on\
 -DCMAKE_BUILD_TYPE=Release ../
# or, starting with CMake 3.13, use a simpler form:
# cmake -DCMAKE_BUILD_TYPE=Release -S . -B "build"
# Build the library.
$ cmake --build "build" --config Release
```
This builds the `benchmark` and `benchmark_main` libraries and tests.
On a unix system, the build directory should now look something like this:

```
/benchmark
  /build
    /src
      /libbenchmark.a
      /libbenchmark_main.a
    /test
      ...
```

Next, you can run the tests to check the build.

```bash
$ cmake -E chdir "build" ctest --build-config Release
```

If you want to install the library globally, also run:

```
sudo cmake --build "build" --config Release --target install
```

Note that Google Benchmark requires Google Test to build and run the tests.\
 This
dependency can be provided two ways:

* Checkout the Google Test sources into `benchmark/googletest`.
* Otherwise, if `-DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON` is specified during
  configuration as above, the library will automatically download and build
  any required dependencies.

If you do not wish to build and run the tests, add `-DBENCHMARK_ENABLE_GTEST_\
TESTS=OFF`
to `CMAKE_ARGS`.

### Debug vs Release

By default, benchmark builds as a debug library. You will see a warning in the
output when this is the case. To build it as a release library instead, add
`-DCMAKE_BUILD_TYPE=Release` when generating the build system files, as shown
above. The use of `--config Release` in build commands is needed to properly
support multi-configuration tools (like Visual Studio for example) and can be
skipped for other build systems (like Makefile).

To enable link-time optimisation, also add `-DBENCHMARK_ENABLE_LTO=true` when
generating the build system files.

If you are using gcc, you might need to set `GCC_AR` and `GCC_RANLIB` cmake
cache variables, if autodetection fails.

If you are using clang, you may need to set `LLVMAR_EXECUTABLE`,
`LLVMNM_EXECUTABLE` and `LLVMRANLIB_EXECUTABLE` cmake cache variables.

### Stable and Experimental Library Versions

The main branch contains the latest stable version of the benchmarking\
 library;
the API of which can be considered largely stable, with source breaking\
 changes
being made only upon the release of a new major version.

Newer, experimental, features are implemented and tested on the
[`v2` branch](https://github.com/google/benchmark/tree/v2). Users who wish
to use, test, and provide feedback on the new features are encouraged to try
this branch. However, this branch provides no stability guarantees and\
 reserves
the right to change and break the API at any time.

## Usage

### Basic usage

Define a function that executes the code to measure, register it as a\
 benchmark
function using the `BENCHMARK` macro, and ensure an appropriate `main`\
 function
is available:

```c++
#include <benchmark/benchmark.h>

static void BM_StringCreation(benchmark::State& state) {
  for (auto _ : state)
    std::string empty_string;
}
// Register the function as a benchmark
BENCHMARK(BM_StringCreation);

// Define another benchmark
static void BM_StringCopy(benchmark::State& state) {
  std::string x = "hello";
  for (auto _ : state)
    std::string copy(x);
}
BENCHMARK(BM_StringCopy);

BENCHMARK_MAIN();
```

To run the benchmark, compile and link against the `benchmark` library
(libbenchmark.a/.so). If you followed the build steps above, this library\
 will 
be under the build directory you created.

```bash
# Example on linux after running the build steps above. Assumes the
# `benchmark` and `build` directories are under the current directory.
$ g++ mybenchmark.cc -std=c++11 -isystem benchmark/include \\
  -Lbenchmark/build/src -lbenchmark -lpthread -o mybenchmark
```

Alternatively, link against the `benchmark_main` library and remove
`BENCHMARK_MAIN();` above to get the same behavior.

The compiled executable will run all benchmarks by default. Pass the `--help`
flag for option information or see the [User Guide](docs/user_guide.md).

### Usage with CMake

If using CMake, it is recommended to link against the project-provided
`benchmark::benchmark` and `benchmark::benchmark_main` targets using
`target_link_libraries`.
It is possible to use ```find_package``` to import an installed version of the
library.
```cmake
find_package(benchmark REQUIRED)
```
Alternatively, ```add_subdirectory``` will incorporate the library directly in
to one's CMake project.
```cmake
add_subdirectory(benchmark)
```
Either way, link to the library as follows.
```cmake
target_link_libraries(MyTarget benchmark::benchmark)
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/google/benchmark.git
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++11
builds: default
builds: -( +windows &!static )
build-exclude: windows**mingw**; user_counters_tabular_test exists aborts\
 with incorrect regex. Works with msvc
build-exclude: windows**clang**; user_counters_tabular_test exists aborts\
 with incorrect regex. Works with msvc
bootstrap-build:
\
project = google-benchmark

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Disable support for building shared libs on windows with msvc
# Upstream does not support this
# Public headers are not marked appropriately with declspec(dllimport) and\
 declspec(dllexport)
# Causes severe problems with linking due to static variables and inline\
 functions in headers
if ($cxx.target.class == 'windows')
{
  switch $bin.lib
  {
    case 'both'
      bin.lib = static
    case 'shared'
      fail 'Google Benchmark does not support building shared libs on\
 windows.'
  }
}

\
location: google-benchmark/google-benchmark-1.6.1+1.tar.gz
sha256sum: 0f5b7e0c334e946291ba95cefc62e569b85ab754a69ff3a2a4d9d88c059a45a3
:
name: google-benchmark
version: 1.7.0+2
summary: Build2 package for google benchmark
license: Apache-2.0
description:
\
# Benchmark

[![build-and-test](https://github.com/google/benchmark/workflows/build-and-te\
st/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ab\
uild-and-test)
[![bazel](https://github.com/google/benchmark/actions/workflows/bazel.yml/bad\
ge.svg)](https://github.com/google/benchmark/actions/workflows/bazel.yml)
[![pylint](https://github.com/google/benchmark/workflows/pylint/badge.svg)](h\
ttps://github.com/google/benchmark/actions?query=workflow%3Apylint)
[![test-bindings](https://github.com/google/benchmark/workflows/test-bindings\
/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ates\
t-bindings)

[![Build Status](https://travis-ci.org/google/benchmark.svg?branch=master)](h\
ttps://travis-ci.org/google/benchmark)
[![Coverage Status](https://coveralls.io/repos/google/benchmark/badge.svg)](h\
ttps://coveralls.io/r/google/benchmark)


A library to benchmark code snippets, similar to unit tests. Example:

```c++
#include <benchmark/benchmark.h>

static void BM_SomeFunction(benchmark::State& state) {
  // Perform setup here
  for (auto _ : state) {
    // This code gets timed
    SomeFunction();
  }
}
// Register the function as a benchmark
BENCHMARK(BM_SomeFunction);
// Run the benchmark
BENCHMARK_MAIN();
```

## Getting Started

To get started, see [Requirements](#requirements) and
[Installation](#installation). See [Usage](#usage) for a full example and the
[User Guide](docs/user_guide.md) for a more comprehensive feature overview.

It may also help to read the [Google Test documentation](https://github.com/g\
oogle/googletest/blob/master/docs/primer.md)
as some of the structural aspects of the APIs are similar.

## Resources

[Discussion group](https://groups.google.com/d/forum/benchmark-discuss)

IRC channels:
* [libera](https://libera.chat) #benchmark

[Additional Tooling Documentation](docs/tools.md)

[Assembly Testing Documentation](docs/AssemblyTests.md)

[Building and installing Python bindings](docs/python_bindings.md)

## Requirements

The library can be used with C++03. However, it requires C++11 to build,
including compiler and standard library support.

The following minimum versions are required to build the library:

* GCC 4.8
* Clang 3.4
* Visual Studio 14 2015
* Intel 2015 Update 1

See [Platform-Specific Build Instructions](docs/platform_specific_build_instr\
uctions.md).

## Installation

This describes the installation process using cmake. As pre-requisites, you'll
need git and cmake installed.

_See [dependencies.md](docs/dependencies.md) for more details regarding\
 supported
versions of build tools._

```bash
# Check out the library.
$ git clone https://github.com/google/benchmark.git
# Go to the library root directory
$ cd benchmark
# Make a build directory to place the build output.
$ cmake -E make_directory "build"
# Generate build system files with cmake, and download any dependencies.
$ cmake -E chdir "build" cmake -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on\
 -DCMAKE_BUILD_TYPE=Release ../
# or, starting with CMake 3.13, use a simpler form:
# cmake -DCMAKE_BUILD_TYPE=Release -S . -B "build"
# Build the library.
$ cmake --build "build" --config Release
```
This builds the `benchmark` and `benchmark_main` libraries and tests.
On a unix system, the build directory should now look something like this:

```
/benchmark
  /build
    /src
      /libbenchmark.a
      /libbenchmark_main.a
    /test
      ...
```

Next, you can run the tests to check the build.

```bash
$ cmake -E chdir "build" ctest --build-config Release
```

If you want to install the library globally, also run:

```
sudo cmake --build "build" --config Release --target install
```

Note that Google Benchmark requires Google Test to build and run the tests.\
 This
dependency can be provided two ways:

* Checkout the Google Test sources into `benchmark/googletest`.
* Otherwise, if `-DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON` is specified during
  configuration as above, the library will automatically download and build
  any required dependencies.

If you do not wish to build and run the tests, add `-DBENCHMARK_ENABLE_GTEST_\
TESTS=OFF`
to `CMAKE_ARGS`.

### Debug vs Release

By default, benchmark builds as a debug library. You will see a warning in the
output when this is the case. To build it as a release library instead, add
`-DCMAKE_BUILD_TYPE=Release` when generating the build system files, as shown
above. The use of `--config Release` in build commands is needed to properly
support multi-configuration tools (like Visual Studio for example) and can be
skipped for other build systems (like Makefile).

To enable link-time optimisation, also add `-DBENCHMARK_ENABLE_LTO=true` when
generating the build system files.

If you are using gcc, you might need to set `GCC_AR` and `GCC_RANLIB` cmake
cache variables, if autodetection fails.

If you are using clang, you may need to set `LLVMAR_EXECUTABLE`,
`LLVMNM_EXECUTABLE` and `LLVMRANLIB_EXECUTABLE` cmake cache variables.

### Stable and Experimental Library Versions

The main branch contains the latest stable version of the benchmarking\
 library;
the API of which can be considered largely stable, with source breaking\
 changes
being made only upon the release of a new major version.

Newer, experimental, features are implemented and tested on the
[`v2` branch](https://github.com/google/benchmark/tree/v2). Users who wish
to use, test, and provide feedback on the new features are encouraged to try
this branch. However, this branch provides no stability guarantees and\
 reserves
the right to change and break the API at any time.

## Usage

### Basic usage

Define a function that executes the code to measure, register it as a\
 benchmark
function using the `BENCHMARK` macro, and ensure an appropriate `main`\
 function
is available:

```c++
#include <benchmark/benchmark.h>

static void BM_StringCreation(benchmark::State& state) {
  for (auto _ : state)
    std::string empty_string;
}
// Register the function as a benchmark
BENCHMARK(BM_StringCreation);

// Define another benchmark
static void BM_StringCopy(benchmark::State& state) {
  std::string x = "hello";
  for (auto _ : state)
    std::string copy(x);
}
BENCHMARK(BM_StringCopy);

BENCHMARK_MAIN();
```

To run the benchmark, compile and link against the `benchmark` library
(libbenchmark.a/.so). If you followed the build steps above, this library\
 will 
be under the build directory you created.

```bash
# Example on linux after running the build steps above. Assumes the
# `benchmark` and `build` directories are under the current directory.
$ g++ mybenchmark.cc -std=c++11 -isystem benchmark/include \\
  -Lbenchmark/build/src -lbenchmark -lpthread -o mybenchmark
```

Alternatively, link against the `benchmark_main` library and remove
`BENCHMARK_MAIN();` above to get the same behavior.

The compiled executable will run all benchmarks by default. Pass the `--help`
flag for option information or see the [User Guide](docs/user_guide.md).

### Usage with CMake

If using CMake, it is recommended to link against the project-provided
`benchmark::benchmark` and `benchmark::benchmark_main` targets using
`target_link_libraries`.
It is possible to use ```find_package``` to import an installed version of the
library.
```cmake
find_package(benchmark REQUIRED)
```
Alternatively, ```add_subdirectory``` will incorporate the library directly in
to one's CMake project.
```cmake
add_subdirectory(benchmark)
```
Either way, link to the library as follows.
```cmake
target_link_libraries(MyTarget benchmark::benchmark)
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/google/benchmark.git
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++11
build-exclude: **-**-ndebug*; Requires special define to be passed as well.\
 Will not work with default config + ndebug option
bootstrap-build:
\
project = google-benchmark

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: google-benchmark/google-benchmark-1.7.0+2.tar.gz
sha256sum: ee08a538f9d09ca2c68a96af2ca9968bf419f92cf314c5fa350a04ddb46d950f
:
name: google-benchmark
version: 1.7.1
summary: Build2 package for google benchmark
license: Apache-2.0
description:
\
# Benchmark

[![build-and-test](https://github.com/google/benchmark/workflows/build-and-te\
st/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ab\
uild-and-test)
[![bazel](https://github.com/google/benchmark/actions/workflows/bazel.yml/bad\
ge.svg)](https://github.com/google/benchmark/actions/workflows/bazel.yml)
[![pylint](https://github.com/google/benchmark/workflows/pylint/badge.svg)](h\
ttps://github.com/google/benchmark/actions?query=workflow%3Apylint)
[![test-bindings](https://github.com/google/benchmark/workflows/test-bindings\
/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ates\
t-bindings)

[![Build Status](https://travis-ci.org/google/benchmark.svg?branch=master)](h\
ttps://travis-ci.org/google/benchmark)
[![Coverage Status](https://coveralls.io/repos/google/benchmark/badge.svg)](h\
ttps://coveralls.io/r/google/benchmark)


A library to benchmark code snippets, similar to unit tests. Example:

```c++
#include <benchmark/benchmark.h>

static void BM_SomeFunction(benchmark::State& state) {
  // Perform setup here
  for (auto _ : state) {
    // This code gets timed
    SomeFunction();
  }
}
// Register the function as a benchmark
BENCHMARK(BM_SomeFunction);
// Run the benchmark
BENCHMARK_MAIN();
```

## Getting Started

To get started, see [Requirements](#requirements) and
[Installation](#installation). See [Usage](#usage) for a full example and the
[User Guide](docs/user_guide.md) for a more comprehensive feature overview.

It may also help to read the [Google Test documentation](https://github.com/g\
oogle/googletest/blob/master/docs/primer.md)
as some of the structural aspects of the APIs are similar.

## Resources

[Discussion group](https://groups.google.com/d/forum/benchmark-discuss)

IRC channels:
* [libera](https://libera.chat) #benchmark

[Additional Tooling Documentation](docs/tools.md)

[Assembly Testing Documentation](docs/AssemblyTests.md)

[Building and installing Python bindings](docs/python_bindings.md)

## Requirements

The library can be used with C++03. However, it requires C++11 to build,
including compiler and standard library support.

The following minimum versions are required to build the library:

* GCC 4.8
* Clang 3.4
* Visual Studio 14 2015
* Intel 2015 Update 1

See [Platform-Specific Build Instructions](docs/platform_specific_build_instr\
uctions.md).

## Installation

This describes the installation process using cmake. As pre-requisites, you'll
need git and cmake installed.

_See [dependencies.md](docs/dependencies.md) for more details regarding\
 supported
versions of build tools._

```bash
# Check out the library.
$ git clone https://github.com/google/benchmark.git
# Go to the library root directory
$ cd benchmark
# Make a build directory to place the build output.
$ cmake -E make_directory "build"
# Generate build system files with cmake, and download any dependencies.
$ cmake -E chdir "build" cmake -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on\
 -DCMAKE_BUILD_TYPE=Release ../
# or, starting with CMake 3.13, use a simpler form:
# cmake -DCMAKE_BUILD_TYPE=Release -S . -B "build"
# Build the library.
$ cmake --build "build" --config Release
```
This builds the `benchmark` and `benchmark_main` libraries and tests.
On a unix system, the build directory should now look something like this:

```
/benchmark
  /build
    /src
      /libbenchmark.a
      /libbenchmark_main.a
    /test
      ...
```

Next, you can run the tests to check the build.

```bash
$ cmake -E chdir "build" ctest --build-config Release
```

If you want to install the library globally, also run:

```
sudo cmake --build "build" --config Release --target install
```

Note that Google Benchmark requires Google Test to build and run the tests.\
 This
dependency can be provided two ways:

* Checkout the Google Test sources into `benchmark/googletest`.
* Otherwise, if `-DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON` is specified during
  configuration as above, the library will automatically download and build
  any required dependencies.

If you do not wish to build and run the tests, add `-DBENCHMARK_ENABLE_GTEST_\
TESTS=OFF`
to `CMAKE_ARGS`.

### Debug vs Release

By default, benchmark builds as a debug library. You will see a warning in the
output when this is the case. To build it as a release library instead, add
`-DCMAKE_BUILD_TYPE=Release` when generating the build system files, as shown
above. The use of `--config Release` in build commands is needed to properly
support multi-configuration tools (like Visual Studio for example) and can be
skipped for other build systems (like Makefile).

To enable link-time optimisation, also add `-DBENCHMARK_ENABLE_LTO=true` when
generating the build system files.

If you are using gcc, you might need to set `GCC_AR` and `GCC_RANLIB` cmake
cache variables, if autodetection fails.

If you are using clang, you may need to set `LLVMAR_EXECUTABLE`,
`LLVMNM_EXECUTABLE` and `LLVMRANLIB_EXECUTABLE` cmake cache variables.

### Stable and Experimental Library Versions

The main branch contains the latest stable version of the benchmarking\
 library;
the API of which can be considered largely stable, with source breaking\
 changes
being made only upon the release of a new major version.

Newer, experimental, features are implemented and tested on the
[`v2` branch](https://github.com/google/benchmark/tree/v2). Users who wish
to use, test, and provide feedback on the new features are encouraged to try
this branch. However, this branch provides no stability guarantees and\
 reserves
the right to change and break the API at any time.

## Usage

### Basic usage

Define a function that executes the code to measure, register it as a\
 benchmark
function using the `BENCHMARK` macro, and ensure an appropriate `main`\
 function
is available:

```c++
#include <benchmark/benchmark.h>

static void BM_StringCreation(benchmark::State& state) {
  for (auto _ : state)
    std::string empty_string;
}
// Register the function as a benchmark
BENCHMARK(BM_StringCreation);

// Define another benchmark
static void BM_StringCopy(benchmark::State& state) {
  std::string x = "hello";
  for (auto _ : state)
    std::string copy(x);
}
BENCHMARK(BM_StringCopy);

BENCHMARK_MAIN();
```

To run the benchmark, compile and link against the `benchmark` library
(libbenchmark.a/.so). If you followed the build steps above, this library\
 will 
be under the build directory you created.

```bash
# Example on linux after running the build steps above. Assumes the
# `benchmark` and `build` directories are under the current directory.
$ g++ mybenchmark.cc -std=c++11 -isystem benchmark/include \\
  -Lbenchmark/build/src -lbenchmark -lpthread -o mybenchmark
```

Alternatively, link against the `benchmark_main` library and remove
`BENCHMARK_MAIN();` above to get the same behavior.

The compiled executable will run all benchmarks by default. Pass the `--help`
flag for option information or see the [User Guide](docs/user_guide.md).

### Usage with CMake

If using CMake, it is recommended to link against the project-provided
`benchmark::benchmark` and `benchmark::benchmark_main` targets using
`target_link_libraries`.
It is possible to use ```find_package``` to import an installed version of the
library.
```cmake
find_package(benchmark REQUIRED)
```
Alternatively, ```add_subdirectory``` will incorporate the library directly in
to one's CMake project.
```cmake
add_subdirectory(benchmark)
```
Either way, link to the library as follows.
```cmake
target_link_libraries(MyTarget benchmark::benchmark)
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/google/benchmark.git
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++11
build-exclude: **-**-ndebug*; Requires special define to be passed as well.\
 Will not work with default config + ndebug option
bootstrap-build:
\
project = google-benchmark

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: google-benchmark/google-benchmark-1.7.1.tar.gz
sha256sum: c8fbda17b918fb0aa168a387bc4a5d35188ff58c1615bdb5eb2e39f5245e9f03
:
name: google-benchmark
version: 1.8.0
summary: Build2 package for google benchmark
license: Apache-2.0
description:
\
# Benchmark

[![build-and-test](https://github.com/google/benchmark/workflows/build-and-te\
st/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ab\
uild-and-test)
[![bazel](https://github.com/google/benchmark/actions/workflows/bazel.yml/bad\
ge.svg)](https://github.com/google/benchmark/actions/workflows/bazel.yml)
[![pylint](https://github.com/google/benchmark/workflows/pylint/badge.svg)](h\
ttps://github.com/google/benchmark/actions?query=workflow%3Apylint)
[![test-bindings](https://github.com/google/benchmark/workflows/test-bindings\
/badge.svg)](https://github.com/google/benchmark/actions?query=workflow%3Ates\
t-bindings)

[![Build Status](https://travis-ci.org/google/benchmark.svg?branch=main)](htt\
ps://travis-ci.org/google/benchmark)
[![Coverage Status](https://coveralls.io/repos/google/benchmark/badge.svg)](h\
ttps://coveralls.io/r/google/benchmark)


A library to benchmark code snippets, similar to unit tests. Example:

```c++
#include <benchmark/benchmark.h>

static void BM_SomeFunction(benchmark::State& state) {
  // Perform setup here
  for (auto _ : state) {
    // This code gets timed
    SomeFunction();
  }
}
// Register the function as a benchmark
BENCHMARK(BM_SomeFunction);
// Run the benchmark
BENCHMARK_MAIN();
```

## Getting Started

To get started, see [Requirements](#requirements) and
[Installation](#installation). See [Usage](#usage) for a full example and the
[User Guide](docs/user_guide.md) for a more comprehensive feature overview.

It may also help to read the [Google Test documentation](https://github.com/g\
oogle/googletest/blob/main/docs/primer.md)
as some of the structural aspects of the APIs are similar.

## Resources

[Discussion group](https://groups.google.com/d/forum/benchmark-discuss)

IRC channels:
* [libera](https://libera.chat) #benchmark

[Additional Tooling Documentation](docs/tools.md)

[Assembly Testing Documentation](docs/AssemblyTests.md)

[Building and installing Python bindings](docs/python_bindings.md)

## Requirements

The library can be used with C++03. However, it requires C++11 to build,
including compiler and standard library support.

The following minimum versions are required to build the library:

* GCC 4.8
* Clang 3.4
* Visual Studio 14 2015
* Intel 2015 Update 1

See [Platform-Specific Build Instructions](docs/platform_specific_build_instr\
uctions.md).

## Installation

This describes the installation process using cmake. As pre-requisites, you'll
need git and cmake installed.

_See [dependencies.md](docs/dependencies.md) for more details regarding\
 supported
versions of build tools._

```bash
# Check out the library.
$ git clone https://github.com/google/benchmark.git
# Go to the library root directory
$ cd benchmark
# Make a build directory to place the build output.
$ cmake -E make_directory "build"
# Generate build system files with cmake, and download any dependencies.
$ cmake -E chdir "build" cmake -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on\
 -DCMAKE_BUILD_TYPE=Release ../
# or, starting with CMake 3.13, use a simpler form:
# cmake -DCMAKE_BUILD_TYPE=Release -S . -B "build"
# Build the library.
$ cmake --build "build" --config Release
```
This builds the `benchmark` and `benchmark_main` libraries and tests.
On a unix system, the build directory should now look something like this:

```
/benchmark
  /build
    /src
      /libbenchmark.a
      /libbenchmark_main.a
    /test
      ...
```

Next, you can run the tests to check the build.

```bash
$ cmake -E chdir "build" ctest --build-config Release
```

If you want to install the library globally, also run:

```
sudo cmake --build "build" --config Release --target install
```

Note that Google Benchmark requires Google Test to build and run the tests.\
 This
dependency can be provided two ways:

* Checkout the Google Test sources into `benchmark/googletest`.
* Otherwise, if `-DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON` is specified during
  configuration as above, the library will automatically download and build
  any required dependencies.

If you do not wish to build and run the tests, add `-DBENCHMARK_ENABLE_GTEST_\
TESTS=OFF`
to `CMAKE_ARGS`.

### Debug vs Release

By default, benchmark builds as a debug library. You will see a warning in the
output when this is the case. To build it as a release library instead, add
`-DCMAKE_BUILD_TYPE=Release` when generating the build system files, as shown
above. The use of `--config Release` in build commands is needed to properly
support multi-configuration tools (like Visual Studio for example) and can be
skipped for other build systems (like Makefile).

To enable link-time optimisation, also add `-DBENCHMARK_ENABLE_LTO=true` when
generating the build system files.

If you are using gcc, you might need to set `GCC_AR` and `GCC_RANLIB` cmake
cache variables, if autodetection fails.

If you are using clang, you may need to set `LLVMAR_EXECUTABLE`,
`LLVMNM_EXECUTABLE` and `LLVMRANLIB_EXECUTABLE` cmake cache variables.

To enable sanitizer checks (eg., `asan` and `tsan`), add:
```
 -DCMAKE_C_FLAGS="-g -O2 -fno-omit-frame-pointer -fsanitize=address\
 -fsanitize=thread -fno-sanitize-recover=all"
 -DCMAKE_CXX_FLAGS="-g -O2 -fno-omit-frame-pointer -fsanitize=address\
 -fsanitize=thread -fno-sanitize-recover=all "  
```

### Stable and Experimental Library Versions

The main branch contains the latest stable version of the benchmarking\
 library;
the API of which can be considered largely stable, with source breaking\
 changes
being made only upon the release of a new major version.

Newer, experimental, features are implemented and tested on the
[`v2` branch](https://github.com/google/benchmark/tree/v2). Users who wish
to use, test, and provide feedback on the new features are encouraged to try
this branch. However, this branch provides no stability guarantees and\
 reserves
the right to change and break the API at any time.

## Usage

### Basic usage

Define a function that executes the code to measure, register it as a\
 benchmark
function using the `BENCHMARK` macro, and ensure an appropriate `main`\
 function
is available:

```c++
#include <benchmark/benchmark.h>

static void BM_StringCreation(benchmark::State& state) {
  for (auto _ : state)
    std::string empty_string;
}
// Register the function as a benchmark
BENCHMARK(BM_StringCreation);

// Define another benchmark
static void BM_StringCopy(benchmark::State& state) {
  std::string x = "hello";
  for (auto _ : state)
    std::string copy(x);
}
BENCHMARK(BM_StringCopy);

BENCHMARK_MAIN();
```

To run the benchmark, compile and link against the `benchmark` library
(libbenchmark.a/.so). If you followed the build steps above, this library\
 will 
be under the build directory you created.

```bash
# Example on linux after running the build steps above. Assumes the
# `benchmark` and `build` directories are under the current directory.
$ g++ mybenchmark.cc -std=c++11 -isystem benchmark/include \\
  -Lbenchmark/build/src -lbenchmark -lpthread -o mybenchmark
```

Alternatively, link against the `benchmark_main` library and remove
`BENCHMARK_MAIN();` above to get the same behavior.

The compiled executable will run all benchmarks by default. Pass the `--help`
flag for option information or see the [User Guide](docs/user_guide.md).

### Usage with CMake

If using CMake, it is recommended to link against the project-provided
`benchmark::benchmark` and `benchmark::benchmark_main` targets using
`target_link_libraries`.
It is possible to use ```find_package``` to import an installed version of the
library.
```cmake
find_package(benchmark REQUIRED)
```
Alternatively, ```add_subdirectory``` will incorporate the library directly in
to one's CMake project.
```cmake
add_subdirectory(benchmark)
```
Either way, link to the library as follows.
```cmake
target_link_libraries(MyTarget benchmark::benchmark)
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/google/benchmark.git
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++11
build-exclude: **-**-ndebug*; Requires special define to be passed as well.\
 Will not work with default config + ndebug option
bootstrap-build:
\
project = google-benchmark

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: google-benchmark/google-benchmark-1.8.0.tar.gz
sha256sum: efb9a53d90e843497b3f45ef41b75128d9b72dc55d42f3eccf04633d9f158e86
:
name: gsl
version: 3.1.0+2
summary: The Guidelines Support Library (GSL) contains functions and types\
 that are suggested for use by the C++ Core Guidelines maintained by the\
 Standard C++ Foundation.
license: MIT
description:
\
# GSL: Guidelines Support Library
[![Build Status](https://travis-ci.org/Microsoft/GSL.svg?branch=master)](http\
s://travis-ci.org/Microsoft/GSL) [![Build status](https://ci.appveyor.com/api\
/projects/status/github/Microsoft/GSL?svg=true)](https://ci.appveyor.com/proj\
ect/neilmacintosh/GSL)

The Guidelines Support Library (GSL) contains functions and types that are\
 suggested for use by the
[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines) maintained\
 by the [Standard C++ Foundation](https://isocpp.org).
This repo contains Microsoft's implementation of GSL.

The library includes types like `span<T>`, `string_span`, `owner<>` and\
 others.

The entire implementation is provided inline in the headers under the\
 [gsl](./include/gsl) directory. The implementation generally assumes a\
 platform that implements C++14 support. There are specific workarounds to\
 support MSVC 2015.

While some types have been broken out into their own headers (e.g.\
 [gsl/span](./include/gsl/span)),
it is simplest to just include [gsl/gsl](./include/gsl/gsl) and gain access\
 to the entire library.

> NOTE: We encourage contributions that improve or refine any of the types in\
 this library as well as ports to
other platforms. Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for more\
 information about contributing.

# Project Code of Conduct
This project has adopted the [Microsoft Open Source Code of\
 Conduct](https://opensource.microsoft.com/codeofconduct/). For more\
 information see the [Code of Conduct FAQ](https://opensource.microsoft.com/c\
odeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@micros\
oft.com) with any additional questions or comments.

# Usage of Third Party Libraries
This project makes use of the [Google Test](https://github.com/google/googlet\
est) testing library. Please see the [ThirdPartyNotices.txt](./ThirdPartyNoti\
ces.txt) file for details regarding the licensing of Google Test.

# Quick Start
## Supported Compilers
The GSL officially supports the current and previous major release of MSVC,\
 GCC, Clang, and XCode's Apple-Clang.
See our latest test results for the most up-to-date list of supported\
 configurations.

Compiler |Toolset Versions Currently Tested| Build Status
:------- |:--|------------:
 XCode |11.4 & 10.3 | [![Status](https://travis-ci.org/Microsoft/GSL.svg?bran\
ch=master)](https://travis-ci.org/Microsoft/GSL)
 GCC |9 & 8| [![Status](https://travis-ci.org/Microsoft/GSL.svg?branch=master\
)](https://travis-ci.org/Microsoft/GSL)
 Clang |11 &  10| [![Status](https://travis-ci.org/Microsoft/GSL.svg?branch=m\
aster)](https://travis-ci.org/Microsoft/GSL)
 Visual Studio with MSVC | VS2017 (15.9) & VS2019 (16.4) |\
 [![Status](https://ci.appveyor.com/api/projects/status/github/Microsoft/GSL?\
svg=true)](https://ci.appveyor.com/project/neilmacintosh/GSL)
 Visual Studio with LLVM | VS2017 (Clang 9) & VS2019 (Clang 10) |\
 [![Status](https://ci.appveyor.com/api/projects/status/github/Microsoft/GSL?\
svg=true)](https://ci.appveyor.com/project/neilmacintosh/GSL)


Note: For `gsl::byte` to work correctly with Clang and GCC you might have to\
 use the ` -fno-strict-aliasing` compiler option.

---
If you successfully port GSL to another platform, we would love to hear from\
 you!
- Submit an issue specifying the platform and target.
- Consider contributing your changes by filing a pull request with any\
 necessary changes.
- If at all possible, add a CI/CD step and add the button to the table below!

Target | CI/CD Status
:------- | -----------:
iOS | ![CI](https://github.com/microsoft/GSL/workflows/CI/badge.svg)
Android | ![CI](https://github.com/microsoft/GSL/workflows/CI/badge.svg)

Note: These CI/CD steps are run with each pull request, however failures in\
 them are non-blocking.

## Building the tests
To build the tests, you will require the following:

* [CMake](http://cmake.org), version 3.1.3 (3.2.3 for AppleClang) or later to\
 be installed and in your PATH.

These steps assume the source code of this repository has been cloned into a\
 directory named `c:\GSL`.

1. Create a directory to contain the build outputs for a particular\
 architecture (we name it c:\GSL\build-x86 in this example).

        cd GSL
        md build-x86
        cd build-x86

2. Configure CMake to use the compiler of your choice (you can see a list by\
 running `cmake --help`).

        cmake -G "Visual Studio 14 2015" c:\GSL

3. Build the test suite (in this case, in the Debug configuration, Release is\
 another good choice).

        cmake --build . --config Debug

4. Run the test suite.

        ctest -C Debug

All tests should pass - indicating your platform is fully supported and you\
 are ready to use the GSL types!

## Building GSL - Using vcpkg

You can download and install GSL using the [vcpkg](https://github.com/Microso\
ft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    vcpkg install ms-gsl

The GSL port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

## Using the libraries
As the types are entirely implemented inline in headers, there are no linking\
 requirements.

You can copy the [gsl](./include/gsl) directory into your source tree so it\
 is available
to your compiler, then include the appropriate headers in your program.

Alternatively set your compiler's *include path* flag to point to the GSL\
 development folder (`c:\GSL\include` in the example above) or installation\
 folder (after running the install). Eg.

MSVC++

    /I c:\GSL\include

GCC/clang

    -I$HOME/dev/GSL/include

Include the library using:

    #include <gsl/gsl>

## Usage in CMake

The library provides a Config file for CMake, once installed it can be found\
 via

    find_package(Microsoft.GSL CONFIG)

Which, when successful, will add library target called `Microsoft.GSL::GSL`\
 which you can use via the usual
`target_link_libraries` mechanism.

## Debugging visualization support
For Visual Studio users, the file [GSL.natvis](./GSL.natvis) in the root\
 directory of the repository can be added to your project if you would like\
 more helpful visualization of GSL types in the Visual Studio debugger than\
 would be offered by default.

\
description-type: text/markdown;variant=GFM
url: https://github.com/microsoft/GSL
package-url: https://github.com/build2-packaging/gsl/
package-email: lyrahgames@mailbox.org
build-error-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++14
bootstrap-build:
\
project = gsl

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

# GSL does not use extensions for header files.
hxx{*}: extension =
cxx{*}: extension = cpp

test.target = $cxx.target

\
location: gsl/gsl-3.1.0+2.tar.gz
sha256sum: 25bfad676e9514e1fc0cf4ee624428fc929aa10e7c754ca60358d7cf24359b19
:
name: gsl
version: 4.0.0
summary: The Guidelines Support Library (GSL) contains functions and types\
 that are suggested for use by the C++ Core Guidelines maintained by the\
 Standard C++ Foundation.
license: MIT
description:
\
# GSL: Guidelines Support Library
[![Build Status](https://dev.azure.com/cppstat/GSL/_apis/build/status/microso\
ft.GSL?branchName=main)](https://dev.azure.com/cppstat/GSL/_build/latest?defi\
nitionId=1&branchName=main)

The Guidelines Support Library (GSL) contains functions and types that are\
 suggested for use by the
[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines) maintained\
 by the [Standard C++ Foundation](https://isocpp.org).
This repo contains Microsoft's implementation of GSL.

The entire implementation is provided inline in the headers under the\
 [gsl](./include/gsl) directory. The implementation generally assumes a\
 platform that implements C++14 support.

While some types have been broken out into their own headers (e.g.\
 [gsl/span](./include/gsl/span)),
it is simplest to just include [gsl/gsl](./include/gsl/gsl) and gain access\
 to the entire library.

> NOTE: We encourage contributions that improve or refine any of the types in\
 this library as well as ports to
other platforms. Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for more\
 information about contributing.

# Project Code of Conduct
This project has adopted the [Microsoft Open Source Code of\
 Conduct](https://opensource.microsoft.com/codeofconduct/). For more\
 information see the [Code of Conduct FAQ](https://opensource.microsoft.com/c\
odeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@micros\
oft.com) with any additional questions or comments.

# Usage of Third Party Libraries
This project makes use of the [Google Test](https://github.com/google/googlet\
est) testing library. Please see the [ThirdPartyNotices.txt](./ThirdPartyNoti\
ces.txt) file for details regarding the licensing of Google Test.

# Supported features
## Microsoft GSL implements the following from the C++ Core Guidelines:

Feature                                                                  |\
 Supported? | Description
-------------------------------------------------------------------------|:--\
--------:|-------------
[**1. Views**][cg-views]                                                 |   \
         |
[owner](docs/headers.md#user-content-H-pointers-owner)                   |\
 &#x2611;   | An alias for a raw pointer
[not_null](docs/headers.md#user-content-H-pointers-not_null)             |\
 &#x2611;   | Restricts a pointer / smart pointer to hold non-null values
[span](docs/headers.md#user-content-H-span-span)                         |\
 &#x2611;   | A view over a contiguous sequence of memory. Based on the\
 standardized version of `std::span`, however `gsl::span` enforces bounds\
 checking.
span_p                                                                   |\
 &#x2610;   | Spans a range starting from a pointer to the first place for\
 which the predicate is true
[basic_zstring](docs/headers.md#user-content-H-string_span)              |\
 &#x2611;   | A pointer to a C-string (zero-terminated array) with a\
 templated char type
[zstring](docs/headers.md#user-content-H-string_span)                    |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of char
[czstring](docs/headers.md#user-content-H-string_span)                   |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of const char
[wzstring](docs/headers.md#user-content-H-string_span)                   |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of wchar_t
[cwzstring](docs/headers.md#user-content-H-string_span)                  |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of const wchar_t
[u16zstring](docs/headers.md#user-content-H-string_span)                 |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of char16_t
[cu16zstring](docs/headers.md#user-content-H-string_span)                |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of const char16_t
[u32zstring](docs/headers.md#user-content-H-string_span)                 |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of char32_t
[cu32zstring](docs/headers.md#user-content-H-string_span)                |\
 &#x2611;   | An alias to `basic_zstring` with dynamic extent and a char type\
 of const char32_t
[**2. Owners**][cg-owners]                                               |   \
         |
[unique_ptr](docs/headers.md#user-content-H-pointers-unique_ptr)         |\
 &#x2611;   | An alias to `std::unique_ptr`
[shared_ptr](docs/headers.md#user-content-H-pointers-shared_ptr)         |\
 &#x2611;   | An alias to `std::shared_ptr`
stack_array                                                              |\
 &#x2610;   | A stack-allocated array
dyn_array                                                                |\
 &#x2610;   | A heap-allocated array
[**3. Assertions**][cg-assertions]                                       |   \
         |
[Expects](docs/headers.md#user-content-H-assert-expects)                 |\
 &#x2611;   | A precondition assertion; on failure it terminates
[Ensures](docs/headers.md#user-content-H-assert-ensures)                 |\
 &#x2611;   | A postcondition assertion; on failure it terminates
[**4. Utilities**][cg-utilities]                                         |   \
         |
move_owner                                                               |\
 &#x2610;   | A helper function that moves one `owner` to the other
[byte](docs/headers.md#user-content-H-byte-byte)                         |\
 &#x2611;   | Either an alias to `std::byte` or a byte type
[final_action](docs/headers.md#user-content-H-util-final_action)         |\
 &#x2611;   | A RAII style class that invokes a functor on its destruction
[finally](docs/headers.md#user-content-H-util-finally)                   |\
 &#x2611;   | A helper function instantiating `final_action`
[GSL_SUPPRESS](docs/headers.md#user-content-H-assert-gsl_suppress)       |\
 &#x2611;   | A macro that takes an argument and turns it into\
 `[[gsl::suppress(x)]]` or `[[gsl::suppress("x")]]`
[[implicit]]                                                             |\
 &#x2610;   | A "marker" to put on single-argument constructors to explicitly\
 make them non-explicit
[index](docs/headers.md#user-content-H-util-index)                       |\
 &#x2611;   | A type to use for all container and array indexing (currently\
 an alias for `std::ptrdiff_t`)
joining_thread                                                           |\
 &#x2610;   | A RAII style version of `std::thread` that joins
[narrow](docs/headers.md#user-content-H-narrow-narrow)                   |\
 &#x2611;   | A checked version of `narrow_cast`; it can throw\
 `narrowing_error`
[narrow_cast](docs/headers.md#user-content-H-util-narrow_cast)           |\
 &#x2611;   | A narrowing cast for values and a synonym for `static_cast`
[narrowing_error](docs/headers.md#user-content-H-narrow-narrowing_error) |\
 &#x2611;   | A custom exception type thrown by `narrow()`
[**5. Concepts**][cg-concepts]                                           |\
 &#x2610;   |

## The following features do not exist in or have been removed from the C++\
 Core Guidelines:
Feature                            | Supported? | Description
-----------------------------------|:----------:|-------------
[strict_not_null](docs/headers.md#user-content-H-pointers-strict_not_null) |\
 &#x2611;   | A stricter version of `not_null` with explicit constructors
multi_span                         | &#x2610;   | Deprecated.\
 Multi-dimensional span.
strided_span                       | &#x2610;   | Deprecated. Support for\
 this type has been discontinued.
basic_string_span                  | &#x2610;   | Deprecated. Like `span` but\
 for strings with a templated char type
string_span                        | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of char
cstring_span                       | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of const char
wstring_span                       | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of wchar_t
cwstring_span                      | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of const wchar_t
u16string_span                     | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of char16_t
cu16string_span                    | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of const char16_t
u32string_span                     | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of char32_t
cu32string_span                    | &#x2610;   | Deprecated. An alias to\
 `basic_string_span` with a char type of const char32_t

This is based on [CppCoreGuidelines semi-specification](https://github.com/is\
ocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gsl-guidelines-suppor\
t-library).

[cg-views]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGu\
idelines.md#gslview-views
[cg-owners]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreG\
uidelines.md#gslowner-ownership-pointers
[cg-assertions]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppC\
oreGuidelines.md#gslassert-assertions
[cg-utilities]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCo\
reGuidelines.md#gslutil-utilities
[cg-concepts]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCor\
eGuidelines.md#gslconcept-concepts

# Quick Start
## Supported Compilers / Toolsets
The GSL officially supports the latest and previous major versions of VS with\
 MSVC & LLVM, GCC, Clang, and XCode with Apple-Clang.
Within these two major versions, we try to target the latest minor updates /\
 revisions (although this may be affected by
delays between a toolchain's release and when it becomes widely available for\
 use).
Below is a table showing the versions currently being tested.

Compiler |Toolset Versions Currently Tested
:------- |--:
 XCode | 13.2.1 & 12.5.1
 GCC | 11[^1] & 10[^2]
 Clang | 12[^2] & 11[^2]
 Visual Studio with MSVC | VS2022[^3] & VS2019[^4]
 Visual Studio with LLVM | VS2022[^3] & VS2019[^4]


[^1]: Precise version may be found in the [latest CI results](https://dev.azu\
re.com/cppstat/GSL/_build?definitionId=1&branchFilter=26).
[^2]: Precise version may be found in the [latest CI results](https://dev.azu\
re.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the\
 version specified [here](https://github.com/actions/virtual-environments/blo\
b/main/images/linux/Ubuntu2004-Readme.md#language-and-runtime).
[^3]: Precise version may be found in the [latest CI results](https://dev.azu\
re.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the\
 version specified [here](https://github.com/actions/virtual-environments/blo\
b/main/images/win/Windows2022-Readme.md#visual-studio-enterprise-2022).
[^4]: Precise version may be found in the [latest CI results](https://dev.azu\
re.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the\
 version specified [here](https://github.com/actions/virtual-environments/blo\
b/main/images/win/Windows2019-Readme.md#visual-studio-enterprise-2019).

---
If you successfully port GSL to another platform, we would love to hear from\
 you!
- Submit an issue specifying the platform and target.
- Consider contributing your changes by filing a pull request with any\
 necessary changes.
- If at all possible, add a CI/CD step and add the button to the table below!

Target | CI/CD Status
:------- | -----------:
iOS | ![CI_iOS](https://github.com/microsoft/GSL/workflows/CI_iOS/badge.svg)
Android | ![CI_Android](https://github.com/microsoft/GSL/workflows/CI_Android\
/badge.svg)

Note: These CI/CD steps are run with each pull request, however failures in\
 them are non-blocking.

## Building the tests
To build the tests, you will require the following:

* [CMake](http://cmake.org), version 3.14 or later to be installed and in\
 your PATH.

These steps assume the source code of this repository has been cloned into a\
 directory named `c:\GSL`.

1. Create a directory to contain the build outputs for a particular\
 architecture (we name it `c:\GSL\build-x86` in this example).

        cd GSL
        md build-x86
        cd build-x86

2. Configure CMake to use the compiler of your choice (you can see a list by\
 running `cmake --help`).

        cmake -G "Visual Studio 15 2017" c:\GSL

3. Build the test suite (in this case, in the Debug configuration, Release is\
 another good choice).

        cmake --build . --config Debug

4. Run the test suite.

        ctest -C Debug

All tests should pass - indicating your platform is fully supported and you\
 are ready to use the GSL types!

## Building GSL - Using vcpkg

You can download and install GSL using the [vcpkg](https://github.com/Microso\
ft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    vcpkg install ms-gsl

The GSL port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

## Using the libraries
As the types are entirely implemented inline in headers, there are no linking\
 requirements.

You can copy the [gsl](./include/gsl) directory into your source tree so it\
 is available
to your compiler, then include the appropriate headers in your program.

Alternatively set your compiler's *include path* flag to point to the GSL\
 development folder (`c:\GSL\include` in the example above) or installation\
 folder (after running the install). Eg.

MSVC++

    /I c:\GSL\include

GCC/clang

    -I$HOME/dev/GSL/include

Include the library using:

    #include <gsl/gsl>

## Usage in CMake

The library provides a Config file for CMake, once installed it can be found\
 via `find_package`.

Which, when successful, will add library target called `Microsoft.GSL::GSL`\
 which you can use via the usual
`target_link_libraries` mechanism.

```cmake
find_package(Microsoft.GSL CONFIG REQUIRED)

target_link_libraries(foobar PRIVATE Microsoft.GSL::GSL)
```

### FetchContent

If you are using CMake version 3.11+ you can use the offical [FetchContent\
 module](https://cmake.org/cmake/help/latest/module/FetchContent.html).
This allows you to easily incorporate GSL into your project.

```cmake
# NOTE: This example uses CMake version 3.14 (FetchContent_MakeAvailable).
# Since it streamlines the FetchContent process
cmake_minimum_required(VERSION 3.14)

include(FetchContent)

FetchContent_Declare(GSL
    GIT_REPOSITORY "https://github.com/microsoft/GSL"
    GIT_TAG "v4.0.0"
    GIT_SHALLOW ON
)

FetchContent_MakeAvailable(GSL)

target_link_libraries(foobar PRIVATE Microsoft.GSL::GSL)
```

## Debugging visualization support
For Visual Studio users, the file [GSL.natvis](./GSL.natvis) in the root\
 directory of the repository can be added to your project if you would like\
 more helpful visualization of GSL types in the Visual Studio debugger than\
 would be offered by default.

If you are using CMake this will be done automatically for you.
See `GSL_VS_ADD_NATIVE_VISUALIZERS`

\
description-type: text/markdown;variant=GFM
url: https://github.com/microsoft/GSL
package-url: https://github.com/build2-packaging/gsl/
package-email: lyrahgames@mailbox.org
build-error-email: lyrahgames@mailbox.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++14
bootstrap-build:
\
project = gsl

using version
using config
using test
using install
using dist
\
root-build:
\
cxx.std = latest
using cxx

# GSL does not use extensions for header files.
hxx{*}: extension =
cxx{*}: extension = cpp

test.target = $cxx.target

\
location: gsl/gsl-4.0.0.tar.gz
sha256sum: 0d93f6435437a529a433f372da0b981d5fa6978287fde6a806dd5a8c7f558a2c
:
name: gtest
version: 1.11.0+1
project: googletest
summary: Google Testing Framework
license: BSD-3-Clause
description:
\
# GoogleTest

### Announcements

#### Live at Head

GoogleTest now follows the
[Abseil Live at Head philosophy](https://abseil.io/about/philosophy#upgrade-s\
upport).
We recommend using the latest commit in the `master` branch in your projects.

#### Documentation Updates

Our documentation is now live on GitHub Pages at
https://google.github.io/googletest/. We recommend browsing the documentation\
 on
GitHub Pages rather than directly in the repository.

#### Release 1.10.x

[Release 1.10.x](https://github.com/google/googletest/releases/tag/release-1.\
10.0)
is now available.

#### Coming Soon

*   We are planning to take a dependency on
    [Abseil](https://github.com/abseil/abseil-cpp).
*   More documentation improvements are planned.

## Welcome to **GoogleTest**, Google's C++ test framework!

This repository is a merger of the formerly separate GoogleTest and GoogleMock
projects. These were so closely related that it makes sense to maintain and
release them together.

### Getting Started

See the [GoogleTest User's Guide](https://google.github.io/googletest/) for
documentation. We recommend starting with the
[GoogleTest Primer](https://google.github.io/googletest/primer.html).

More information about building GoogleTest can be found at
[googletest/README.md](googletest/README.md).

## Features

*   An [xUnit](https://en.wikipedia.org/wiki/XUnit) test framework.
*   Test discovery.
*   A rich set of assertions.
*   User-defined assertions.
*   Death tests.
*   Fatal and non-fatal failures.
*   Value-parameterized tests.
*   Type-parameterized tests.
*   Various options for running the tests.
*   XML test report generation.

## Supported Platforms

GoogleTest requires a codebase and compiler compliant with the C++11 standard\
 or
newer.

The GoogleTest code is officially supported on the following platforms.
Operating systems or tools not listed below are community-supported. For
community-supported platforms, patches that do not complicate the code may be
considered.

If you notice any problems on your platform, please file an issue on the
[GoogleTest GitHub Issue Tracker](https://github.com/google/googletest/issues\
).
Pull requests containing fixes are welcome!

### Operating Systems

*   Linux
*   macOS
*   Windows

### Compilers

*   gcc 5.0+
*   clang 5.0+
*   MSVC 2015+

**macOS users:** Xcode 9.3+ provides clang 5.0+.

### Build Systems

*   [Bazel](https://bazel.build/)
*   [CMake](https://cmake.org/)

**Note:** Bazel is the build system used by the team internally and in tests.
CMake is supported on a best-effort basis and by the community.

## Who Is Using GoogleTest?

In addition to many internal projects at Google, GoogleTest is also used by\
 the
following notable projects:

*   The [Chromium projects](http://www.chromium.org/) (behind the Chrome\
 browser
    and Chrome OS).
*   The [LLVM](http://llvm.org/) compiler.
*   [Protocol Buffers](https://github.com/google/protobuf), Google's data
    interchange format.
*   The [OpenCV](http://opencv.org/) computer vision library.

## Related Open Source Projects

[GTest Runner](https://github.com/nholthaus/gtest-runner) is a Qt5 based
automated test-runner and Graphical User Interface with powerful features for
Windows and Linux platforms.

[GoogleTest UI](https://github.com/ospector/gtest-gbar) is a test runner that
runs your test binary, allows you to track its progress via a progress bar,\
 and
displays a list of test failures. Clicking on one shows failure text. Google
Test UI is written in C#.

[GTest TAP Listener](https://github.com/kinow/gtest-tap-listener) is an event
listener for GoogleTest that implements the
[TAP protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol) for test
result output. If your test runner understands TAP, you may find it useful.

[gtest-parallel](https://github.com/google/gtest-parallel) is a test runner\
 that
runs tests from your binary in parallel to provide significant speed-up.

[GoogleTest Adapter](https://marketplace.visualstudio.com/items?itemName=Davi\
dSchuldenfrei.gtest-adapter)
is a VS Code extension allowing to view GoogleTest in a tree view, and\
 run/debug
your tests.

[C++ TestMate](https://github.com/matepek/vscode-catch2-test-adapter) is a VS
Code extension allowing to view GoogleTest in a tree view, and run/debug your
tests.

[Cornichon](https://pypi.org/project/cornichon/) is a small Gherkin DSL parser
that generates stub code for GoogleTest.

## Contributing Changes

Please read
[`CONTRIBUTING.md`](https://github.com/google/googletest/blob/master/CONTRIBU\
TING.md)
for details on how to contribute to this project.

Happy testing!

\
description-type: text/markdown;variant=GFM
url: https://google.github.io/googletest/
doc-url: https://google.github.io/googletest/
src-url: https://github.com/google/googletest
package-url: https://github.com/build2-packaging/googletest/
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = gtest

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

\
location: googletest/gtest-1.11.0+1.tar.gz
sha256sum: 5e5e9799fb38629e8ba606f85b5c47c43ed5ad23ac4cc6ff72a186802fec546a
:
name: hiredis
version: 1.0.2+2
summary: Minimalistic C client for Redis >= 1.2
license: BSD-3-Clause
description:
\
[![Build Status](https://travis-ci.org/redis/hiredis.png)](https://travis-ci.\
org/redis/hiredis)

**This Readme reflects the latest changed in the master branch. See\
 [v1.0.0](https://github.com/redis/hiredis/tree/v1.0.0) for the Readme and\
 documentation for the latest release ([API/ABI history](https://abi-laborato\
ry.pro/?view=timeline&l=hiredis)).**

# HIREDIS

Hiredis is a minimalistic C client library for the [Redis](http://redis.io/)\
 database.

It is minimalistic because it just adds minimal support for the protocol, but
at the same time it uses a high level printf-alike API in order to make it
much higher level than otherwise suggested by its minimal code base and the
lack of explicit bindings for every Redis command.

Apart from supporting sending commands and receiving replies, it comes with
a reply parser that is decoupled from the I/O layer. It
is a stream parser designed for easy reusability, which can for instance be\
 used
in higher level language bindings for efficient reply parsing.

Hiredis only supports the binary-safe Redis protocol, so you can use it with\
 any
Redis version >= 1.2.0.

The library comes with multiple APIs. There is the
*synchronous API*, the *asynchronous API* and the *reply parsing API*.

## Upgrading to `1.0.2`

<span style="color:red">NOTE:  v1.0.1 erroneously bumped SONAME, which is why\
 it is skipped here.</span>

Version 1.0.2 is simply 1.0.0 with a fix for [CVE-2021-32765](https://github.\
com/redis/hiredis/security/advisories/GHSA-hfm9-39pp-55p2).  They are\
 otherwise identical.

## Upgrading to `1.0.0`

Version 1.0.0 marks the first stable release of Hiredis.
It includes some minor breaking changes, mostly to make the exposed API more\
 uniform and self-explanatory.
It also bundles the updated `sds` library, to sync up with upstream and Redis.
For code changes see the [Changelog](CHANGELOG.md).

_Note:  As described below, a few member names have been changed but most\
 applications should be able to upgrade with minor code changes and\
 recompiling._

## IMPORTANT:  Breaking changes from `0.14.1` -> `1.0.0`

* `redisContext` has two additional members (`free_privdata`, and `privctx`).
* `redisOptions.timeout` has been renamed to `redisOptions.connect_timeout`,\
 and we've added `redisOptions.command_timeout`.
* `redisReplyObjectFunctions.createArray` now takes `size_t` instead of `int`\
 for its length parameter.

## IMPORTANT:  Breaking changes when upgrading from 0.13.x -> 0.14.x

Bulk and multi-bulk lengths less than -1 or greater than `LLONG_MAX` are now
protocol errors. This is consistent with the RESP specification. On 32-bit
platforms, the upper bound is lowered to `SIZE_MAX`.

Change `redisReply.len` to `size_t`, as it denotes the the size of a string

User code should compare this to `size_t` values as well.  If it was used to
compare to other values, casting might be necessary or can be removed, if
casting was applied before.

## Upgrading from `<0.9.0`

Version 0.9.0 is a major overhaul of hiredis in every aspect. However,\
 upgrading existing
code using hiredis should not be a big pain. The key thing to keep in mind\
 when
upgrading is that hiredis >= 0.9.0 uses a `redisContext*` to keep state, in\
 contrast to
the stateless 0.0.1 that only has a file descriptor to work with.

## Synchronous API

To consume the synchronous API, there are only a few function calls that need\
 to be introduced:

```c
redisContext *redisConnect(const char *ip, int port);
void *redisCommand(redisContext *c, const char *format, ...);
void freeReplyObject(void *reply);
```

### Connecting

The function `redisConnect` is used to create a so-called `redisContext`. The
context is where Hiredis holds state for a connection. The `redisContext`
struct has an integer `err` field that is non-zero when the connection is in
an error state. The field `errstr` will contain a string with a description of
the error. More information on errors can be found in the **Errors** section.
After trying to connect to Redis using `redisConnect` you should
check the `err` field to see if establishing the connection was successful:
```c
redisContext *c = redisConnect("127.0.0.1", 6379);
if (c == NULL || c->err) {
    if (c) {
        printf("Error: %s\n", c->errstr);
        // handle error
    } else {
        printf("Can't allocate redis context\n");
    }
}
```

*Note: A `redisContext` is not thread-safe.*

### Sending commands

There are several ways to issue commands to Redis. The first that will be\
 introduced is
`redisCommand`. This function takes a format similar to printf. In the\
 simplest form,
it is used like this:
```c
reply = redisCommand(context, "SET foo bar");
```

The specifier `%s` interpolates a string in the command, and uses `strlen` to
determine the length of the string:
```c
reply = redisCommand(context, "SET foo %s", value);
```
When you need to pass binary safe strings in a command, the `%b` specifier\
 can be
used. Together with a pointer to the string, it requires a `size_t` length\
 argument
of the string:
```c
reply = redisCommand(context, "SET foo %b", value, (size_t) valuelen);
```
Internally, Hiredis splits the command in different arguments and will
convert it to the protocol used to communicate with Redis.
One or more spaces separates arguments, so you can use the specifiers
anywhere in an argument:
```c
reply = redisCommand(context, "SET key:%s %s", myid, value);
```

### Using replies

The return value of `redisCommand` holds a reply when the command was
successfully executed. When an error occurs, the return value is `NULL` and
the `err` field in the context will be set (see section on **Errors**).
Once an error is returned the context cannot be reused and you should set up
a new connection.

The standard replies that `redisCommand` are of the type `redisReply`. The
`type` field in the `redisReply` should be used to test what kind of reply
was received:

### RESP2

* **`REDIS_REPLY_STATUS`**:
    * The command replied with a status reply. The status string can be\
 accessed using `reply->str`.
      The length of this string can be accessed using `reply->len`.

* **`REDIS_REPLY_ERROR`**:
    *  The command replied with an error. The error string can be accessed\
 identical to `REDIS_REPLY_STATUS`.

* **`REDIS_REPLY_INTEGER`**:
    * The command replied with an integer. The integer value can be accessed\
 using the
      `reply->integer` field of type `long long`.

* **`REDIS_REPLY_NIL`**:
    * The command replied with a **nil** object. There is no data to access.

* **`REDIS_REPLY_STRING`**:
    * A bulk (string) reply. The value of the reply can be accessed using\
 `reply->str`.
      The length of this string can be accessed using `reply->len`.

* **`REDIS_REPLY_ARRAY`**:
    * A multi bulk reply. The number of elements in the multi bulk reply is\
 stored in
      `reply->elements`. Every element in the multi bulk reply is a\
 `redisReply` object as well
      and can be accessed via `reply->element[..index..]`.
      Redis may reply with nested arrays but this is fully supported.

### RESP3

Hiredis also supports every new `RESP3` data type which are as follows.  For\
 more information about the protocol see the `RESP3` [specification.](https:/\
/github.com/antirez/RESP3/blob/master/spec.md)

* **`REDIS_REPLY_DOUBLE`**:
    * The command replied with a double-precision floating point number.
      The value is stored as a string in the `str` member, and can be\
 converted with `strtod` or similar.

* **`REDIS_REPLY_BOOL`**:
    * A boolean true/false reply.
      The value is stored in the `integer` member and will be either `0` or\
 `1`.

* **`REDIS_REPLY_MAP`**:
    * An array with the added invariant that there will always be an even\
 number of elements.
      The MAP is functionally equivelant to `REDIS_REPLY_ARRAY` except for\
 the previously mentioned invariant.

* **`REDIS_REPLY_SET`**:
    * An array response where each entry is unique.
      Like the MAP type, the data is identical to an array response except\
 there are no duplicate values.

* **`REDIS_REPLY_PUSH`**:
    * An array that can be generated spontaneously by Redis.
      This array response will always contain at least two subelements.  The\
 first contains the type of `PUSH` message (e.g. `message`, or `invalidate`),\
 and the second being a sub-array with the `PUSH` payload itself.

* **`REDIS_REPLY_ATTR`**:
    * An array structurally identical to a `MAP` but intended as meta-data\
 about a reply.
      _As of Redis 6.0.6 this reply type is not used in Redis_

* **`REDIS_REPLY_BIGNUM`**:
    * A string representing an arbitrarily large signed or unsigned integer\
 value.
      The number will be encoded as a string in the `str` member of\
 `redisReply`.

* **`REDIS_REPLY_VERB`**:
    * A verbatim string, intended to be presented to the user without\
 modification.
      The string payload is stored in the `str` memeber, and type data is\
 stored in the `vtype` member (e.g. `txt` for raw text or `md` for markdown).

Replies should be freed using the `freeReplyObject()` function.
Note that this function will take care of freeing sub-reply objects
contained in arrays and nested arrays, so there is no need for the user to
free the sub replies (it is actually harmful and will corrupt the memory).

**Important:** the current version of hiredis (1.0.0) frees replies when the
asynchronous API is used. This means you should not call `freeReplyObject`\
 when
you use this API. The reply is cleaned up by hiredis _after_ the callback
returns.  We may introduce a flag to make this configurable in future\
 versions of the library.

### Cleaning up

To disconnect and free the context the following function can be used:
```c
void redisFree(redisContext *c);
```
This function immediately closes the socket and then frees the allocations\
 done in
creating the context.

### Sending commands (cont'd)

Together with `redisCommand`, the function `redisCommandArgv` can be used to\
 issue commands.
It has the following prototype:
```c
void *redisCommandArgv(redisContext *c, int argc, const char **argv, const\
 size_t *argvlen);
```
It takes the number of arguments `argc`, an array of strings `argv` and the\
 lengths of the
arguments `argvlen`. For convenience, `argvlen` may be set to `NULL` and the\
 function will
use `strlen(3)` on every argument to determine its length. Obviously, when\
 any of the arguments
need to be binary safe, the entire array of lengths `argvlen` should be\
 provided.

The return value has the same semantic as `redisCommand`.

### Pipelining

To explain how Hiredis supports pipelining in a blocking connection, there\
 needs to be
understanding of the internal execution flow.

When any of the functions in the `redisCommand` family is called, Hiredis\
 first formats the
command according to the Redis protocol. The formatted command is then put in\
 the output buffer
of the context. This output buffer is dynamic, so it can hold any number of\
 commands.
After the command is put in the output buffer, `redisGetReply` is called.\
 This function has the
following two execution paths:

1. The input buffer is non-empty:
    * Try to parse a single reply from the input buffer and return it
    * If no reply could be parsed, continue at *2*
2. The input buffer is empty:
    * Write the **entire** output buffer to the socket
    * Read from the socket until a single reply could be parsed

The function `redisGetReply` is exported as part of the Hiredis API and can\
 be used when a reply
is expected on the socket. To pipeline commands, the only things that needs\
 to be done is
filling up the output buffer. For this cause, two commands can be used that\
 are identical
to the `redisCommand` family, apart from not returning a reply:
```c
void redisAppendCommand(redisContext *c, const char *format, ...);
void redisAppendCommandArgv(redisContext *c, int argc, const char **argv,\
 const size_t *argvlen);
```
After calling either function one or more times, `redisGetReply` can be used\
 to receive the
subsequent replies. The return value for this function is either `REDIS_OK`\
 or `REDIS_ERR`, where
the latter means an error occurred while reading a reply. Just as with the\
 other commands,
the `err` field in the context can be used to find out what the cause of this\
 error is.

The following examples shows a simple pipeline (resulting in only a single\
 call to `write(2)` and
a single call to `read(2)`):
```c
redisReply *reply;
redisAppendCommand(context,"SET foo bar");
redisAppendCommand(context,"GET foo");
redisGetReply(context,(void *)&reply); // reply for SET
freeReplyObject(reply);
redisGetReply(context,(void *)&reply); // reply for GET
freeReplyObject(reply);
```
This API can also be used to implement a blocking subscriber:
```c
reply = redisCommand(context,"SUBSCRIBE foo");
freeReplyObject(reply);
while(redisGetReply(context,(void *)&reply) == REDIS_OK) {
    // consume message
    freeReplyObject(reply);
}
```
### Errors

When a function call is not successful, depending on the function either\
 `NULL` or `REDIS_ERR` is
returned. The `err` field inside the context will be non-zero and set to one\
 of the
following constants:

* **`REDIS_ERR_IO`**:
    There was an I/O error while creating the connection, trying to write
    to the socket or read from the socket. If you included `errno.h` in your
    application, you can use the global `errno` variable to find out what is
    wrong.

* **`REDIS_ERR_EOF`**:
    The server closed the connection which resulted in an empty read.

* **`REDIS_ERR_PROTOCOL`**:
    There was an error while parsing the protocol.

* **`REDIS_ERR_OTHER`**:
    Any other error. Currently, it is only used when a specified hostname to\
 connect
    to cannot be resolved.

In every case, the `errstr` field in the context will be set to hold a string\
 representation
of the error.

## Asynchronous API

Hiredis comes with an asynchronous API that works easily with any event\
 library.
Examples are bundled that show using Hiredis with [libev](http://software.sch\
morp.de/pkg/libev.html)
and [libevent](http://monkey.org/~provos/libevent/).

### Connecting

The function `redisAsyncConnect` can be used to establish a non-blocking\
 connection to
Redis. It returns a pointer to the newly created `redisAsyncContext` struct.\
 The `err` field
should be checked after creation to see if there were errors creating the\
 connection.
Because the connection that will be created is non-blocking, the kernel is\
 not able to
instantly return if the specified host and port is able to accept a\
 connection.

*Note: A `redisAsyncContext` is not thread-safe.*

```c
redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
if (c->err) {
    printf("Error: %s\n", c->errstr);
    // handle error
}
```

The asynchronous context can hold a disconnect callback function that is\
 called when the
connection is disconnected (either because of an error or per user request).\
 This function should
have the following prototype:
```c
void(const redisAsyncContext *c, int status);
```
On a disconnect, the `status` argument is set to `REDIS_OK` when\
 disconnection was initiated by the
user, or `REDIS_ERR` when the disconnection was caused by an error. When it\
 is `REDIS_ERR`, the `err`
field in the context can be accessed to find out the cause of the error.

The context object is always freed after the disconnect callback fired. When\
 a reconnect is needed,
the disconnect callback is a good point to do so.

Setting the disconnect callback can only be done once per context. For\
 subsequent calls it will
return `REDIS_ERR`. The function to set the disconnect callback has the\
 following prototype:
```c
int redisAsyncSetDisconnectCallback(redisAsyncContext *ac,\
 redisDisconnectCallback *fn);
```
`ac->data` may be used to pass user data to this callback, the same can be\
 done for redisConnectCallback.
### Sending commands and their callbacks

In an asynchronous context, commands are automatically pipelined due to the\
 nature of an event loop.
Therefore, unlike the synchronous API, there is only a single way to send\
 commands.
Because commands are sent to Redis asynchronously, issuing a command requires\
 a callback function
that is called when the reply is received. Reply callbacks should have the\
 following prototype:
```c
void(redisAsyncContext *c, void *reply, void *privdata);
```
The `privdata` argument can be used to curry arbitrary data to the callback\
 from the point where
the command is initially queued for execution.

The functions that can be used to issue commands in an asynchronous context\
 are:
```c
int redisAsyncCommand(
  redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,
  const char *format, ...);
int redisAsyncCommandArgv(
  redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,
  int argc, const char **argv, const size_t *argvlen);
```
Both functions work like their blocking counterparts. The return value is\
 `REDIS_OK` when the command
was successfully added to the output buffer and `REDIS_ERR` otherwise.\
 Example: when the connection
is being disconnected per user-request, no new commands may be added to the\
 output buffer and `REDIS_ERR` is
returned on calls to the `redisAsyncCommand` family.

If the reply for a command with a `NULL` callback is read, it is immediately\
 freed. When the callback
for a command is non-`NULL`, the memory is freed immediately following the\
 callback: the reply is only
valid for the duration of the callback.

All pending callbacks are called with a `NULL` reply when the context\
 encountered an error.

### Disconnecting

An asynchronous connection can be terminated using:
```c
void redisAsyncDisconnect(redisAsyncContext *ac);
```
When this function is called, the connection is **not** immediately\
 terminated. Instead, new
commands are no longer accepted and the connection is only terminated when\
 all pending commands
have been written to the socket, their respective replies have been read and\
 their respective
callbacks have been executed. After this, the disconnection callback is\
 executed with the
`REDIS_OK` status and the context object is freed.

### Hooking it up to event library *X*

There are a few hooks that need to be set on the context object after it is\
 created.
See the `adapters/` directory for bindings to *libev* and *libevent*.

## Reply parsing API

Hiredis comes with a reply parsing API that makes it easy for writing higher
level language bindings.

The reply parsing API consists of the following functions:
```c
redisReader *redisReaderCreate(void);
void redisReaderFree(redisReader *reader);
int redisReaderFeed(redisReader *reader, const char *buf, size_t len);
int redisReaderGetReply(redisReader *reader, void **reply);
```
The same set of functions are used internally by hiredis when creating a
normal Redis context, the above API just exposes it to the user for a direct
usage.

### Usage

The function `redisReaderCreate` creates a `redisReader` structure that holds\
 a
buffer with unparsed data and state for the protocol parser.

Incoming data -- most likely from a socket -- can be placed in the internal
buffer of the `redisReader` using `redisReaderFeed`. This function will make a
copy of the buffer pointed to by `buf` for `len` bytes. This data is parsed
when `redisReaderGetReply` is called. This function returns an integer status
and a reply object (as described above) via `void **reply`. The returned\
 status
can be either `REDIS_OK` or `REDIS_ERR`, where the latter means something went
wrong (either a protocol error, or an out of memory error).

The parser limits the level of nesting for multi bulk payloads to 7. If the
multi bulk nesting level is higher than this, the parser returns an error.

### Customizing replies

The function `redisReaderGetReply` creates `redisReply` and makes the function
argument `reply` point to the created `redisReply` variable. For instance, if
the response of type `REDIS_REPLY_STATUS` then the `str` field of `redisReply`
will hold the status as a vanilla C string. However, the functions that are
responsible for creating instances of the `redisReply` can be customized by
setting the `fn` field on the `redisReader` struct. This should be done
immediately after creating the `redisReader`.

For example, [hiredis-rb](https://github.com/pietern/hiredis-rb/blob/master/e\
xt/hiredis_ext/reader.c)
uses customized reply object functions to create Ruby objects.

### Reader max buffer

Both when using the Reader API directly or when using it indirectly via a
normal Redis context, the redisReader structure uses a buffer in order to
accumulate data from the server.
Usually this buffer is destroyed when it is empty and is larger than 16
KiB in order to avoid wasting memory in unused buffers

However when working with very big payloads destroying the buffer may slow
down performances considerably, so it is possible to modify the max size of
an idle buffer changing the value of the `maxbuf` field of the reader\
 structure
to the desired value. The special value of 0 means that there is no maximum
value for an idle buffer, so the buffer will never get freed.

For instance if you have a normal Redis context you can set the maximum idle
buffer to zero (unlimited) just with:
```c
context->reader->maxbuf = 0;
```
This should be done only in order to maximize performances when working with
large payloads. The context should be set back to `REDIS_READER_MAX_BUF` again
as soon as possible in order to prevent allocation of useless memory.

### Reader max array elements

By default the hiredis reply parser sets the maximum number of multi-bulk\
 elements
to 2^32 - 1 or 4,294,967,295 entries.  If you need to process multi-bulk\
 replies
with more than this many elements you can set the value higher or to zero,\
 meaning
unlimited with:
```c
context->reader->maxelements = 0;
```

## SSL/TLS Support

### Building

SSL/TLS support is not built by default and requires an explicit flag:

    make USE_SSL=1

This requires OpenSSL development package (e.g. including header files to be
available.

When enabled, SSL/TLS support is built into extra `libhiredis_ssl.a` and
`libhiredis_ssl.so` static/dynamic libraries. This leaves the original\
 libraries
unaffected so no additional dependencies are introduced.

### Using it

First, you'll need to make sure you include the SSL header file:

```c
#include "hiredis.h"
#include "hiredis_ssl.h"
```

You will also need to link against `libhiredis_ssl`, **in addition** to
`libhiredis` and add `-lssl -lcrypto` to satisfy its dependencies.

Hiredis implements SSL/TLS on top of its normal `redisContext` or
`redisAsyncContext`, so you will need to establish a connection first and then
initiate an SSL/TLS handshake.

#### Hiredis OpenSSL Wrappers

Before Hiredis can negotiate an SSL/TLS connection, it is necessary to
initialize OpenSSL and create a context. You can do that in two ways:

1. Work directly with the OpenSSL API to initialize the library's global\
 context
   and create `SSL_CTX *` and `SSL *` contexts. With an `SSL *` object you can
   call `redisInitiateSSL()`.
2. Work with a set of Hiredis-provided wrappers around OpenSSL, create a
   `redisSSLContext` object to hold configuration and use
   `redisInitiateSSLWithContext()` to initiate the SSL/TLS handshake.

```c
/* An Hiredis SSL context. It holds SSL configuration and can be reused across
 * many contexts.
 */
redisSSLContext *ssl;

/* An error variable to indicate what went wrong, if the context fails to
 * initialize.
 */
redisSSLContextError ssl_error;

/* Initialize global OpenSSL state.
 *
 * You should call this only once when your app initializes, and only if
 * you don't explicitly or implicitly initialize OpenSSL it elsewhere.
 */
redisInitOpenSSL();

/* Create SSL context */
ssl = redisCreateSSLContext(
    "cacertbundle.crt",     /* File name of trusted CA/ca bundle file,\
 optional */
    "/path/to/certs",       /* Path of trusted certificates, optional */
    "client_cert.pem",      /* File name of client certificate file, optional\
 */
    "client_key.pem",       /* File name of client private key, optional */
    "redis.mydomain.com",   /* Server name to request (SNI), optional */
    &ssl_error
    ) != REDIS_OK) {
        printf("SSL error: %s\n", redisSSLContextGetError(ssl_error);
        /* Abort... */
    }

/* Create Redis context and establish connection */
c = redisConnect("localhost", 6443);
if (c == NULL || c->err) {
    /* Handle error and abort... */
}

/* Negotiate SSL/TLS */
if (redisInitiateSSLWithContext(c, ssl) != REDIS_OK) {
    /* Handle error, in c->err / c->errstr */
}
```

## RESP3 PUSH replies
Redis 6.0 introduced PUSH replies with the reply-type `>`.  These messages\
 are generated spontaneously and can arrive at any time, so must be handled\
 using callbacks.

### Default behavior
Hiredis installs handlers on `redisContext` and `redisAsyncContext` by\
 default, which will intercept and free any PUSH replies detected.  This\
 means existing code will work as-is after upgrading to Redis 6 and switching\
 to `RESP3`.

### Custom PUSH handler prototypes
The callback prototypes differ between `redisContext` and `redisAsyncContext`.

#### redisContext
```c
void my_push_handler(void *privdata, void *reply) {
    /* Handle the reply */

    /* Note: We need to free the reply in our custom handler for
             blocking contexts.  This lets us keep the reply if
             we want. */
    freeReplyObject(reply);
}
```

#### redisAsyncContext
```c
void my_async_push_handler(redisAsyncContext *ac, void *reply) {
    /* Handle the reply */

    /* Note:  Because async hiredis always frees replies, you should
              not call freeReplyObject in an async push callback. */
}
```

### Installing a custom handler
There are two ways to set your own PUSH handlers.

1. Set `push_cb` or `async_push_cb` in the `redisOptions` struct and connect\
 with `redisConnectWithOptions` or `redisAsyncConnectWithOptions`.
    ```c
    redisOptions = {0};
    REDIS_OPTIONS_SET_TCP(&options, "127.0.0.1", 6379);
    options->push_cb = my_push_handler;
    redisContext *context = redisConnectWithOptions(&options);
    ```
2.  Call `redisSetPushCallback` or `redisAsyncSetPushCallback` on a connected\
 context.
    ```c
    redisContext *context = redisConnect("127.0.0.1", 6379);
    redisSetPushCallback(context, my_push_handler);
    ```

    _Note `redisSetPushCallback` and `redisAsyncSetPushCallback` both return\
 any currently configured handler,  making it easy to override and then\
 return to the old value._

### Specifying no handler
If you have a unique use-case where you don't want hiredis to automatically\
 intercept and free PUSH replies, you will want to configure no handler at\
 all.  This can be done in two ways.
1.  Set the `REDIS_OPT_NO_PUSH_AUTOFREE` flag in `redisOptions` and leave the\
 callback function pointer `NULL`.
    ```c
    redisOptions = {0};
    REDIS_OPTIONS_SET_TCP(&options, "127.0.0.1", 6379);
    options->options |= REDIS_OPT_NO_PUSH_AUTOFREE;
    redisContext *context = redisConnectWithOptions(&options);
    ```
3.  Call `redisSetPushCallback` with `NULL` once connected.
    ```c
    redisContext *context = redisConnect("127.0.0.1", 6379);
    redisSetPushCallback(context, NULL);
    ```

    _Note:  With no handler configured, calls to `redisCommand` may generate\
 more than one reply, so this strategy is only applicable when there's some\
 kind of blocking`redisGetReply()` loop (e.g. `MONITOR` or `SUBSCRIBE`\
 workloads)._

## Allocator injection

Hiredis uses a pass-thru structure of function pointers defined in\
 [alloc.h](https://github.com/redis/hiredis/blob/f5d25850/alloc.h#L41) that\
 contain the currently configured allocation and deallocation functions.  By\
 default they just point to libc (`malloc`, `calloc`, `realloc`, etc).

### Overriding

One can override the allocators like so:

```c
hiredisAllocFuncs myfuncs = {
    .mallocFn = my_malloc,
    .callocFn = my_calloc,
    .reallocFn = my_realloc,
    .strdupFn = my_strdup,
    .freeFn = my_free,
};

// Override allocators (function returns current allocators if needed)
hiredisAllocFuncs orig = hiredisSetAllocators(&myfuncs);
```

To reset the allocators to their default libc function simply call:

```c
hiredisResetAllocators();
```

## AUTHORS

Salvatore Sanfilippo (antirez at gmail),\\
Pieter Noordhuis (pcnoordhuis at gmail)\\
Michael Grunder (michael dot grunder at gmail)

_Hiredis is released under the BSD license._

\
description-type: text/markdown;variant=GFM
url: https://redis.com/lp/hiredis/
doc-url: https://github.com/redis/hiredis/blob/master/README.md
src-url: https://github.com/redis/hiredis
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: libssl ^1.1.1
bootstrap-build:
\
project = hiredis

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

\
location: hiredis/hiredis-1.0.2+2.tar.gz
sha256sum: 76fd7ad30e5869acc8320d35157e7670edce2beefb34922630aaa2ec86888a93
:
name: icu-tools
version: 74.2.0+3
upstream-version: 74.2
language: c++
language: c
project: icu
summary: ICU tools
license: Unicode-3.0 AND BSD-3-Clause AND BSD-2-Clause; Unicode License V3\
 for most of the original files.
topics: C, C++, Unicode, internationalization
description:
\
International Components for Unicode (ICU) is a set of cross-platform Unicode-
based globalization libraries with libicuuc C/C++ library providing core
Unicode support and basic functionality (character properties, locales, etc)
and libicudata C library providing data for libicuuc and libicui18n (locale
data, etc). For more information see:

http://site.icu-project.org/

This package contains the original ICU tools source code and ICU data source
files overlaid with the build2-based build system and packaged for the build2
package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about library itself to the
ICU mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of the ICU tools for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/icu/

\
description-type: text/plain
url: http://site.icu-project.org/
doc-url: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/icu-tools/
package-url: https://git.build2.org/cgit/packaging/icu/
email: icu-support@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
builds: all
bootstrap-build:
\
project = icu-tools

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

c.std = 11

using c
using c.predefs

h{*}: extension = h
c{*}: extension = c

using in

using c.as-cpp

# Resource bundle.
#
define res: file
res{*}: extension = res

# The ICU data directory path for the installed and develop cases. This is
# the directory that contains the ICU data archive.
#
data_dir_develop = [dir_path] $out_root/data
data_dir_install = [dir_path] ($install.root != [null]           \\
                               ? $install.resolve($install.data) \\
                               : .)

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: libicu-devtools
fedora-name: icu
location: icu/icu-tools-74.2.0+3.tar.gz
sha256sum: 0e73e505b9081c051baa3531fc06c5235ddbcda7e7f145f2fbf5744db219012d
:
name: jsonxx
version: 1.0.1+1
summary: A JSON parser in C++
license: MIT
description:
\
# JSON++

[![Build Status](https://travis-ci.org/hjiang/jsonxx.svg?branch=master)](http\
s://travis-ci.org/hjiang/jsonxx)

## Introduction

JSON++ is a light-weight JSON parser, writer and reader written in C++.
JSON++ can also convert JSON documents into lossless XML documents.

## Contributors

* http://github.com/hjiang
* http://github.com/elanthis
* http://github.com/r-lyeh

If you've made substantial contribution, please add your link here. 

## Why another JSON parser?

Perhaps because web service clients are usually written in dynamic languages\
 these days, none of the existing C++ JSON parsers fitted my needs very well,\
 so I wrote one that I used in another project. My goals for JSON++ were:

* Efficient in both memory and speed.
* No third party dependencies. JSON++ only depends on the standard C++\
 library.
* Cross platform.
* Robust.
* Small and convenient API. Most of the time, you only need to call one\
 function and two function templates.
* Easy to integrate. JSON++ only has one source file and one header file.\
 Just compile the source file and link with your program.
* Able to construct documents dynamically.
* JSON writer: write documents in JSON format.

Other contributors have sinced added more functionalities:

* XML writer: convert documents to JSONx format. See http://goo.gl/I3cxs for\
 details.
* XML writer: convert documents to JXML format. See https://github.com/r-lyeh\
/JXML for details.
* XML writer: convert documents to JXMLex format. See https://github.com/r-ly\
eh/JXMLex for details.
* XML writer: convert documents to tagged XML format. See https://github.com/\
hjiang/jsonxx/issues/12 for details.

## Compiler version

You need a modern C++ compiler. For older compilers, please try [legacy\
 branch](https://github.com/hjiang/jsonxx/tree/legacy).

## Configuration

### Strict/permissive parsing

JSONxx can parse JSON documents both in strict or permissive mode.

When `jsonxx::Settings::Parser` is set to `Strict`, JSONxx parser will accept:
* Fully conformant JSON documents *only*.

When `jsonxx::Settings::Parser` is set to `Permissive`, JSONxx parser will\
 accept:
* Fully conformant JSON documents
* Ending commas in arrays and objects: `{ "array": [0,1,2,], }`
* Single quoted strings: `['hello', "world"]`
* C++ style comments: `{ "width": 320, "height": 240 } //Picture details`

Default value is `Permissive`.

When `jsonxx::Settings::UnquotedKeys` is set to `Enabled`, JSONxx parser will\
 accept:
* Unquoted keys: `{name: "world"}`

Default value is `Disabled`.

### Assertions

JSONxx uses internally `JSONXX_ASSERT(...)` macro that works both in debug\
 and release mode. Set `jsonxx::Settings::Assertions` value to `Disabled` to\
 disable assertions.

Default value is `Enabled`.

## Usage

The following snippets are from one of the unit tests. They are quite\
 self-descriptive.

~~~C++
using namespace std;
using namespace jsonxx;

string teststr(
        "{"
        "  \"foo\" : 1,"
        "  \"bar\" : false,"
        "  \"person\" : {\"name\" : \"GWB\", \"age\" : 60,},"
        "  \"data\": [\"abcd\", 42],"
        "}"
);

// Parse string or stream
Object o;
assert(o.parse(teststr));

// Validation. Checking for JSON types and values as well
assert(1 == o.get<Number>("foo"));
assert(o.has<Boolean>("bar"));
assert(o.has<Object>("person"));
assert(o.get<Object>("person").has<Number>("age"));
assert(!o.get<Object>("person").has<Boolean>("old"));
assert(o.get<Object>("person").get<Boolean>("old", false));
assert(o.has<Array>("data"));
assert(o.get<Array>("data").get<Number>(1) == 42);
assert(o.get<Array>("data").get<String>(0) == "abcd");
assert(o.get<Array>("data").get<String>(2, "hello") == "hello");
assert(!o.has<Number>("data"));
cout << o.json() << endl;                     // JSON output
cout << o.xml(JSONx) << endl;                 // JSON to XML conversion\
 (JSONx subtype)
cout << o.xml(JXML) << endl;                  // JSON to XML conversion (JXML\
 subtype)
cout << o.xml(JXMLex) << endl;                // JSON to XML conversion\
 (JXMLex subtype)
~~~

~~~C++
// Generate JSON document dynamically
using namespace std;
using namespace jsonxx;
Array a;
a << 123;
a << "hello world";
a << 3.1415;
a << 99.95f;
a << 'h';
a << Object("key", "value");
Object o;
o << "key1" << "value";
o << "key2" << 123;
o << "key3" << a;
cout << o.json() << endl;
~~~

## To do

* Custom JSON comments (C style /**/) when permissive parsing is enabled.

\
description-type: text/markdown;variant=GFM
url: https://github.com/hjiang/jsonxx
package-url: https://github.com/build2-packaging/jsonxx
email: hong@hjiang.net
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = jsonxx

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# This library officially only support static builds,
# but we will prevent them only on Windows.
if($cxx.target.class == 'windows')
{
    bin.lib = static
}

\
location: jsonxx/jsonxx-1.0.1+1.tar.gz
sha256sum: 4a8360ac003421bd6fccc8fa270a5477894f391913cf365f7aab0c95e5b815c9
:
name: libapr1
version: 0+10
project: libapr
summary: Apache Portable Runtime C library
license: Apache-2.0; Apache License 2.0.
topics: C, portability
description:
\
The Apache Portable Runtime (APR) provides a set of predictable and consistent
C APIs that map to the underlying operating system. For more information see:

https://apr.apache.org/

This package currently contains a build2 package manager (bpkg) stub meaning
that it can only be "built" as already installed in the underlying system (for
example, using a system package manager).

Send questions, bug reports, or any other feedback about the library itself to
the APR mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of APR for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/libapr/

\
description-type: text/plain
url: https://apr.apache.org/
package-url: https://git.build2.org/cgit/packaging/libapr/
email: dev@apr.apache.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.16.0-
depends: * bpkg >= 0.16.0-
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0

project = libapr1

using version
using config
using dist

\
fedora-name: apr-devel
location: libapr/libapr1-0+10.tar.gz
sha256sum: 133f4a84d9120e599b6caf03650b20184e1eb25239fc7dcb2db5adf1e151eb9a
:
name: libapreq2
version: 0+5
project: libapreq
summary: Apache HTTP Server Request library
license: ASLv2; Apache License 2.0
topics: Apache, HTTP, HTTP request parsing
keywords: post cookie multipart form-data url-encoding
description:
\
The Apache HTTP Server Request library is a safe, standards-compliant,
high-performance C library for parsing HTTP cookies, query-strings, and
POST data. For more information see:

https://httpd.apache.org/apreq/

This package currently contains a build2 package manager (bpkg) stub meaning
that it can only be "built" as already installed in the underlying system (for
example, using a system package manager).

Send questions, bug reports, or any other feedback about the library itself to
the apreq mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of apreq for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/libapreq/

\
description-type: text/plain
url: https://httpd.apache.org/apreq/
package-url: https://git.build2.org/cgit/packaging/libapreq/
email: apreq-dev@httpd.apache.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0

project = libapreq2

using version
using config
using dist

\
location: libapreq/libapreq2-0+5.tar.gz
sha256sum: f9ebaaf533355ca87255c0bf29be8e989047b3d0dfa0c14087556cd176cd108d
:
name: libasio
version: 1.28.0
language: c++
summary: Cross-platform C++ library for asynchronous network programming
license: BSL-1.0; Boost Software License 1.0.
description:
\
asio version 1.28.0
Released Wednesday, 26 April 2023.

See doc/index.html for API documentation and a tutorial.

\
description-type: text/plain
package-description:
\
# libasio

Asio is a cross-platform C++ library for network and low-level I/O programming
that provides developers with a consistent asynchronous model using a modern
C++ approach.

Asio provides the basic building blocks for C++ networking, concurrency and
other kinds of I/O. Asio is used in all kinds of applications, from phone apps
to the world’s fastest share markets.

For more information see: https://think-async.com/Asio/

This is a `build2` package for the standalone version of the Asio library.

# Usage

This package provides the `lib{asio}` library.

SSL support is disabled by default. To enable it, add the following to your
`manifest`:

```
depends:
\\
libasio ^1.28.0
{
  require
  {
    config.libasio.ssl = true
  }
}
\\
```

Note that on some platforms (such as MinGW) it may be necessary for
applications to define `_WIN32_WINNT` to an appropriate value. If it's not
defined the library's `config.hpp` header will issue a warning and choose a
default (currently `0x0601`, meaning Windows 7 and later; this is also the
value that the library is built with).

\
package-description-type: text/markdown;variant=GFM
url: https://think-async.com/Asio/
src-url: https://github.com/chriskohlhoff/asio/
package-url: https://github.com/build2-packaging/libasio/
email: https://sourceforge.net/p/asio/mailman/asio-users/; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libssl >= 1.1.1 ? ($config.libasio.ssl)
depends: libcrypto >= 1.1.1 ? ($config.libasio.ssl)
ssl-build-config: config.libasio.ssl=true; Enable SSL support.
bootstrap-build:
\
project = libasio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, enable SSL support.
#
config [bool] config.libasio.ssl ?= false

\
location: libasio/libasio-1.28.0.tar.gz
sha256sum: 706275d3a1fb7ba23492ff82839ac54145bac7605aada1be080ff8e0c54aaf16
:
name: libasio
version: 1.29.0
language: c++
summary: Cross-platform C++ library for asynchronous network programming
license: BSL-1.0; Boost Software License 1.0.
description:
\
asio version 1.29.0
Released Thursday, 09 November 2023.

See doc/index.html for API documentation and a tutorial.

\
description-type: text/plain
package-description:
\
# libasio

Asio is a cross-platform C++ library for network and low-level I/O programming
that provides developers with a consistent asynchronous model using a modern
C++ approach.

Asio provides the basic building blocks for C++ networking, concurrency and
other kinds of I/O. Asio is used in all kinds of applications, from phone apps
to the world’s fastest share markets.

For more information see: https://think-async.com/Asio/

This is a `build2` package for the standalone version of the Asio library.

# Usage

This package provides the `lib{asio}` library.

SSL support is disabled by default. To enable it, add the following to your
`manifest`:

```
depends:
\\
libasio ^1.28.0
{
  require
  {
    config.libasio.ssl = true
  }
}
\\
```

Note that on some platforms (such as MinGW) it may be necessary for
applications to define `_WIN32_WINNT` to an appropriate value. If it's not
defined the library's `config.hpp` header will issue a warning and choose a
default (currently `0x0601`, meaning Windows 7 and later; this is also the
value that the library is built with).

\
package-description-type: text/markdown;variant=GFM
url: https://think-async.com/Asio/
src-url: https://github.com/chriskohlhoff/asio/
package-url: https://github.com/build2-packaging/libasio/
email: https://sourceforge.net/p/asio/mailman/asio-users/; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libssl >= 1.1.1 ? ($config.libasio.ssl)
depends: libcrypto >= 1.1.1 ? ($config.libasio.ssl)
ssl-build-config: config.libasio.ssl=true; Enable SSL support.
bootstrap-build:
\
project = libasio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, enable SSL support.
#
config [bool] config.libasio.ssl ?= false

\
location: libasio/libasio-1.29.0.tar.gz
sha256sum: ac4bbbe6de4025d1401f2edc75ecba129c88449cc73c225a7d5a7dbe9c5618f1
:
name: libasio
version: 1.34.0
language: c++
summary: Cross-platform C++ library for asynchronous network programming
license: BSL-1.0; Boost Software License 1.0.
description:
\
asio version 1.34.0
Released Wednesday, 04 December 2024.

See doc/index.html for API documentation and a tutorial.

\
description-type: text/plain
package-description:
\
# libasio

Asio is a cross-platform C++ library for network and low-level I/O programming
that provides developers with a consistent asynchronous model using a modern
C++ approach.

Asio provides the basic building blocks for C++ networking, concurrency and
other kinds of I/O. Asio is used in all kinds of applications, from phone apps
to the world’s fastest share markets.

For more information see: https://think-async.com/Asio/

This is a `build2` package for the standalone version of the Asio library.

# Usage

This package provides the `lib{asio}` library.

SSL support is disabled by default. To enable it, add the following to your
`manifest`:

```
depends:
\\
libasio ^1.28.0
{
  require
  {
    config.libasio.ssl = true
  }
}
\\
```

Note that on some platforms (such as MinGW) it may be necessary for
applications to define `_WIN32_WINNT` to an appropriate value. If it's not
defined the library's `config.hpp` header will issue a warning and choose a
default (currently `0x0601`, meaning Windows 7 and later; this is also the
value that the library is built with).

\
package-description-type: text/markdown;variant=GFM
url: https://think-async.com/Asio/
src-url: https://github.com/chriskohlhoff/asio/
package-url: https://github.com/build2-packaging/libasio/
email: https://sourceforge.net/p/asio/mailman/asio-users/; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libssl >= 1.1.1 ? ($config.libasio.ssl)
depends: libcrypto >= 1.1.1 ? ($config.libasio.ssl)
ssl-build-config: config.libasio.ssl=true; Enable SSL support.
bootstrap-build:
\
project = libasio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, enable SSL support.
#
config [bool] config.libasio.ssl ?= false

\
location: libasio/libasio-1.34.0.tar.gz
sha256sum: 72a74ad39f4b891a95eddf1cc3dde2f2e307fcd6fb16db13b771b1de93ad5a47
:
name: libb2
version: 0.98.1+2
summary: C library providing BLAKE2b, BLAKE2s, BLAKE2bp, BLAKE2sp
license: CC0-1.0
description:
\
# libb2

C library providing BLAKE2b, BLAKE2s, BLAKE2bp, BLAKE2sp

Installation:

```
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
```

Contact: contact@blake2.net

\
description-type: text/markdown;variant=GFM
url: https://blake2.net
src-url: https://github.com/BLAKE2/libb2
package-url: https://github.com/build2-packaging/libb2
email: contact@blake2.net
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libb2

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: libb2/libb2-0.98.1+2.tar.gz
sha256sum: ba58ec89e9825a968960d6a240f8c55051e8ee557b7821b77239ef0cb967ff33
:
name: libboost-accumulators
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Framework for incremental calculation, and collection of statistical\
 accumulators
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/accumulators
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/accumulators
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-circular-buffer == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-numeric-ublas == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-serialization == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-accumulators

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-accumulators-1.83.0.tar.gz
sha256sum: 38533e7da58b190537115ee616c340dd3e8a201c1c269ae6243c9eed6aac534d
:
name: libboost-accumulators
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Framework for incremental calculation, and collection of statistical\
 accumulators
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/accumulators
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/accumulators
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-circular-buffer == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-numeric-conversion == 1.85.0
depends: libboost-numeric-ublas == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-serialization == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-accumulators

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-accumulators-1.85.0.tar.gz
sha256sum: e56951e99cca02e6c0b62b98e383b755febecd4db8701cb172274a5c27019197
:
name: libboost-accumulators
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Framework for incremental calculation, and collection of statistical\
 accumulators
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/accumulators
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/accumulators
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-circular-buffer == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-numeric-conversion == 1.87.0
depends: libboost-numeric-ublas == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-serialization == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-accumulators

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-accumulators-1.87.0.tar.gz
sha256sum: 754442af3fabf003369c0fe34739dce7367752e97a843098e66fe7a43f0db629
:
name: libboost-algorithm
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A collection of useful generic algorithms
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Algorithm, part of collection of the [Boost C++ Libraries](http://github.com/\
boostorg), is a collection of general purpose algorithms.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/algorithm/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/algorithm.svg?branch=master)](https:/\
/travis-ci.org/boostorg/algorithm) | [![Build status](https://ci.appveyor.com\
/api/projects/status/FIXME/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/USER/PROJECT/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/99999/badge.svg)](https://scan.co\
verity.com/projects/boostorg-algorithm) | [![codecov](https://codecov.io/gh/b\
oostorg/algorithm/branch/master/graph/badge.svg)](https://codecov.io/gh/boost\
org/algorithm/branch/master)| [![Deps](https://img.shields.io/badge/deps-mast\
er-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/algorith\
m.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgr\
een.svg)](http://www.boost.org/doc/libs/master/doc/html/algorithm.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/algorithm.html)
[`develop`](https://github.com/boostorg/algorithm/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/algorithm.svg?branch=develop)](https:\
//travis-ci.org/boostorg/algorithm) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/FIXME/branch/develop?svg=true)](https://ci.appveyor.com\
/project/USER/PROJECT/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/99999/badge.svg)](https://scan.co\
verity.com/projects/boostorg-algorithm) | [![codecov](https://codecov.io/gh/b\
oostorg/algorithm/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/algorithm/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/alg\
orithm.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/algorithm.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/algorithm.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-algorithm)
* [Report bugs](https://github.com/boostorg/algorithm/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[algorithm]` tag at the beginning of the subject line.



\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-algorithm

The `build2` package of `libboost-algorithm` supports the following
configuration variables:


### `config.libboost_algorithm.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/algorithm
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/algorithm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-regex == 1.83.0 ? ($config.libboost_algorithm.regex)
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-unordered == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-algorithm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_algorithm.regex ?= false

\
location: boost/libboost-algorithm-1.83.0.tar.gz
sha256sum: 85f8a6393af450c09aac893b20e911f84bec2a8c0cc970b03309430e4df0ce41
:
name: libboost-algorithm
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A collection of useful generic algorithms
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Algorithm, part of collection of the [Boost C++ Libraries](http://github.com/\
boostorg), is a collection of general purpose algorithms.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/algorithm/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/algorithm.svg?branch=master)](https:/\
/travis-ci.org/boostorg/algorithm) | [![Build status](https://ci.appveyor.com\
/api/projects/status/FIXME/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/USER/PROJECT/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/99999/badge.svg)](https://scan.co\
verity.com/projects/boostorg-algorithm) | [![codecov](https://codecov.io/gh/b\
oostorg/algorithm/branch/master/graph/badge.svg)](https://codecov.io/gh/boost\
org/algorithm/branch/master)| [![Deps](https://img.shields.io/badge/deps-mast\
er-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/algorith\
m.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgr\
een.svg)](http://www.boost.org/doc/libs/master/doc/html/algorithm.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/algorithm.html)
[`develop`](https://github.com/boostorg/algorithm/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/algorithm.svg?branch=develop)](https:\
//travis-ci.org/boostorg/algorithm) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/FIXME/branch/develop?svg=true)](https://ci.appveyor.com\
/project/USER/PROJECT/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/99999/badge.svg)](https://scan.co\
verity.com/projects/boostorg-algorithm) | [![codecov](https://codecov.io/gh/b\
oostorg/algorithm/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/algorithm/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/alg\
orithm.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/algorithm.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/algorithm.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-algorithm)
* [Report bugs](https://github.com/boostorg/algorithm/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[algorithm]` tag at the beginning of the subject line.



\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-algorithm

The `build2` package of `libboost-algorithm` supports the following
configuration variables:


### `config.libboost_algorithm.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/algorithm
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/algorithm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-exception == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-regex == 1.85.0 ? ($config.libboost_algorithm.regex)
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-unordered == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-algorithm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_algorithm.regex ?= false

\
location: boost/libboost-algorithm-1.85.0.tar.gz
sha256sum: 615013b043cb27ab75a2733d8a2736fb36f56ecf2679c515adef29914cc395bc
:
name: libboost-algorithm
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A collection of useful generic algorithms
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Algorithm, part of collection of the [Boost C++ Libraries](http://github.com/\
boostorg), is a collection of general purpose algorithms.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/algorithm/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/algorithm.svg?branch=master)](https:/\
/travis-ci.org/boostorg/algorithm) | [![Build status](https://ci.appveyor.com\
/api/projects/status/FIXME/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/USER/PROJECT/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/99999/badge.svg)](https://scan.co\
verity.com/projects/boostorg-algorithm) | [![codecov](https://codecov.io/gh/b\
oostorg/algorithm/branch/master/graph/badge.svg)](https://codecov.io/gh/boost\
org/algorithm/branch/master)| [![Deps](https://img.shields.io/badge/deps-mast\
er-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/algorith\
m.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgr\
een.svg)](http://www.boost.org/doc/libs/master/doc/html/algorithm.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/algorithm.html)
[`develop`](https://github.com/boostorg/algorithm/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/algorithm.svg?branch=develop)](https:\
//travis-ci.org/boostorg/algorithm) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/FIXME/branch/develop?svg=true)](https://ci.appveyor.com\
/project/USER/PROJECT/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/99999/badge.svg)](https://scan.co\
verity.com/projects/boostorg-algorithm) | [![codecov](https://codecov.io/gh/b\
oostorg/algorithm/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/algorithm/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/alg\
orithm.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/algorithm.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/algorithm.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-algorithm)
* [Report bugs](https://github.com/boostorg/algorithm/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[algorithm]` tag at the beginning of the subject line.



\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-algorithm

The `build2` package of `libboost-algorithm` supports the following
configuration variables:


### `config.libboost_algorithm.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/algorithm
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/algorithm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-exception == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-regex == 1.87.0 ? ($config.libboost_algorithm.regex)
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-unordered == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-algorithm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_algorithm.regex ?= false

\
location: boost/libboost-algorithm-1.87.0.tar.gz
sha256sum: c6b613266dd5eb3235444654c66b56d767685bc602c5c0413b4b950cbd7a9c7f
:
name: libboost-align
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Memory alignment functions, allocators, traits
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Align

The Boost Align C++ library provides functions, classes, templates, traits,
and macros, for the control, inspection, and diagnostic of memory alignment.

### License

Distributed under the
[Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/align
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/align
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-static-assert == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-align

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-align-1.83.0.tar.gz
sha256sum: 14d620ae5f9746404bca74041cc0e5a4c29f2e3b1a80705c54660a4cacf369b3
:
name: libboost-align
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Memory alignment functions, allocators, traits
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Align

The Boost Align C++ library provides functions, classes, templates, traits,
and macros, for the control, inspection, and diagnostic of memory alignment.

### License

Distributed under the
[Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/align
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/align
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-static-assert == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-align

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-align-1.85.0.tar.gz
sha256sum: 65ea1b41838b104f0052cfbc52aff5ade6358faab1e9a40fb50c30c0e2494817
:
name: libboost-align
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Memory alignment functions, allocators, traits
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Align

The Boost Align C++ library provides functions, classes, templates, traits,
and macros, for the control, inspection, and diagnostic of memory alignment.

### License

Distributed under the
[Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/align
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/align
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-static-assert == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-align

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-align-1.87.0.tar.gz
sha256sum: 8e90afbf14c1839e4b6c1d56615260d6fb7a9b4a0b5700218740e468f73b586c
:
name: libboost-any
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Safe, generic container for single values of different value types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Any](https://boost.org/libs/any)
Boost.Any is a part of the [Boost C++ Libraries](https://github.com/boostorg)\
. It is a safe, generic container for single values of different value types.


### Test results
@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![Github Actions CI](https://github.com/boostorg/any/actio\
ns/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/an\
y/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proj\
ects/status/dmugl75nfhjnx7ot/branch/develop?svg=true)](https://ci.appveyor.co\
m/project/apolukhin/any/branch/develop) | [![Coverage Status](https://coveral\
ls.io/repos/boostorg/any/badge.png?branch=develop)](https://coveralls.io/r/bo\
ostorg/any?branch=develop) | [details...](https://www.boost.org/development/t\
ests/develop/developer/any.html)
Master branch:  | [![Github Actions CI](https://github.com/boostorg/any/actio\
ns/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/any\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/dmugl75nfhjnx7ot/branch/master?svg=true)](https://ci.appveyor.com/\
project/apolukhin/any/branch/master) | [![Coverage Status](https://coveralls.\
io/repos/boostorg/any/badge.png?branch=master)](https://coveralls.io/r/boosto\
rg/any?branch=master) | [details...](https://www.boost.org/development/tests/\
master/developer/any.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/any.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/any
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/any
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-index == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-any

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-any-1.83.0.tar.gz
sha256sum: f45939fa34de08c835b3d946058b4cef59285e2ca03c758ba16925d78abd2dc2
:
name: libboost-any
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Safe, generic container for single values of different value types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Any](https://boost.org/libs/any)
Boost.Any is a part of the [Boost C++ Libraries](https://github.com/boostorg)\
. It is a safe, generic container for single values of different value types.


### Test results
@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![Github Actions CI](https://github.com/boostorg/any/actio\
ns/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/an\
y/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proj\
ects/status/dmugl75nfhjnx7ot/branch/develop?svg=true)](https://ci.appveyor.co\
m/project/apolukhin/any/branch/develop) | [![Coverage Status](https://coveral\
ls.io/repos/boostorg/any/badge.png?branch=develop)](https://coveralls.io/r/bo\
ostorg/any?branch=develop) | [details...](https://www.boost.org/development/t\
ests/develop/developer/any.html)
Master branch:  | [![Github Actions CI](https://github.com/boostorg/any/actio\
ns/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/any\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/dmugl75nfhjnx7ot/branch/master?svg=true)](https://ci.appveyor.com/\
project/apolukhin/any/branch/master) | [![Coverage Status](https://coveralls.\
io/repos/boostorg/any/badge.png?branch=master)](https://coveralls.io/r/boosto\
rg/any?branch=master) | [details...](https://www.boost.org/development/tests/\
master/developer/any.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/any.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/any
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/any
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-index == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-any

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-any-1.85.0.tar.gz
sha256sum: 10ea3c5b76e963398dfd79b0c248d1730a6bb0994bc8071d410e9ea060de8d6d
:
name: libboost-any
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Safe, generic container for single values of different value types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Any](https://boost.org/libs/any)
Boost.Any is a part of the [Boost C++ Libraries](https://github.com/boostorg)\
. It is a safe, generic container for single values of different value types.


### Test results
@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![Github Actions CI](https://github.com/boostorg/any/actio\
ns/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/an\
y/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proj\
ects/status/dmugl75nfhjnx7ot/branch/develop?svg=true)](https://ci.appveyor.co\
m/project/apolukhin/any/branch/develop) | [![Coverage Status](https://coveral\
ls.io/repos/boostorg/any/badge.png?branch=develop)](https://coveralls.io/r/bo\
ostorg/any?branch=develop) | [details...](https://www.boost.org/development/t\
ests/develop/developer/any.html)
Master branch:  | [![Github Actions CI](https://github.com/boostorg/any/actio\
ns/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/any\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/dmugl75nfhjnx7ot/branch/master?svg=true)](https://ci.appveyor.com/\
project/apolukhin/any/branch/master) | [![Coverage Status](https://coveralls.\
io/repos/boostorg/any/badge.png?branch=master)](https://coveralls.io/r/boosto\
rg/any?branch=master) | [details...](https://www.boost.org/development/tests/\
master/developer/any.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/any.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/any
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/any
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-index == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-any

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-any-1.87.0.tar.gz
sha256sum: 7a676d8c24d386453dcd8f9e431cd3e27aaf3f33f3ea3be9f53ad76e5cdbf22a
:
name: libboost-array
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: STL compliant container wrapper for arrays of constant size
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/array
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/array
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-array

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-array-1.83.0.tar.gz
sha256sum: d9b4ba259020e6885a17ca95f8cc150ef0bc7829faa071a7160871ed2f2d6b37
:
name: libboost-array
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: STL compliant container wrapper for arrays of constant size
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/array
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/array
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-array

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-array-1.85.0.tar.gz
sha256sum: 01b56da8f9df2bdee22d25405f97274c5057cda3fc51fba754a04738285c2f1e
:
name: libboost-array
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: STL compliant container wrapper for arrays of constant size
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/array
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/array
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-array

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-array-1.87.0.tar.gz
sha256sum: df5a5c5d7a4728a5da3976e909324dacf77c071beef8e56ea95d70a90b38c926
:
name: libboost-asio
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Portable networking and other low-level I/O, including sockets,\
 timers, hostname resolution, socket iostreams, serial ports, file\
 descriptors and Windows HANDLEs
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
package-description:
\
# libboost-asio

The `build2` package of `libboost-asio` supports the following configuration
variables:


### `config.libboost_asio.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/asio
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/asio
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.83.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-chrono == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-context == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-date-time == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-regex == 1.83.0 ? ($config.libboost_asio.regex)
depends: libboost-smart-ptr == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-asio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_asio.regex ?= false

\
location: boost/libboost-asio-1.83.0.tar.gz
sha256sum: 0ced990c57f4f95f3bd9b37d0326461197e86cdad4ac1662fef7b440e880a488
:
name: libboost-asio
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Portable networking and other low-level I/O, including sockets,\
 timers, hostname resolution, socket iostreams, serial ports, file\
 descriptors and Windows HANDLEs
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
package-description:
\
# libboost-asio

The `build2` package of `libboost-asio` supports the following configuration
variables:


### `config.libboost_asio.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/asio
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/asio
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-context == 1.85.0
depends: libboost-date-time == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-asio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_asio.regex ?= false

\
location: boost/libboost-asio-1.85.0.tar.gz
sha256sum: 1bf5fb40bc736acc32953bd72f3fe11d5e588141550cff0af6c4f2b96423e105
:
name: libboost-asio
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Portable networking and other low-level I/O, including sockets,\
 timers, hostname resolution, socket iostreams, serial ports, file\
 descriptors and Windows HANDLEs
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
package-description:
\
# libboost-asio

The `build2` package of `libboost-asio` supports the following configuration
variables:


### `config.libboost_asio.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/asio
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/asio
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-align == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-context == 1.87.0
depends: libboost-date-time == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-asio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_asio.regex ?= false

\
location: boost/libboost-asio-1.87.0.tar.gz
sha256sum: a76b8250b4e95fa7e8de1a82cb79e2683fb829002bdb2e04d2c8f603a651c416
:
name: libboost-assert
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Customizable assert macros
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Assert

The Boost.Assert library, part of the collection of [Boost C++\
 Libraries](http://github.com/boostorg),
provides several configurable diagnostic macros similar in behavior and\
 purpose to the standard macro
`assert` from `<cassert>`.

## Documentation

See [the documentation](https://boost.org/libs/assert) for more information.

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/assert
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/assert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-assert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-assert-1.83.0.tar.gz
sha256sum: b354346b89cae459392cfef5b04f17a789bb8dbf2e21409122c255e28c8b2ba5
:
name: libboost-assert
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Customizable assert macros
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Assert

The Boost.Assert library, part of the collection of [Boost C++\
 Libraries](http://github.com/boostorg),
provides several configurable diagnostic macros similar in behavior and\
 purpose to the standard macro
`assert` from `<cassert>`.

## Documentation

See [the documentation](https://boost.org/libs/assert) for more information.

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/assert
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/assert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-assert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-assert-1.85.0.tar.gz
sha256sum: a602ead951ec82410cc6c537d6d2695d6dc805049b1bd30ea86ba2b269c22d5d
:
name: libboost-assert
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Customizable assert macros
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Assert

The Boost.Assert library, part of the collection of [Boost C++\
 Libraries](http://github.com/boostorg),
provides several configurable diagnostic macros similar in behavior and\
 purpose to the standard macro
`assert` from `<cassert>`.

## Documentation

See [the documentation](https://boost.org/libs/assert) for more information.

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/assert
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/assert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-assert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-assert-1.87.0.tar.gz
sha256sum: ab3e1196cb286b4ff7c7b02ab8fb8f3885add6f037cd50a3636eb7c7ba90e2bf
:
name: libboost-assign
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Filling containers with constant or generated data has never been\
 easier
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Assign, part of collection of the [Boost C++ Libraries](http://github.com/boo\
storg), makes it easy to fill containers with data by overloading operator()\
 and operator()().

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/assign/tree/master) | [![Build\
 Status](https://github.com/boostorg/assign/actions/workflows/ci.yml/badge.sv\
g?branch=master)](https://github.com/boostorg/assign/actions?query=branch:mas\
ter) | [![Build status](https://ci.appveyor.com/api/projects/status/a8pip7fvp\
609f0v2/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/assi\
gn-4i3tt/branch/master) | [![Coverity Scan Build Status](https://scan.coverit\
y.com/projects/16318/badge.svg)](https://scan.coverity.com/projects/boostorg-\
assign) | [![codecov](https://codecov.io/gh/boostorg/assign/branch/master/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/assign/branch/master)|\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/assign.html) | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/assign.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/assign.html)
[`develop`](https://github.com/boostorg/assign/tree/develop) | [![Build\
 Status](https://github.com/boostorg/assign/actions/workflows/ci.yml/badge.sv\
g?branch=develop)](https://github.com/boostorg/assign/actions?query=branch:de\
velop) | [![Build status](https://ci.appveyor.com/api/projects/status/a8pip7f\
vp609f0v2/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/a\
ssign-4i3tt/branch/develop) | [![Coverity Scan Build Status](https://scan.cov\
erity.com/projects/16318/badge.svg)](https://scan.coverity.com/projects/boost\
org-assign) | [![codecov](https://codecov.io/gh/boostorg/assign/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/assign/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/assign.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.or\
g/doc/libs/develop/doc/html/assign.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/assign.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-assign)
* [Report bugs](https://github.com/boostorg/assign/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[assign]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/assign
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/assign
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-ptr-container == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-assign

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-assign-1.83.0.tar.gz
sha256sum: 89b10d5889bf7f98419793927a1bf7e27a517a8c22769a9f966fee4dcd891e68
:
name: libboost-assign
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Filling containers with constant or generated data has never been\
 easier
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Assign, part of collection of the [Boost C++ Libraries](http://github.com/boo\
storg), makes it easy to fill containers with data by overloading operator()\
 and operator()().

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/assign/tree/master) | [![Build\
 Status](https://github.com/boostorg/assign/actions/workflows/ci.yml/badge.sv\
g?branch=master)](https://github.com/boostorg/assign/actions?query=branch:mas\
ter) | [![Build status](https://ci.appveyor.com/api/projects/status/a8pip7fvp\
609f0v2/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/assi\
gn-4i3tt/branch/master) | [![Coverity Scan Build Status](https://scan.coverit\
y.com/projects/16318/badge.svg)](https://scan.coverity.com/projects/boostorg-\
assign) | [![codecov](https://codecov.io/gh/boostorg/assign/branch/master/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/assign/branch/master)|\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/assign.html) | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/assign.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/assign.html)
[`develop`](https://github.com/boostorg/assign/tree/develop) | [![Build\
 Status](https://github.com/boostorg/assign/actions/workflows/ci.yml/badge.sv\
g?branch=develop)](https://github.com/boostorg/assign/actions?query=branch:de\
velop) | [![Build status](https://ci.appveyor.com/api/projects/status/a8pip7f\
vp609f0v2/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/a\
ssign-4i3tt/branch/develop) | [![Coverity Scan Build Status](https://scan.cov\
erity.com/projects/16318/badge.svg)](https://scan.coverity.com/projects/boost\
org-assign) | [![codecov](https://codecov.io/gh/boostorg/assign/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/assign/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/assign.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.or\
g/doc/libs/develop/doc/html/assign.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/assign.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-assign)
* [Report bugs](https://github.com/boostorg/assign/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[assign]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/assign
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/assign
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-ptr-container == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-assign

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-assign-1.85.0.tar.gz
sha256sum: ed16428eefa8623063eeec178a9f851b4a9e193bea6064c4c9fb96a642bfe7b0
:
name: libboost-assign
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Filling containers with constant or generated data has never been\
 easier
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Assign, part of collection of the [Boost C++ Libraries](http://github.com/boo\
storg), makes it easy to fill containers with data by overloading operator()\
 and operator()().

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/assign/tree/master) | [![Build\
 Status](https://github.com/boostorg/assign/actions/workflows/ci.yml/badge.sv\
g?branch=master)](https://github.com/boostorg/assign/actions?query=branch:mas\
ter) | [![Build status](https://ci.appveyor.com/api/projects/status/a8pip7fvp\
609f0v2/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/assi\
gn-4i3tt/branch/master) | [![Coverity Scan Build Status](https://scan.coverit\
y.com/projects/16318/badge.svg)](https://scan.coverity.com/projects/boostorg-\
assign) | [![codecov](https://codecov.io/gh/boostorg/assign/branch/master/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/assign/branch/master)|\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/assign.html) | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/assign.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/assign.html)
[`develop`](https://github.com/boostorg/assign/tree/develop) | [![Build\
 Status](https://github.com/boostorg/assign/actions/workflows/ci.yml/badge.sv\
g?branch=develop)](https://github.com/boostorg/assign/actions?query=branch:de\
velop) | [![Build status](https://ci.appveyor.com/api/projects/status/a8pip7f\
vp609f0v2/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/a\
ssign-4i3tt/branch/develop) | [![Coverity Scan Build Status](https://scan.cov\
erity.com/projects/16318/badge.svg)](https://scan.coverity.com/projects/boost\
org-assign) | [![codecov](https://codecov.io/gh/boostorg/assign/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/assign/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/assign.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.or\
g/doc/libs/develop/doc/html/assign.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/assign.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-assign)
* [Report bugs](https://github.com/boostorg/assign/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[assign]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/assign
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/assign
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-ptr-container == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-assign

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-assign-1.87.0.tar.gz
sha256sum: c079e1916d2137f714f8d306e1281f30a5a320764b4101f9043923c6862db19b
:
name: libboost-atomic
version: 1.83.0
language: c++
project: boost
summary: C++11-style atomic<>
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Atomic](doc/logo.png)

Boost.Atomic, part of collection of the [Boost C++ Libraries](https://github.\
com/boostorg), implements atomic operations for various CPU architectures,\
 reflecting and extending the standard interface defined in C++11 and later.

### Directories

* **build** - Boost.Atomic build scripts
* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Atomic
* **src** - Compilable source code of Boost.Atomic
* **test** - Boost.Atomic unit tests

### More information

* [Documentation](https://www.boost.org/libs/atomic)
* [Report bugs](https://github.com/boostorg/atomic/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/atomic/c\
ompare) against **develop** branch. Note that by submitting patches you agree\
 to license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/atomic/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/atomic/actions/workflows/ci.yml/badge.s\
vg?branch=master)](https://github.com/boostorg/atomic/actions?query=branch%3A\
master) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/c64xu59byd\
nmb7kt/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/atom\
ic/branch/master) | [![Tests](https://img.shields.io/badge/matrix-master-brig\
htgreen.svg)](http://www.boost.org/development/tests/master/developer/atomic.\
html) | [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen\
.svg)](https://pdimov.github.io/boostdep-report/master/atomic.html)
[`develop`](https://github.com/boostorg/atomic/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/atomic/actions/workflows/ci.yml/badge.s\
vg?branch=develop)](https://github.com/boostorg/atomic/actions?query=branch%3\
Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/c64xu59b\
ydnmb7kt/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/a\
tomic/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop\
-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/a\
tomic.html) | [![Dependencies](https://img.shields.io/badge/deps-develop-brig\
htgreen.svg)](https://pdimov.github.io/boostdep-report/develop/atomic.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/atomic
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/atomic
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-atomic

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-atomic-1.83.0.tar.gz
sha256sum: f719fbcf8ee7507b0dab5624f4b406d414b19c25e5e6b97bdfb5825d358e9de3
:
name: libboost-atomic
version: 1.85.0
language: c++
project: boost
summary: C++11-style atomic types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Atomic](doc/logo.png)

Boost.Atomic, part of collection of the [Boost C++ Libraries](https://github.\
com/boostorg), implements atomic operations for various CPU architectures,\
 reflecting and extending the standard interface defined in C++11 and later.

### Directories

* **build** - Boost.Atomic build scripts
* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Atomic
* **src** - Compilable source code of Boost.Atomic
* **test** - Boost.Atomic unit tests

### More information

* [Documentation](https://www.boost.org/libs/atomic)
* [Report bugs](https://github.com/boostorg/atomic/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/atomic/c\
ompare) against **develop** branch. Note that by submitting patches you agree\
 to license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/atomic/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/atomic/actions/workflows/ci.yml/badge.s\
vg?branch=master)](https://github.com/boostorg/atomic/actions?query=branch%3A\
master) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/c64xu59byd\
nmb7kt/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/atom\
ic/branch/master) | [![Tests](https://img.shields.io/badge/matrix-master-brig\
htgreen.svg)](http://www.boost.org/development/tests/master/developer/atomic.\
html) | [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen\
.svg)](https://pdimov.github.io/boostdep-report/master/atomic.html)
[`develop`](https://github.com/boostorg/atomic/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/atomic/actions/workflows/ci.yml/badge.s\
vg?branch=develop)](https://github.com/boostorg/atomic/actions?query=branch%3\
Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/c64xu59b\
ydnmb7kt/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/a\
tomic/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop\
-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/a\
tomic.html) | [![Dependencies](https://img.shields.io/badge/deps-develop-brig\
htgreen.svg)](https://pdimov.github.io/boostdep-report/develop/atomic.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/atomic
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/atomic
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-atomic

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-atomic-1.85.0.tar.gz
sha256sum: 89253327e785c4fededcdf14fb0fdcf77084ef5f0691b572213905d5a868e58e
:
name: libboost-atomic
version: 1.87.0
language: c++
project: boost
summary: C++11-style atomic types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Atomic](doc/logo.png)

Boost.Atomic, part of collection of the [Boost C++ Libraries](https://github.\
com/boostorg), implements atomic operations for various CPU architectures,\
 reflecting and extending the standard interface defined in C++11 and later.

### Directories

* **build** - Boost.Atomic build scripts
* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Atomic
* **src** - Compilable source code of Boost.Atomic
* **test** - Boost.Atomic unit tests

### More information

* [Documentation](https://www.boost.org/libs/atomic)
* [Report bugs](https://github.com/boostorg/atomic/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/atomic/c\
ompare) against **develop** branch. Note that by submitting patches you agree\
 to license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/atomic/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/atomic/actions/workflows/ci.yml/badge.s\
vg?branch=master)](https://github.com/boostorg/atomic/actions?query=branch%3A\
master) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/c64xu59byd\
nmb7kt/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/atom\
ic/branch/master) | [![Tests](https://img.shields.io/badge/matrix-master-brig\
htgreen.svg)](http://www.boost.org/development/tests/master/developer/atomic.\
html) | [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen\
.svg)](https://pdimov.github.io/boostdep-report/master/atomic.html)
[`develop`](https://github.com/boostorg/atomic/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/atomic/actions/workflows/ci.yml/badge.s\
vg?branch=develop)](https://github.com/boostorg/atomic/actions?query=branch%3\
Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/c64xu59b\
ydnmb7kt/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/a\
tomic/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop\
-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/a\
tomic.html) | [![Dependencies](https://img.shields.io/badge/deps-develop-brig\
htgreen.svg)](https://pdimov.github.io/boostdep-report/develop/atomic.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/atomic
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/atomic
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-align == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-atomic

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-atomic-1.87.0.tar.gz
sha256sum: 277b94f8741e7ea5e2d3bcec6fe41816b5751bf13a0127ae8c33594ed7d7fd4d
:
name: libboost-beast
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Portable HTTP, WebSocket, and network operations using only C++11\
 and Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<img width="880" height = "80" alt = "Boost.Beast Title"
    src="https://raw.githubusercontent.com/boostorg/beast/master/doc/images/r\
eadme2.png">

# HTTP and WebSocket built on Boost.Asio in C++11

Branch                                                    | Linux / Windows  \
                                                                             \
                                           | Coverage                        \
                                                                             \
                         | Documentation                                     \
                                                                             \
                            | Matrix                                         \
                                                                             \
                   |
----------------------------------------------------------|------------------\
-----------------------------------------------------------------------------\
-------------------------------------------|---------------------------------\
-----------------------------------------------------------------------------\
-------------------------|---------------------------------------------------\
-----------------------------------------------------------------------------\
----------------------------|------------------------------------------------\
-----------------------------------------------------------------------------\
-------------------|
[master](https://github.com/boostorg/beast/tree/master)   | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/beast/status.svg?ref=refs/h\
eads/master)](https://drone.cpp.al/boostorg/beast)  | [![codecov](https://img\
.shields.io/codecov/c/github/boostorg/beast/master.svg)](https://codecov.io/g\
h/boostorg/beast/branch/master)   | [![Documentation](https://img.shields.io/\
badge/documentation-master-brightgreen.svg)](http://www.boost.org/doc/libs/ma\
ster/libs/beast/doc/html/index.html) | [![Matrix](https://img.shields.io/badg\
e/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/mast\
er/developer/beast.html)    |
[develop](https://github.com/boostorg/beast/tree/develop) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/beast/status.svg?ref=refs/h\
eads/develop)](https://drone.cpp.al/boostorg/beast) | [![codecov](https://img\
.shields.io/codecov/c/github/boostorg/beast/develop.svg)](https://codecov.io/\
gh/boostorg/beast/branch/develop) | [![Documentation](https://img.shields.io/\
badge/documentation-develop-brightgreen.svg)](https://www.boost.org/doc/libs/\
develop/libs/beast/index.html)       | [![Matrix](https://img.shields.io/badg\
e/matrix-develop-brightgreen.svg)](https://www.boost.org/development/tests/de\
velop/developer/beast.html) |

## Contents

- [Introduction](#introduction)
- [Appearances](#appearances)
- [Description](#description)
- [Requirements](#requirements)
- [Git Branches](#branches)
- [Building](#building)
- [Usage](#usage)
- [License](#license)
- [Contact](#contact)
- [Contributing](#contributing-we-need-your-help)

## Introduction

Beast is a C++ header-only library serving as a foundation for writing
interoperable networking libraries by providing **low-level HTTP/1,
WebSocket, and networking protocol** vocabulary types and algorithms
using the consistent asynchronous model of Boost.Asio.

This library is designed for:

* **Symmetry:** Algorithms are role-agnostic; build clients, servers, or both.

* **Ease of Use:** Boost.Asio users will immediately understand Beast.

* **Flexibility:** Users make the important decisions such as buffer or
  thread management.

* **Performance:** Build applications handling thousands of connections or\
 more.

* **Basis for Further Abstraction.** Components are well-suited for building\
 upon.

## Appearances

| <a href="https://github.com/vinniefalco/CppCon2018">CppCon 2018</a> | <a\
 href="https://www.bishopfox.com/case_study/securing-beast/">Bishop Fox\
 2018</a> |
| ------------ | ------------ |
| <a href="https://www.youtube.com/watch?v=7FQwAjELMek"><img width="320"\
 height = "180" alt="Beast" src="https://raw.githubusercontent.com/vinniefalc\
o/CppCon2018/master/CppCon2018.png"></a> | <a href="https://youtu.be/4TtyYbGD\
Aj0"><img width="320" height = "180" alt="Beast Security Review"\
 src="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/Bishop\
Fox2018.png"></a> |

| <a href="https://github.com/vinniefalco/CppCon2018">CppCon 2017</a> | <a\
 href="http://cppcast.com/2017/01/vinnie-falco/">CppCast 2017</a> | <a\
 href="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/CppCo\
n2016.pdf">CppCon 2016</a> |
| ------------ | ------------ | ----------- |
| <a href="https://www.youtube.com/watch?v=WsUnnYEKPnI"><img width="320"\
 height = "180" alt="Beast" src="https://raw.githubusercontent.com/vinniefalc\
o/CppCon2017/master/CppCon2017.png"></a> | <a href="http://cppcast.com/2017/0\
1/vinnie-falco/"><img width="180" height="180" alt="Vinnie Falco"\
 src="https://avatars1.githubusercontent.com/u/1503976?v=3&u=76c56d989ef4c096\
25256662eca2775df78a16ad&s=180"></a> | <a href="https://www.youtube.com/watch\
?v=uJZgRcvPFwI"><img width="320" height = "180" alt="Beast"\
 src="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/CppCon\
2016.png"></a> |

## Description

This software is in its first official release. Interfaces
may change in response to user feedback. For recent changes
see the [CHANGELOG](CHANGELOG.md).

* [Official Site](https://github.com/boostorg/beast)
* [Documentation](https://www.boost.org/doc/libs/master/libs/beast/) (master\
 branch)
* [Autobahn|Testsuite WebSocket Results](https://vinniefalco.github.io/boost/\
beast/reports/autobahn/index.html)

## Requirements

This library is for programmers familiar with Boost.Asio. Users
who wish to use asynchronous interfaces should already know how to
create concurrent network programs using callbacks or coroutines.

* **C++11:** Robust support for most language features.
* **Boost:** Boost.Asio and some other parts of Boost.
* **OpenSSL:** Required for using TLS/Secure sockets and examples/tests

When using Microsoft Visual C++, Visual Studio 2017 or later is required.

One of these components is required in order to build the tests and examples:

* Properly configured bjam/b2
* CMake 3.5.1 or later (Windows only)

## Building

Beast is header-only. To use it just add the necessary `#include` line
to your source files, like this:
```C++
#include <boost/beast.hpp>
```

If you use coroutines you'll need to link with the Boost.Coroutine
library. Please visit the Boost documentation for instructions
on how to do this for your particular build system.

## GitHub

To use the latest official release of Beast, simply obtain the latest
Boost distribution and follow the instructions for integrating it
into your development environment. If you wish to build the examples
and tests, or if you wish to preview upcoming changes and features,
it is suggested to clone the "Boost superproject" and work with Beast
"in-tree" (meaning, the libs/beast subdirectory of the superproject).

The official repository contains the following branches:

* [**master**](https://github.com/boostorg/beast/tree/master) This
  holds the most recent snapshot with code that is known to be stable.

* [**develop**](https://github.com/boostorg/beast/tree/develop) This
  holds the most recent snapshot. It may contain unstable code.

Each of these branches requires a corresponding Boost branch and
all of its subprojects. For example, if you wish to use the **master**
branch version of Beast, you should clone the Boost superproject,
switch to the **master** branch in the superproject and acquire
all the Boost libraries corresponding to that branch including Beast.

To clone the superproject locally, and switch into the main project's
directory use:
```
git clone --recursive https://github.com/boostorg/boost.git
cd boost
```

"bjam" is used to build Beast and the Boost libraries. On a non-Windows
system use this command to build bjam:
```
./bootstrap.sh
```

From a Windows command line, build bjam using this command:
```
.\BOOTSTRAP.BAT
```

## Building tests and examples
Building tests and examples requires OpenSSL installed. If OpenSSL is\
 installed
in a non-system location, you will need to copy the
[user-config.jam](tools/user-config.jam) file into your home directory and set
the `OPENSSL_ROOT` environment variable to the path that contains an\
 installation
of OpenSSL.

### Ubuntu/Debian
If installed into a system directory, OpenSSL will be automatically found and\
 used.
```bash
sudo apt install libssl-dev
```
### Windows
Replace `path` in the following code snippets with the path you installed\
 vcpkg
to. Examples assume a 32-bit build, if you build a 64-bit version replace
`x32-windows` with `x64-windows` in the path.
- Using [vcpkg](https://github.com/Microsoft/vcpkg) and CMD:
```bat
vcpkg install openssl --triplet x32-windows
SET OPENSSL_ROOT=path\installed\x32-windows
```

- Using [vcpkg](https://github.com/Microsoft/vcpkg) and PowerShell:
```powershell
vcpkg install openssl --triplet x32-windows
$env:OPENSSL_ROOT = "path\x32-windows"
```

- Using [vcpkg](https://github.com/Microsoft/vcpkg) and bash:
```bash
vcpkg.exe install openssl --triplet x32-windows
export OPENSSL_ROOT=path/x32-windows
```

### Mac OS
Using [brew](https://github.com/Homebrew/brew):
```bash
brew install openssl
export OPENSSL_ROOT=$(brew --prefix openssl)
# install bjam tool user specific configuration file to read OPENSSL_ROOT
# see https://www.bfgroup.xyz/b2/manual/release/index.html
cp ./libs/beast/tools/user-config.jam $HOME
```

Make sure the bjam tool (also called "b2") is available in the path
your shell uses to find executables. The Beast project is located in
"libs/beast" relative to the directory containing the Boot superproject.
To build the Beast tests, examples, and documentation use these commands:
```
export PATH=$PWD:$PATH
b2 -j2 libs/beast/test cxxstd=11      # bjam must be in your $PATH
b2 -j2 libs/beast/example cxxstd=11   # "-j2" means use two processors
b2 libs/beast/doc                     # Doxygen and Saxon are required for\
 this
```



Additional instructions for configuring, using, and building libraries
in superproject may be found in the
[Boost Wiki](https://github.com/boostorg/boost/wiki/Getting-Started).

## Visual Studio

CMake may be used to generate a very nice Visual Studio solution and
a set of Visual Studio project files using these commands:

```
cd libs/beast
mkdir bin
cd bin
cmake ..                                    # for 32-bit Windows builds, or
cmake -G"Visual Studio 15 2017 Win64" ..    # for 64-bit Windows builds\
 (VS2017)
```

The files in the repository are laid out thusly:

```
./
    bin/            Create this to hold executables and project files
    bin64/          Create this to hold 64-bit Windows executables and\
 project files
    doc/            Source code and scripts for the documentation
    include/        Where the header files are located
    example/        Self contained example programs
    meta/           Metadata for Boost integration
    test/           The unit tests for Beast
    tools/          Scripts used for CI testing
```

## Usage

These examples are complete, self-contained programs that you can build
and run yourself (they are in the `example` directory).

https://www.boost.org/doc/libs/develop/libs/beast/doc/html/beast/quick_start.\
html

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

## Contact

Please report issues or questions here:
https://github.com/boostorg/beast/issues

---

## Contributing (We Need Your Help!)

If you would like to contribute to Beast and help us maintain high
quality, consider performing code reviews on active pull requests.
Any feedback from users and stakeholders, even simple questions about
how things work or why they were done a certain way, carries value
and can be used to improve the library. Code review provides these
benefits:

* Identify bugs
* Documentation proof-reading
* Adjust interfaces to suit use-cases
* Simplify code

You can look through the Closed pull requests to get an idea of how
reviews are performed. To give a code review just sign in with your
GitHub account and then add comments to any open pull requests below,
don't be shy!
<p>https://github.com/boostorg/beast/pulls</p>

Here are some resources to learn more about
code reviews:

* <a href="https://blog.scottnonnenberg.com/top-ten-pull-request-review-mista\
kes/">Top 10 Pull Request Review Mistakes</a>
* <a href="https://static1.smartbear.co/smartbear/media/pdfs/best-kept-secret\
s-of-peer-code-review_redirected.pdf">Best Kept Secrets of Peer Code Review\
 (pdf)</a>
* <a href="https://static1.smartbear.co/support/media/resources/cc/11_best_pr\
actices_for_peer_code_review_redirected.pdf">11 Best Practices for Peer Code\
 Review (pdf)</a>
* <a href="http://www.evoketechnologies.com/blog/code-review-checklist-perfor\
m-effective-code-reviews/">Code Review Checklist – To Perform Effective Code\
 Reviews</a>
* <a href="https://www.codeproject.com/Articles/524235/Codeplusreviewplusguid\
elines">Code review guidelines</a>
* <a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGui\
delines.md">C++ Core Guidelines</a>
* <a href="https://www.oreilly.com/library/view/c-coding-standards/0321113586\
/">C++ Coding Standards (Sutter & Alexandrescu)</a>

Beast thrives on code reviews and any sort of feedback from users and
stakeholders about its interfaces. Even if you just have questions,
asking them in the code review or in issues provides valuable information
that can be used to improve the library - do not hesitate, no question
is insignificant or unimportant!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/beast
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/beast
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-asio == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-endian == 1.83.0
depends: libboost-intrusive == 1.83.0
depends: libboost-logic == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-static-string == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-index == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-beast

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-beast-1.83.0.tar.gz
sha256sum: 853c846ca3ac69b243e736fa2eb7bdc045a8851ae984f5e647031de848b96f80
:
name: libboost-beast
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Portable HTTP, WebSocket, and network operations using only C++11\
 and Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<img width="880" height = "80" alt = "Boost.Beast Title"
    src="https://raw.githubusercontent.com/boostorg/beast/master/doc/images/r\
eadme2.png">

# HTTP and WebSocket built on Boost.Asio in C++11

Branch                                                    | Linux / Windows  \
                                                                             \
                                           | Coverage                        \
                                                                             \
                         | Documentation                                     \
                                                                             \
                            | Matrix                                         \
                                                                             \
                   |
----------------------------------------------------------|------------------\
-----------------------------------------------------------------------------\
-------------------------------------------|---------------------------------\
-----------------------------------------------------------------------------\
-------------------------|---------------------------------------------------\
-----------------------------------------------------------------------------\
----------------------------|------------------------------------------------\
-----------------------------------------------------------------------------\
-------------------|
[master](https://github.com/boostorg/beast/tree/master)   | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/beast/status.svg?ref=refs/h\
eads/master)](https://drone.cpp.al/boostorg/beast)  | [![codecov](https://img\
.shields.io/codecov/c/github/boostorg/beast/master.svg)](https://codecov.io/g\
h/boostorg/beast/branch/master)   | [![Documentation](https://img.shields.io/\
badge/documentation-master-brightgreen.svg)](http://www.boost.org/doc/libs/ma\
ster/libs/beast/doc/html/index.html) | [![Matrix](https://img.shields.io/badg\
e/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/mast\
er/developer/beast.html)    |
[develop](https://github.com/boostorg/beast/tree/develop) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/beast/status.svg?ref=refs/h\
eads/develop)](https://drone.cpp.al/boostorg/beast) | [![codecov](https://img\
.shields.io/codecov/c/github/boostorg/beast/develop.svg)](https://codecov.io/\
gh/boostorg/beast/branch/develop) | [![Documentation](https://img.shields.io/\
badge/documentation-develop-brightgreen.svg)](https://www.boost.org/doc/libs/\
develop/libs/beast/index.html)       | [![Matrix](https://img.shields.io/badg\
e/matrix-develop-brightgreen.svg)](https://www.boost.org/development/tests/de\
velop/developer/beast.html) |

## Contents

- [Introduction](#introduction)
- [Appearances](#appearances)
- [Description](#description)
- [Requirements](#requirements)
- [Git Branches](#branches)
- [Building](#building)
- [Usage](#usage)
- [License](#license)
- [Contact](#contact)
- [Contributing](#contributing-we-need-your-help)

## Introduction

Beast is a C++ header-only library serving as a foundation for writing
interoperable networking libraries by providing **low-level HTTP/1,
WebSocket, and networking protocol** vocabulary types and algorithms
using the consistent asynchronous model of Boost.Asio.

This library is designed for:

* **Symmetry:** Algorithms are role-agnostic; build clients, servers, or both.

* **Ease of Use:** Boost.Asio users will immediately understand Beast.

* **Flexibility:** Users make the important decisions such as buffer or
  thread management.

* **Performance:** Build applications handling thousands of connections or\
 more.

* **Basis for Further Abstraction.** Components are well-suited for building\
 upon.

## Appearances

| <a href="https://github.com/vinniefalco/CppCon2018">CppCon 2018</a> | <a\
 href="https://www.bishopfox.com/case_study/securing-beast/">Bishop Fox\
 2018</a> |
| ------------ | ------------ |
| <a href="https://www.youtube.com/watch?v=7FQwAjELMek"><img width="320"\
 height = "180" alt="Beast" src="https://raw.githubusercontent.com/vinniefalc\
o/CppCon2018/master/CppCon2018.png"></a> | <a href="https://youtu.be/4TtyYbGD\
Aj0"><img width="320" height = "180" alt="Beast Security Review"\
 src="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/Bishop\
Fox2018.png"></a> |

| <a href="https://github.com/vinniefalco/CppCon2018">CppCon 2017</a> | <a\
 href="http://cppcast.com/2017/01/vinnie-falco/">CppCast 2017</a> | <a\
 href="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/CppCo\
n2016.pdf">CppCon 2016</a> |
| ------------ | ------------ | ----------- |
| <a href="https://www.youtube.com/watch?v=WsUnnYEKPnI"><img width="320"\
 height = "180" alt="Beast" src="https://raw.githubusercontent.com/vinniefalc\
o/CppCon2017/master/CppCon2017.png"></a> | <a href="http://cppcast.com/2017/0\
1/vinnie-falco/"><img width="180" height="180" alt="Vinnie Falco"\
 src="https://avatars1.githubusercontent.com/u/1503976?v=3&u=76c56d989ef4c096\
25256662eca2775df78a16ad&s=180"></a> | <a href="https://www.youtube.com/watch\
?v=uJZgRcvPFwI"><img width="320" height = "180" alt="Beast"\
 src="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/CppCon\
2016.png"></a> |

## Description

This software is in its first official release. Interfaces
may change in response to user feedback. For recent changes
see the [CHANGELOG](CHANGELOG.md).

* [Official Site](https://github.com/boostorg/beast)
* [Documentation](https://www.boost.org/doc/libs/master/libs/beast/) (master\
 branch)
* [Autobahn|Testsuite WebSocket Results](https://vinniefalco.github.io/boost/\
beast/reports/autobahn/index.html)

## Requirements

This library is for programmers familiar with Boost.Asio. Users
who wish to use asynchronous interfaces should already know how to
create concurrent network programs using callbacks or coroutines.

* **C++11:** Robust support for most language features.
* **Boost:** Boost.Asio and some other parts of Boost.
* **OpenSSL:** Required for using TLS/Secure sockets and examples/tests

When using Microsoft Visual C++, Visual Studio 2017 or later is required.

One of these components is required in order to build the tests and examples:

* Properly configured bjam/b2
* CMake 3.5.1 or later (Windows only)

## Building

Beast is header-only. To use it just add the necessary `#include` line
to your source files, like this:
```C++
#include <boost/beast.hpp>
```

If you use coroutines you'll need to link with the Boost.Coroutine
library. Please visit the Boost documentation for instructions
on how to do this for your particular build system.

## GitHub

To use the latest official release of Beast, simply obtain the latest
Boost distribution and follow the instructions for integrating it
into your development environment. If you wish to build the examples
and tests, or if you wish to preview upcoming changes and features,
it is suggested to clone the "Boost superproject" and work with Beast
"in-tree" (meaning, the libs/beast subdirectory of the superproject).

The official repository contains the following branches:

* [**master**](https://github.com/boostorg/beast/tree/master) This
  holds the most recent snapshot with code that is known to be stable.

* [**develop**](https://github.com/boostorg/beast/tree/develop) This
  holds the most recent snapshot. It may contain unstable code.

Each of these branches requires a corresponding Boost branch and
all of its subprojects. For example, if you wish to use the **master**
branch version of Beast, you should clone the Boost superproject,
switch to the **master** branch in the superproject and acquire
all the Boost libraries corresponding to that branch including Beast.

To clone the superproject locally, and switch into the main project's
directory use:
```
git clone --recursive https://github.com/boostorg/boost.git
cd boost
```

"bjam" is used to build Beast and the Boost libraries. On a non-Windows
system use this command to build bjam:
```
./bootstrap.sh
```

From a Windows command line, build bjam using this command:
```
.\BOOTSTRAP.BAT
```

## Building tests and examples
Building tests and examples requires OpenSSL installed. If OpenSSL is\
 installed
in a non-system location, you will need to copy the
[user-config.jam](tools/user-config.jam) file into your home directory and set
the `OPENSSL_ROOT` environment variable to the path that contains an\
 installation
of OpenSSL.

### Ubuntu/Debian
If installed into a system directory, OpenSSL will be automatically found and\
 used.
```bash
sudo apt install libssl-dev
```
### Windows
Replace `path` in the following code snippets with the path you installed\
 vcpkg
to. Examples assume a 32-bit build, if you build a 64-bit version replace
`x32-windows` with `x64-windows` in the path.
- Using [vcpkg](https://github.com/Microsoft/vcpkg) and CMD:
```bat
vcpkg install openssl --triplet x32-windows
SET OPENSSL_ROOT=path\installed\x32-windows
```

- Using [vcpkg](https://github.com/Microsoft/vcpkg) and PowerShell:
```powershell
vcpkg install openssl --triplet x32-windows
$env:OPENSSL_ROOT = "path\x32-windows"
```

- Using [vcpkg](https://github.com/Microsoft/vcpkg) and bash:
```bash
vcpkg.exe install openssl --triplet x32-windows
export OPENSSL_ROOT=path/x32-windows
```

### Mac OS
Using [brew](https://github.com/Homebrew/brew):
```bash
brew install openssl
export OPENSSL_ROOT=$(brew --prefix openssl)
# install bjam tool user specific configuration file to read OPENSSL_ROOT
# see https://www.bfgroup.xyz/b2/manual/release/index.html
cp ./libs/beast/tools/user-config.jam $HOME
```

Make sure the bjam tool (also called "b2") is available in the path
your shell uses to find executables. The Beast project is located in
"libs/beast" relative to the directory containing the Boot superproject.
To build the Beast tests, examples, and documentation use these commands:
```
export PATH=$PWD:$PATH
b2 -j2 libs/beast/test cxxstd=11      # bjam must be in your $PATH
b2 -j2 libs/beast/example cxxstd=11   # "-j2" means use two processors
b2 libs/beast/doc                     # Doxygen and Saxon are required for\
 this
```



Additional instructions for configuring, using, and building libraries
in superproject may be found in the
[Boost Wiki](https://github.com/boostorg/boost/wiki/Getting-Started).

## Visual Studio

CMake may be used to generate a very nice Visual Studio solution and
a set of Visual Studio project files using these commands:

```
cd libs/beast
mkdir bin
cd bin
cmake -G "Visual Studio 17 2022" -A Win32 ..  # for 32-bit Windows builds, or
cmake -G "Visual Studio 17 2022" -A x64 ..    # for 64-bit Windows builds
```

The files in the repository are laid out thusly:

```
./
    bin/            Create this to hold executables and project files
    bin64/          Create this to hold 64-bit Windows executables and\
 project files
    doc/            Source code and scripts for the documentation
    include/        Where the header files are located
    example/        Self contained example programs
    meta/           Metadata for Boost integration
    test/           The unit tests for Beast
    tools/          Scripts used for CI testing
```

## Usage

These examples are complete, self-contained programs that you can build
and run yourself (they are in the `example` directory).

https://www.boost.org/doc/libs/develop/libs/beast/doc/html/beast/quick_start.\
html

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

## Contact

Please report issues or questions here:
https://github.com/boostorg/beast/issues

---

## Contributing (We Need Your Help!)

If you would like to contribute to Beast and help us maintain high
quality, consider performing code reviews on active pull requests.
Any feedback from users and stakeholders, even simple questions about
how things work or why they were done a certain way, carries value
and can be used to improve the library. Code review provides these
benefits:

* Identify bugs
* Documentation proof-reading
* Adjust interfaces to suit use-cases
* Simplify code

You can look through the Closed pull requests to get an idea of how
reviews are performed. To give a code review just sign in with your
GitHub account and then add comments to any open pull requests below,
don't be shy!
<p>https://github.com/boostorg/beast/pulls</p>

Here are some resources to learn more about
code reviews:

* <a href="https://blog.scottnonnenberg.com/top-ten-pull-request-review-mista\
kes/">Top 10 Pull Request Review Mistakes</a>
* <a href="https://static1.smartbear.co/smartbear/media/pdfs/best-kept-secret\
s-of-peer-code-review_redirected.pdf">Best Kept Secrets of Peer Code Review\
 (pdf)</a>
* <a href="https://static1.smartbear.co/support/media/resources/cc/11_best_pr\
actices_for_peer_code_review_redirected.pdf">11 Best Practices for Peer Code\
 Review (pdf)</a>
* <a href="http://www.evoketechnologies.com/blog/code-review-checklist-perfor\
m-effective-code-reviews/">Code Review Checklist – To Perform Effective Code\
 Reviews</a>
* <a href="https://www.codeproject.com/Articles/524235/Codeplusreviewplusguid\
elines">Code review guidelines</a>
* <a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGui\
delines.md">C++ Core Guidelines</a>
* <a href="https://www.oreilly.com/library/view/c-coding-standards/0321113586\
/">C++ Coding Standards (Sutter & Alexandrescu)</a>

Beast thrives on code reviews and any sort of feedback from users and
stakeholders about its interfaces. Even if you just have questions,
asking them in the code review or in issues provides valuable information
that can be used to improve the library - do not hesitate, no question
is insignificant or unimportant!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/beast
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/beast
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-asio == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-endian == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-logic == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-static-string == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-index == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-beast

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-beast-1.85.0.tar.gz
sha256sum: d54c61521ceeae7887a9b289622f9e1f9e5c939334fba2ecec1e2c628ca2b73b
:
name: libboost-beast
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Portable HTTP, WebSocket, and network operations using only C++11\
 and Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<img width="880" height = "80" alt = "Boost.Beast Title"
    src="https://raw.githubusercontent.com/boostorg/beast/master/doc/images/r\
eadme2.png">

# HTTP and WebSocket built on Boost.Asio in C++11

Branch                                                    | Linux / Windows  \
                                                                             \
                                           | Coverage                        \
                                                                             \
                         | Documentation                                     \
                                                                             \
                            | Matrix                                         \
                                                                             \
                   |
----------------------------------------------------------|------------------\
-----------------------------------------------------------------------------\
-------------------------------------------|---------------------------------\
-----------------------------------------------------------------------------\
-------------------------|---------------------------------------------------\
-----------------------------------------------------------------------------\
----------------------------|------------------------------------------------\
-----------------------------------------------------------------------------\
-------------------|
[master](https://github.com/boostorg/beast/tree/master)   | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/beast/status.svg?ref=refs/h\
eads/master)](https://drone.cpp.al/boostorg/beast)  | [![codecov](https://img\
.shields.io/codecov/c/github/boostorg/beast/master.svg)](https://codecov.io/g\
h/boostorg/beast/branch/master)   | [![Documentation](https://img.shields.io/\
badge/documentation-master-brightgreen.svg)](http://www.boost.org/doc/libs/ma\
ster/libs/beast/doc/html/index.html) | [![Matrix](https://img.shields.io/badg\
e/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/mast\
er/developer/beast.html)    |
[develop](https://github.com/boostorg/beast/tree/develop) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/beast/status.svg?ref=refs/h\
eads/develop)](https://drone.cpp.al/boostorg/beast) | [![codecov](https://img\
.shields.io/codecov/c/github/boostorg/beast/develop.svg)](https://codecov.io/\
gh/boostorg/beast/branch/develop) | [![Documentation](https://img.shields.io/\
badge/documentation-develop-brightgreen.svg)](https://www.boost.org/doc/libs/\
develop/libs/beast/index.html)       | [![Matrix](https://img.shields.io/badg\
e/matrix-develop-brightgreen.svg)](https://www.boost.org/development/tests/de\
velop/developer/beast.html) |

## Contents

- [Introduction](#introduction)
- [Appearances](#appearances)
- [Description](#description)
- [Requirements](#requirements)
- [Git Branches](#branches)
- [Building](#building)
- [Usage](#usage)
- [License](#license)
- [Contact](#contact)
- [Contributing](#contributing-we-need-your-help)

## Introduction

Beast is a C++ header-only library serving as a foundation for writing
interoperable networking libraries by providing **low-level HTTP/1,
WebSocket, and networking protocol** vocabulary types and algorithms
using the consistent asynchronous model of Boost.Asio.

This library is designed for:

* **Symmetry:** Algorithms are role-agnostic; build clients, servers, or both.

* **Ease of Use:** Boost.Asio users will immediately understand Beast.

* **Flexibility:** Users make the important decisions such as buffer or
  thread management.

* **Performance:** Build applications handling thousands of connections or\
 more.

* **Basis for Further Abstraction.** Components are well-suited for building\
 upon.

## Appearances

| <a href="https://github.com/vinniefalco/CppCon2018">CppCon 2018</a> | <a\
 href="https://www.bishopfox.com/case_study/securing-beast/">Bishop Fox\
 2018</a> |
| ------------ | ------------ |
| <a href="https://www.youtube.com/watch?v=7FQwAjELMek"><img width="320"\
 height = "180" alt="Beast" src="https://raw.githubusercontent.com/vinniefalc\
o/CppCon2018/master/CppCon2018.png"></a> | <a href="https://youtu.be/4TtyYbGD\
Aj0"><img width="320" height = "180" alt="Beast Security Review"\
 src="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/Bishop\
Fox2018.png"></a> |

| <a href="https://github.com/vinniefalco/CppCon2018">CppCon 2017</a> | <a\
 href="http://cppcast.com/2017/01/vinnie-falco/">CppCast 2017</a> | <a\
 href="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/CppCo\
n2016.pdf">CppCon 2016</a> |
| ------------ | ------------ | ----------- |
| <a href="https://www.youtube.com/watch?v=WsUnnYEKPnI"><img width="320"\
 height = "180" alt="Beast" src="https://raw.githubusercontent.com/vinniefalc\
o/CppCon2017/master/CppCon2017.png"></a> | <a href="http://cppcast.com/2017/0\
1/vinnie-falco/"><img width="180" height="180" alt="Vinnie Falco"\
 src="https://avatars1.githubusercontent.com/u/1503976?v=3&u=76c56d989ef4c096\
25256662eca2775df78a16ad&s=180"></a> | <a href="https://www.youtube.com/watch\
?v=uJZgRcvPFwI"><img width="320" height = "180" alt="Beast"\
 src="https://raw.githubusercontent.com/vinniefalco/BeastAssets/master/CppCon\
2016.png"></a> |

## Description

This software is in its first official release. Interfaces
may change in response to user feedback. For recent changes
see the [CHANGELOG](CHANGELOG.md).

* [Official Site](https://github.com/boostorg/beast)
* [Documentation](https://www.boost.org/doc/libs/master/libs/beast/) (master\
 branch)
* [Autobahn|Testsuite WebSocket Results](https://vinniefalco.github.io/boost/\
beast/reports/autobahn/index.html)

## Requirements

This library is for programmers familiar with Boost.Asio. Users
who wish to use asynchronous interfaces should already know how to
create concurrent network programs using callbacks or coroutines.

* **C++11:** Robust support for most language features.
* **Boost:** Boost.Asio and some other parts of Boost.
* **OpenSSL:** Required for using TLS/Secure sockets and examples/tests

When using Microsoft Visual C++, Visual Studio 2017 or later is required.

One of these components is required in order to build the tests and examples:

* Properly configured bjam/b2
* CMake 3.5.1 or later (Windows only)

## Building

Beast is header-only. To use it just add the necessary `#include` line
to your source files, like this:
```C++
#include <boost/beast.hpp>
```

If you use coroutines you'll need to link with the Boost.Coroutine
library. Please visit the Boost documentation for instructions
on how to do this for your particular build system.

## GitHub

To use the latest official release of Beast, simply obtain the latest
Boost distribution and follow the instructions for integrating it
into your development environment. If you wish to build the examples
and tests, or if you wish to preview upcoming changes and features,
it is suggested to clone the "Boost superproject" and work with Beast
"in-tree" (meaning, the libs/beast subdirectory of the superproject).

The official repository contains the following branches:

* [**master**](https://github.com/boostorg/beast/tree/master) This
  holds the most recent snapshot with code that is known to be stable.

* [**develop**](https://github.com/boostorg/beast/tree/develop) This
  holds the most recent snapshot. It may contain unstable code.

Each of these branches requires a corresponding Boost branch and
all of its subprojects. For example, if you wish to use the **master**
branch version of Beast, you should clone the Boost superproject,
switch to the **master** branch in the superproject and acquire
all the Boost libraries corresponding to that branch including Beast.

To clone the superproject locally, and switch into the main project's
directory use:
```
git clone --recursive https://github.com/boostorg/boost.git
cd boost
```

"bjam" is used to build Beast and the Boost libraries. On a non-Windows
system use this command to build bjam:
```
./bootstrap.sh
```

From a Windows command line, build bjam using this command:
```
.\BOOTSTRAP.BAT
```

## Building tests and examples
Building tests and examples requires OpenSSL installed. If OpenSSL is\
 installed
in a non-system location, you will need to copy the
[user-config.jam](tools/user-config.jam) file into your home directory and set
the `OPENSSL_ROOT` environment variable to the path that contains an\
 installation
of OpenSSL.

### Ubuntu/Debian
If installed into a system directory, OpenSSL will be automatically found and\
 used.
```bash
sudo apt install libssl-dev
```
### Windows
Replace `path` in the following code snippets with the path you installed\
 vcpkg
to. Examples assume a 32-bit build, if you build a 64-bit version replace
`x32-windows` with `x64-windows` in the path.
- Using [vcpkg](https://github.com/Microsoft/vcpkg) and CMD:
```bat
vcpkg install openssl --triplet x32-windows
SET OPENSSL_ROOT=path\installed\x32-windows
```

- Using [vcpkg](https://github.com/Microsoft/vcpkg) and PowerShell:
```powershell
vcpkg install openssl --triplet x32-windows
$env:OPENSSL_ROOT = "path\x32-windows"
```

- Using [vcpkg](https://github.com/Microsoft/vcpkg) and bash:
```bash
vcpkg.exe install openssl --triplet x32-windows
export OPENSSL_ROOT=path/x32-windows
```

### Mac OS
Using [brew](https://github.com/Homebrew/brew):
```bash
brew install openssl
export OPENSSL_ROOT=$(brew --prefix openssl)
# install bjam tool user specific configuration file to read OPENSSL_ROOT
# see https://www.bfgroup.xyz/b2/manual/release/index.html
cp ./libs/beast/tools/user-config.jam $HOME
```

Make sure the bjam tool (also called "b2") is available in the path
your shell uses to find executables. The Beast project is located in
"libs/beast" relative to the directory containing the Boot superproject.
To build the Beast tests, examples, and documentation use these commands:
```
export PATH=$PWD:$PATH
b2 -j2 libs/beast/test cxxstd=11      # bjam must be in your $PATH
b2 -j2 libs/beast/example cxxstd=11   # "-j2" means use two processors
b2 libs/beast/doc                     # Doxygen and Saxon are required for\
 this
```



Additional instructions for configuring, using, and building libraries
in superproject may be found in the
[Boost Wiki](https://github.com/boostorg/boost/wiki/Getting-Started).

## Visual Studio

CMake may be used to generate a very nice Visual Studio solution and
a set of Visual Studio project files using these commands:

```
cd libs/beast
mkdir bin
cd bin
cmake -G "Visual Studio 17 2022" -A Win32 ..  # for 32-bit Windows builds, or
cmake -G "Visual Studio 17 2022" -A x64 ..    # for 64-bit Windows builds
```

The files in the repository are laid out thusly:

```
./
    bin/            Create this to hold executables and project files
    bin64/          Create this to hold 64-bit Windows executables and\
 project files
    doc/            Source code and scripts for the documentation
    include/        Where the header files are located
    example/        Self contained example programs
    meta/           Metadata for Boost integration
    test/           The unit tests for Beast
    tools/          Scripts used for CI testing
```

## Usage

These examples are complete, self-contained programs that you can build
and run yourself (they are in the `example` directory).

https://www.boost.org/doc/libs/develop/libs/beast/doc/html/beast/quick_start.\
html

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

## Contact

Please report issues or questions here:
https://github.com/boostorg/beast/issues

---

## Contributing (We Need Your Help!)

If you would like to contribute to Beast and help us maintain high
quality, consider performing code reviews on active pull requests.
Any feedback from users and stakeholders, even simple questions about
how things work or why they were done a certain way, carries value
and can be used to improve the library. Code review provides these
benefits:

* Identify bugs
* Documentation proof-reading
* Adjust interfaces to suit use-cases
* Simplify code

You can look through the Closed pull requests to get an idea of how
reviews are performed. To give a code review just sign in with your
GitHub account and then add comments to any open pull requests below,
don't be shy!
<p>https://github.com/boostorg/beast/pulls</p>

Here are some resources to learn more about
code reviews:

* <a href="https://blog.scottnonnenberg.com/top-ten-pull-request-review-mista\
kes/">Top 10 Pull Request Review Mistakes</a>
* <a href="https://static1.smartbear.co/smartbear/media/pdfs/best-kept-secret\
s-of-peer-code-review_redirected.pdf">Best Kept Secrets of Peer Code Review\
 (pdf)</a>
* <a href="https://static1.smartbear.co/support/media/resources/cc/11_best_pr\
actices_for_peer_code_review_redirected.pdf">11 Best Practices for Peer Code\
 Review (pdf)</a>
* <a href="http://www.evoketechnologies.com/blog/code-review-checklist-perfor\
m-effective-code-reviews/">Code Review Checklist – To Perform Effective Code\
 Reviews</a>
* <a href="https://www.codeproject.com/Articles/524235/Codeplusreviewplusguid\
elines">Code review guidelines</a>
* <a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGui\
delines.md">C++ Core Guidelines</a>
* <a href="https://www.oreilly.com/library/view/c-coding-standards/0321113586\
/">C++ Coding Standards (Sutter & Alexandrescu)</a>

Beast thrives on code reviews and any sort of feedback from users and
stakeholders about its interfaces. Even if you just have questions,
asking them in the code review or in issues provides valuable information
that can be used to improve the library - do not hesitate, no question
is insignificant or unimportant!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/beast
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/beast
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-asio == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-endian == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-logic == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-static-string == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-index == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-beast

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-beast-1.87.0.tar.gz
sha256sum: 49a8283c1203a949a7b8e4943e478aef54504f940c5eb8afc633f6928aabf3aa
:
name: libboost-bimap
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Bidirectional maps library for C++. With Boost.Bimap you can create\
 associative containers in which both types can be used as key
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/bimap
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/bimap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-lambda == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-multi-index == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-bimap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-bimap-1.83.0.tar.gz
sha256sum: c97d17c1f02a550f2b9a550afc42092a7b10323a084df7bb779e9ecea8ae8bed
:
name: libboost-bimap
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Bidirectional maps library for C++. With Boost.Bimap you can create\
 associative containers in which both types can be used as key
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/bimap
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/bimap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-lambda == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-multi-index == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-bimap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-bimap-1.85.0.tar.gz
sha256sum: 244ec517ebc34bf77e87df32ea7f4ca1e6e2339f1f489ce577cc932777368ebd
:
name: libboost-bimap
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Bidirectional maps library for C++. With Boost.Bimap you can create\
 associative containers in which both types can be used as key
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/bimap
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/bimap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-lambda == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-multi-index == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-bimap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-bimap-1.87.0.tar.gz
sha256sum: 39a7817518ce3611b23331fa6c839f7b48e076482b2fd159780254e2d412f971
:
name: libboost-bind
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: boost::bind is a generalization of the standard functions\
 std::bind1st and std::bind2nd. It supports arbitrary function objects,\
 functions, function pointers, and member function pointers, and is able to\
 bind any argument to a specific value or route input arguments into\
 arbitrary positions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Bind

Branch   | Travis | Appveyor
---------|--------|---------
Develop  | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=de\
velop)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.ap\
pveyor.com/api/projects/status/github/boostorg/bind?branch=develop&svg=true)]\
(https://ci.appveyor.com/project/pdimov/bind)
Master   | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=ma\
ster)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.app\
veyor.com/api/projects/status/github/boostorg/bind?branch=master&svg=true)](h\
ttps://ci.appveyor.com/project/pdimov/bind)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/bind
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/bind
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-bind

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-bind-1.83.0.tar.gz
sha256sum: 92ecaaeb4224a46f5392fafe97647a9058b2095e61512d096b407de0ea65cc6d
:
name: libboost-bind
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: boost::bind is a generalization of the standard functions\
 std::bind1st and std::bind2nd. It supports arbitrary function objects,\
 functions, function pointers, and member function pointers, and is able to\
 bind any argument to a specific value or route input arguments into\
 arbitrary positions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Bind

Branch   | Travis | Appveyor
---------|--------|---------
Develop  | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=de\
velop)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.ap\
pveyor.com/api/projects/status/github/boostorg/bind?branch=develop&svg=true)]\
(https://ci.appveyor.com/project/pdimov/bind)
Master   | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=ma\
ster)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.app\
veyor.com/api/projects/status/github/boostorg/bind?branch=master&svg=true)](h\
ttps://ci.appveyor.com/project/pdimov/bind)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/bind
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/bind
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-bind

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-bind-1.85.0.tar.gz
sha256sum: 5efbd4123042e54be4b5d8ca1738bc122465453e8f8157fea38c506e58b2fa8b
:
name: libboost-bind
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: boost::bind is a generalization of the standard functions\
 std::bind1st and std::bind2nd. It supports arbitrary function objects,\
 functions, function pointers, and member function pointers, and is able to\
 bind any argument to a specific value or route input arguments into\
 arbitrary positions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Bind

Branch   | Travis | Appveyor
---------|--------|---------
Develop  | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=de\
velop)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.ap\
pveyor.com/api/projects/status/github/boostorg/bind?branch=develop&svg=true)]\
(https://ci.appveyor.com/project/pdimov/bind)
Master   | [![Build Status](https://travis-ci.org/boostorg/bind.svg?branch=ma\
ster)](https://travis-ci.org/boostorg/bind) | [![Build Status](https://ci.app\
veyor.com/api/projects/status/github/boostorg/bind?branch=master&svg=true)](h\
ttps://ci.appveyor.com/project/pdimov/bind)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/bind
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/bind
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-bind

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-bind-1.87.0.tar.gz
sha256sum: 05d639601e969b2aa3648837aa1e54f3b5a8dbaac869b0ed1c0da1da0357f4c6
:
name: libboost-callable-traits
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A spiritual successor to Boost.FunctionTypes, Boost.CallableTraits\
 is a header-only C++11 library for the compile-time inspection and\
 manipulation of all 'callable' types. Additional support for C++17 features
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<!--
Copyright Barrett Adair 2016-2021
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
-->

# Boost.CallableTraits <a target="_blank" href="https://github.com/boostorg/c\
allable_traits/actions/workflows/ci.yml">![CI][badge.CI]</a>

CallableTraits is a standalone C++11 header-only library for the inspection,\
 synthesis, and decomposition of callable types. Language features added in\
 later C++ standards are also supported.

The latest documentation is available [here](http://www.boost.org/doc/libs/ma\
ster/libs/callable_traits/doc/html/index.html).

CallableTraits is released as part of the [Boost C++ Libraries](http://www.bo\
ost.org/). Since it only depends on the standard library headers, you can\
 also download it as a standalone library [here](https://github.com/boostorg/\
callable_traits/releases/latest).

Licensed under the [Boost Software License, Version 1.0](LICENSE.md).

<!-- Links -->
[badge.CI]: https://github.com/boostorg/callable_traits/actions/workflows/ci.\
yml/badge.svg

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/callable_traits
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/callable_traits
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-callable-traits

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-callable-traits-1.83.0.tar.gz
sha256sum: 5da7231fa2a340e3364586646b6b1ae54cc92b5db53bac4a336d01cfc177f944
:
name: libboost-callable-traits
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A spiritual successor to Boost.FunctionTypes, Boost.CallableTraits\
 is a header-only C++11 library for the compile-time inspection and\
 manipulation of all 'callable' types. Additional support for C++17 features
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<!--
Copyright Barrett Adair 2016-2021
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
-->

# Boost.CallableTraits <a target="_blank" href="https://github.com/boostorg/c\
allable_traits/actions/workflows/ci.yml">![CI][badge.CI]</a>

CallableTraits is a standalone C++11 header-only library for the inspection,\
 synthesis, and decomposition of callable types. Language features added in\
 later C++ standards are also supported.

The latest documentation is available [here](http://www.boost.org/doc/libs/ma\
ster/libs/callable_traits/doc/html/index.html).

CallableTraits is released as part of the [Boost C++ Libraries](http://www.bo\
ost.org/). Since it only depends on the standard library headers, you can\
 also download it as a standalone library [here](https://github.com/boostorg/\
callable_traits/releases/latest).

Licensed under the [Boost Software License, Version 1.0](LICENSE.md).

<!-- Links -->
[badge.CI]: https://github.com/boostorg/callable_traits/actions/workflows/ci.\
yml/badge.svg

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/callable_traits
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/callable_traits
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-callable-traits

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-callable-traits-1.85.0.tar.gz
sha256sum: 9f39c2314be10aab70a9a560e071b400296b4e81b29608c5d239d129598ed51f
:
name: libboost-callable-traits
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A spiritual successor to Boost.FunctionTypes, Boost.CallableTraits\
 is a header-only C++11 library for the compile-time inspection and\
 manipulation of all 'callable' types. Additional support for C++17 features
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<!--
Copyright Barrett Adair 2016-2021
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
-->

# Boost.CallableTraits <a target="_blank" href="https://github.com/boostorg/c\
allable_traits/actions/workflows/ci.yml">![CI][badge.CI]</a>

CallableTraits is a standalone C++11 header-only library for the inspection,\
 synthesis, and decomposition of callable types. Language features added in\
 later C++ standards are also supported.

The latest documentation is available [here](http://www.boost.org/doc/libs/ma\
ster/libs/callable_traits/doc/html/index.html).

CallableTraits is released as part of the [Boost C++ Libraries](http://www.bo\
ost.org/). Since it only depends on the standard library headers, you can\
 also download it as a standalone library [here](https://github.com/boostorg/\
callable_traits/releases/latest).

Licensed under the [Boost Software License, Version 1.0](LICENSE.md).

<!-- Links -->
[badge.CI]: https://github.com/boostorg/callable_traits/actions/workflows/ci.\
yml/badge.svg

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/callable_traits
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/callable_traits
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-callable-traits

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-callable-traits-1.87.0.tar.gz
sha256sum: ee9ec85f132ff754cd41138a1e3604a7db076c104d93c7b7fbd178dd2a3fd2ad
:
name: libboost-charconv
version: 1.85.0
language: c++
project: boost
summary: An implementation of <charconv> in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# CharConv
This library is a C++11 compatible implementation of `<charconv>`. The full\
 documentation can be found here: https://www.boost.org/doc/libs/master/libs/\
charconv/doc/html/charconv.html

# Build Status

|               | Master                                                     \
                                                                             \
                                 | Develop                                   \
                                                                             \
                                                |
|---------------|------------------------------------------------------------\
-----------------------------------------------------------------------------\
---------------------------------|-------------------------------------------\
-----------------------------------------------------------------------------\
------------------------------------------------|
| Github Actions | [![CI](https://github.com/boostorg/charconv/actions/workfl\
ows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/charconv/act\
ions/workflows/ci.yml)      | [![Build Status](https://github.com/boostorg/ch\
arconv/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/ch\
arconv/actions/workflows/ci.yml)     |
| Drone         | [![Build Status](https://drone.cpp.al/api/badges/boostorg/c\
harconv/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/char\
conv)                      | [![Build Status](https://drone.cpp.al/api/badges\
/boostorg/charconv/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/b\
oostorg/charconv)                   |
| Codecov       | [![codecov](https://codecov.io/gh/boostorg/charconv/branch/\
master/graph/badge.svg)](https://codecov.io/gh/boostorg/charconv/branch/maste\
r)                         | [![codecov](https://codecov.io/gh/boostorg/charc\
onv/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/charconv/\
branch/develop)                     |
| Fuzzing | [![Fuzz](https://github.com/boostorg/charconv/actions/workflows/f\
uzz.yml/badge.svg?branch=master)](https://github.com/boostorg/charconv/action\
s/workflows/fuzz.yml) | [![Fuzz](https://github.com/boostorg/charconv/actions\
/workflows/fuzz.yml/badge.svg)](https://github.com/boostorg/charconv/actions/\
workflows/fuzz.yml)|

# How to build the library

## B2

````
git clone https://github.com/boostorg/boost
cd boost
git submodule update --init
cd ..
./bootstrap
./b2 cxxstd=11
````

This sets up a complete boost development and allows the tests to be run. To\
 install the development environment run:

````
sudo ./b2 install cxxstd=11
````

## vcpkg

````
git clone https://github.com/boostorg/charconv
cd charconv
vcpkg install charconv --overlay-ports=ports/charconv 
````

This will install charconv and all the required boost packages if they do not\
 already exist.

## Conan

````
git clone https://github.com/boostorg/charconv
conan create charconv/conan --build missing
````

This will build a boost_charconv package using your default profile and put it
in the local Conan cache along with all direct and transitive dependencies.
Since Charconv only depends on a few header-only Boost libraries, you can
save some time by requesting header-only Boost:

```
conan create charconv/conan -o 'boost*:header_only=True' --build missing
````

Following one of those approaches you can use the package as usual. For
example, using a `conanfile.txt`:

```
[requires]
boost_charconv/1.0.0
````

# Synopsis

Charconv is a collection of parsing functions that are locale-independent,\
 non-allocating, and non-throwing.

````
namespace boost { namespace charconv {

enum class chars_format : unsigned
{
    scientific = 1 << 0,
    fixed = 1 << 1,
    hex = 1 << 2,
    general = fixed | scientific
};

struct from_chars_result
{
    const char* ptr;
    std::errc ec;

    friend constexpr bool operator==(const from_chars_result& lhs, const\
 from_chars_result& rhs) noexcept
    friend constexpr bool operator!=(const from_chars_result& lhs, const\
 from_chars_result& rhs) noexcept
    constexpr explicit operator bool() const noexcept
}

template <typename Integral>
BOOST_CXX14_CONSTEXPR from_chars_result from_chars(const char* first, const\
 char* last, Integral& value, int base = 10) noexcept;

BOOST_CXX14_CONSTEXPR from_chars_result from_chars<bool>(const char* first,\
 const char* last, bool& value, int base) = delete;

template <typename Real>
from_chars_result from_chars(const char* first, const char* last, Real&\
 value, chars_format fmt = chars_format::general) noexcept;

template <typename Real>
from_chars_result from_chars_erange(const char* first, const char* last,\
 Real& value, chars_format fmt = chars_format::general) noexcept;

struct to_chars_result
{
    char* ptr;
    std::errc ec;

    friend constexpr bool operator==(const to_chars_result& lhs, const\
 to_chars_result& rhs) noexcept;
    friend constexpr bool operator!=(const to_chars_result& lhs, const\
 to_chars_result& rhs) noexcept;
    constexpr explicit operator bool() const noexcept
};

template <typename Integral>
BOOST_CHARCONV_CONSTEXPR to_chars_result to_chars(char* first, char* last,\
 Integral value, int base = 10) noexcept;

template <typename Integral>
BOOST_CHARCONV_CONSTEXPR to_chars_result to_chars<bool>(char* first, char*\
 last, Integral value, int base) noexcept = delete;

template <typename Real>
to_chars_result to_chars(char* first, char* last, Real value, chars_format\
 fmt = chars_format::general, int precision) noexcept;

}} // Namespace boost::charconv
````

## Notes
- `BOOST_CXX14_CONSTEXPR` is defined as `constexpr` when compiling with C++14\
 or newer.

- `BOOST_CHARCONV_CONSTEXPR` is defined as `constexpr` when compiling with\
 C++14 or newer, and the compiler has `__builtin_is_constant_evaluated`

- For explanation of `from_chars_erange` see docs under heading: _Usage notes\
 for from_chars for floating point types_

# Examples

## `from_chars`

````
const char* buffer = "42";
int v = 0;
from_chars_result r = boost::charconv::from_chars(buffer, buffer +\
 std::strlen(buffer), v);
assert(r.ec == std::errc());
assert(r); // Equivalent to the above
assert(v == 42);

const char* buffer = "1.2345"
double v = 0;
auto r = boost::charconv::from_chars(buffer, buffer + std::strlen(buffer), v);
assert(r.ec == std::errc());
assert(v == 1.2345);

const char* buffer = "2a";
unsigned v = 0;
auto r = boost::charconv::from_chars(buffer, buffer + std::strlen(buffer), v,\
 16);
assert(r); // from_chars_result has operator bool()
assert(v == 42);

const char* buffer = "1.3a2bp-10";
double v = 0;
auto r = boost::charconv::from_chars(buffer, buffer + std::strlen(buffer), v,\
 boost::charconv::chars_format::hex);
assert(r);
assert(v == 8.0427e-18);
````
## `to_chars`

````
char buffer[64] {};
int v = 42;
to_chars_result r = boost::charconv::to_chars(buffer, buffer +\
 sizeof(buffer), v);
assert(r.ec == std::errc());
assert(!strcmp(buffer, "42")); // strcmp returns 0 on match

char buffer[64] {};
double v = 1e300;
to_chars_result r = boost::charconv::to_chars(buffer, buffer +\
 sizeof(buffer), v);
assert(r.ec == std::errc());
assert(!strcmp(buffer, "1e+300"));

char buffer[64] {};
int v = 42;
to_chars_result r = boost::charconv::to_chars(buffer, buffer +\
 sizeof(buffer), v, 16);
assert(r); // to_chars_result has operator bool()
assert(!strcmp(buffer, "2a")); // strcmp returns 0 on match

````

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/charconv
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/charconv
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-charconv

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-charconv-1.85.0.tar.gz
sha256sum: d2e86b5d88533bc3b55347a3b7b8d556c14e47d7a63aaa6cedc74f9a6ac31a3f
:
name: libboost-charconv
version: 1.87.0
language: c++
project: boost
summary: An implementation of <charconv> in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# CharConv
This library is a C++11 compatible implementation of `<charconv>`. The full\
 documentation can be found here: https://www.boost.org/doc/libs/master/libs/\
charconv/doc/html/charconv.html

# Build Status

|               | Master                                                     \
                                                                             \
                                 | Develop                                   \
                                                                             \
                                                |
|---------------|------------------------------------------------------------\
-----------------------------------------------------------------------------\
---------------------------------|-------------------------------------------\
-----------------------------------------------------------------------------\
------------------------------------------------|
| Github Actions | [![CI](https://github.com/boostorg/charconv/actions/workfl\
ows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/charconv/act\
ions/workflows/ci.yml)      | [![Build Status](https://github.com/boostorg/ch\
arconv/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/ch\
arconv/actions/workflows/ci.yml)     |
| Drone         | [![Build Status](https://drone.cpp.al/api/badges/boostorg/c\
harconv/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/char\
conv)                      | [![Build Status](https://drone.cpp.al/api/badges\
/boostorg/charconv/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/b\
oostorg/charconv)                   |
| Codecov       | [![codecov](https://codecov.io/gh/boostorg/charconv/branch/\
master/graph/badge.svg)](https://codecov.io/gh/boostorg/charconv/branch/maste\
r)                         | [![codecov](https://codecov.io/gh/boostorg/charc\
onv/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/charconv/\
branch/develop)                     |
| Fuzzing | [![Fuzz](https://github.com/boostorg/charconv/actions/workflows/f\
uzz.yml/badge.svg?branch=master)](https://github.com/boostorg/charconv/action\
s/workflows/fuzz.yml) | [![Fuzz](https://github.com/boostorg/charconv/actions\
/workflows/fuzz.yml/badge.svg)](https://github.com/boostorg/charconv/actions/\
workflows/fuzz.yml)|

# How to build the library

## B2

````
git clone https://github.com/boostorg/boost
cd boost
git submodule update --init
cd ..
./bootstrap
./b2 cxxstd=11
````

This sets up a complete boost development and allows the tests to be run. To\
 install the development environment run:

````
sudo ./b2 install cxxstd=11
````

# Synopsis

Charconv is a collection of parsing functions that are locale-independent,\
 non-allocating, and non-throwing.

````
namespace boost { namespace charconv {

enum class chars_format : unsigned
{
    scientific = 1 << 0,
    fixed = 1 << 1,
    hex = 1 << 2,
    general = fixed | scientific
};

struct from_chars_result
{
    const char* ptr;
    std::errc ec;

    friend constexpr bool operator==(const from_chars_result& lhs, const\
 from_chars_result& rhs) noexcept
    friend constexpr bool operator!=(const from_chars_result& lhs, const\
 from_chars_result& rhs) noexcept
    constexpr explicit operator bool() const noexcept
}

template <typename Integral>
BOOST_CXX14_CONSTEXPR from_chars_result from_chars(const char* first, const\
 char* last, Integral& value, int base = 10) noexcept;

BOOST_CXX14_CONSTEXPR from_chars_result from_chars<bool>(const char* first,\
 const char* last, bool& value, int base) = delete;

template <typename Real>
from_chars_result from_chars(const char* first, const char* last, Real&\
 value, chars_format fmt = chars_format::general) noexcept;

template <typename Real>
from_chars_result from_chars_erange(const char* first, const char* last,\
 Real& value, chars_format fmt = chars_format::general) noexcept;

struct to_chars_result
{
    char* ptr;
    std::errc ec;

    friend constexpr bool operator==(const to_chars_result& lhs, const\
 to_chars_result& rhs) noexcept;
    friend constexpr bool operator!=(const to_chars_result& lhs, const\
 to_chars_result& rhs) noexcept;
    constexpr explicit operator bool() const noexcept
};

template <typename Integral>
BOOST_CHARCONV_CONSTEXPR to_chars_result to_chars(char* first, char* last,\
 Integral value, int base = 10) noexcept;

template <typename Integral>
BOOST_CHARCONV_CONSTEXPR to_chars_result to_chars<bool>(char* first, char*\
 last, Integral value, int base) noexcept = delete;

template <typename Real>
to_chars_result to_chars(char* first, char* last, Real value, chars_format\
 fmt = chars_format::general, int precision) noexcept;

}} // Namespace boost::charconv
````

## Notes
- `BOOST_CXX14_CONSTEXPR` is defined as `constexpr` when compiling with C++14\
 or newer.

- `BOOST_CHARCONV_CONSTEXPR` is defined as `constexpr` when compiling with\
 C++14 or newer, and the compiler has `__builtin_is_constant_evaluated`

- For explanation of `from_chars_erange` see docs under heading: _Usage notes\
 for from_chars for floating point types_

# Examples

## `from_chars`

````
const char* buffer = "42";
int v = 0;
from_chars_result r = boost::charconv::from_chars(buffer, buffer +\
 std::strlen(buffer), v);
assert(r.ec == std::errc());
assert(r); // Equivalent to the above
assert(v == 42);

const char* buffer = "1.2345"
double v = 0;
auto r = boost::charconv::from_chars(buffer, buffer + std::strlen(buffer), v);
assert(r.ec == std::errc());
assert(v == 1.2345);

const char* buffer = "2a";
unsigned v = 0;
auto r = boost::charconv::from_chars(buffer, buffer + std::strlen(buffer), v,\
 16);
assert(r); // from_chars_result has operator bool()
assert(v == 42);

const char* buffer = "1.3a2bp-10";
double v = 0;
auto r = boost::charconv::from_chars(buffer, buffer + std::strlen(buffer), v,\
 boost::charconv::chars_format::hex);
assert(r);
assert(v == 8.0427e-18);
````
## `to_chars`

````
char buffer[64] {};
int v = 42;
to_chars_result r = boost::charconv::to_chars(buffer, buffer +\
 sizeof(buffer), v);
assert(r.ec == std::errc());
assert(!strcmp(buffer, "42")); // strcmp returns 0 on match

char buffer[64] {};
double v = 1e300;
to_chars_result r = boost::charconv::to_chars(buffer, buffer +\
 sizeof(buffer), v);
assert(r.ec == std::errc());
assert(!strcmp(buffer, "1e+300"));

char buffer[64] {};
int v = 42;
to_chars_result r = boost::charconv::to_chars(buffer, buffer +\
 sizeof(buffer), v, 16);
assert(r); // to_chars_result has operator bool()
assert(!strcmp(buffer, "2a")); // strcmp returns 0 on match

````

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/charconv
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/charconv
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-charconv

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-charconv-1.87.0.tar.gz
sha256sum: e060ff2f789e849d4edb16355672467e34215afc65365723ad40f4d61ee4f35c
:
name: libboost-chrono
version: 1.83.0
language: c++
project: boost
summary: Useful time utilities. C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Chrono
======

Useful time utilities. C++11.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/chrono
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/chrono
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-ratio == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-chrono

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-chrono-1.83.0.tar.gz
sha256sum: 165a05bcd67fec543e139883c61c79f4c03cdcdd4cb8c1b4b75ff001c1180b87
:
name: libboost-chrono
version: 1.85.0
language: c++
project: boost
summary: Useful time utilities. C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Chrono
======

Useful time utilities. C++11.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/chrono
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/chrono
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-ratio == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-chrono

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-chrono-1.85.0.tar.gz
sha256sum: 6669087e13b4c352e71e0f52de6ff8104ad5e7ec19572e5ab31caa0f452f7201
:
name: libboost-chrono
version: 1.87.0
language: c++
project: boost
summary: Useful time utilities. C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Chrono
======

Useful time utilities. C++11.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/chrono
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/chrono
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-ratio == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-chrono

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-chrono-1.87.0.tar.gz
sha256sum: 51fbe70459f59cd1460e3f91483149f9590da2978fcce92a529a5493404af930
:
name: libboost-circular-buffer
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A STL compliant container also known as ring or cyclic buffer
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/circular_buffer
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/circular_buffer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-circular-buffer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-circular-buffer-1.83.0.tar.gz
sha256sum: a9c9ae75c03877a4b547ece3474a0506e20857778e502a297ed2e162232716da
:
name: libboost-circular-buffer
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A STL compliant container also known as ring or cyclic buffer
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/circular_buffer
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/circular_buffer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-circular-buffer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-circular-buffer-1.85.0.tar.gz
sha256sum: b2ab709117c2f027d55aa904e43a401a193c7c5c168e395302083fc1fb2f3df7
:
name: libboost-circular-buffer
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A STL compliant container also known as ring or cyclic buffer
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/circular_buffer
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/circular_buffer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-circular-buffer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-circular-buffer-1.87.0.tar.gz
sha256sum: 125f737211b91af54effc23e75230084dab32d1841130b29fa065c7f78a5caad
:
name: libboost-cobalt
version: 1.85.0
language: c++
project: boost
summary: Coroutines. Basic Algorithms summary: boost-cobalt C++ library Types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/cobalt
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/cobalt
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-asio == 1.85.0
depends: libboost-circular-buffer == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-leaf == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-variant2 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-cobalt

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-cobalt-1.85.0.tar.gz
sha256sum: 1267a477b818f4ac749ce53324314b59533e7783a5a686c5f1a25dc91020c87e
:
name: libboost-cobalt
version: 1.87.0
language: c++
project: boost
summary: Coroutines. Basic Algorithms summary: boost-cobalt C++ library Types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/cobalt
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/cobalt
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-asio == 1.87.0
depends: libboost-callable-traits == 1.87.0
depends: libboost-circular-buffer == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-context == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-leaf == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-variant2 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-cobalt

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-cobalt-1.87.0.tar.gz
sha256sum: 1b974a929b0afebe3ea9c799f88ccb9bd4d9f90350ee8d2aa0487b1350da21f2
:
name: libboost-compat
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: C++11 implementations of standard components added in later C++\
 standards
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Compat

Boost.Compat is a repository of C++11 implementations
of standard components added in later C++ standards. Its
target audience is Boost library authors whose libraries
support a lower C++ standard, but wish to utilize a component
added in a subsequent one.

The criteria for inclusion in Boost.Compat are as follows:

* The implementation should be relatively simple and
  header-only.
* The component must implement the standard functionality
  exactly, without deviations or extensions. This allows
  (but does not require) the implementation to be a simple
  `using` declaration in case the standard component is
  available.
* The component must not depend on any Boost libraries
  except Boost.Config, Boost.Assert, or Boost.ThrowException.
* The component must not be a vocabulary type, visible in
  the library APIs. The user should never see a `boost::compat`
  type; the use of Compat types should be confined to library
  implementations.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/compat
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/compat
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-compat

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-compat-1.83.0.tar.gz
sha256sum: 5c156327256a2172d5b64bd47e5481a4fc4a7331feb268a871c97d897ca7ddc8
:
name: libboost-compat
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: C++11 implementations of standard components added in later C++\
 standards
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Compat

Boost.Compat is a repository of C++11 implementations
of standard components added in later C++ standards. Its
target audience is Boost library authors whose libraries
support a lower C++ standard, but wish to utilize a component
added in a subsequent one.

The criteria for inclusion in Boost.Compat are as follows:

* The implementation should be relatively simple and
  header-only.
* The component must implement the standard functionality
  exactly, without deviations or extensions. This allows
  (but does not require) the implementation to be a simple
  `using` declaration in case the standard component is
  available.
* The component must not depend on any Boost libraries
  except Boost.Config, Boost.Assert, or Boost.ThrowException.
* The component must not be a vocabulary type, visible in
  the library APIs. The user should never see a `boost::compat`
  type; the use of Compat types should be confined to library
  implementations.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/compat
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/compat
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-compat

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-compat-1.85.0.tar.gz
sha256sum: aeb46a79fbdf02c08ce1fdb6c3bf01d560c3280a9a6cae65ee6226886901beb7
:
name: libboost-compat
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: C++11 implementations of standard components added in later C++\
 standards
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Compat

Boost.Compat is a repository of C++11 implementations
of standard components added in later C++ standards. Its
target audience is Boost library authors whose libraries
support a lower C++ standard, but wish to utilize a component
added in a subsequent one.

The criteria for inclusion in Boost.Compat are as follows:

* The implementation should be relatively simple and
  header-only.
* The component must implement the standard functionality
  exactly, without deviations or extensions. This allows
  (but does not require) the implementation to be a simple
  `using` declaration in case the standard component is
  available.
* The component must not depend on any Boost libraries
  except Boost.Config, Boost.Assert, or Boost.ThrowException.
* The component must not be a vocabulary type, visible in
  the library APIs. The user should never see a `boost::compat`
  type; the use of Compat types should be confined to library
  implementations.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/compat
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/compat
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-compat

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-compat-1.87.0.tar.gz
sha256sum: 670b34c38fcdcea328ebdf50f60f178e02413aacf0113fc8e61279f6e60cc856
:
name: libboost-concept-check
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Tools for generic programming
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
ConceptCheck, part of collection of the [Boost C++ Libraries](http://github.c\
om/boostorg), 
allows one to add explicit statement and checking of concepts in the style of\
 the proposed C++ language extension.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/concept_check/tree/master) | [![Build\
 Status](https://github.com/boostorg/concept_check/actions/workflows/ci.yml/b\
adge.svg?branch=master)](https://github.com/boostorg/concept_check/actions?qu\
ery=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/yoj8ae7yopd903i9/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jeking3/concept_check-gp9xw/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/16317/badge.svg)](https://scan.co\
verity.com/projects/boostorg-concept_check) | [![codecov](https://codecov.io/\
gh/boostorg/concept_check/branch/master/graph/badge.svg)](https://codecov.io/\
gh/boostorg/concept_check/branch/master)| [![Deps](https://img.shields.io/bad\
ge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mas\
ter/concept_check.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/concept\
_check/doc/html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-m\
aster-brightgreen.svg)](http://www.boost.org/development/tests/master/develop\
er/concept_check.html)
[`develop`](https://github.com/boostorg/concept_check/tree/develop) |\
 [![Build Status](https://github.com/boostorg/concept_check/actions/workflows\
/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/concept_check/\
actions?query=branch:develop)| [![Build status](https://ci.appveyor.com/api/p\
rojects/status/yoj8ae7yopd903i9/branch/develop?svg=true)](https://ci.appveyor\
.com/project/jeking3/concept_check-gp9xw/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16317/badge.svg)](https://s\
can.coverity.com/projects/boostorg-concept_check) | [![codecov](https://codec\
ov.io/gh/boostorg/concept_check/branch/develop/graph/badge.svg)](https://code\
cov.io/gh/boostorg/concept_check/branch/develop) | [![Deps](https://img.shiel\
ds.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-\
report/develop/concept_check.html) | [![Documentation](https://img.shields.io\
/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/\
libs/concept_check/doc/html) | [![Enter the Matrix](https://img.shields.io/ba\
dge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/d\
evelop/developer/concept_check.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-concept_check)
* [Report bugs](https://github.com/boostorg/concept_check/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[concept_check]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/concept_check
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/concept_check
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-concept-check

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-concept-check-1.83.0.tar.gz
sha256sum: 687458b10a03effd665f4098e6e25333c52e1a5ad097cbc895f7038c39050a60
:
name: libboost-concept-check
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Tools for generic programming
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
ConceptCheck, part of collection of the [Boost C++ Libraries](http://github.c\
om/boostorg), 
allows one to add explicit statement and checking of concepts in the style of\
 the proposed C++ language extension.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/concept_check/tree/master) | [![Build\
 Status](https://github.com/boostorg/concept_check/actions/workflows/ci.yml/b\
adge.svg?branch=master)](https://github.com/boostorg/concept_check/actions?qu\
ery=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/yoj8ae7yopd903i9/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jeking3/concept_check-gp9xw/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/16317/badge.svg)](https://scan.co\
verity.com/projects/boostorg-concept_check) | [![codecov](https://codecov.io/\
gh/boostorg/concept_check/branch/master/graph/badge.svg)](https://codecov.io/\
gh/boostorg/concept_check/branch/master)| [![Deps](https://img.shields.io/bad\
ge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mas\
ter/concept_check.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/concept\
_check/doc/html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-m\
aster-brightgreen.svg)](http://www.boost.org/development/tests/master/develop\
er/concept_check.html)
[`develop`](https://github.com/boostorg/concept_check/tree/develop) |\
 [![Build Status](https://github.com/boostorg/concept_check/actions/workflows\
/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/concept_check/\
actions?query=branch:develop)| [![Build status](https://ci.appveyor.com/api/p\
rojects/status/yoj8ae7yopd903i9/branch/develop?svg=true)](https://ci.appveyor\
.com/project/jeking3/concept_check-gp9xw/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16317/badge.svg)](https://s\
can.coverity.com/projects/boostorg-concept_check) | [![codecov](https://codec\
ov.io/gh/boostorg/concept_check/branch/develop/graph/badge.svg)](https://code\
cov.io/gh/boostorg/concept_check/branch/develop) | [![Deps](https://img.shiel\
ds.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-\
report/develop/concept_check.html) | [![Documentation](https://img.shields.io\
/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/\
libs/concept_check/doc/html) | [![Enter the Matrix](https://img.shields.io/ba\
dge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/d\
evelop/developer/concept_check.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-concept_check)
* [Report bugs](https://github.com/boostorg/concept_check/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[concept_check]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/concept_check
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/concept_check
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-concept-check

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-concept-check-1.85.0.tar.gz
sha256sum: 417c1b50ce6624aaf028e3247152479b8885e86efecaed1f2918008dca0682cb
:
name: libboost-concept-check
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Tools for generic programming
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
ConceptCheck, part of collection of the [Boost C++ Libraries](http://github.c\
om/boostorg), 
allows one to add explicit statement and checking of concepts in the style of\
 the proposed C++ language extension.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/concept_check/tree/master) | [![Build\
 Status](https://github.com/boostorg/concept_check/actions/workflows/ci.yml/b\
adge.svg?branch=master)](https://github.com/boostorg/concept_check/actions?qu\
ery=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/yoj8ae7yopd903i9/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jeking3/concept_check-gp9xw/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/16317/badge.svg)](https://scan.co\
verity.com/projects/boostorg-concept_check) | [![codecov](https://codecov.io/\
gh/boostorg/concept_check/branch/master/graph/badge.svg)](https://codecov.io/\
gh/boostorg/concept_check/branch/master)| [![Deps](https://img.shields.io/bad\
ge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mas\
ter/concept_check.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/concept\
_check/doc/html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-m\
aster-brightgreen.svg)](http://www.boost.org/development/tests/master/develop\
er/concept_check.html)
[`develop`](https://github.com/boostorg/concept_check/tree/develop) |\
 [![Build Status](https://github.com/boostorg/concept_check/actions/workflows\
/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/concept_check/\
actions?query=branch:develop)| [![Build status](https://ci.appveyor.com/api/p\
rojects/status/yoj8ae7yopd903i9/branch/develop?svg=true)](https://ci.appveyor\
.com/project/jeking3/concept_check-gp9xw/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16317/badge.svg)](https://s\
can.coverity.com/projects/boostorg-concept_check) | [![codecov](https://codec\
ov.io/gh/boostorg/concept_check/branch/develop/graph/badge.svg)](https://code\
cov.io/gh/boostorg/concept_check/branch/develop) | [![Deps](https://img.shiel\
ds.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-\
report/develop/concept_check.html) | [![Documentation](https://img.shields.io\
/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/\
libs/concept_check/doc/html) | [![Enter the Matrix](https://img.shields.io/ba\
dge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/d\
evelop/developer/concept_check.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-concept_check)
* [Report bugs](https://github.com/boostorg/concept_check/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[concept_check]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/concept_check
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/concept_check
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-concept-check

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-concept-check-1.87.0.tar.gz
sha256sum: 7b623a91e786248e55c8f02febff9a904292367603ebdc890e0d4e95b6cb4515
:
name: libboost-config
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Helps Boost library developers adapt to compiler idiosyncrasies; not\
 intended for library users
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Config Library
============================

This library provides configuration support for the Boost C++ libraries.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/config/index.html).

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            |  [![Build Status](https://drone.cpp.al/api/badges/boosto\
rg/config/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/co\
nfig) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/config/stat\
us.svg)](https://drone.cpp.al/boostorg/config) |
| Travis           | [![Build Status](https://travis-ci.org/boostorg/config.s\
vg?branch=master)](https://travis-ci.org/boostorg/config)  |  [![Build\
 Status](https://travis-ci.org/boostorg/config.png)](https://travis-ci.org/bo\
ostorg/config) |
| Appveyor         | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/wo2n2mhoy8vegmuo/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jzmaddock/config/branch/master) | [![Build status](https://ci.appveyor.com/\
api/projects/status/wo2n2mhoy8vegmuo/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jzmaddock/config/branch/develop) |

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/config/issues)
(see [open issues](https://github.com/boostorg/config/issues) and
[closed issues](https://github.com/boostorg/config/issues?utf8=%E2%9C%93&q=is\
%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/config/pulls).

There is no mailing-list specific to Boost Config, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [config].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Config Library is located in `libs/config/`. 

### Running tests ###
First, make sure you are in `libs/config/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 config_info            <- single test

### For developers ###
Please check the [Guidelines for Boost Authors](http://www.boost.org/doc/libs\
/release/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html)\
. from the full documentation.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/config
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/config
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default; Performs platform sanity checks.
bootstrap-build:
\
project = libboost-config

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-config-1.83.0.tar.gz
sha256sum: 04c36c9706baf4755c98c6fe21f54a7f709617dc37378dbe8f5829ed6deb2c06
:
name: libboost-config
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Helps Boost library developers adapt to compiler idiosyncrasies; not\
 intended for library users
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Config Library
============================

This library provides configuration support for the Boost C++ libraries.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/config/index.html).

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            |  [![Build Status](https://drone.cpp.al/api/badges/boosto\
rg/config/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/co\
nfig) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/config/stat\
us.svg)](https://drone.cpp.al/boostorg/config) |
| Travis           | [![Build Status](https://travis-ci.org/boostorg/config.s\
vg?branch=master)](https://travis-ci.org/boostorg/config)  |  [![Build\
 Status](https://travis-ci.org/boostorg/config.png)](https://travis-ci.org/bo\
ostorg/config) |
| Appveyor         | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/wo2n2mhoy8vegmuo/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jzmaddock/config/branch/master) | [![Build status](https://ci.appveyor.com/\
api/projects/status/wo2n2mhoy8vegmuo/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jzmaddock/config/branch/develop) |

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/config/issues)
(see [open issues](https://github.com/boostorg/config/issues) and
[closed issues](https://github.com/boostorg/config/issues?utf8=%E2%9C%93&q=is\
%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/config/pulls).

There is no mailing-list specific to Boost Config, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [config].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Config Library is located in `libs/config/`. 

### Running tests ###
First, make sure you are in `libs/config/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 config_info            <- single test

### For developers ###
Please check the [Guidelines for Boost Authors](http://www.boost.org/doc/libs\
/release/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html)\
. from the full documentation.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/config
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/config
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default; Performs platform sanity checks.
bootstrap-build:
\
project = libboost-config

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-config-1.85.0.tar.gz
sha256sum: 5ff1e16b22bf0de4b14219744ff02dd500e66625dc96d7961ae63210276098f5
:
name: libboost-config
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Helps Boost library developers adapt to compiler idiosyncrasies; not\
 intended for library users
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Config Library
============================

This library provides configuration support for the Boost C++ libraries.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/config/index.html).

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            |  [![Build Status](https://drone.cpp.al/api/badges/boosto\
rg/config/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/co\
nfig) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/config/stat\
us.svg)](https://drone.cpp.al/boostorg/config) |
| Travis           | [![Build Status](https://travis-ci.org/boostorg/config.s\
vg?branch=master)](https://travis-ci.org/boostorg/config)  |  [![Build\
 Status](https://travis-ci.org/boostorg/config.png)](https://travis-ci.org/bo\
ostorg/config) |
| Appveyor         | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/wo2n2mhoy8vegmuo/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jzmaddock/config/branch/master) | [![Build status](https://ci.appveyor.com/\
api/projects/status/wo2n2mhoy8vegmuo/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jzmaddock/config/branch/develop) |

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/config/issues)
(see [open issues](https://github.com/boostorg/config/issues) and
[closed issues](https://github.com/boostorg/config/issues?utf8=%E2%9C%93&q=is\
%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/config/pulls).

There is no mailing-list specific to Boost Config, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [config].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Config Library is located in `libs/config/`. 

### Running tests ###
First, make sure you are in `libs/config/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 config_info            <- single test

### For developers ###
Please check the [Guidelines for Boost Authors](http://www.boost.org/doc/libs\
/release/libs/config/doc/html/boost_config/guidelines_for_boost_authors.html)\
. from the full documentation.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/config
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/config
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default; Performs platform sanity checks.
bootstrap-build:
\
project = libboost-config

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-config-1.87.0.tar.gz
sha256sum: f0ef1edd9a12311caf5678c3fb4715e3ac8070448fd4afc40ee7eb289bfe1982
:
name: libboost-container
version: 1.83.0
language: c++
language: c
project: boost
summary: Standard library containers and extensions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Container
==========

Boost.Container, part of collection of the [Boost C++ Libraries](http://githu\
b.com/boostorg), implements several well-known containers, including STL\
 containers. The aim of the library is to offer advanced features not present\
 in standard containers, to offer the latest standard draft features for\
 compilers that don't comply with the latest C++ standard and to offer useful\
 non-STL  containers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Mostly header-only, library compilation is required for few features.
* Supports compiler modes without exceptions support (e.g. `-fno-exceptions`).

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/container/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/container.svg?branch=master)](https:/\
/travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.com\
/api/projects/status/9ckrveolxsonxfnb/branch/master?svg=true)](https://ci.app\
veyor.com/project/jeking3/container-0k1xg/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://s\
can.coverity.com/projects/boostorg-container) | [![codecov](https://codecov.i\
o/gh/boostorg/container/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/container/branch/master)| [![Deps](https://img.shields.io/badge/dep\
s-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/co\
ntainer.html) | [![Documentation](https://img.shields.io/badge/docs-master-br\
ightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/container.html)\
 | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgree\
n.svg)](http://www.boost.org/development/tests/master/developer/container.htm\
l)
[`develop`](https://github.com/boostorg/container/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/container.svg?branch=develop)](https:\
//travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/9ckrveolxsonxfnb/branch/develop?svg=true)](https://ci.a\
ppveyor.com/project/jeking3/container-0k1xg/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-container) | [![codecov](https://code\
cov.io/gh/boostorg/container/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/container/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/container.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/con\
tainer.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-devel\
op-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer\
/container.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-container)
* [Report bugs](https://github.com/boostorg/container/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[container]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/container
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/container
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-intrusive == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-static-assert == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-container

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-container-1.83.0.tar.gz
sha256sum: 5bce3858ae6f0636a2f93990bd5975b11fd8408bf5948210a0ba546137c247f4
:
name: libboost-container
version: 1.85.0
language: c++
language: c
project: boost
summary: Standard library containers and extensions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Container
==========

Boost.Container, part of collection of the [Boost C++ Libraries](http://githu\
b.com/boostorg), implements several well-known containers, including STL\
 containers. The aim of the library is to offer advanced features not present\
 in standard containers, to offer the latest standard draft features for\
 compilers that don't comply with the latest C++ standard and to offer useful\
 non-STL  containers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Mostly header-only, library compilation is required for few features.
* Supports compiler modes without exceptions support (e.g. `-fno-exceptions`).

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/container/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/container.svg?branch=master)](https:/\
/travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.com\
/api/projects/status/9ckrveolxsonxfnb/branch/master?svg=true)](https://ci.app\
veyor.com/project/jeking3/container-0k1xg/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://s\
can.coverity.com/projects/boostorg-container) | [![codecov](https://codecov.i\
o/gh/boostorg/container/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/container/branch/master)| [![Deps](https://img.shields.io/badge/dep\
s-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/co\
ntainer.html) | [![Documentation](https://img.shields.io/badge/docs-master-br\
ightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/container.html)\
 | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgree\
n.svg)](http://www.boost.org/development/tests/master/developer/container.htm\
l)
[`develop`](https://github.com/boostorg/container/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/container.svg?branch=develop)](https:\
//travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/9ckrveolxsonxfnb/branch/develop?svg=true)](https://ci.a\
ppveyor.com/project/jeking3/container-0k1xg/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-container) | [![codecov](https://code\
cov.io/gh/boostorg/container/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/container/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/container.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/con\
tainer.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-devel\
op-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer\
/container.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-container)
* [Report bugs](https://github.com/boostorg/container/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[container]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/container
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/container
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-move == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-container

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-container-1.85.0.tar.gz
sha256sum: 803421ec56de39a28503225893c42e35ed2b3cf31e290d8f90ddde136597e1f0
:
name: libboost-container
version: 1.87.0
language: c++
language: c
project: boost
summary: Standard library containers and extensions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Container
==========

Boost.Container, part of collection of the [Boost C++ Libraries](http://githu\
b.com/boostorg), implements several well-known containers, including STL\
 containers. The aim of the library is to offer advanced features not present\
 in standard containers, to offer the latest standard draft features for\
 compilers that don't comply with the latest C++ standard and to offer useful\
 non-STL  containers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Mostly header-only, library compilation is required for few features.
* Supports compiler modes without exceptions support (e.g. `-fno-exceptions`).

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/container/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/container.svg?branch=master)](https:/\
/travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.com\
/api/projects/status/9ckrveolxsonxfnb/branch/master?svg=true)](https://ci.app\
veyor.com/project/jeking3/container-0k1xg/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://s\
can.coverity.com/projects/boostorg-container) | [![codecov](https://codecov.i\
o/gh/boostorg/container/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/container/branch/master)| [![Deps](https://img.shields.io/badge/dep\
s-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/co\
ntainer.html) | [![Documentation](https://img.shields.io/badge/docs-master-br\
ightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/container.html)\
 | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgree\
n.svg)](http://www.boost.org/development/tests/master/developer/container.htm\
l)
[`develop`](https://github.com/boostorg/container/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/container.svg?branch=develop)](https:\
//travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/9ckrveolxsonxfnb/branch/develop?svg=true)](https://ci.a\
ppveyor.com/project/jeking3/container-0k1xg/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-container) | [![codecov](https://code\
cov.io/gh/boostorg/container/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/container/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/container.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/con\
tainer.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-devel\
op-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer\
/container.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-container)
* [Report bugs](https://github.com/boostorg/container/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[container]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/container
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/container
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-move == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-container

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-container-1.87.0.tar.gz
sha256sum: a7b314a2b7e4a38a40df6ae11ee48fec390486912eeab350da216539f7a20997
:
name: libboost-container-hash
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: An STL-compatible hash function object that can be extended to hash\
 user defined types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.ContainerHash

The Boost.ContainerHash library, part of [Boost C++ Libraries](https://boost.\
org),
provides `boost::hash`, an enhanced implementation of the
[hash function](https://en.wikipedia.org/wiki/Hash_function) object specified
by C++11 as `std::hash`, and several support facilities (`hash_combine`,
`hash_range`, `hash_unordered_range`).

`boost::hash` supports most standard types and some user-defined types out of
the box, and is extensible; it's possible for a user-defined type `X` to make
iself hashable via `boost::hash<X>` by defining an appropriate overload of the
function `hash_value`.

See [the documentation of the library](https://www.boost.org/libs/container_h\
ash)
for more information.

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/container_hash
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/container_hash
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-describe == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-container-hash

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-container-hash-1.83.0.tar.gz
sha256sum: a8dc30c7591ec28e7ad504f2eb004c70d07a4270f448b52475852db815aa0302
:
name: libboost-container-hash
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: An STL-compatible hash function object that can be extended to hash\
 user defined types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.ContainerHash

The Boost.ContainerHash library, part of [Boost C++ Libraries](https://boost.\
org),
provides `boost::hash`, an enhanced implementation of the
[hash function](https://en.wikipedia.org/wiki/Hash_function) object specified
by C++11 as `std::hash`, and several support facilities (`hash_combine`,
`hash_range`, `hash_unordered_range`).

`boost::hash` supports most standard types and some user-defined types out of
the box, and is extensible; it's possible for a user-defined type `X` to make
iself hashable via `boost::hash<X>` by defining an appropriate overload of the
function `hash_value`.

See [the documentation of the library](https://www.boost.org/libs/container_h\
ash)
for more information.

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/container_hash
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/container_hash
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-describe == 1.85.0
depends: libboost-mp11 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-container-hash

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-container-hash-1.85.0.tar.gz
sha256sum: 6e315aaaf1abb8e47b5e81ab8b24bc580e773a8e3f68cf9f0ba8e5fe88d57893
:
name: libboost-container-hash
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: An STL-compatible hash function object that can be extended to hash\
 user defined types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.ContainerHash

The Boost.ContainerHash library, part of [Boost C++ Libraries](https://boost.\
org),
provides `boost::hash`, an enhanced implementation of the
[hash function](https://en.wikipedia.org/wiki/Hash_function) object specified
by C++11 as `std::hash`, and several support facilities (`hash_combine`,
`hash_range`, `hash_unordered_range`).

`boost::hash` supports most standard types and some user-defined types out of
the box, and is extensible; it's possible for a user-defined type `X` to make
iself hashable via `boost::hash<X>` by defining an appropriate overload of the
function `hash_value`.

See [the documentation of the library](https://www.boost.org/libs/container_h\
ash)
for more information.

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/container_hash
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/container_hash
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-describe == 1.87.0
depends: libboost-mp11 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-container-hash

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-container-hash-1.87.0.tar.gz
sha256sum: b7723bc1dcbc4bac6a1d889681caca774966ff95949a85c5643f1813bd5f04de
:
name: libboost-context
version: 1.83.0
language: c++
project: boost
summary: (C++11) Context switching library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
boost.context
=============

boost.context is a foundational library that provides a sort of cooperative\
 multitasking on a single thread.
By providing an abstraction of the current execution state in the current\
 thread, including the stack (with 
local variables) and stack pointer, all registers and CPU flags, and the\
 instruction pointer, a execution_context 
instance represents a specific point in the application's execution path.\
 This is useful for building 
higher-level abstractions, like coroutines, cooperative threads (userland\
 threads) or an equivalent to 
C# keyword yield in C++.

A fiber provides the means to suspend the current execution path and to\
 transfer execution control, 
thereby permitting another fiber to run on the current thread. This state\
 full transfer mechanism 
enables a fiber to suspend execution from within nested functions and, later,\
 to resume from where it 
was suspended. While the execution path represented by a fiber only runs on a\
 single thread, it can be 
migrated to another thread at any given time.

A context switch between threads requires system calls (involving the OS\
 kernel), which can cost more than 
thousand CPU cycles on x86 CPUs. By contrast, transferring control among\
 fibers requires only fewer than 
hundred CPU cycles because it does not involve system calls as it is done\
 within a single thread.

boost.context requires C++11! 

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/context
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/context
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-pool == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-smart-ptr == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-context

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-context-1.83.0.tar.gz
sha256sum: a0b3137abcefb90a0b1822badbd67b09598d30bd7c2375da9e509cd65c3e04d7
:
name: libboost-context
version: 1.85.0
language: c++
project: boost
summary: (C++11) Context switching library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
boost.context
=============

boost.context is a foundational library that provides a sort of cooperative\
 multitasking on a single thread.
By providing an abstraction of the current execution state in the current\
 thread, including the stack (with 
local variables) and stack pointer, all registers and CPU flags, and the\
 instruction pointer, a execution_context 
instance represents a specific point in the application's execution path.\
 This is useful for building 
higher-level abstractions, like coroutines, cooperative threads (userland\
 threads) or an equivalent to 
C# keyword yield in C++.

A fiber provides the means to suspend the current execution path and to\
 transfer execution control, 
thereby permitting another fiber to run on the current thread. This state\
 full transfer mechanism 
enables a fiber to suspend execution from within nested functions and, later,\
 to resume from where it 
was suspended. While the execution path represented by a fiber only runs on a\
 single thread, it can be 
migrated to another thread at any given time.

A context switch between threads requires system calls (involving the OS\
 kernel), which can cost more than 
thousand CPU cycles on x86 CPUs. By contrast, transferring control among\
 fibers requires only fewer than 
hundred CPU cycles because it does not involve system calls as it is done\
 within a single thread.

boost.context requires C++11! 

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/context
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/context
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-pool == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-smart-ptr == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-context

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-context-1.85.0.tar.gz
sha256sum: a53d0b88ed7c3d0e44a3f670dc9adb7beda319e74ee1890687acd3b865fc1926
:
name: libboost-context
version: 1.87.0
language: c++
project: boost
summary: (C++11) Context switching library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
boost.context
=============

boost.context is a foundational library that provides a sort of cooperative\
 multitasking on a single thread.
By providing an abstraction of the current execution state in the current\
 thread, including the stack (with 
local variables) and stack pointer, all registers and CPU flags, and the\
 instruction pointer, a execution_context 
instance represents a specific point in the application's execution path.\
 This is useful for building 
higher-level abstractions, like coroutines, cooperative threads (userland\
 threads) or an equivalent to 
C# keyword yield in C++.

A fiber provides the means to suspend the current execution path and to\
 transfer execution control, 
thereby permitting another fiber to run on the current thread. This state\
 full transfer mechanism 
enables a fiber to suspend execution from within nested functions and, later,\
 to resume from where it 
was suspended. While the execution path represented by a fiber only runs on a\
 single thread, it can be 
migrated to another thread at any given time.

A context switch between threads requires system calls (involving the OS\
 kernel), which can cost more than 
thousand CPU cycles on x86 CPUs. By contrast, transferring control among\
 fibers requires only fewer than 
hundred CPU cycles because it does not involve system calls as it is done\
 within a single thread.

boost.context requires C++11! 

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/context
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/context
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-pool == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-smart-ptr == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-context

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-context-1.87.0.tar.gz
sha256sum: 08118f93576b3f405f10f977766d9ebbc485a0a132c2151b5322b5599982a0c0
:
name: libboost-contract
version: 1.83.0
language: c++
project: boost
summary: Contract programming for C++. All contract programming features are\
 supported: Subcontracting, class invariants, postconditions (with old and\
 return values), preconditions, customizable actions on assertion failure\
 (e.g., terminate or throw), optional compilation and checking of assertions,\
 etc
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Contract
==============

Contract programming for C++.
All contract programming features are supported: Subcontracting, class\
 invariants (also static and volatile), postconditions (with old and return\
 values), preconditions, customizable actions on assertion failure (e.g.,\
 terminate or throw), optional compilation and checking of assertions,\
 disable assertions while already checking other assertions (to avoid\
 infinite recursion), etc.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++11 (C++03 possible but not recommended without lambda functions and\
 variadic macros, see documentation for more information).
* Shared Library / DLL with `BOOST_CONTRACT_DYN_LINK` (static library with\
 `BOOST_CONTRACT_STATIC_LINK`, header-only also possible but not recommended,\
 see `BOOST_CONTRACT_HEADER_ONLY` documentation for more information).

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/contract/tree/master) | [![Build\
 Status](https://travis-ci.com/boostorg/contract.svg?branch=master)](https://\
travis-ci.com/boostorg/contract) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/FILL-ME-IN/branch/master?svg=true)](https://ci.appveyor.co\
m/project/lcaminiti/contract/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/18555/badge.svg)](https://scan.co\
verity.com/projects/boostorg-contract) | [![codecov](https://codecov.io/gh/bo\
ostorg/contract/branch/master/graph/badge.svg)](https://codecov.io/gh/boostor\
g/contract/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-\
brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/contract.ht\
ml) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.\
svg)](https://www.boost.org/doc/libs/master/libs/contract/doc/html/index.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgre\
en.svg)](http://www.boost.org/development/tests/master/developer/contract.htm\
l)
[`develop`](https://github.com/boostorg/contract/tree/develop) | [![Build\
 Status](https://travis-ci.com/boostorg/contract.svg?branch=develop)](https:/\
/travis-ci.com/boostorg/contract) | [![Build status](https://ci.appveyor.com/\
api/projects/status/FILL-ME-IN/branch/develop?svg=true)](https://ci.appveyor.\
com/project/lcaminiti/contract/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/18555/badge.svg)](https://scan.co\
verity.com/projects/boostorg-contract) | [![codecov](https://codecov.io/gh/bo\
ostorg/contract/branch/develop/graph/badge.svg)](https://codecov.io/gh/boosto\
rg/contract/branch/develop) | [![Deps](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/contra\
ct.html) | [![Documentation](https://img.shields.io/badge/docs-develop-bright\
green.svg)](https://www.boost.org/doc/libs/develop/libs/contract/doc/html/ind\
ex.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-b\
rightgreen.svg)](http://www.boost.org/development/tests/develop/developer/con\
tract.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `build`     | Build                          |
| `doc`       | Documentation                  |
| `example`   | Examples                       |
| `include`   | Header code                    |
| `meta`      | Integration with Boost         |
| `src`       | Source code                    |
| `test`      | Unit tests                     |

### More Information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-contract).
* [Report bugs](https://github.com/boostorg/contract/issues): Be sure to\
 mention Boost version, platform and compiler you are using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[contract]` text at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/contract
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/contract
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-thread == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-contract

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-contract-1.83.0.tar.gz
sha256sum: f813d0f00b8d748daa70751fcf18bccd40fca70c0aa003ecdfc9f61e31599009
:
name: libboost-contract
version: 1.85.0
language: c++
project: boost
summary: Contract programming for C++. All contract programming features are\
 supported: Subcontracting, class invariants, postconditions (with old and\
 return values), preconditions, customizable actions on assertion failure\
 (e.g., terminate or throw), optional compilation and checking of assertions,\
 etc
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Contract
==============

Contract programming for C++.
All contract programming features are supported: Subcontracting, class\
 invariants (also static and volatile), postconditions (with old and return\
 values), preconditions, customizable actions on assertion failure (e.g.,\
 terminate or throw), optional compilation and checking of assertions,\
 disable assertions while already checking other assertions (to avoid\
 infinite recursion), etc.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++11 (C++03 possible but not recommended without lambda functions and\
 variadic macros, see documentation for more information).
* Shared Library / DLL with `BOOST_CONTRACT_DYN_LINK` (static library with\
 `BOOST_CONTRACT_STATIC_LINK`, header-only also possible but not recommended,\
 see `BOOST_CONTRACT_HEADER_ONLY` documentation for more information).

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/contract/tree/master) | [![Build\
 Status](https://travis-ci.com/boostorg/contract.svg?branch=master)](https://\
travis-ci.com/boostorg/contract) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/FILL-ME-IN/branch/master?svg=true)](https://ci.appveyor.co\
m/project/lcaminiti/contract/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/18555/badge.svg)](https://scan.co\
verity.com/projects/boostorg-contract) | [![codecov](https://codecov.io/gh/bo\
ostorg/contract/branch/master/graph/badge.svg)](https://codecov.io/gh/boostor\
g/contract/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-\
brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/contract.ht\
ml) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.\
svg)](https://www.boost.org/doc/libs/master/libs/contract/doc/html/index.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgre\
en.svg)](http://www.boost.org/development/tests/master/developer/contract.htm\
l)
[`develop`](https://github.com/boostorg/contract/tree/develop) | [![Build\
 Status](https://travis-ci.com/boostorg/contract.svg?branch=develop)](https:/\
/travis-ci.com/boostorg/contract) | [![Build status](https://ci.appveyor.com/\
api/projects/status/FILL-ME-IN/branch/develop?svg=true)](https://ci.appveyor.\
com/project/lcaminiti/contract/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/18555/badge.svg)](https://scan.co\
verity.com/projects/boostorg-contract) | [![codecov](https://codecov.io/gh/bo\
ostorg/contract/branch/develop/graph/badge.svg)](https://codecov.io/gh/boosto\
rg/contract/branch/develop) | [![Deps](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/contra\
ct.html) | [![Documentation](https://img.shields.io/badge/docs-develop-bright\
green.svg)](https://www.boost.org/doc/libs/develop/libs/contract/doc/html/ind\
ex.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-b\
rightgreen.svg)](http://www.boost.org/development/tests/develop/developer/con\
tract.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `build`     | Build                          |
| `doc`       | Documentation                  |
| `example`   | Examples                       |
| `include`   | Header code                    |
| `meta`      | Integration with Boost         |
| `src`       | Source code                    |
| `test`      | Unit tests                     |

### More Information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-contract).
* [Report bugs](https://github.com/boostorg/contract/issues): Be sure to\
 mention Boost version, platform and compiler you are using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[contract]` text at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/contract
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/contract
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-exception == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-thread == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-contract

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-contract-1.85.0.tar.gz
sha256sum: 05ea2c719a45f281166e2979eba8731f95f0a27af14ad288ba3988be111490e9
:
name: libboost-contract
version: 1.87.0
language: c++
project: boost
summary: Contract programming for C++. All contract programming features are\
 supported: Subcontracting, class invariants, postconditions (with old and\
 return values), preconditions, customizable actions on assertion failure\
 (e.g., terminate or throw), optional compilation and checking of assertions,\
 etc
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Contract
==============

Contract programming for C++.
All contract programming features are supported: Subcontracting, class\
 invariants (also static and volatile), postconditions (with old and return\
 values), preconditions, customizable actions on assertion failure (e.g.,\
 terminate or throw), optional compilation and checking of assertions,\
 disable assertions while already checking other assertions (to avoid\
 infinite recursion), etc.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++11 (C++03 possible but not recommended without lambda functions and\
 variadic macros, see documentation for more information).
* Shared Library / DLL with `BOOST_CONTRACT_DYN_LINK` (static library with\
 `BOOST_CONTRACT_STATIC_LINK`, header-only also possible but not recommended,\
 see `BOOST_CONTRACT_HEADER_ONLY` documentation for more information).

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/contract/tree/master) | [![Build\
 Status](https://travis-ci.com/boostorg/contract.svg?branch=master)](https://\
travis-ci.com/boostorg/contract) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/FILL-ME-IN/branch/master?svg=true)](https://ci.appveyor.co\
m/project/lcaminiti/contract/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/18555/badge.svg)](https://scan.co\
verity.com/projects/boostorg-contract) | [![codecov](https://codecov.io/gh/bo\
ostorg/contract/branch/master/graph/badge.svg)](https://codecov.io/gh/boostor\
g/contract/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-\
brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/contract.ht\
ml) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.\
svg)](https://www.boost.org/doc/libs/master/libs/contract/doc/html/index.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgre\
en.svg)](http://www.boost.org/development/tests/master/developer/contract.htm\
l)
[`develop`](https://github.com/boostorg/contract/tree/develop) | [![Build\
 Status](https://travis-ci.com/boostorg/contract.svg?branch=develop)](https:/\
/travis-ci.com/boostorg/contract) | [![Build status](https://ci.appveyor.com/\
api/projects/status/FILL-ME-IN/branch/develop?svg=true)](https://ci.appveyor.\
com/project/lcaminiti/contract/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/18555/badge.svg)](https://scan.co\
verity.com/projects/boostorg-contract) | [![codecov](https://codecov.io/gh/bo\
ostorg/contract/branch/develop/graph/badge.svg)](https://codecov.io/gh/boosto\
rg/contract/branch/develop) | [![Deps](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/contra\
ct.html) | [![Documentation](https://img.shields.io/badge/docs-develop-bright\
green.svg)](https://www.boost.org/doc/libs/develop/libs/contract/doc/html/ind\
ex.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-b\
rightgreen.svg)](http://www.boost.org/development/tests/develop/developer/con\
tract.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `build`     | Build                          |
| `doc`       | Documentation                  |
| `example`   | Examples                       |
| `include`   | Header code                    |
| `meta`      | Integration with Boost         |
| `src`       | Source code                    |
| `test`      | Unit tests                     |

### More Information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-contract).
* [Report bugs](https://github.com/boostorg/contract/issues): Be sure to\
 mention Boost version, platform and compiler you are using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[contract]` text at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/contract
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/contract
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-any == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-exception == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-thread == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-contract

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-contract-1.87.0.tar.gz
sha256sum: 4488eeaecadd987d7c07053c11ff15c4516a681a8929a9bb4fb85de4b955f428
:
name: libboost-conversion
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Polymorphic casts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Conversion](https://boost.org/libs/conversion)
Boost.Conversion is one of the [Boost C++ Libraries](https://github.com/boost\
org). This library improves program safety and clarity by performing\
 otherwise messy conversions. 

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/conversion/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/conversion\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/1cky1hrunfa46bdx/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/conversion/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/github/boostorg/conversion/badge.svg?bran\
ch=develop)](https://coveralls.io/github/boostorg/conversion?branch=develop)\
 | [details...](https://www.boost.org/development/tests/develop/developer/con\
version.html)
Master branch:  | [![CI](https://github.com/boostorg/conversion/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/conversion/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/1cky1hrunfa46bdx/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/conversion/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/github/boostorg/conversion/badge.svg?branch=master)](https://c\
overalls.io/github/boostorg/conversion?branch=master) | [details...](https://\
www.boost.org/development/tests/master/developer/conversion.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/conversion.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/conversion
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/conversion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-conversion-1.83.0.tar.gz
sha256sum: 6e8a9fc2c126bf5a63a533cc9d8da10ade27e3e082d5ede826992a19964ff7ef
:
name: libboost-conversion
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Polymorphic casts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Conversion](https://boost.org/libs/conversion)
Boost.Conversion is one of the [Boost C++ Libraries](https://github.com/boost\
org). This library improves program safety and clarity by performing\
 otherwise messy conversions. 

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/conversion/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/conversion\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/1cky1hrunfa46bdx/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/conversion/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/github/boostorg/conversion/badge.svg?bran\
ch=develop)](https://coveralls.io/github/boostorg/conversion?branch=develop)\
 | [details...](https://www.boost.org/development/tests/develop/developer/con\
version.html)
Master branch:  | [![CI](https://github.com/boostorg/conversion/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/conversion/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/1cky1hrunfa46bdx/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/conversion/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/github/boostorg/conversion/badge.svg?branch=master)](https://c\
overalls.io/github/boostorg/conversion?branch=master) | [details...](https://\
www.boost.org/development/tests/master/developer/conversion.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/conversion.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/conversion
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/conversion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-conversion-1.85.0.tar.gz
sha256sum: 414e33d402e186b46595c5ad48244dfbbf7b8dd12261140bd203d0697c072273
:
name: libboost-conversion
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Polymorphic casts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Conversion](https://boost.org/libs/conversion)
Boost.Conversion is one of the [Boost C++ Libraries](https://github.com/boost\
org). This library improves program safety and clarity by performing\
 otherwise messy conversions. 

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/conversion/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/conversion\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/1cky1hrunfa46bdx/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/conversion/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/github/boostorg/conversion/badge.svg?bran\
ch=develop)](https://coveralls.io/github/boostorg/conversion?branch=develop)\
 | [details...](https://www.boost.org/development/tests/develop/developer/con\
version.html)
Master branch:  | [![CI](https://github.com/boostorg/conversion/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/conversion/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/1cky1hrunfa46bdx/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/conversion/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/github/boostorg/conversion/badge.svg?branch=master)](https://c\
overalls.io/github/boostorg/conversion?branch=master) | [details...](https://\
www.boost.org/development/tests/master/developer/conversion.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/conversion.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/conversion
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/conversion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-conversion-1.87.0.tar.gz
sha256sum: c3427d528bd1b4bd10361ed06c74bda8c334bfd7ac45b02b641c021e89984e8f
:
name: libboost-convert
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: An extendible and configurable type-conversion framework
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
The library builds on the `boost::lexical_cast` experience and takes those\
 type conversion/transformation-related ideas further 

* to be useful and applicable in a wider range of deployment scenarios, 
* to provide a flexible, extendible and configurable type-conversion\
 framework. 

**HTML documentation is available [here](http://yet-another-user.github.io/co\
nvert).**


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/convert
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/convert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-math == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-range == 1.83.0
depends:
\
libboost-spirit == 1.83.0
{
  require
  {
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-convert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-convert-1.83.0.tar.gz
sha256sum: dd53ebec5b18e1bf931fb30ce2cac513d8a13dc5030a818d823bec77a3c1574a
:
name: libboost-convert
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: An extendible and configurable type-conversion framework
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
The library builds on the `boost::lexical_cast` experience and takes those\
 type conversion/transformation-related ideas further 

* to be useful and applicable in a wider range of deployment scenarios, 
* to provide a flexible, extendible and configurable type-conversion\
 framework. 

**HTML documentation is available [here](http://yet-another-user.github.io/co\
nvert).**


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/convert
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/convert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-math == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-range == 1.85.0
depends:
\
libboost-spirit == 1.85.0
{
  require
  {
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-convert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-convert-1.85.0.tar.gz
sha256sum: 742bcd2f6a46db79458c5ea668dd1a5ad6c577956ae433731cba2375eb1d0c36
:
name: libboost-convert
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: An extendible and configurable type-conversion framework
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
The library builds on the `boost::lexical_cast` experience and takes those\
 type conversion/transformation-related ideas further 

* to be useful and applicable in a wider range of deployment scenarios, 
* to provide a flexible, extendible and configurable type-conversion\
 framework. 

**HTML documentation is available [here](http://yet-another-user.github.io/co\
nvert).**


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/convert
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/convert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-math == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-range == 1.87.0
depends:
\
libboost-spirit == 1.87.0
{
  require
  {
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-convert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-convert-1.87.0.tar.gz
sha256sum: 90a2c8fca5fac23d57a4a7f2050cf57da00d41f1b52b590b4204f69a3eced2dd
:
name: libboost-core
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A collection of simple core utilities with minimal dependencies
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Core
==========

Boost.Core, part of collection of the [Boost C++ Libraries](https://github.co\
m/boostorg), is a collection of core utilities used by other Boost libraries.
The criteria for inclusion is that the utility component be:

* simple,
* used by other Boost libraries, and
* not dependent on any other Boost modules except Core itself, Config,\
 Assert, Static Assert, or Predef.

### Build Status

Branch   | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
---------|----------------|--------- | ----------- | ------------ |
Develop  | [![GitHub Actions](https://github.com/boostorg/core/actions/workfl\
ows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/filesystem/\
actions?query=branch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/pr\
ojects/status/github/boostorg/core?branch=develop&svg=true)](https://ci.appve\
yor.com/project/pdimov/core) | [![Tests](https://img.shields.io/badge/matrix-\
develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/deve\
loper/core.html) | [![Dependencies](https://img.shields.io/badge/deps-develop\
-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/core.html)
Master   | [![GitHub Actions](https://github.com/boostorg/core/actions/workfl\
ows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/filesystem/a\
ctions?query=branch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/proj\
ects/status/github/boostorg/core?branch=master&svg=true)](https://ci.appveyor\
.com/project/pdimov/core) | [![Tests](https://img.shields.io/badge/matrix-mas\
ter-brightgreen.svg)](http://www.boost.org/development/tests/master/developer\
/core.html) | [![Dependencies](https://img.shields.io/badge/deps-master-brigh\
tgreen.svg)](https://pdimov.github.io/boostdep-report/master/core.html)

### Directories

* **doc** - Documentation of the components
* **include** - Interface headers
* **test** - Unit tests

### More information

* [Documentation](https://boost.org/libs/core)
* [Report bugs](https://svn.boost.org/trac/boost/newticket?component=core;ver\
sion=Boost%20Release%20Branch). Be sure to mention Boost version, platform\
 and compiler you're using. A small compilable code sample to reproduce the\
 problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/core
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/core
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-core

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-core-1.83.0.tar.gz
sha256sum: 9227eba588b7c42ebb6c59aeef45ea1e3a6ded79f8bfa5adac0a17034220ba3f
:
name: libboost-core
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A collection of simple core utilities with minimal dependencies
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Core
==========

Boost.Core, part of collection of the [Boost C++ Libraries](https://github.co\
m/boostorg), is a collection of core utilities used by other Boost libraries.
The criteria for inclusion is that the utility component be:

* simple,
* used by other Boost libraries, and
* not dependent on any other Boost modules except Core itself, Config,\
 Assert, Static Assert, or Predef.

### Build Status

Branch   | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
---------|----------------|--------- | ----------- | ------------ |
Develop  | [![GitHub Actions](https://github.com/boostorg/core/actions/workfl\
ows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/filesystem/\
actions?query=branch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/pr\
ojects/status/github/boostorg/core?branch=develop&svg=true)](https://ci.appve\
yor.com/project/pdimov/core) | [![Tests](https://img.shields.io/badge/matrix-\
develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/deve\
loper/core.html) | [![Dependencies](https://img.shields.io/badge/deps-develop\
-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/core.html)
Master   | [![GitHub Actions](https://github.com/boostorg/core/actions/workfl\
ows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/filesystem/a\
ctions?query=branch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/proj\
ects/status/github/boostorg/core?branch=master&svg=true)](https://ci.appveyor\
.com/project/pdimov/core) | [![Tests](https://img.shields.io/badge/matrix-mas\
ter-brightgreen.svg)](http://www.boost.org/development/tests/master/developer\
/core.html) | [![Dependencies](https://img.shields.io/badge/deps-master-brigh\
tgreen.svg)](https://pdimov.github.io/boostdep-report/master/core.html)

### Directories

* **doc** - Documentation of the components
* **include** - Interface headers
* **test** - Unit tests

### More information

* [Documentation](https://boost.org/libs/core)
* [Report bugs](https://svn.boost.org/trac/boost/newticket?component=core;ver\
sion=Boost%20Release%20Branch). Be sure to mention Boost version, platform\
 and compiler you're using. A small compilable code sample to reproduce the\
 problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/core
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/core
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-core

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-core-1.85.0.tar.gz
sha256sum: cc2a24ce65ca9a072d48ba1e2022c7c26b4e41ce1bcddaf3c77e80737cc5eaa3
:
name: libboost-core
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A collection of simple core utilities with minimal dependencies
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Core
==========

Boost.Core, part of collection of the [Boost C++ Libraries](https://github.co\
m/boostorg), is a collection of core utilities used by other Boost libraries.
The criteria for inclusion is that the utility component be:

* simple,
* used by other Boost libraries, and
* not dependent on any other Boost modules except Core itself, Config,\
 Assert, Static Assert, or Predef.

### Build Status

Branch   | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
---------|----------------|--------- | ----------- | ------------ |
Develop  | [![GitHub Actions](https://github.com/boostorg/core/actions/workfl\
ows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/filesystem/\
actions?query=branch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/pr\
ojects/status/github/boostorg/core?branch=develop&svg=true)](https://ci.appve\
yor.com/project/pdimov/core) | [![Tests](https://img.shields.io/badge/matrix-\
develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/deve\
loper/core.html) | [![Dependencies](https://img.shields.io/badge/deps-develop\
-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/core.html)
Master   | [![GitHub Actions](https://github.com/boostorg/core/actions/workfl\
ows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/filesystem/a\
ctions?query=branch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/proj\
ects/status/github/boostorg/core?branch=master&svg=true)](https://ci.appveyor\
.com/project/pdimov/core) | [![Tests](https://img.shields.io/badge/matrix-mas\
ter-brightgreen.svg)](http://www.boost.org/development/tests/master/developer\
/core.html) | [![Dependencies](https://img.shields.io/badge/deps-master-brigh\
tgreen.svg)](https://pdimov.github.io/boostdep-report/master/core.html)

### Directories

* **doc** - Documentation of the components
* **include** - Interface headers
* **test** - Unit tests

### More information

* [Documentation](https://boost.org/libs/core)
* [Report bugs](https://svn.boost.org/trac/boost/newticket?component=core;ver\
sion=Boost%20Release%20Branch). Be sure to mention Boost version, platform\
 and compiler you're using. A small compilable code sample to reproduce the\
 problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/core
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/core
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-core

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-core-1.87.0.tar.gz
sha256sum: 8b4637eb003fcd3b27ba4e7de04e5689ec549bc774b3880c5426536c071fe695
:
name: libboost-coroutine2
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: (C++11) Coroutine library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
boost.coroutine2
===============

boost.coroutine2 provides templates for generalized subroutines which allow\
 multiple entry points for
suspending and resuming execution at certain locations. It preserves the\
 local state of execution and 
allows re-entering subroutines more than once (useful if state must be kept\
 across function calls).

Coroutines can be viewed as a language-level construct providing a special\
 kind of control flow.

In contrast to threads, which are pre-emptive, coroutines switches are\
 cooperative (programmer controls 
when a switch will happen). The kernel is not involved in the coroutine\
 switches.

boost.coroutine2 requires C++11!
Note that boost.coroutine2 is the successor of the deprectated\
 boost.coroutine.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/coroutine2
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/coroutine2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-context == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-coroutine2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-coroutine2-1.83.0.tar.gz
sha256sum: 627237910e8b83ecb1bab6263e9697331de03ae2245a770165c7cb30ab64d0c4
:
name: libboost-coroutine2
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: (C++11) Coroutine library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
boost.coroutine2
===============

boost.coroutine2 provides templates for generalized subroutines which allow\
 multiple entry points for
suspending and resuming execution at certain locations. It preserves the\
 local state of execution and 
allows re-entering subroutines more than once (useful if state must be kept\
 across function calls).

Coroutines can be viewed as a language-level construct providing a special\
 kind of control flow.

In contrast to threads, which are pre-emptive, coroutines switches are\
 cooperative (programmer controls 
when a switch will happen). The kernel is not involved in the coroutine\
 switches.

boost.coroutine2 requires C++11!
Note that boost.coroutine2 is the successor of the deprectated\
 boost.coroutine.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/coroutine2
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/coroutine2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-context == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-coroutine2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-coroutine2-1.85.0.tar.gz
sha256sum: 6e63a0dda9b9f9f59a9bedfc7aea129b71842fb2df1dabccc6d3b43a60d5cd15
:
name: libboost-coroutine2
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: (C++11) Coroutine library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
boost.coroutine2
===============

boost.coroutine2 provides templates for generalized subroutines which allow\
 multiple entry points for
suspending and resuming execution at certain locations. It preserves the\
 local state of execution and 
allows re-entering subroutines more than once (useful if state must be kept\
 across function calls).

Coroutines can be viewed as a language-level construct providing a special\
 kind of control flow.

In contrast to threads, which are pre-emptive, coroutines switches are\
 cooperative (programmer controls 
when a switch will happen). The kernel is not involved in the coroutine\
 switches.

boost.coroutine2 requires C++11!
Note that boost.coroutine2 is the successor of the deprectated\
 boost.coroutine.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/coroutine2
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/coroutine2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-context == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-coroutine2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-coroutine2-1.87.0.tar.gz
sha256sum: e9b375de95f56ba173e8d6e76eb9ed895d551e7d3e08c6e8975662ce016c9ee8
:
name: libboost-crc
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The Boost CRC Library provides two implementations of CRC (cyclic\
 redundancy code) computation objects and two implementations of CRC\
 computation functions. The implementations are template-based
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/crc
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/crc
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-crc

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-crc-1.83.0.tar.gz
sha256sum: 67115a0f5c601a6bdfd9e720e8ac273ab6c8451f14fd76dd07ccc6190b35a603
:
name: libboost-crc
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The Boost CRC Library provides two implementations of CRC (cyclic\
 redundancy code) computation objects and two implementations of CRC\
 computation functions. The implementations are template-based
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/crc
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/crc
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-crc

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-crc-1.85.0.tar.gz
sha256sum: 1b09353861afc66c39db0f3abf2854a49a6b808b769c957073f9343cd475c440
:
name: libboost-crc
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The Boost CRC Library provides two implementations of CRC (cyclic\
 redundancy code) computation objects and two implementations of CRC\
 computation functions. The implementations are template-based
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/crc
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/crc
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-crc

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-crc-1.87.0.tar.gz
sha256sum: 83592fd8ffbb912caddd4787bb7468e68bd08da505a68f5fd905ea6340681e6a
:
name: libboost-date-time
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A set of date-time libraries based on generic programming concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
DateTime, part of the collection of [Boost C++ Libraries](http://github.com/b\
oostorg), makes programming with dates and times as simple and natural as\
 programming with strings and integers. 

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/date_time/tree/master) | [![Build\
 Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/date_time/actions?query=bran\
ch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/upf\
5c528fy09fudk/branch/master?svg=true)](https://ci.appveyor.com/project/jeking\
3/date-time-1evbf/branch/master) | [![Coverity Scan Build Status](https://sca\
n.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/\
boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/br\
anch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/date_time/branch\
/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)\
](https://pdimov.github.io/boostdep-report/master/date_time.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/master/doc/html/date_time.html) | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://\
www.boost.org/development/tests/master/developer/date_time.html)
[`develop`](https://github.com/boostorg/date_time/tree/develop) | [![Build\
 Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/date_time/actions?query=bra\
nch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/u\
pf5c528fy09fudk/branch/develop?svg=true)](https://ci.appveyor.com/project/jek\
ing3/date-time-1evbf/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.co\
verity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/b\
oostorg/date_time/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/date_time/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/dat\
e_time.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/date_time.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/date_time.\
html)

### Directories

Note that the built library is only for build backward compatibility and\
 contains no symbols.  date_time is now header only.

| Name      | Purpose                                 |
| --------- | --------------------------------------- |
| `build`   | build script for optional lib build     |
| `data`    | timezone database                       |
| `doc`     | documentation                           |
| `example` | use case examples                       |
| `include` | headers                                 |
| `src`     | source code for optional link library   |
| `test`    | unit tests                              |
| `xmldoc`  | documentation source                    |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-date_time): Be sure to read the documentation first to see if it answers\
 your question.
* [Report bugs](https://github.com/boostorg/date_time/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/date_time/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[date_time]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/date_time
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/date_time
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tokenizer == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-date-time

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-date-time-1.83.0.tar.gz
sha256sum: 2b370171ad1b1736dbb96fabd7e43346a3e2b218af128176e2d324dd7ab73822
:
name: libboost-date-time
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A set of date-time libraries based on generic programming concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
DateTime, part of the collection of [Boost C++ Libraries](http://github.com/b\
oostorg), makes programming with dates and times as simple and natural as\
 programming with strings and integers. 

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/date_time/tree/master) | [![Build\
 Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/date_time/actions?query=bran\
ch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/upf\
5c528fy09fudk/branch/master?svg=true)](https://ci.appveyor.com/project/jeking\
3/date-time-1evbf/branch/master) | [![Coverity Scan Build Status](https://sca\
n.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/\
boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/br\
anch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/date_time/branch\
/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)\
](https://pdimov.github.io/boostdep-report/master/date_time.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/master/doc/html/date_time.html) | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://\
www.boost.org/development/tests/master/developer/date_time.html)
[`develop`](https://github.com/boostorg/date_time/tree/develop) | [![Build\
 Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/date_time/actions?query=bra\
nch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/u\
pf5c528fy09fudk/branch/develop?svg=true)](https://ci.appveyor.com/project/jek\
ing3/date-time-1evbf/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.co\
verity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/b\
oostorg/date_time/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/date_time/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/dat\
e_time.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/date_time.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/date_time.\
html)

### Directories

Note that the built library is only for build backward compatibility and\
 contains no symbols.  date_time is now header only.

| Name      | Purpose                                 |
| --------- | --------------------------------------- |
| `build`   | build script for optional lib build     |
| `data`    | timezone database                       |
| `doc`     | documentation                           |
| `example` | use case examples                       |
| `include` | headers                                 |
| `src`     | source code for optional link library   |
| `test`    | unit tests                              |
| `xmldoc`  | documentation source                    |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-date_time): Be sure to read the documentation first to see if it answers\
 your question.
* [Report bugs](https://github.com/boostorg/date_time/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/date_time/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[date_time]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/date_time
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/date_time
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-numeric-conversion == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tokenizer == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-date-time

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-date-time-1.85.0.tar.gz
sha256sum: 3f72611a464344569a7ef840cc2aa5c3b0fc8fc78ed9ee19ff28e99fa8748a10
:
name: libboost-date-time
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A set of date-time libraries based on generic programming concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
DateTime, part of the collection of [Boost C++ Libraries](http://github.com/b\
oostorg), makes programming with dates and times as simple and natural as\
 programming with strings and integers. 

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/date_time/tree/master) | [![Build\
 Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/date_time/actions?query=bran\
ch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/upf\
5c528fy09fudk/branch/master?svg=true)](https://ci.appveyor.com/project/jeking\
3/date-time-1evbf/branch/master) | [![Coverity Scan Build Status](https://sca\
n.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/\
boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/br\
anch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/date_time/branch\
/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)\
](https://pdimov.github.io/boostdep-report/master/date_time.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/master/doc/html/date_time.html) | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://\
www.boost.org/development/tests/master/developer/date_time.html)
[`develop`](https://github.com/boostorg/date_time/tree/develop) | [![Build\
 Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/date_time/actions?query=bra\
nch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/u\
pf5c528fy09fudk/branch/develop?svg=true)](https://ci.appveyor.com/project/jek\
ing3/date-time-1evbf/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.co\
verity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/b\
oostorg/date_time/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/date_time/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/dat\
e_time.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/date_time.html\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/date_time.\
html)

### Directories

Note that the built library is only for build backward compatibility and\
 contains no symbols.  date_time is now header only.

| Name      | Purpose                                 |
| --------- | --------------------------------------- |
| `build`   | build script for optional lib build     |
| `data`    | timezone database                       |
| `doc`     | documentation                           |
| `example` | use case examples                       |
| `include` | headers                                 |
| `src`     | source code for optional link library   |
| `test`    | unit tests                              |
| `xmldoc`  | documentation source                    |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-date_time): Be sure to read the documentation first to see if it answers\
 your question.
* [Report bugs](https://github.com/boostorg/date_time/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/date_time/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[date_time]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/date_time
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/date_time
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-algorithm == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-numeric-conversion == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tokenizer == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-date-time

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-date-time-1.87.0.tar.gz
sha256sum: 9ad422dc5d9d8f9f98fe6ad5c1c656fbdc20b90cbc2694a29caeb0a480a1e0db
:
name: libboost-describe
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A C++14 reflection library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Describe

A C++14 reflection library. Provides macros for describing enumerators and
struct/class members, and primitives for querying this information. See
[the documentation](https://www.boost.org/doc/libs/develop/libs/describe/)
for more information and usage examples.

## Supported Compilers

* GCC 5 or later with `-std=c++14` or above
* Clang 3.9 or later with `-std=c++14` or above
* Visual Studio 2015 or later

Tested on [Github Actions](https://github.com/boostorg/describe/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/describe).

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/describe
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/describe
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-mp11 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-describe

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-describe-1.83.0.tar.gz
sha256sum: d807e99650dd527af57aeec45266491fab2ea8a132e85437bcb831265c2d7ffe
:
name: libboost-describe
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A C++14 reflection library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Describe

A C++14 reflection library. Provides macros for describing enumerators and
struct/class members, and primitives for querying this information. See
[the documentation](https://www.boost.org/doc/libs/develop/libs/describe/)
for more information and usage examples.

## Supported Compilers

* GCC 5 or later with `-std=c++14` or above
* Clang 3.9 or later with `-std=c++14` or above
* Visual Studio 2015 or later

Tested on [Github Actions](https://github.com/boostorg/describe/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/describe).

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/describe
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/describe
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-mp11 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-describe

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-describe-1.85.0.tar.gz
sha256sum: f6af844a3d7ff98a1e1fde7424e5ccfa7c5aad5db33e57475473e352f2cd8a2d
:
name: libboost-describe
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A C++14 reflection library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Describe

A C++14 reflection library. Provides macros for describing enumerators and
struct/class members, and primitives for querying this information. See
[the documentation](https://www.boost.org/doc/libs/develop/libs/describe/)
for more information and usage examples.

## Supported Compilers

* GCC 5 or later with `-std=c++14` or above
* Clang 3.9 or later with `-std=c++14` or above
* Visual Studio 2015 or later

Tested on [Github Actions](https://github.com/boostorg/describe/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/describe).

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/describe
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/describe
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-mp11 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-describe

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-describe-1.87.0.tar.gz
sha256sum: d2e50edc71122fbdb2b1a031a318912ef1ae8337677e391d3618e40f8e088a87
:
name: libboost-detail
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: This library contains a set of header only utilities used internally\
 by Boost C++ Libraries to facilitate their implementation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/detail
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/detail
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-detail

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-detail-1.83.0.tar.gz
sha256sum: ffe5ad4fcc76643e73f2e76a3b4357fa186b3841898f2da75c2f1715a89ba7d9
:
name: libboost-detail
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: This library contains a set of header only utilities used internally\
 by Boost C++ Libraries to facilitate their implementation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/detail
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/detail
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-detail

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-detail-1.85.0.tar.gz
sha256sum: 6a743c02817dce53c2ceb48c10c914e7a25e165235180e9e04f674ca114e0f13
:
name: libboost-detail
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: This library contains a set of header only utilities used internally\
 by Boost C++ Libraries to facilitate their implementation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/detail
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/detail
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-detail

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-detail-1.87.0.tar.gz
sha256sum: 6c96c392ba416082dff6ae2a7a9931f217f47a7c4cef8194a913e1dffa0b828b
:
name: libboost-dll
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Library for comfortable work with DLL and DSO
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost Dynamic Library Load (Boost.DLL)](https://boost.org/libs/dll)

Boost.DLL is a part of the [Boost C++ Libraries](https://github.com/boostorg)\
. It is a library for comfortable work with DLL and DSO.

### Test results

Branches        | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop:        | [![CI](https://github.com/apolukhin/Boost.DLL/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/apolukhin/Boost.DLL\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/t6q6yhcabtk5b99l/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/boost-dll/branch/develop)  | [![Coverage\
 Status](https://coveralls.io/repos/apolukhin/Boost.DLL/badge.png?branch=deve\
lop)](https://coveralls.io/r/apolukhin/Boost.DLL?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/dll.h\
tml)
Master:         | [![CI](https://github.com/apolukhin/Boost.DLL/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/apolukhin/Boost.DLL/\
actions/workflows/ci.yml)  [![Build status](https://ci.appveyor.com/api/proje\
cts/status/t6q6yhcabtk5b99l/branch/master?svg=true)](https://ci.appveyor.com/\
project/apolukhin/boost-dll/branch/master)  | [![Coverage Status](https://cov\
eralls.io/repos/apolukhin/Boost.DLL/badge.png?branch=master)](https://coveral\
ls.io/r/apolukhin/Boost.DLL?branch=master) | [details...](https://www.boost.o\
rg/development/tests/master/developer/dll.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_dll.html)

### About
This library was derived from the [Boost.Application](https://github.com/retf\
/Boost.Application) library.

### License
Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/dll
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/dll
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-filesystem == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends:
\
libboost-spirit == 1.83.0
{
  require
  {
    config.libboost_spirit.x3 = true
  }
}
\
depends: libboost-static-assert == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-index == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-dll

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-dll-1.83.0.tar.gz
sha256sum: c6ac880afc123860270b6600d6eaba97f745ecffdb07a8b57d018cd44335bab5
:
name: libboost-dll
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Library for comfortable work with DLL and DSO
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost Dynamic Library Load (Boost.DLL)](https://boost.org/libs/dll)

Boost.DLL is a part of the [Boost C++ Libraries](https://github.com/boostorg)\
. It is a library for comfortable work with DLL and DSO.

### Test results

Branches        | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop:        | [![CI](https://github.com/apolukhin/Boost.DLL/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/apolukhin/Boost.DLL\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/t6q6yhcabtk5b99l/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/boost-dll/branch/develop)  | [![Coverage\
 Status](https://coveralls.io/repos/apolukhin/Boost.DLL/badge.png?branch=deve\
lop)](https://coveralls.io/r/apolukhin/Boost.DLL?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/dll.h\
tml)
Master:         | [![CI](https://github.com/apolukhin/Boost.DLL/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/apolukhin/Boost.DLL/\
actions/workflows/ci.yml)  [![Build status](https://ci.appveyor.com/api/proje\
cts/status/t6q6yhcabtk5b99l/branch/master?svg=true)](https://ci.appveyor.com/\
project/apolukhin/boost-dll/branch/master)  | [![Coverage Status](https://cov\
eralls.io/repos/apolukhin/Boost.DLL/badge.png?branch=master)](https://coveral\
ls.io/r/apolukhin/Boost.DLL?branch=master) | [details...](https://www.boost.o\
rg/development/tests/master/developer/dll.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_dll.html)

### About
This library was derived from the [Boost.Application](https://github.com/retf\
/Boost.Application) library.

### License
Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/dll
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/dll
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-filesystem == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends:
\
libboost-spirit == 1.85.0
{
  require
  {
    config.libboost_spirit.x3 = true
  }
}
\
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-index == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-dll

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-dll-1.85.0.tar.gz
sha256sum: 4dcbe5cb966eea40d3fcaf33b183731cb7e8d59ab1c7c129d9f4c4c5a23c9c6f
:
name: libboost-dll
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Library for comfortable work with DLL and DSO
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost Dynamic Library Load (Boost.DLL)](https://boost.org/libs/dll)

Boost.DLL is a part of the [Boost C++ Libraries](https://github.com/boostorg)\
. It is a library for comfortable work with DLL and DSO.

### Test results

Branches        | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop:        | [![CI](https://github.com/apolukhin/Boost.DLL/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/apolukhin/Boost.DLL\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/t6q6yhcabtk5b99l/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/boost-dll/branch/develop)  | [![Coverage\
 Status](https://coveralls.io/repos/apolukhin/Boost.DLL/badge.png?branch=deve\
lop)](https://coveralls.io/r/apolukhin/Boost.DLL?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/dll.h\
tml)
Master:         | [![CI](https://github.com/apolukhin/Boost.DLL/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/apolukhin/Boost.DLL/\
actions/workflows/ci.yml)  [![Build status](https://ci.appveyor.com/api/proje\
cts/status/t6q6yhcabtk5b99l/branch/master?svg=true)](https://ci.appveyor.com/\
project/apolukhin/boost-dll/branch/master)  | [![Coverage Status](https://cov\
eralls.io/repos/apolukhin/Boost.DLL/badge.png?branch=master)](https://coveral\
ls.io/r/apolukhin/Boost.DLL?branch=master) | [details...](https://www.boost.o\
rg/development/tests/master/developer/dll.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_dll.html)

### About
This library was derived from the [Boost.Application](https://github.com/retf\
/Boost.Application) library.

### License
Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/dll
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/dll
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-filesystem == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends:
\
libboost-spirit == 1.87.0
{
  require
  {
    config.libboost_spirit.x3 = true
  }
}
\
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-index == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-dll

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-dll-1.87.0.tar.gz
sha256sum: 280342547973ee4827b9f9517d642bf00d82615dff2797f45113d7db52b72a2d
:
name: libboost-dynamic-bitset
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The dynamic_bitset class represents a set of bits. It provides\
 accesses to the value of individual bits via an operator[] and provides all\
 of the bitwise operators that one can apply to builtin integers, such as\
 operatorsummary: boost-dynamic-bitset C++ library and operator<<. The number\
 of bits in the set is specified at runtime via a parameter to the\
 constructor of the dynamic_bitset
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
DynamicBitset, part of collection of the [Boost C++ Libraries](http://github.\
com/boostorg), is similar to std::bitset however the size is specified at\
 run-time instead of at compile-time.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/dynamic_bitset/tree/master) | [![Build\
 Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/\
badge.svg?branch=master)](https://github.com/boostorg/dynamic_bitset/actions?\
query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/\
status/keyn57y5d3sl1gw5/branch/master?svg=true)](https://ci.appveyor.com/proj\
ect/jeking3/dynamic_bitset-jv17p/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.co\
verity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io\
/gh/boostorg/dynamic_bitset/branch/master/graph/badge.svg)](https://codecov.i\
o/gh/boostorg/dynamic_bitset/branch/master)| [![Deps](https://img.shields.io/\
badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
master/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/\
docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/d\
ynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matri\
x-master-brightgreen.svg)](http://www.boost.org/development/tests/master/deve\
loper/dynamic_bitset.html)
[`develop`](https://github.com/boostorg/dynamic_bitset/tree/develop) |\
 [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflow\
s/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/dynamic_bitse\
t/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/ap\
i/projects/status/keyn57y5d3sl1gw5/branch/develop?svg=true)](https://ci.appve\
yor.com/project/jeking3/dynamic_bitset-jv17p/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https:/\
/codecov.io/gh/boostorg/dynamic_bitset/branch/develop/graph/badge.svg)](https\
://codecov.io/gh/boostorg/dynamic_bitset/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/dynamic_bitset.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](http://www.boost.org/doc/libs/develop/doc/html/dynamic_bitset.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/dynamic_bitse\
t.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `example`   | examples                       |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-dynamic_bitset)
* [Report bugs](https://github.com/boostorg/dynamic_bitset/issues): Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[dynamic_bitset]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/dynamic_bitset
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/dynamic_bitset
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-dynamic-bitset

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-dynamic-bitset-1.83.0.tar.gz
sha256sum: c7943d46fcb3ff1c13efec358364c9257de5f7c6132eb5615932880a46de202b
:
name: libboost-dynamic-bitset
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The dynamic_bitset class represents a set of bits. It provides\
 accesses to the value of individual bits via an operator[] and provides all\
 of the bitwise operators that one can apply to builtin integers, such as\
 operatorsummary: boost-dynamic-bitset C++ library and operator<<. The number\
 of bits in the set is specified at runtime via a parameter to the\
 constructor of the dynamic_bitset
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
DynamicBitset, part of collection of the [Boost C++ Libraries](http://github.\
com/boostorg), is similar to std::bitset however the size is specified at\
 run-time instead of at compile-time.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/dynamic_bitset/tree/master) | [![Build\
 Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/\
badge.svg?branch=master)](https://github.com/boostorg/dynamic_bitset/actions?\
query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/\
status/keyn57y5d3sl1gw5/branch/master?svg=true)](https://ci.appveyor.com/proj\
ect/jeking3/dynamic_bitset-jv17p/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.co\
verity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io\
/gh/boostorg/dynamic_bitset/branch/master/graph/badge.svg)](https://codecov.i\
o/gh/boostorg/dynamic_bitset/branch/master)| [![Deps](https://img.shields.io/\
badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
master/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/\
docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/d\
ynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matri\
x-master-brightgreen.svg)](http://www.boost.org/development/tests/master/deve\
loper/dynamic_bitset.html)
[`develop`](https://github.com/boostorg/dynamic_bitset/tree/develop) |\
 [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflow\
s/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/dynamic_bitse\
t/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/ap\
i/projects/status/keyn57y5d3sl1gw5/branch/develop?svg=true)](https://ci.appve\
yor.com/project/jeking3/dynamic_bitset-jv17p/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https:/\
/codecov.io/gh/boostorg/dynamic_bitset/branch/develop/graph/badge.svg)](https\
://codecov.io/gh/boostorg/dynamic_bitset/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/dynamic_bitset.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](http://www.boost.org/doc/libs/develop/doc/html/dynamic_bitset.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/dynamic_bitse\
t.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `example`   | examples                       |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-dynamic_bitset)
* [Report bugs](https://github.com/boostorg/dynamic_bitset/issues): Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[dynamic_bitset]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/dynamic_bitset
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/dynamic_bitset
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-dynamic-bitset

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-dynamic-bitset-1.85.0.tar.gz
sha256sum: 5f529dcbf29466bcf6cfd11a583ab0cb51d88be7851cb003b0b5a5d17b05e8cf
:
name: libboost-dynamic-bitset
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The dynamic_bitset class represents a set of bits. It provides\
 accesses to the value of individual bits via an operator[] and provides all\
 of the bitwise operators that one can apply to builtin integers, such as\
 operatorsummary: boost-dynamic-bitset C++ library and operator<<. The number\
 of bits in the set is specified at runtime via a parameter to the\
 constructor of the dynamic_bitset
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
DynamicBitset, part of collection of the [Boost C++ Libraries](http://github.\
com/boostorg), is similar to std::bitset however the size is specified at\
 run-time instead of at compile-time.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/dynamic_bitset/tree/master) | [![Build\
 Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/\
badge.svg?branch=master)](https://github.com/boostorg/dynamic_bitset/actions?\
query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/\
status/keyn57y5d3sl1gw5/branch/master?svg=true)](https://ci.appveyor.com/proj\
ect/jeking3/dynamic_bitset-jv17p/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.co\
verity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io\
/gh/boostorg/dynamic_bitset/branch/master/graph/badge.svg)](https://codecov.i\
o/gh/boostorg/dynamic_bitset/branch/master)| [![Deps](https://img.shields.io/\
badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
master/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/\
docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/d\
ynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matri\
x-master-brightgreen.svg)](http://www.boost.org/development/tests/master/deve\
loper/dynamic_bitset.html)
[`develop`](https://github.com/boostorg/dynamic_bitset/tree/develop) |\
 [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflow\
s/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/dynamic_bitse\
t/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/ap\
i/projects/status/keyn57y5d3sl1gw5/branch/develop?svg=true)](https://ci.appve\
yor.com/project/jeking3/dynamic_bitset-jv17p/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https:/\
/codecov.io/gh/boostorg/dynamic_bitset/branch/develop/graph/badge.svg)](https\
://codecov.io/gh/boostorg/dynamic_bitset/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/dynamic_bitset.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](http://www.boost.org/doc/libs/develop/doc/html/dynamic_bitset.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/dynamic_bitse\
t.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `example`   | examples                       |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-dynamic_bitset)
* [Report bugs](https://github.com/boostorg/dynamic_bitset/issues): Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[dynamic_bitset]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/dynamic_bitset
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/dynamic_bitset
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-dynamic-bitset

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-dynamic-bitset-1.87.0.tar.gz
sha256sum: e5d7cbcb764309eb72882c056d5b8afede9b42fc11c287cd8ade33760b644e8b
:
name: libboost-endian
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Types and conversion functions for correct byte ordering and more\
 regardless of processor endianness
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Endian

The Endian library provides facilities for dealing with
[endianness](https://en.wikipedia.org/wiki/Endianness).
It's part of Boost since release 1.58.0. See
[the documentation](http://boost.org/libs/endian) for more information.

## Supported compilers

* g++ 4.4 or later
* clang++ 3.3 or later
* Visual Studio 2008 or later

Tested on [Travis](https://travis-ci.org/boostorg/endian/) and
[Appveyor](https://ci.appveyor.com/project/pdimov/endian/).

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/endian
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/endian
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-endian

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-endian-1.83.0.tar.gz
sha256sum: 17178a0a59be60b867283ca8ab22ad78142e9d95f5394a30923b70cbf48000b2
:
name: libboost-endian
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Types and conversion functions for correct byte ordering and more\
 regardless of processor endianness
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Endian

The Endian library provides facilities for dealing with
[endianness](https://en.wikipedia.org/wiki/Endianness).
It's part of Boost since release 1.58.0. See
[the documentation](http://boost.org/libs/endian) for more information.

## Supported compilers

* g++ 4.6 or later
* clang++ 3.9 or later
* Visual Studio 2012 or later

C++11 is required since release 1.84.

Tested on [Github Actions](https://github.com/boostorg/endian/actions)
and [Appveyor](https://ci.appveyor.com/project/pdimov/endian/).

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/endian
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/endian
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-endian

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-endian-1.85.0.tar.gz
sha256sum: 44ff827191cb76b27db66af17840a38fb461d7c16f3e2b06d9fec395b5306188
:
name: libboost-endian
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Types and conversion functions for correct byte ordering and more\
 regardless of processor endianness
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Endian

The Endian library provides facilities for dealing with
[endianness](https://en.wikipedia.org/wiki/Endianness).
It's part of Boost since release 1.58.0. See
[the documentation](http://boost.org/libs/endian) for more information.

## Supported compilers

* g++ 4.6 or later
* clang++ 3.9 or later
* Visual Studio 2012 or later

C++11 is required since release 1.84.

Tested on [Github Actions](https://github.com/boostorg/endian/actions)
and [Appveyor](https://ci.appveyor.com/project/pdimov/endian/).

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/endian
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/endian
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-endian

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-endian-1.87.0.tar.gz
sha256sum: 7b6be72f86942bde7e4d4a95afacb7439e454c384b22c65d8568ae87edd5229f
:
name: libboost-exception
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The Boost Exception library supports transporting of arbitrary data\
 in exception objects, and transporting of exceptions between threads
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost Exception

> Dynamic Exception Augmentation Library

## Documentation

https://boostorg.github.io/exception

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Boost Exception is included in official [Boost](https://www.boost.org/)\
 releases.

Copyright (C) 2006-2021 Emil Dotchevski. Distributed under the [Boost\
 Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/exception
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/exception
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-exception

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-exception-1.83.0.tar.gz
sha256sum: 81d5889c5e39b6a923d576a5fa2d0556eebeb9e477cfae964a82b501b2dcd57d
:
name: libboost-exception
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The Boost Exception library supports transporting of arbitrary data\
 in exception objects, and transporting of exceptions between threads
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost Exception

> Dynamic Exception Augmentation Library

## Documentation

https://boostorg.github.io/exception

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Boost Exception is included in official [Boost](https://www.boost.org/)\
 releases.

Copyright (C) 2006-2021 Emil Dotchevski. Distributed under the [Boost\
 Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/exception
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/exception
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-exception

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-exception-1.85.0.tar.gz
sha256sum: 9aa442f21ba62ca2a37a056c8bd22ae40a7eeabb4d9581f621f7e5e8acb9da0c
:
name: libboost-exception
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The Boost Exception library supports transporting of arbitrary data\
 in exception objects, and transporting of exceptions between threads
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost Exception

> Dynamic Exception Augmentation Library

## Documentation

https://boostorg.github.io/exception

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Boost Exception is included in official [Boost](https://www.boost.org/)\
 releases.

Copyright (C) 2006-2021 Emil Dotchevski. Distributed under the [Boost\
 Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/exception
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/exception
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-exception

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-exception-1.87.0.tar.gz
sha256sum: edad81bc8584f72829833e720f36bfe9f21cc1f1440df25e33ab1b7805469e2f
:
name: libboost-ext-ut
version: 2.0.1+2
type: lib
language: c++
project: boost-ext
summary: C++ single header/single module, macro-free μ(micro)/Unit Testing\
 Framework
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost, testing
description:
\
<a href="https://conan.io/center/boost-ext-ut" target="_blank">![Version](htt\
ps://badge.fury.io/gh/boost-ext%2Fut.svg)</a>
<a href="https://github.com/boost-ext/ut/actions/workflows/linux.yml"\
 target="_blank">![Linux](https://github.com/boost-ext/ut/actions/workflows/l\
inux.yml/badge.svg)</a>
<a href="https://github.com/boost-ext/ut/actions/workflows/macos.yml"\
 target="_blank">![MacOs](https://github.com/boost-ext/ut/actions/workflows/m\
acos.yml/badge.svg)</a>
<a href="https://github.com/boost-ext/ut/actions/workflows/windows.yml"\
 target="_blank">![Windows](https://github.com/boost-ext/ut/actions/workflows\
/windows.yml/badge.svg)</a>
<a href="https://codecov.io/gh/boost-ext/ut" target="_blank">![Coveralls](htt\
ps://codecov.io/gh/boost-ext/ut/branch/master/graph/badge.svg)</a>
<a href="https://godbolt.org/z/f4jEcv9vo">![Try it online](https://img.shield\
s.io/badge/try%20it-online-blue.svg)</a>
<a href="https://aur.archlinux.org/packages/ut/">![AUR Badge](https://img.shi\
elds.io/aur/version/ut)</a>

> "If you liked it then you `"should have put a"_test` on it", Beyonce rule

# UT / μt

| [Motivation](#motivation) | [Quick Start](#quick-start) |\
 [Overview](#overview) | [Tutorial](#tutorial) | [Examples](#examples) |\
 [User Guide](#user-guide) | [FAQ](#faq) | [Benchmarks](#benchmarks) |

<details open><summary>C++ <b>single header/single module, macro-free</b>\
 μ(micro)/Unit Testing Framework</summary>
<p>

```cpp
#include <boost/ut.hpp> // import boost.ut;

constexpr auto sum(auto... values) { return (values + ...); }

int main() {
  using namespace boost::ut;

  "sum"_test = [] {
    expect(sum(0) == 0_i);
    expect(sum(1, 2) == 3_i);
    expect(sum(1, 2) > 0_i and 41_i == sum(40, 2));
  };
}
```

```sh
Running "sum"...
  sum.cpp:11:FAILED [(3 > 0 and 41 == 42)]
FAILED

=============================================================================\
==
tests:   1 | 1 failed
asserts: 3 | 2 passed | 1 failed
```

> https://godbolt.org/z/f4jEcv9vo

<a name="motivation"></a>
<details open><summary>Motivation</summary>
<p>

Testing is a very important part of the Software Development, however, C++\
 doesn't provide any good testing facilities out of the box,
which often leads into a poor testing experience for develops and/or lack of\
 tests/coverage in general.

> One should treat testing code as production code!

Additionally, well established testing practises such as [Test Driven\
 Development (TDD)](https://en.wikipedia.org/wiki/Test-driven_development)/[B\
ehaviour Driven Development (BDD)](https://en.wikipedia.org/wiki/Behavior-dri\
ven_development) are often not followed due to the same reasons.

The following snippet is a common example of testing with projects in C++.

```cpp
int main() {
  // should sum numbers
  {
    assert(3 == sum(1, 2));
  }
}
```

There are quite a few problems with the approach above

* No names for tests (Hard to follow intentions by further readers)
* No automatic registration of tests (No way to run specific tests)
* Hard to debug (Assertions don't provide any information why it failed)
* Hard to scale (No easy path forward for parameterized tests, multiple\
 suites, parallel execution, etc...)
* Hard to integrate (No easy way to have a custom output such as XML for CI\
 integration)
* Easy to make mistakes (With implicit casting, floating point comparison,\
 pointer comparison for strings, etc...)
* Hard to follow good practises such as `TDD/BDD` (Lack of support for\
 sections and declarative expressions)
* ...

`UT` is trying to address these issues by simplifying testing experience with\
 a few simple steps:

* Just get a single [header/module](https://github.com/boost-ext/ut/blob/mast\
er/include/boost/ut.hpp)
* Integrate it into your project
* Learn a few simple concepts ([expect, test, suite](#api))

And you good to go!

Okay, great, but why I would use `UT` over other/similar testing frameworks\
 already available in C++?

* [Boost.Test](https://github.com/boostorg/test)
* [GoogleTest](https://github.com/google/googletest)
* [Catch](https://github.com/catchorg/Catch2)
* [...](https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C++)

Great question! There are a few unique features which makes `UT` worth trying

* Firstly, it supports all the basic Unit Testing Framework features\
 (automatic registration of tests, assertions, suites, etc...)
* It's easy to integrate (it's just one [header/module](https://github.com/bo\
ost-ext/ut/blob/master/include/boost/ut.hpp))
* It's macro free which makes testing experience that much nicer (it uses\
 modern C++ features instead, macros are opt-in rather than being compulsory\
 - [Can I still use macros?](#macros))
* It's flexible (all parts of the framework such as: [runner, reporter,\
 printer](#examples) can be customized, basically most other Unit Testing\
 Frameworks can be implemented on top of UT primitives)
* It has smaller learning curve (just a few simple concepts ([expect, test,\
 suite](#api)))
* It leverages C++ features to support more complex testing\
 ([parameterized](#examples))
* It's faster to compile and execute than similar frameworks which makes it\
 suitable for bigger projects without additional hassle ([Benchmarks](#benchm\
arks))
* It supports [TDD/BDD](#examples) workflows
* It supports [Gherkin](#examples) specification
* It supports [Spec](#examples)
* ...

Sounds intriguing/interesting? Learn more at

* [Tutorial](#tutorial)
* [Examples](#examples)
* [User-Guide](#user-guide)

</p>
</details>

<a name="quick-start"></a>
<details open><summary>Quick Start</summary>
<p>

> https://bit.ly/ut-quick-start (slides)

</p>
</details>

<a name="overview"></a>
<details open><summary>Overview</summary>
<p>

* No dependencies ([C++20](#cpp-20), Tested Compilers: GCC-9+, Clang-9.0+,\
 Apple Clang-11.0.0+, MSVC-2019+*, Clang-cl-9.0+
* Single header/module ([boost/ut.hpp](https://github.com/boost-ext/ut/blob/m\
aster/include/boost/ut.hpp))
* Macro-free ([How does it work?](#how-it-works))
* Easy to use ([Minimal API](#api) - `test, suite, operators, literals,\
 [expect]`)
* Fast to compile/execute ([Benchmarks](#benchmarks))
* Features ([Assertions](https://github.com/boost-ext/ut/blob/master/example/\
expect.cpp), [Suites](https://github.com/boost-ext/ut/blob/master/example/sui\
te.cpp), [Tests](https://github.com/boost-ext/ut/blob/master/example/test.cpp\
), [Sections](https://github.com/boost-ext/ut/blob/master/example/section.cpp\
), [Parameterized](https://github.com/boost-ext/ut/blob/master/example/parame\
terized.cpp), [BDD](https://github.com/boost-ext/ut/blob/master/example/BDD.c\
pp), [Gherkin](https://github.com/boost-ext/ut/blob/master/example/gherkin.cp\
p), [Spec](https://github.com/boost-ext/ut/blob/master/example/spec.cpp),\
 [Matchers](https://github.com/boost-ext/ut/blob/master/example/matcher.cpp),\
 [Logging](https://github.com/boost-ext/ut/blob/master/example/log.cpp),\
 [Runners](https://github.com/boost-ext/ut/blob/master/example/cfg/runner.cpp\
), [Reporters](https://github.com/boost-ext/ut/blob/master/example/cfg/report\
er.cpp), [...](https://github.com/boost-ext/ut/blob/master/example))
* Integrations ([ApprovalTests.cpp](https://github.com/approvals/ApprovalTest\
s.cpp/releases/tag/v.7.0.0))

</p>
</details>

<a name="tutorial"></a>
<details open><summary>Tutorial</summary>
<p>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Step 0: Get it...</summary>
<p>

> Get the latest latest header/module from [here!](https://github.com/boost-e\
xt/ut/blob/master/include/boost/ut.hpp)

> Include/Import

```cpp
// #include <boost/ut.hpp> // single header
// import boost.ut;        // single module (C++20)

int main() { }
```

> Compile & Run

```
$CXX main.cpp && ./a.out
```

```
All tests passed (0 assert in 0 test)
```

> [Optional] Install it

```
cmake -Bbuild -H.
cd build && make         # run tests
cd build && make install # install
```

> [Optional] CMake integration

This project provides a CMake config and target.
Just load `ut` with `find_package` to import the `Boost::ut` target.
Linking against this target will add the necessary include directory for the\
 single header file.
This is demonstrated in the following example.

```cmake
find_package(ut REQUIRED)
add_library(my_test my_test.cpp)
target_link_libraries(my_test PRIVATE Boost::ut)
```

> [Optional] [Conan](https://conan.io) integration

The [boost-ext-ut](https://conan.io/center/boost-ext-ut) package is available\
 from [Conan Center](https://conan.io/center/).
Just include it in your project's Conanfile with `boost-ext-ut/2.0.1`.

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Step 1: Expect it...</summary>
<p>

> Let's write our first assertion, shall we?

```cpp
int main() {
  boost::ut::expect(true);
}
```

```
All tests passed (1 asserts in 0 test)
```

> https://godbolt.org/z/vfx-eB


> Okay, let's make it fail now?

```cpp
int main() {
  boost::ut::expect(1 == 2);
}
```

```
main.cpp:4:FAILED [false]
=============================================================================\
==
tests:   0 | 0 failed
asserts: 1 | 0 passed | 1 failed
```

> https://godbolt.org/z/7qTePx

> Notice that expression `1 == 2` hasn't been printed. Instead we got `false`?

> Let's print it then?

```cpp
int main() {
  using namespace boost::ut;
  expect(1_i == 2);
}
```

```
main.cpp:4:FAILED [1 == 2]
=============================================================================\
==
tests:   0 | 0 failed
asserts: 1 | 0 passed | 1 failed
```

> https://godbolt.org/z/7MXVzu

> Okay, now we have it! `1 == 2` has been printed as expected.
> Notice the User Defined Literal (UDL) `1_i` was used.
> `_i` is a compile-time constant integer value

* It allows to override comparison operators 👍
* It disallow comparison of different types 👍

See the [User-guide](#user-guide) for more details.

> Alternatively, a `terse` notation (no expect required) can be used.

```cpp
int main() {
  using namespace boost::ut::literals;
  using namespace boost::ut::operators::terse;

  1_i == 2; // terse notation
}
```

```
main.cpp:7:FAILED [1 == 2]
=============================================================================\
==
tests:   0 | 0 failed
asserts: 1 | 0 passed | 1 failed
```

> https://godbolt.org/z/s77GSm

> Other expression syntaxes are also available.

```cpp
expect(1_i == 2);       // UDL syntax
expect(1 == 2_i);       // UDL syntax
expect(that % 1 == 2);  // Matcher syntax
expect(eq(1, 2));       // eq/neq/gt/ge/lt/le
```

```
main.cpp:6:FAILED [1 == 2]
main.cpp:7:FAILED [1 == 2]
main.cpp:8:FAILED [1 == 2]
main.cpp:9:FAILED [1 == 2]
=============================================================================\
==
tests:   0 | 0 failed
asserts: 4 | 0 passed | 4 failed
```

> https://godbolt.org/z/QbgGtc

> Okay, but what about the case if my assertion is fatal.
> Meaning that the program will crash unless the processing will be\
 terminated.
> Nothing easier, let's just add `fatal` call to make the test fail\
 immediately.

```cpp
expect(fatal(1 == 2_i)); // fatal assertion
expect(1_i == 2);        // not executed
```

```
main.cpp:6:FAILED [1 == 2]
=============================================================================\
==
tests:   1 | 1 failed
asserts: 2 | 0 passed | 2 failed
```

> https://godbolt.org/z/WMe8Y1

> But my expression is more complex than just simple comparisons.
> Not a problem, logic operators are also supported in the `expect` 👍.

```cpp
expect(42l == 42_l and 1 == 2_i); // compound expression
```

```
main.cpp:5:FAILED [(42 == 42 and 1 == 2)]
=============================================================================\
==
tests:   0 | 0 failed
asserts: 1 | 0 passed | 1 failed
```

> https://godbolt.org/z/aEhX4t

> Can I add a custom message though?
> Sure, `expect` calls are streamable!

```cpp
int main() {
  expect(42l == 42_l and 1 == 2_i) << "additional info";
}
```

```
main.cpp:5:FAILED [(42 == 42 and 1 == 2)] additional info
=============================================================================\
==
tests:   0 | 0 failed
asserts: 1 | 0 passed | 1 failed
```

> That's nice, can I use custom messages and fatal assertions?
> Yes, stream the `fatal`!

```cpp
expect(fatal(1 == 2_i) << "fatal assertion");
expect(1_i == 2);
```

```
FAILED
in: main.cpp:6 - test condition:  [1 == 2]

 fatal assertion
=============================================================================\
==
tests:   0 | 2 failed
asserts: 0 | 0 passed | 2 failed
```

> I use `std::expected`, can I stream its `error()` upon failure?
> Yes, since `std::expected`'s `error()` can only be called when there is no
> value it requires lazy evaluation.

```cpp
lazy log"_test = [] {
  std::expected<bool, std::string> e = std::unexpected("lazy evaluated");
  expect(e.has_value()) << [&] { return e.error(); } << fatal;
  expect(e.value() == true);
};

```

```
Running test "lazy log"... FAILED
in: main.cpp:12 - test condition:  [false]

 lazy evaluated
=============================================================================\
==
tests:   1 | 2 failed
asserts: 0 | 0 passed | 2 failed

> https://godbolt.org/z/v2PDuU

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Step 2: Group it...</summary>
<p>

> Assertions are great, but how to combine them into more cohesive units?
> `Test cases` are the way to go! They allow to group expectations for the\
 same functionality into coherent units.

```cpp
"hello world"_test = [] { };
```

> Alternatively `test("hello world") = [] {}` can be used.

```
All tests passed (0 asserts in 1 tests)
```

> https://godbolt.org/z/Bh-EmY


> Notice `1 tests` but `0 asserts`.

> Let's make our first end-2-end test case, shall we?

```cpp
int main() {
  "hello world"_test = [] {
    int i = 43;
    expect(42_i == i);
  };
}
```

```
Running "hello world"...
  main.cpp:8:FAILED [42 == 43]
FAILED
=============================================================================\
==
tests:   1 | 1 failed
asserts: 1 | 0 passed | 1 failed
```

> https://godbolt.org/z/Y43mXz

> 👍 We are done here!

> I'd like to nest my tests, though and share setup/tear-down.
> With lambdas used to represents `tests/sections` we can easily achieve that.
> Let's just take a look at the following example.

```cpp
int main() {
  "[vector]"_test = [] {
    std::vector<int> v(5);

    expect(fatal(5_ul == std::size(v)));

    should("resize bigger") = [v] { // or "resize bigger"_test
      mut(v).resize(10);
      expect(10_ul == std::size(v));
    };

    expect(fatal(5_ul == std::size(v)));

    should("resize smaller") = [=]() mutable { // or "resize smaller"_test
      v.resize(0);
      expect(0_ul == std::size(v));
    };
  }
}
```

```
All tests passed (4 asserts in 1 tests)
```

> https://godbolt.org/z/XWAdYt

> Nice! That was easy, but I'm a believer into Behaviour Driven Development\
 (`BDD`).
> Is there a support for that?
> Yes! Same example as above just with the `BDD` syntax.

```cpp
int main() {
  "vector"_test = [] {
    given("I have a vector") = [] {
      std::vector<int> v(5);
      expect(fatal(5_ul == std::size(v)));

      when("I resize bigger") = [=] {
        mut(v).resize(10);

        then("The size should increase") = [=] {
          expect(10_ul == std::size(v));
        };
      };
    };
  };
}
```

```
All tests passed (2 asserts in 1 tests)
```

> https://godbolt.org/z/dnvxsE

> On top of that, `feature/scenario` aliases can be leveraged.

```cpp
int main() {
  feature("vector") = [] {
    scenario("size") = [] {
      given("I have a vector") = [] {
        std::vector<int> v(5);
        expect(fatal(5_ul == std::size(v)));

        when("I resize bigger") = [=] {
          mut(v).resize(10);

          then("The size should increase") = [=] {
            expect(10_ul == std::size(v));
          };
        };
      };
    };
  };
}
```

```
All tests passed (2 asserts in 1 tests)
```

> https://godbolt.org/z/T4cWss

> Can I use `Gherkin`?
> Yeah, let's rewrite the example using `Gherkin` specification

```cpp
int main() {
  bdd::gherkin::steps steps = [](auto& steps) {
    steps.feature("Vector") = [&] {
      steps.scenario("*") = [&] {
        steps.given("I have a vector") = [&] {
          std::vector<int> v(5);
          expect(fatal(5_ul == std::size(v)));

          steps.when("I resize bigger") = [&] {
            v.resize(10);
          };

          steps.then("The size should increase") = [&] {
            expect(10_ul == std::size(v));
          };
        };
      };
    };
  };

  "Vector"_test = steps |
    R"(
      Feature: Vector
        Scenario: Resize
          Given I have a vector
           When I resize bigger
           Then The size should increase
    )";
}
```

```
All tests passed (2 asserts in 1 tests)
```

> https://godbolt.org/z/jb1d8P

> Nice, is `Spec` notation supported as well?

```cpp
int main() {
  describe("vector") = [] {
    std::vector<int> v(5);
    expect(fatal(5_ul == std::size(v)));

    it("should resize bigger") = [v] {
      mut(v).resize(10);
      expect(10_ul == std::size(v));
    };
  };
}
```

```
All tests passed (2 asserts in 1 tests)
```

> https://godbolt.org/z/6jKKzT

> That's great, but how can call the same tests with different\
 arguments/types to be DRY (Don't Repeat Yourself)?
> Parameterized tests to the rescue!

```cpp
int main() {
  for (auto i : std::vector{1, 2, 3}) {
    test("parameterized " + std::to_string(i)) = [i] { // 3 tests
      expect(that % i > 0); // 3 asserts
    };
  }
}
```

```
All tests passed (3 asserts in 3 tests)
```

> https://godbolt.org/z/Utnd6X

> That's it 😮!
> Alternatively, a convenient test syntax is also provided 👍

```cpp
int main() {
  "args"_test = [](const auto& arg) {
    expect(arg > 0_i) << "all values greater than 0";
  } | std::vector{1, 2, 3};
}
```

```
All tests passed (3 asserts in 3 tests)
```

> https://godbolt.org/z/6FHtpq

> Check [Examples](#examples) for further reading.

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Step 3: Scale it...</summary>
<p>

> Okay, but my project is more complex than that. How can I scale?
> `Test suites` will make that possible. By using `suite` in translation units
> `tests` defined inside will be automatically registered 👍

```cpp
suite errors = [] {
  "exception"_test = [] {
    expect(throws([] { throw 0; })) << "throws any exception";
  };

  "failure"_test = [] {
    expect(aborts([] { assert(false); }));
  };
};

int main() { }
```

```
All tests passed (2 asserts in 2 tests)
```

> https://godbolt.org/z/_ccGwZ

---

> What's next?
> * [Examples](#examples)
> * [User-Guide](#user-guide)

</p>
</details>

</p>
</details>

<a name="examples"></a>
<details open><summary>Examples</summary>
<p>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Assertions</summary>
<p>

```cpp
// operators
expect(0_i == sum());
expect(2_i != sum(1, 2));
expect(sum(1) >= 0_i);
expect(sum(1) <= 1_i);
```

```cpp
// message
expect(3_i == sum(1, 2)) << "wrong sum";
```

```cpp
// expressions
expect(0_i == sum() and 42_i == sum(40, 2));
expect(0_i == sum() or 1_i == sum()) << "compound";
```

```cpp
// matchers
expect(that % 0 == sum());
expect(that % 42 == sum(40, 2) and that % (1 + 2) == sum(1, 2));
expect(that % 1 != 2 or 2_i > 3);
```

```cpp
// eq/neq/gt/ge/lt/le
expect(eq(42, sum(40, 2)));
expect(neq(1, 2));
expect(eq(sum(1), 1) and neq(sum(1, 2), 2));
expect(eq(1, 1) and that % 1 == 1 and 1_i == 1);
```

```cpp
// floating points
expect(42.1_d == 42.101) << "epsilon=0.1";
expect(42.10_d == 42.101) << "epsilon=0.01";
expect(42.10000001 == 42.1_d) << "epsilon=0.1";
```

```cpp
// constant
constexpr auto compile_time_v = 42;
auto run_time_v = 99;
expect(constant<42_i == compile_time_v> and run_time_v == 99_i);
```

```cpp
// failure
expect(1_i == 2) << "should fail";
expect(sum() == 1_i or 2_i == sum()) << "sum?";
```

```
assertions.cpp:53:FAILED [1 == 2] should fail
assertions.cpp:54:FAILED [(0 == 1 or 2 == 0)] sum?
=============================================================================\
==
tests:   0  | 0 failed
asserts: 20 | 18 passed | 2 failed
```

> https://godbolt.org/z/E1c7G5

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Tests</summary>
<p>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run/Sk\
ip/Tag</summary>
<p>

```cpp
"run UDL"_test = [] {
  expect(42_i == 42);
};

skip / "don't run UDL"_test = [] {
  expect(42_i == 43) << "should not fire!";
};
```

```
All tests passed (1 asserts in 1 tests)
1 tests skipped
```

```cpp
test("run function") = [] {
  expect(42_i == 42);
};

skip / test("don't run function") = [] {
  expect(42_i == 43) << "should not fire!";
};
```

```
All tests passed (1 asserts in 1 tests)
1 tests skipped
```

```cpp
tag("nightly") / tag("slow") /
"performance"_test= [] {
  expect(42_i == 42);
};

tag("slow") /
"run slowly"_test= [] {
  expect(42_i == 43) << "should not fire!";
};
```

```
cfg<override> = {.tag = {"nightly"}};
```

```
All tests passed (1 asserts in 1 tests)
1 tests skipped
```

> https://godbolt.org/z/X3_kG4

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sectio\
ns</summary>
<p>

```cpp
"[vector]"_test = [] {
  std::vector<int> v(5);

  expect(fatal(5_ul == std::size(v)));

  should("resize bigger") = [=] { // or "resize bigger"_test
    mut(v).resize(10);
    expect(10_ul == std::size(v));
  };

  expect(fatal(5_ul == std::size(v)));

  should("resize smaller") = [=]() mutable { // or "resize smaller"_test
    v.resize(0);
    expect(0_ul == std::size(v));
  };
};
```

```
All tests passed (4 asserts in 1 tests)
```

> https://godbolt.org/z/cE91bj

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Behavi\
or Driven Development (BDD)</summary>
<p>

```cpp
"Scenario"_test = [] {
  given("I have...") = [] {
    when("I run...") = [] {
      then("I expect...") = [] { expect(1_i == 1); };
      then("I expect...") = [] { expect(1 == 1_i); };
    };
  };
};
```

```
All tests passed (2 asserts in 1 tests)
```

> https://godbolt.org/z/mNBySr

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gherki\
n</summary>
<p>

```cpp
int main() {
  bdd::gherkin::steps steps = [](auto& steps) {
    steps.feature("*") = [&] {
      steps.scenario("*") = [&] {
        steps.given("I have a number {value}") = [&](int value) {
          auto number = value;
          steps.when("I add {value} to it") = [&](int value) {
            number += value;
          };
          steps.then("I expect number to be {value}") = [&](int value) {
            expect(that % number == value);
          };
        };
      };
    };
  };

  "Gherkin"_test = steps |
    R"(
      Feature: Number
        Scenario: Addition
          Given I have a number 40
           When I add 2 to it
           Then I expect number to be 42
    )";
}
```

```
All tests passed (1 asserts in 1 tests)
```

> https://godbolt.org/z/BP3hyt

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spec</\
summary>
<p>

```cpp
int main() {
  describe("equality") = [] {
    it("should be equal")     = [] { expect(0_i == 0); };
    it("should not be equal") = [] { expect(1_i != 0); };
  };
}
```

```
All tests passed (2 asserts in 1 tests)
```

> https://godbolt.org/z/BXYJ3a

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parame\
terized</summary>
<p>

```cpp
for (auto i : std::vector{1, 2, 3}) {
  test("parameterized " + std::to_string(i)) = [i] {
    expect(that % i > 0);
  };
}

"args"_test =
   [](auto arg) {
      expect(arg >= 1_i);
    }
  | std::vector{1, 2, 3};

"types"_test =
    []<class T> {
      expect(std::is_integral_v<T>) << "all types are integrals";
    }
  | std::tuple<bool, int>{};

"args and types"_test =
    []<class TArg>(TArg arg) {
      expect(fatal(std::is_integral_v<TArg>));
      expect(42_i == arg or "is true"_b == arg);
      expect(type<TArg> == type<int> or type<TArg> == type<bool>);
    }
  | std::tuple{true, 42};
```

```
All tests passed (14 asserts in 10 tests)
```

> https://godbolt.org/z/4xGGdo


> And whenever I need to know the specific type for which the test failed,
> I can use `reflection::type_name<T>()`, like this:

```cpp
"types with type name"_test =
    []<class T>() {
      expect(std::is_unsigned_v<T>) << reflection::type_name<T>() << "is\
 unsigned";
    }
  | std::tuple<unsigned int, float>{};
```

```
Running "types with type name"...PASSED
Running "types with type name"...
  <source>:10:FAILED [false] float is unsigned
FAILED
```

> https://godbolt.org/z/MEnGnbTY4

</p>
</details>


</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Suites</summary>
<p>

```cpp
namespace ut = boost::ut;

ut::suite errors = [] {
  using namespace ut;

  "throws"_test = [] {
    expect(throws([] { throw 0; }));
  };

  "doesn't throw"_test = [] {
    expect(nothrow([]{}));
  };
};

int main() { }
```

```
All tests passed (2 asserts in 2 tests)
```

> https://godbolt.org/z/CFbTP9

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Misc</summary>
<p>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loggin\
g using streams</summary>
<p>

```cpp
"logging"_test = [] {
  log << "pre";
  expect(42_i == 43) << "message on failure";
  log << "post";
};
```

```
Running "logging"...
pre
  logging.cpp:8:FAILED [42 == 43] message on failure
post
FAILED

=============================================================================\
==

tests:   1 | 1 failed
asserts: 1 | 0 passed | 1 failed
```

> https://godbolt.org/z/26fPSY

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loggin\
g using formatting</summary>
<p>
This requires using C++20 with a standard library with std::format support.

```cpp
"logging"_test = [] {
  log("\npre  {} == {}\n", 42, 43);
  expect(42_i == 43) << "message on failure";
  log("\npost {} == {} -> {}\n", 42, 43, 42 == 43);
};
```

```
Running "logging"...
pre  42 == 43
  logging.cpp:8:FAILED [42 == 43] message on failure
post 42 == 43 -> false
FAILED

=============================================================================\
==

tests:   1 | 1 failed
asserts: 1 | 0 passed | 1 failed
```

> https://godbolt.org/z/26fPSY

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matche\
rs</summary>
<p>

```cpp
"matchers"_test = [] {
  constexpr auto is_between = [](auto lhs, auto rhs) {
    return [=](auto value) {
      return that % value >= lhs and that % value <= rhs;
    };
  };

  expect(is_between(1, 100)(42));
  expect(not is_between(1, 100)(0));
};
```

```
All tests passed (2 asserts in 1 tests)
```

> https://godbolt.org/z/4qwrCi

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Except\
ions/Aborts</summary>
<p>

```cpp
"exceptions/aborts"_test = [] {
  expect(throws<std::runtime_error>([] { throw std::runtime_error{""}; }))
    << "throws runtime_error";
  expect(throws([] { throw 0; })) << "throws any exception";
  expect(nothrow([]{})) << "doesn't throw";
  expect(aborts([] { assert(false); }));
};
```

```
All tests passed (4 asserts in 1 tests)
```

> https://godbolt.org/z/A2EehK

</p>
</details>

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Config</summary>
<p>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runner\
</summary>
<p>

```cpp
namespace ut = boost::ut;

namespace cfg {
  class runner {
   public:
    template <class... Ts> auto on(ut::events::test<Ts...> test) { test(); }
    template <class... Ts> auto on(ut::events::skip<Ts...>) {}
    template <class TExpr>
    auto on(ut::events::assertion<TExpr>) -> bool { return true; }
    auto on(ut::events::fatal_assertion) {}
    template <class TMsg> auto on(ut::events::log<TMsg>) {}
  };
} // namespace cfg

template<> auto ut::cfg<ut::override> = cfg::runner{};
```

> https://godbolt.org/z/jdg687

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Report\
er</summary>
<p>

```cpp
namespace ut = boost::ut;

namespace cfg {
  class reporter {
   public:
    auto on(ut::events::test_begin) -> void {}
    auto on(ut::events::test_run) -> void {}
    auto on(ut::events::test_skip) -> void {}
    auto on(ut::events::test_end) -> void {}
    template <class TMsg> auto on(ut::events::log<TMsg>) -> void {}
    template <class TExpr>
    auto on(ut::events::assertion_pass<TExpr>) -> void {}
    template <class TExpr>
    auto on(ut::events::assertion_fail<TExpr>) -> void {}
    auto on(ut::events::fatal_assertion) -> void {}
    auto on(ut::events::exception) -> void {}
    auto on(ut::events::summary) -> void {}
  };
}  // namespace cfg

template <>
auto ut::cfg<ut::override> = ut::runner<cfg::reporter>{};
```

> https://godbolt.org/z/gsAPKg

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Printe\
r</summary>
<p>

```cpp
namespace ut = boost::ut;

namespace cfg {
struct printer : ut::printer {
  template <class T>
  auto& operator<<(T&& t) {
    std::cerr << std::forward<T>(t);
    return *this;
  }
};
}  // namespace cfg

template <>
auto ut::cfg<ut::override> = ut::runner<ut::reporter<cfg::printer>>{};

int main() {
  using namespace ut;
  "printer"_test = [] {};
}
```

> https://godbolt.org/z/XCscF9

</p>
</details>

</p>
</details>

</p>
</details>

<a name="api"></a>
<a name="configuration"></a>
<a name="user-guide"></a>
<details open><summary>User Guide</summary>
<p>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;API</summary>
<p>

```cpp
export module boost.ut; /// __cpp_modules

namespace boost::inline ext::ut::inline v2_0_1 {
  /**
   * Represents test suite object
   */
  struct suite final {
    /**
     * Creates and executes test suite
     * @example suite _ = [] {};
     * @param suite test suite function
     */
    constexpr explicit(false) suite(auto suite);
  };

  /**
   * Creates a test
   * @example "name"_test = [] {};
   * @return test object to be executed
   */
  constexpr auto operator""_test;

  /**
   * Creates a test
   * @example test("name") = [] {};
   * @return test object to be executed
   */
  constexpr auto test = [](const auto name);

  /**
   * Creates a test
   * @example should("name") = [] {};
   * @return test object to be executed
   */
  constexpr auto should = [](const auto name);

  /**
   * Behaviour Driven Development (BDD) helper functions
   * @param name step name
   * @return test object to be executed
   */
  constexpr auto given = [](const auto name);
  constexpr auto when  = [](const auto name);
  constexpr auto then  = [](const auto name);

  /**
   * Evaluates an expression
   * @example expect(42 == 42_i and 1 != 2_i);
   * @param expr expression to be evaluated
   * @param source location https://en.cppreference.com/w/cpp/utility/source_\
location
   * @return stream
   */
  constexpr OStream& expect(
    Expression expr,
    const std::source_location& location = std::source_location::current()
  );

  struct {
    /**
     * @example (that % 42 == 42);
     * @param expr expression to be evaluated
     */
    [[nodiscard]] constexpr auto operator%(Expression expr) const;
  } that{};

  inline namespace literals {
    /**
     * User defined literals to represent constant values
     * @example 42_i, 0_uc, 1.23_d
     */
    constexpr auto operator""_i;  /// int
    constexpr auto operator""_s;  /// short
    constexpr auto operator""_c;  /// char
    constexpr auto operator""_l;  /// long
    constexpr auto operator""_ll; /// long long
    constexpr auto operator""_u;  /// unsigned
    constexpr auto operator""_uc; /// unsigned char
    constexpr auto operator""_us; /// unsigned short
    constexpr auto operator""_ul; /// unsigned long
    constexpr auto operator""_f;  /// float
    constexpr auto operator""_d;  /// double
    constexpr auto operator""_ld; /// long double

    /**
     * Represents dynamic values
     * @example _i(42), _f(42.)
     */
    constexpr auto _b(bool);
    constexpr auto _c(char);
    constexpr auto _s(short);
    constexpr auto _i(int);
    constexpr auto _l(long);
    constexpr auto _ll(long long);
    constexpr auto _u(unsigned);
    constexpr auto _uc(unsigned char);
    constexpr auto _us(unsigned short);
    constexpr auto _ul(unsigned long);
    constexpr auto _f(float);
    constexpr auto _d(double);
    constexpr auto _ld(long double);

    /**
     * Logical representation of constant boolean (true) value
     * @example "is set"_b     : true
     *          not "is set"_b : false
     */
    constexpr auto operator ""_b;
  } // namespace literals

  inline namespace operators {
    /**
     * Comparison functions to be used in expressions
     * @example eq(42, 42), neq(1, 2)
     */
    constexpr auto eq(Operator lhs, Operator rhs);  /// ==
    constexpr auto neq(Operator lhs, Operator rhs); /// !=
    constexpr auto gt(Operator lhs, Operator rhs);  /// >
    constexpr auto ge(Operator lhs, Operator rhs);  /// >=
    constexpr auto lt(Operator lhs, Operator rhs);  /// <
    constexpr auto le(Operator lhs, Operator rhs);  /// <=

    /**
     * Overloaded comparison operators to be used in expressions
     * @example (42_i != 0)
     */
    constexpr auto operator==;
    constexpr auto operator!=;
    constexpr auto operator>;
    constexpr auto operator>=;
    constexpr auto operator<;
    constexpr auto operator<=;

    /**
     * Overloaded logic operators to be used in expressions
     * @example (42_i != 0 and 1 == 2_i)
     */
    constexpr auto operator and;
    constexpr auto operator or;
    constexpr auto operator not;

    /**
     * Executes parameterized tests
     * @example "parameterized"_test = [](auto arg) {} | std::tuple{1, 2, 3};
     */
    constexpr auto operator|;

    /**
     * Creates tags
     * @example tag("slow") / tag("nightly") / "perf"_test = []{};
     */
    constexpr auto operator/;

    /**
     * Creates a `fatal_assertion` from an expression
     * @example (42_i == 0) >> fatal
     */
    constexpr auto operator>>;
  } // namespace operators

  /**
   * Creates skippable test object
   * @example skip / "don't run"_test = [] { };
   */
  constexpr auto skip = tag("skip");

  struct {
    /**
     * @example log << "message!";
     * @param msg stringable message
     */
    auto& operator<<(Msg msg);
  } log{};

  /**
   * Makes object mutable
   * @example mut(object)
   * @param t object to be mutated
   */
  template<class T> auto mut(const T& t) -> T&;

  /**
   * Default execution flow policy
   */
  class runner {
   public:
    /**
     * @example cfg<override> = {
        .filter  = "test.section.*",
        .colors  = { .none = "" },
        .dry__run = true
       };
     * @param options.filter {default: "*"} runs all tests which names
                                            matches test.section.* filter
     * @param options.colors {default: {
                               .none = "\033[0m",
                               .pass = "\033[32m",
                               .fail  = "\033[31m"
              } if specified then overrides default color values
     * @param options.dry_run {default: false} if true then print test names\
 to be
                                               executed without running them
     */
    auto operator=(options);

    /**
     * @example suite _ = [] {};
     * @param suite() executes suite
     */
    template<class TSuite>
    auto on(ut::events::suite<TSuite>);

    /**
     * @example "name"_test = [] {};
     * @param test.type ["test", "given", "when", "then"]
     * @param test.name "name"
     * @param test.arg parameterized argument
     * @param test() executes test
     */
    template<class... Ts>
    auto on(ut::events::test<Ts...>);

    /**
     * @example skip / "don't run"_test = []{};
     * @param skip.type ["test", "given", "when", "then"]
     * @param skip.name "don't run"
     * @param skip.arg parameterized argument
     */
    template<class... Ts>
    auto on(ut::events::skip<Ts...>);

    /**
     * @example file.cpp:42: expect(42_i == 42);
     * @param assertion.expr 42_i == 42
     * @param assertion.location { "file.cpp", 42 }
     * @return true if expr passes, false otherwise
     */
    template <class TExpr>
    auto on(ut::events::assertion<TExpr>) -> bool;

    /**
     * @example expect((2_i == 1) >> fatal)
     * @note triggered by `fatal`
     *       should std::exit
     */
    auto on(ut::events::fatal_assertion);

    /**
     * @example log << "message"
     * @param log.msg "message"
     */
    template<class TMsg>
    auto on(ut::events::log<TMsg>);

    /**
     * Explicitly runs registered test suites
     * If not called directly test suites are executed with run's destructor
     * @example return run({.report_errors = true})
     * @param run_cfg.report_errors {default: false} if true it prints the\
 summary after runnig
     */
    auto run(run_cfg);

    /**
     * Runs registered test suites if they haven't been explicilty executed\
 already
     */
    ~run();
  };

  /**
   * Default reporter policy
   */
  class reporter {
   public:
    /**
     * @example file.cpp:42: "name"_test = [] {};
     * @param test_begin.type ["test", "given", "when", "then"]
     * @param test_begin.name "name"
     * @param test_begin.location { "file.cpp", 42 }
     */
    auto on(ut::events::test_begin) -> void;

    /**
     * @example "name"_test = [] {};
     * @param test_run.type ["test", "given", "when", "then"]
     * @param test_run.name "name"
     */
    auto on(ut::events::test_run) -> void;

    /**
     * @example "name"_test = [] {};
     * @param test_skip.type ["test", "given", "when", "then"]
     * @param test_skip.name "name"
     */
    auto on(ut::events::test_skip) -> void;

    /**
     * @example "name"_test = [] {};
     * @param test_end.type ["test", "given", "when", "then"]
     * @param test_end.name "name"
     */
    auto on(ut::events::test_end) -> void;

    /**
     * @example log << "message"
     * @param log.msg "message"
     */
    template<class TMsg>
    auto on(ut::events::log<TMsg>) -> void;

    /**
     * @example file.cpp:42: expect(42_i == 42);
     * @param assertion_pass.expr 42_i == 42
     * @param assertion_pass.location { "file.cpp", 42 }
     */
    template <class TExpr>
    auto on(ut::events::assertion_pass<TExpr>) -> void;

    /**
     * @example file.cpp:42: expect(42_i != 42);
     * @param assertion_fail.expr 42_i != 42
     * @param assertion_fail.location { "file.cpp", 42 }
     */
    template <class TExpr>
    auto on(ut::events::assertion_fail<TExpr>) -> void;

    /**
     * @example expect((2_i == 1) >> fatal)
     * @note triggered by `fatal`
     *       should std::exit
     */
    auto on(ut::events::fatal_assertion) -> void;

    /**
     * @example "exception"_test = [] { throw std::runtime_error{""}; };
     */
    auto on(ut::events::exception) -> void;

    /**
     * @note triggered on destruction of runner
     */
    auto on(ut::events::summary) -> void;
  };

  /**
   * Used to override default running policy
   * @example template <> auto cfg<override> = runner<reporter>{};
   */
  struct override {};

  /**
   * Default UT execution policy
   * Can be overwritten with override
   */
  template <class = override> auto cfg = runner<reporter>{};
}
```

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Configuration</summary>
<p>

| Option | Description | Example |
|-|-|-|
| `BOOST_UT_VERSION`        | Current version | `2'0'1` |

</p>
</details>

</p>
</details>

<a name="faq"></a>
<details open><summary>FAQ</summary>
<p>

<a name="how-it-works"></a>
<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;How does it work?</summary>
<p>

> `suite`

  ```cpp
  /**
   * Reperesents suite object
   * @example suite _ = []{};
   */
  struct suite final {
    /**
     * Assigns and executes test suite
     */
    [[nodiscard]] constexpr explicit(false) suite(Suite suite) {
      suite();
    }
  };
  ```

> `test`

  ```cpp
  /**
   * Creates named test object
   * @example "hello world"_test
   * @return test object
   */
  [[nodiscard]] constexpr Test operator ""_test(const char* name, std::size_t\
 size) {
    return test{{name, size}};
  }
  ```

  ```cpp
  /**
   * Represents test object
   */
  struct test final {
    std::string_view name{}; /// test case name

    /**
     * Assigns and executes test function
     * @param test function
     */
    constexpr auto operator=(const Test& test) {
      std::cout << "Running... " << name << '\n';
      test();
    }
  };
  ```

> `expect`

  ```cpp
  /**
   * Evaluates an expression
   * @example expect(42_i == 42);
   * @param expr expression to be evaluated
   * @param source location https://en.cppreference.com/w/cpp/utility/source_\
location
   * @return stream
   */
  constexpr OStream& expect(
    Expression expr,
    const std::source_location& location = std::source_location::current()
  ) {
    if (not static_cast<bool>(expr) {
      std::cerr << location.file()
                << ':'
                << location.line()
                << ":FAILED: "
                << expr
                << '\n';
    }

    return std::cerr;
  }
  ```

  ```cpp
  /**
   * Creates constant object for which operators can be overloaded
   * @example 42_i
   * @return integral constant object
   */
  template <char... Cs>
  [[nodiscard]] constexpr Operator operator""_i() -> integral_constant<int,\
 value<Cs...>>;
  ```

  ```cpp
  /**
   * Overloads comparison if at least one of {lhs, rhs} is an Operator
   * @example (42_i == 42)
   * @param lhs Left-hand side operator
   * @param rhs Right-hand side operator
   * @return Comparison object
   */
  [[nodiscard]] constexpr auto operator==(Operator lhs, Operator rhs) {
    return eq{lhs, rhs};
  }
  ```

  ```cpp
  /**
   * Comparison Operator
   */
  template <Operator TLhs, Opeartor TRhs>
  struct eq final {
    TLhs lhs{}; // Left-hand side operator
    TRhs rhs{}; // Right-hand side operator

    /**
     * Performs comparison operatation
     * @return true if expression is succesful
     */
    [[nodiscard]] constexpr explicit operator bool() const {
      return lhs == rhs;
    }

    /**
     * Nicely prints the operation
     */
    friend auto operator<<(OStream& os, const eq& op) -> Ostream& {
      return (os << op.lhs << " == " << op.rhs);
    }
  };
  ```

> `Sections`

  ```cpp
  /**
   * Convenient aliases for creating test named object
   * @example should("return true") = [] {};
   */
  constexpr auto should = [](const auto name) { return test{name}; };
  ```

> `Behaviour Driven Development (BDD)`

  ```cpp
  /**
   * Convenient aliases for creating BDD tests
   * @example feature("Feature") = [] {};
   * @example scenario("Scenario") = [] {};
   * @example given("I have an object") = [] {};
   * @example when("I call it") = [] {};
   * @example then("I should get") = [] {};
   */
  constexpr auto feature  = [](const auto name) { return test{name}; };
  constexpr auto scenario = [](const auto name) { return test{name}; };
  constexpr auto given    = [](const auto name) { return test{name}; };
  constexpr auto when     = [](const auto name) { return test{name}; };
  constexpr auto then     = [](const auto name) { return test{name}; };
  ```

> https://godbolt.org/z/6Nk5Mi

> `Spec`

  ```cpp
  /**
   * Convenient aliases for creating Spec tests
   * @example describe("test") = [] {};
   * @example it("should...") = [] {};
   */
  constexpr auto describe = [](const auto name) { return test{name}; };
  constexpr auto it       = [](const auto name) { return test{name}; };
  ```

> [Example implementation](https://github.com/boost-ext/ut/tree/gh-pages/denv\
er-cpp-2020/example)

> Try it online

* Header - https://godbolt.org/z/x96n8b
* Module - https://wandbox.org/permlink/LrV7WwIgghTP1nrs

</p>
</details>

<a name="fast-compilation-times"></a>
<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Fast compilation times <a\
 href="#benchmarks">(Benchmarks)</a>?</summary>
<p>

> Implementation

* Leveraging [C++20](#cpp-20) features

* Avoiding unique types for lambda expressions

```cpp
  template <class Test>
    requires not std::convertible_to<Test, void (*)()>>
  constexpr auto operator=(Test test);

vs

  // Compiles 5x faster because it doesn't introduce a new type for each\
 lambda
  constexpr auto operator=(void (*test)());
```

* `Type-name` erasure (allows types/function memoization)

```cpp
  eq<integral_constant<42>, int>{ {}, 42 }

vs

  // Can be memoized - faster to compile
  eq<int, int>{42, 42}
```

* Limiting preprocessor work
  * Single header/module
  * Minimal number of include files

* Simplified versions of
  * `std::function`
  * `std::string_view`

</p>
</details>

<a name="cpp-20"></a>
<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;C++20 features?</summary>
<p>

* API

  * [Source Location](https://eel.is/c++draft/support.srcloc#source.location.\
syn)
    * Assertions - `expect(false)` - ` __FILE__:__LINE__:FAILED [false]`

  * [Designated initializers](https://eel.is/c++draft/dcl.init#nt:designated-\
initializer-list)
    * Configuration - `cfg<override> = {.filter = "test"}`

  * [Non-Type Template Parameter](https://eel.is/c++draft/temp.arg.nontype)
    * Constant matchers - `constant<42_i == 42>`

  * [Template Parameter List for generic lambdas](https://eel.is/c++draft/exp\
r.prim.lambda)
    * Parameterized tests - `"types"_test = []<class T>() {};`

  * [Concepts](https://eel.is/c++draft/concepts.lang)
    * Operators - `Operator @ Operator`

  * [Modules](https://eel.is/c++draft/module)
    * `import boost.ut;`

</p>
</details>

<a name="cpp-2x"></a>
<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;C++2X integration?</summary>
<p>

> Parameterized tests with Expansion statements (https://wg21.link/P1306r1)

```cpp
template for (auto arg : std::tuple<int, double>{}) {
  test("types " + std::to_string(arg)) = [arg] {
    expect(type(arg) == type<int> or type(arg) == type<double>);
  };
}
```

```
All tests passed (2 asserts in 2 tests)
```

> https://cppx.godbolt.org/z/dMmqmM

</p>
</details>

<a name="std"></a>
<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Is standardization an\
 option?</summary>
<p>

> Personally, I believe that C++ standard could benefit from common testing\
 primitives (`expect`, `""_test`) because

* It lowers the entry-level to the language (no need for third-party\
 libraries)
* It improves the education aspect (one standard way of doing it)
* It makes the language more coherent/stable (consistent design with other\
 features, stable API)
* It makes the testing a first class citizen (shows that the community cares\
 about this aspect of the language)
* It allows to publish tests for the Standard Library (STL) in the standard\
 way (coherency, easier to extend)
* It allows to act as additional documentation as a way to verify whether a\
 particular implementation is conforming (quality, self-verification)
* It helps with establishing standard vocabulary for testing (common across\
 STL and other projects)

</p>
</details>

<a name="macros"></a>
<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Can I still use\
 macros?</summary>
<p>

> Sure, although please notice that there are negatives of using macros such\
 as

* Error messages might be not clear and/or point to the wrong line
* Global scope will be polluted
* Type safety will be ignored

```cpp
#define EXPECT(...) ::boost::ut::expect(::boost::ut::that % __VA_ARGS__)
#define SUITE       ::boost::ut::suite _ = []
#define TEST(name)  ::boost::ut::detail::test{"test", name} = [=]() mutable

SUITE {
  TEST("suite") {
    EXPECT(42 == 42);
  };
};

int main() {
  TEST("macro") {
    EXPECT(1 != 2);
  };

  TEST("vector") {
    std::vector<int> v(5);

   EXPECT(fatal(5u == std::size(v))) << "fatal";

    TEST("resize bigger") {
      v.resize(10);
      EXPECT(10u == std::size(v));
    };
  };
}
```

```
All tests passed (4 asserts in 3 tests)
```

> https://godbolt.org/z/WcEKTr

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;What about Mocks/Stubs/Fakes?<\
/summary>
<p>

> Consider using one of the following frameworks

* https://github.com/cpp-testing/GUnit/blob/master/docs/GMock.md
* https://github.com/eranpeer/FakeIt
* https://github.com/dascandy/hippomocks

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;What about Microbenchmarking?<\
/summary>
<p>

> [Example benchmark](example/benchmark.cpp)

> Consider using one of the following frameworks

* https://github.com/google/benchmark
* https://github.com/DigitalInBlue/Celero
* https://github.com/libnonius/nonius
* https://github.com/martinus/nanobench

</p>
</details>

<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;Related materials/talks?</summ\
ary>
<p>

* [[Boost].UT - Unit Testing Framework - Kris Jusiak](https://boost-ext.githu\
b.io/ut/denver-cpp-2019)
* [Future of Testing with C++20 - Kris Jusiak](https://boost-ext.github.io/ut\
/meeting-cpp-2020)
* [Macro-Free Testing with C++20 - Kris Jusiak](https://www.youtube.com/watch\
?v=irdgFyxOs_Y)
* ["If you liked it then you `"should have put a"_test` on it", Beyonce rule\
 - Kris Jusiak](https://www.youtube.com/watch?v=yCI8MjvOMeE)
* [Principles of Unit Testing With C++ - Dave Steffen and Kris\
 Jusiak](https://www.youtube.com/watch?v=oOcuJdJJ33g)
* [Empirical Unit Testing - Dave Steffen](https://www.twitch.tv/videos/686512\
433)

</p>
</details>

<a name="how-to-contribute"></a>
<details open><summary>&nbsp;&nbsp;&nbsp;&nbsp;How to contribute?</summary>
<p>

> [CONTRIBUTING](.github/CONTRIBUTING.md)

</p></details>

</p>
</details>

<a name="benchmarks"></a>
<details open><summary>Benchmarks</summary>
<p>

| Framework | Version | Standard | License | Linkage | Test configuration |
|-|-|-|-|-|-|
| [Boost.Test](https://github.com/boostorg/test) | [1.71.0](https://www.boost\
.org/users/history/version_1_71_0.html) | C++03 | Boost 1.0 | single\
 header/library | `static library` |
| [GoogleTest](https://github.com/google/googletest) | [1.10.0](https://githu\
b.com/google/googletest/releases/tag/release-1.10.0) | C++11 | BSD-3 |\
 library | `static library` |
| [Catch](https://github.com/catchorg/Catch2) | [2.10.2](https://github.com/c\
atchorg/Catch2/releases/download/v2.10.2/catch.hpp) | C++11 | Boost 1.0 |\
 single header | `CATCH_CONFIG_FAST_COMPILE` |
| [Doctest](https://github.com/onqtam/doctest) | [2.3.5](https://github.com/o\
nqtam/doctest/blob/master/doctest/doctest.h) | C++11 | MIT | single header |\
 `DOCTEST_CONFIG_SUPER_FAST_ASSERTS` |
| [UT](https://github.com/boost-ext/ut) | [1.1.0](https://github.com/boost-ex\
t/ut/blob/master/include/boost/ut.hpp) | C++20 | Boost 1.0 | single\
 header/module | |

<table>
  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Include</b></a> / <i>0 tests, 0 asserts, 1 cpp file</i>
    </td>
  </tr>
  <tr>
    <td colspan="3" align="center"><a href="https://raw.githubusercontent.com\
/cpp-testing/ut-benchmark/master/results/Compilation_include.png"><img\
 src="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/master/resul\
ts/Compilation_include.png"></a></td>
    <td></td>
  </tr>

  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Assert</b></a> / <i>1 test, 1'000'000 asserts, 1 cpp file</i>
    </td>
  </tr>
  <tr>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Compilation_assert.png"><img src="https://raw.githubusercontent\
.com/cpp-testing/ut-benchmark/master/results/Compilation_assert.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Execution_assert.png"><img src="https://raw.githubusercontent.c\
om/cpp-testing/ut-benchmark/master/results/Execution_assert.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/BinarySize_assert.png"><img src="https://raw.githubusercontent.\
com/cpp-testing/ut-benchmark/master/results/BinarySize_assert.png"></a></td>
  </tr>

  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Test</b></a> / <i>1'000 tests, 0 asserts, 1 cpp file</i>
    </td>
  </tr>
  <tr>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Compilation_test.png"><img src="https://raw.githubusercontent.c\
om/cpp-testing/ut-benchmark/master/results/Compilation_test.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Execution_test.png"><img src="https://raw.githubusercontent.com\
/cpp-testing/ut-benchmark/master/results/Execution_test.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/BinarySize_test.png"><img src="https://raw.githubusercontent.co\
m/cpp-testing/ut-benchmark/master/results/BinarySize_test.png"></a></td>
  </tr>

  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Suite</b></a> / <i>10'000 tests, 0 asserts, 100 cpp files</i>
    </td>
  </tr>
  <tr>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Compilation_suite.png"><img src="https://raw.githubusercontent.\
com/cpp-testing/ut-benchmark/master/results/Compilation_suite.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Execution_suite.png"><img src="https://raw.githubusercontent.co\
m/cpp-testing/ut-benchmark/master/results/Execution_suite.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/BinarySize_suite.png"><img src="https://raw.githubusercontent.c\
om/cpp-testing/ut-benchmark/master/results/BinarySize_suite.png"></a></td>
  </tr>

  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Suite+Assert</b></a> / <i>10'000 tests, 40'000 asserts, 100 cpp\
 files</i>
    </td>
  </tr>
  <tr>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Compilation_suite+assert.png"><img src="https://raw.githubuserc\
ontent.com/cpp-testing/ut-benchmark/master/results/Compilation_suite+assert.p\
ng"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Execution_suite+assert.png"><img src="https://raw.githubusercon\
tent.com/cpp-testing/ut-benchmark/master/results/Execution_suite+assert.png">\
</a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/BinarySize_suite+assert.png"><img src="https://raw.githubuserco\
ntent.com/cpp-testing/ut-benchmark/master/results/BinarySize_suite+assert.png\
"></a></td>
  </tr>

  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Suite+Assert+STL</b></a> / <i>10'000 tests, 20'000 asserts, 100 cpp\
 files</i>
    </td>
  </tr>
  <tr>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Compilation_suite+assert+stl.png"><img src="https://raw.githubu\
sercontent.com/cpp-testing/ut-benchmark/master/results/Compilation_suite+asse\
rt+stl.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Execution_suite+assert+stl.png"><img src="https://raw.githubuse\
rcontent.com/cpp-testing/ut-benchmark/master/results/Execution_suite+assert+s\
tl.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/BinarySize_suite+assert+stl.png"><img src="https://raw.githubus\
ercontent.com/cpp-testing/ut-benchmark/master/results/BinarySize_suite+assert\
+stl.png"></a></td>
  </tr>

  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Incremental Build - Suite+Assert+STL</b></a> / <i>1 cpp file change\
 (1'000 tests, 20'000 asserts, 100 cpp files)</i>
    </td>
  </tr>
  <tr>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Compilation_incremental.suite+assert+stl.png"><img\
 src="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/master/resul\
ts/Compilation_incremental.suite+assert+stl.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/Execution_incremental.suite+assert+stl.png"><img\
 src="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/master/resul\
ts/Execution_incremental.suite+assert+stl.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/BinarySize_incremental.suite+assert+stl.png"><img\
 src="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/master/resul\
ts/BinarySize_incremental.suite+assert+stl.png"></a></td>
  </tr>

  <tr>
    <td colspan="3" align="center">
    <a href="https://github.com/cpp-testing/ut-benchmark/tree/master/benchmar\
ks"><b>Suite+Assert+STL</b></a> / <i>10'000 tests, 20'000 asserts, 100 cpp\
 files<br/>(Headers vs Precompiled headers vs C++20 Modules)</i>
    </td>
  </tr>
  <tr>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/ut_Compilation_suite+assert+stl.png"><img src="https://raw.gith\
ubusercontent.com/cpp-testing/ut-benchmark/master/results/ut_Compilation_suit\
e+assert+stl.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/ut_Execution_suite+assert+stl.png"><img src="https://raw.github\
usercontent.com/cpp-testing/ut-benchmark/master/results/ut_Execution_suite+as\
sert+stl.png"></a></td>
    <td><a href="https://raw.githubusercontent.com/cpp-testing/ut-benchmark/m\
aster/results/ut_BinarySize_suite+assert+stl.png"><img src="https://raw.githu\
busercontent.com/cpp-testing/ut-benchmark/master/results/ut_BinarySize_suite+\
assert+stl.png"></a></td>
  </tr>
</table>

> https://github.com/cpp-testing/ut-benchmark

</p>
</details>

</p>
</details>

---

**Disclaimer** `UT` is not an official Boost library.

<p align="left"><img width="5%" src="https://github.com/boost-ext/ut/raw/gh-p\
ages/images/logo.png" /></p>

\
description-type: text/markdown;variant=GFM
package-description:
\
# UT

This project builds and defines the build2 package for the\
 [UT](https://github.com/boost-ext/ut) library.

The packaging code is licensed under the MIT License, the upstream artifacts\
 are licensed under the terms and conditions of UT.

## Usage

You can simply add this package as dependency to your project by specifying\
 it in your `manifest`:

```
depends: libboost-ext-ut ^2.0.1
```

Then just pick the targets that you need:

```
import libs  = libboost-ext-ut%lib{boost-ext-ut}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boost-ext/ut
package-url: https://github.com/boost-ext/ut
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
requires: c++20
bootstrap-build:
\
project = libboost-ext-ut

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost-ext/libboost-ext-ut-2.0.1+2.tar.gz
sha256sum: a03f7dbfc2cb105ff14fb320b3eedd90ed0d7848808b898549b1612f3f3446e6
:
name: libboost-fiber
version: 1.83.0
language: c++
project: boost
summary: (C++11) Userland threads library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.fiber
===========


Boost.fiber provides a framework for micro-/userland-threads (fibers)\
 scheduled cooperatively. The API contains classes and functions to manage\
 and synchronize fibers similar to boost.thread.

A fiber is able to store the current execution state, including all registers\
 and CPU flags, the instruction pointer, and the stack pointer and later\
 restore this state. The idea is to have multiple execution paths running on\
 a single thread using a sort of cooperative scheduling (threads are\
 preemptively scheduled) - the running fiber decides explicitly when it\
 yields to allow another fiber to run (context switching).

A context switch between threads costs usually thousands of CPU cycles on x86\
 compared to a fiber switch with less than 100 cycles. A fiber can only run\
 on a single thread at any point in time.

Boost.fiber requires C++11!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/fiber
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/fiber
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.83.0
depends: libboost-filesystem == 1.83.0
depends: libboost-format == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-context == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-intrusive == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-smart-ptr == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-fiber

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-fiber-1.83.0.tar.gz
sha256sum: 3c097ccd9c8bc80c56172466c662ad7e7e96f970389db3435494b1bfdfdc7494
:
name: libboost-fiber
version: 1.85.0
language: c++
project: boost
summary: (C++11) Userland threads library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.fiber
===========


Boost.fiber provides a framework for micro-/userland-threads (fibers)\
 scheduled cooperatively. The API contains classes and functions to manage\
 and synchronize fibers similar to boost.thread.

A fiber is able to store the current execution state, including all registers\
 and CPU flags, the instruction pointer, and the stack pointer and later\
 restore this state. The idea is to have multiple execution paths running on\
 a single thread using a sort of cooperative scheduling (threads are\
 preemptively scheduled) - the running fiber decides explicitly when it\
 yields to allow another fiber to run (context switching).

A context switch between threads costs usually thousands of CPU cycles on x86\
 compared to a fiber switch with less than 100 cycles. A fiber can only run\
 on a single thread at any point in time.

Boost.fiber requires C++11!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/fiber
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/fiber
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.85.0
depends: libboost-filesystem == 1.85.0
depends: libboost-format == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-context == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-smart-ptr == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-fiber

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-fiber-1.85.0.tar.gz
sha256sum: 300e6e86d3bd1e06029b3386a29f6b937b390e4d42adedac4099ecf651486539
:
name: libboost-fiber
version: 1.87.0
language: c++
project: boost
summary: (C++11) Userland threads library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.fiber
===========


Boost.fiber provides a framework for micro-/userland-threads (fibers)\
 scheduled cooperatively. The API contains classes and functions to manage\
 and synchronize fibers similar to boost.thread.

A fiber is able to store the current execution state, including all registers\
 and CPU flags, the instruction pointer, and the stack pointer and later\
 restore this state. The idea is to have multiple execution paths running on\
 a single thread using a sort of cooperative scheduling (threads are\
 preemptively scheduled) - the running fiber decides explicitly when it\
 yields to allow another fiber to run (context switching).

A context switch between threads costs usually thousands of CPU cycles on x86\
 compared to a fiber switch with less than 100 cycles. A fiber can only run\
 on a single thread at any point in time.

Boost.fiber requires C++11!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/fiber
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/fiber
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-algorithm == 1.87.0
depends: libboost-filesystem == 1.87.0
depends: libboost-format == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-context == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-smart-ptr == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-fiber

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-fiber-1.87.0.tar.gz
sha256sum: 90f7235e31ef8eb67b734d7df7a8592840d4d451a72c64f30605764077e17aaa
:
name: libboost-filesystem
version: 1.83.0
language: c++
project: boost
summary: The Boost Filesystem Library provides portable facilities to query\
 and manipulate paths, files, and directories
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Filesystem

Boost.Filesystem, part of collection of the [Boost C++ Libraries](https://git\
hub.com/boostorg), provides facilities to manipulate files and directories,\
 and the paths that identify them.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Filesystem
* **src** - Compilable source files of Boost.Filesystem
* **test** - Boost.Filesystem unit tests
* **example** - Boost.Filesystem usage examples

### More information

* [Documentation](https://boost.org/libs/filesystem)
* [Report bugs](https://github.com/boostorg/filesystem/issues/new). Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/filesyst\
em/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/filesystem/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/filesystem/actions/workflows/ci.yml/bad\
ge.svg?branch=master)](https://github.com/boostorg/filesystem/actions?query=b\
ranch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/nx\
3e7bcavvn3q953/branch/master?svg=true)](https://ci.appveyor.com/project/Lasti\
que/filesystem/branch/master) | [![Tests](https://img.shields.io/badge/matrix\
-master-brightgreen.svg)](http://www.boost.org/development/tests/master/devel\
oper/filesystem.html) | [![Dependencies](https://img.shields.io/badge/deps-ma\
ster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/filesy\
stem.html)
[`develop`](https://github.com/boostorg/filesystem/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/filesystem/actions/workflows/ci.yml/bad\
ge.svg?branch=develop)](https://github.com/boostorg/filesystem/actions?query=\
branch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/\
nx3e7bcavvn3q953/branch/develop?svg=true)](https://ci.appveyor.com/project/La\
stique/filesystem/branch/develop) | [![Tests](https://img.shields.io/badge/ma\
trix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop\
/developer/filesystem.html) | [![Dependencies](https://img.shields.io/badge/d\
eps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develo\
p/filesystem.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/filesystem
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/filesystem
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-atomic == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-winapi == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-filesystem

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-filesystem-1.83.0.tar.gz
sha256sum: 9d29c8a3b156852909fd8f4a79b6f35bb779c635fedf1f75200f825eca0c9adb
:
name: libboost-filesystem
version: 1.85.0
language: c++
project: boost
summary: The Boost Filesystem Library provides portable facilities to query\
 and manipulate paths, files, and directories
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Filesystem

Boost.Filesystem, part of collection of the [Boost C++ Libraries](https://git\
hub.com/boostorg), provides facilities to manipulate files and directories,\
 and the paths that identify them.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Filesystem
* **src** - Compilable source files of Boost.Filesystem
* **test** - Boost.Filesystem unit tests
* **example** - Boost.Filesystem usage examples

### More information

* [Documentation](https://boost.org/libs/filesystem)
* [Report bugs](https://github.com/boostorg/filesystem/issues/new). Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/filesyst\
em/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/filesystem/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/filesystem/actions/workflows/ci.yml/bad\
ge.svg?branch=master)](https://github.com/boostorg/filesystem/actions?query=b\
ranch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/nx\
3e7bcavvn3q953/branch/master?svg=true)](https://ci.appveyor.com/project/Lasti\
que/filesystem/branch/master) | [![Tests](https://img.shields.io/badge/matrix\
-master-brightgreen.svg)](http://www.boost.org/development/tests/master/devel\
oper/filesystem.html) | [![Dependencies](https://img.shields.io/badge/deps-ma\
ster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/filesy\
stem.html)
[`develop`](https://github.com/boostorg/filesystem/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/filesystem/actions/workflows/ci.yml/bad\
ge.svg?branch=develop)](https://github.com/boostorg/filesystem/actions?query=\
branch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/\
nx3e7bcavvn3q953/branch/develop?svg=true)](https://ci.appveyor.com/project/La\
stique/filesystem/branch/develop) | [![Tests](https://img.shields.io/badge/ma\
trix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop\
/developer/filesystem.html) | [![Dependencies](https://img.shields.io/badge/d\
eps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develo\
p/filesystem.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/filesystem
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/filesystem
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-atomic == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-scope == 1.85.0
depends: libboost-winapi == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-filesystem

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-filesystem-1.85.0.tar.gz
sha256sum: 79daaaa68687a4a8edaf9e979c14bb28510c9927a226516b429a634cf4d81dda
:
name: libboost-filesystem
version: 1.87.0
language: c++
project: boost
summary: The Boost Filesystem Library provides portable facilities to query\
 and manipulate paths, files, and directories
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Filesystem

Boost.Filesystem, part of collection of the [Boost C++ Libraries](https://git\
hub.com/boostorg), provides facilities to manipulate files and directories,\
 and the paths that identify them.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Filesystem
* **src** - Compilable source files of Boost.Filesystem
* **test** - Boost.Filesystem unit tests
* **example** - Boost.Filesystem usage examples

### More information

* [Documentation](https://boost.org/libs/filesystem)
* [Report bugs](https://github.com/boostorg/filesystem/issues/new). Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/filesyst\
em/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/filesystem/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/filesystem/actions/workflows/ci.yml/bad\
ge.svg?branch=master)](https://github.com/boostorg/filesystem/actions?query=b\
ranch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/nx\
3e7bcavvn3q953/branch/master?svg=true)](https://ci.appveyor.com/project/Lasti\
que/filesystem/branch/master) | [![Tests](https://img.shields.io/badge/matrix\
-master-brightgreen.svg)](http://www.boost.org/development/tests/master/devel\
oper/filesystem.html) | [![Dependencies](https://img.shields.io/badge/deps-ma\
ster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/filesy\
stem.html)
[`develop`](https://github.com/boostorg/filesystem/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/filesystem/actions/workflows/ci.yml/bad\
ge.svg?branch=develop)](https://github.com/boostorg/filesystem/actions?query=\
branch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/\
nx3e7bcavvn3q953/branch/develop?svg=true)](https://ci.appveyor.com/project/La\
stique/filesystem/branch/develop) | [![Tests](https://img.shields.io/badge/ma\
trix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop\
/developer/filesystem.html) | [![Dependencies](https://img.shields.io/badge/d\
eps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develo\
p/filesystem.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/filesystem
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/filesystem
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-atomic == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-scope == 1.87.0
depends: libboost-winapi == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-filesystem

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-filesystem-1.87.0.tar.gz
sha256sum: f3bec6eddd60b4bddef9a0201d998419aaac45014245d39f4df093bf1e36251e
:
name: libboost-flyweight
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Design pattern to manage large quantities of highly redundant objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/flyweight
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/flyweight
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-interprocess == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-multi-index == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-flyweight

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-flyweight-1.83.0.tar.gz
sha256sum: ec71f0e7a82c5ee24d6cb3ebf0da210f7e821d8d7eb678ffd308e30aec93a8bb
:
name: libboost-flyweight
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Design pattern to manage large quantities of highly redundant objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/flyweight
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/flyweight
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-interprocess == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-multi-index == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-flyweight

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-flyweight-1.85.0.tar.gz
sha256sum: 2241eb98ea2430cfa8501944122d05f47fd22e6e058e85ee95941d1cf2f5ada5
:
name: libboost-flyweight
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Design pattern to manage large quantities of highly redundant objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Flyweight

[![Branch](https://img.shields.io/badge/branch-master-brightgreen.svg)](https\
://github.com/boostorg/flyweight/tree/master) [![CI](https://github.com/boost\
org/flyweight/actions/workflows/ci.yml/badge.svg?branch=master)](https://gith\
ub.com/boostorg/flyweight/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/flyweight/master?server=\
https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https://\
drone.cpp.al/boostorg/flyweight)  [![Deps](https://img.shields.io/badge/deps-\
master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/flyw\
eight.html)  [![Documentation](https://img.shields.io/badge/docs-master-brigh\
tgreen.svg)](https://www.boost.org/doc/libs/master/libs/flyweight)  [![Enter\
 the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](htt\
p://www.boost.org/development/tests/master/developer/flyweight.html)<br/>
[![Branch](https://img.shields.io/badge/branch-develop-brightgreen.svg)](http\
s://github.com/boostorg/flyweight/tree/develop) [![CI](https://github.com/boo\
storg/flyweight/actions/workflows/ci.yml/badge.svg?branch=develop)](https://g\
ithub.com/boostorg/flyweight/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/flyweight/develop?server\
=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https:/\
/drone.cpp.al/boostorg/flyweight)  [![Deps](https://img.shields.io/badge/deps\
-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/f\
lyweight.html) [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/flyweight)\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/flyweight.htm\
l)<br/>
[![BSL 1.0](https://img.shields.io/badge/license-BSL_1.0-blue.svg)](https://w\
ww.boost.org/users/license.html) <img alt="Header-only library"\
 src="https://img.shields.io/badge/build-header--only-blue.svg">

Flyweights are small-sized handle classes granting constant access to shared\
 common data, thus allowing for the management
of large amounts of entities within reasonable memory limits. Boost.Flyweight\
 makes it easy to use this common programming
idiom by providing the class template `flyweight<T>`, which acts as a drop-in\
 replacement for `const T`.

## Learn about Boost.Flyweight

* [Online documentation](https://boost.org/libs/flyweight)

## Install Boost.Flyweight

* [Download Boost](https://www.boost.org/users/download/) and you're ready to\
 go (this is a header-only library requiring no building).
* Using Conan 2: In case you don't have it yet, add an entry for Boost in\
 your `conanfile.txt` (the example requires at least Boost 1.86):
```
[requires]
boost/[>=1.86.0]
```
<ul>If you're not using any compiled Boost library, the following will skip\
 building altogether:</ul>

```
[options]
boost:header_only=True
```
* Using vcpkg: Execute the command
```
vcpkg install boost-flyweight
```
* Using CMake: [Boost CMake support infrastructure](https://github.com/boosto\
rg/cmake)
allows you to use CMake directly to download, build and consume all of Boost\
 or
some specific libraries.

## Support

* Join the **#boost** discussion group at [cpplang.slack.com](https://cpplang\
.slack.com/)
([ask for an invite](https://cppalliance.org/slack/) if you’re not a member\
 of this workspace yet)
* Ask in the [Boost Users mailing list](https://lists.boost.org/mailman/listi\
nfo.cgi/boost-users)
(add the `[flyweight]` tag at the beginning of the subject line)
* [File an issue](https://github.com/boostorg/flyweight/issues)

## Contribute

* [Pull requests](https://github.com/boostorg/flyweight/pulls) against\
 **develop** branch are most welcome.
Note that by submitting patches you agree to license your modifications under\
 the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.t\
xt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/flyweight
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/flyweight
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-interprocess == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-multi-index == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-unordered == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-flyweight

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-flyweight-1.87.0.tar.gz
sha256sum: ea4de2dd51847b145fb852731f144942e516046190b1eac0ca88f5736e9a5bd1
:
name: libboost-foreach
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: In C++, writing a loop that iterates over a sequence is tedious. We\
 can either use iterators, which requires a considerable amount of\
 boiler-plate, or we can use the std::for_each() algorithm and move our loop\
 body into a predicate, which requires no less boiler-plate and forces us to\
 move our logic far from where it will be used. In contrast, some other\
 languages, like Perl, provide a dedicated "foreach" construct that automates\
 this process. BOOST_FOREACH is just such a construct for C++. It iterates\
 over sequences for us, freeing us from having to deal directly with\
 iterators or write predicates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/foreach
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/foreach
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-foreach

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-foreach-1.83.0.tar.gz
sha256sum: 480c9ebc6a7ced5c524ac93ff94be419975bc9d8ae510959ee97a6b67778584f
:
name: libboost-foreach
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: In C++, writing a loop that iterates over a sequence is tedious. We\
 can either use iterators, which requires a considerable amount of\
 boiler-plate, or we can use the std::for_each() algorithm and move our loop\
 body into a predicate, which requires no less boiler-plate and forces us to\
 move our logic far from where it will be used. In contrast, some other\
 languages, like Perl, provide a dedicated "foreach" construct that automates\
 this process. BOOST_FOREACH is just such a construct for C++. It iterates\
 over sequences for us, freeing us from having to deal directly with\
 iterators or write predicates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/foreach
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/foreach
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-foreach

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-foreach-1.85.0.tar.gz
sha256sum: 623cd1aa52e7a0ace15159e19c43aa5563e6adfccd5c3712475ff626164952b9
:
name: libboost-foreach
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: In C++, writing a loop that iterates over a sequence is tedious. We\
 can either use iterators, which requires a considerable amount of\
 boiler-plate, or we can use the std::for_each() algorithm and move our loop\
 body into a predicate, which requires no less boiler-plate and forces us to\
 move our logic far from where it will be used. In contrast, some other\
 languages, like Perl, provide a dedicated "foreach" construct that automates\
 this process. BOOST_FOREACH is just such a construct for C++. It iterates\
 over sequences for us, freeing us from having to deal directly with\
 iterators or write predicates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/foreach
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/foreach
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-foreach

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-foreach-1.87.0.tar.gz
sha256sum: a0971526221317314c0c14d2f91c13ab6b69d3c4b26d7b4e25c088928df440e6
:
name: libboost-format
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The format library provides a type-safe mechanism for formatting\
 arguments according to a printf-like format-string
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Format, part of the collection of [Boost C++ Libraries](http://github.com/boo\
storg), provides a type-safe mechanism for formatting arguments according to\
 a printf-like format-string.  User-defined types are supported by providing\
 a `std::ostream operator <<` implementation for them.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/format/tree/master) | [![Build\
 Status](https://github.com/boostorg/format/actions/workflows/ci.yml/badge.sv\
g?branch=master)](https://github.com/boostorg/format/actions?query=branch:mas\
ter) | [![Build status](https://ci.appveyor.com/api/projects/status/tkcumf8nu\
6tb697d/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/form\
at-bhjc4/branch/master) | [![Coverity Scan Build Status](https://scan.coverit\
y.com/projects/14007/badge.svg)](https://scan.coverity.com/projects/boostorg-\
format) | [![codecov](https://codecov.io/gh/boostorg/format/branch/master/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/format/branch/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/format.html) | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/format.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/format.html)
[`develop`](https://github.com/boostorg/format/tree/develop) | [![Build\
 Status](https://github.com/boostorg/format/actions/workflows/ci.yml/badge.sv\
g?branch=develop)](https://github.com/boostorg/format/actions?query=branch:de\
velop) | [![Build status](https://ci.appveyor.com/api/projects/status/tkcumf8\
nu6tb697d/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/f\
ormat-bhjc4/branch/develop) | [![Coverity Scan Build Status](https://scan.cov\
erity.com/projects/14007/badge.svg)](https://scan.coverity.com/projects/boost\
org-format) | [![codecov](https://codecov.io/gh/boostorg/format/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/format/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/format.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.or\
g/doc/libs/develop/doc/html/format.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/format.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `benchmark` | benchmark tool                 |
| `doc`       | documentation                  |
| `examples`  | use case examples              |
| `include`   | headers                        |
| `test`      | unit tests                     |
| `tools`     | development tools              |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-format): Be sure to read the documentation first as Boost.Format, like\
 any other string formatting library, has its own rules.
* [Report bugs](https://github.com/boostorg/format/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/format/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[format]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/format
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/format
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-format

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-format-1.83.0.tar.gz
sha256sum: 0fce4515e79ba43c16f50d4275ce6aa1fb2894826fc191dd596ca51b5cc048e0
:
name: libboost-format
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The format library provides a type-safe mechanism for formatting\
 arguments according to a printf-like format-string
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Format, part of the collection of [Boost C++ Libraries](http://github.com/boo\
storg), provides a type-safe mechanism for formatting arguments according to\
 a printf-like format-string.  User-defined types are supported by providing\
 a `std::ostream operator <<` implementation for them.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/format/tree/master) | [![Build\
 Status](https://github.com/boostorg/format/actions/workflows/ci.yml/badge.sv\
g?branch=master)](https://github.com/boostorg/format/actions?query=branch:mas\
ter) | [![Build status](https://ci.appveyor.com/api/projects/status/tkcumf8nu\
6tb697d/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/form\
at-bhjc4/branch/master) | [![Coverity Scan Build Status](https://scan.coverit\
y.com/projects/14007/badge.svg)](https://scan.coverity.com/projects/boostorg-\
format) | [![codecov](https://codecov.io/gh/boostorg/format/branch/master/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/format/branch/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/format.html) | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/format.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/format.html)
[`develop`](https://github.com/boostorg/format/tree/develop) | [![Build\
 Status](https://github.com/boostorg/format/actions/workflows/ci.yml/badge.sv\
g?branch=develop)](https://github.com/boostorg/format/actions?query=branch:de\
velop) | [![Build status](https://ci.appveyor.com/api/projects/status/tkcumf8\
nu6tb697d/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/f\
ormat-bhjc4/branch/develop) | [![Coverity Scan Build Status](https://scan.cov\
erity.com/projects/14007/badge.svg)](https://scan.coverity.com/projects/boost\
org-format) | [![codecov](https://codecov.io/gh/boostorg/format/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/format/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/format.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.or\
g/doc/libs/develop/doc/html/format.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/format.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `benchmark` | benchmark tool                 |
| `doc`       | documentation                  |
| `examples`  | use case examples              |
| `include`   | headers                        |
| `test`      | unit tests                     |
| `tools`     | development tools              |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-format): Be sure to read the documentation first as Boost.Format, like\
 any other string formatting library, has its own rules.
* [Report bugs](https://github.com/boostorg/format/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/format/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[format]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/format
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/format
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-format

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-format-1.85.0.tar.gz
sha256sum: 339988a3c142bb06b73168ed499f8ff958fc9e1c4943ef03d5fb9cffe37a64f1
:
name: libboost-format
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The format library provides a type-safe mechanism for formatting\
 arguments according to a printf-like format-string
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Format, part of the collection of [Boost C++ Libraries](http://github.com/boo\
storg), provides a type-safe mechanism for formatting arguments according to\
 a printf-like format-string.  User-defined types are supported by providing\
 a `std::ostream operator <<` implementation for them.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++11
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/format/tree/master) | [![Build\
 Status](https://github.com/boostorg/format/actions/workflows/ci.yml/badge.sv\
g?branch=master)](https://github.com/boostorg/format/actions?query=branch:mas\
ter) | [![Build status](https://ci.appveyor.com/api/projects/status/tkcumf8nu\
6tb697d/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/form\
at-bhjc4/branch/master) | [![Coverity Scan Build Status](https://scan.coverit\
y.com/projects/14007/badge.svg)](https://scan.coverity.com/projects/boostorg-\
format) | [![codecov](https://codecov.io/gh/boostorg/format/branch/master/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/format/branch/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/format.html) | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/\
doc/libs/master/libs/format/) | [![Enter the Matrix](https://img.shields.io/b\
adge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/m\
aster/developer/format.html)
[`develop`](https://github.com/boostorg/format/tree/develop) | [![Build\
 Status](https://github.com/boostorg/format/actions/workflows/ci.yml/badge.sv\
g?branch=develop)](https://github.com/boostorg/format/actions?query=branch:de\
velop) | [![Build status](https://ci.appveyor.com/api/projects/status/tkcumf8\
nu6tb697d/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/f\
ormat-bhjc4/branch/develop) | [![Coverity Scan Build Status](https://scan.cov\
erity.com/projects/14007/badge.svg)](https://scan.coverity.com/projects/boost\
org-format) | [![codecov](https://codecov.io/gh/boostorg/format/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/format/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/format.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.o\
rg/doc/libs/develop/libs/format/) | [![Enter the Matrix](https://img.shields.\
io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/te\
sts/develop/developer/format.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `benchmark` | benchmark tool                 |
| `doc`       | documentation                  |
| `examples`  | use case examples              |
| `include`   | headers                        |
| `test`      | unit tests                     |
| `tools`     | development tools              |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-format): Be sure to read the documentation first as Boost.Format, like\
 any other string formatting library, has its own rules.
* [Report bugs](https://github.com/boostorg/format/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/format/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[format]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/format
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/format
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-format

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-format-1.87.0.tar.gz
sha256sum: 7d78a25da03cc3a87668e407ce6de18deafb5871a9c0b24cb4cbff369e9f380b
:
name: libboost-function
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Function object wrappers for deferred calls or callbacks
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Function, a polymorphic function wrapper

[Boost.Function](http://boost.org/libs/function), part of the
[Boost C++ Libraries](http://boost.org), is the original implementation of the
polymorphic function wrapper `boost::function`, which was eventually accepted
into the C++11 standard as [`std::function`](https://en.cppreference.com/w/cp\
p/utility/functional/function).

## Currently supported compilers

* g++ 4.8 or later
* clang++ 3.9 or later
* Visual Studio 2005-2022

Tested on [Github Actions](https://github.com/boostorg/function/actions) and\
 [Appveyor](https://ci.appveyor.com/project/pdimov/function/).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/function
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/function
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-function

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-function-1.83.0.tar.gz
sha256sum: 0c01ee94a3b5d3026278eaf07da18e19fdb156417ca3cb4520b7a68d64330452
:
name: libboost-function
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Function object wrappers for deferred calls or callbacks
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Function, a polymorphic function wrapper

[Boost.Function](http://boost.org/libs/function), part of the
[Boost C++ Libraries](http://boost.org), is the original implementation of the
polymorphic function wrapper `boost::function`, which was eventually accepted
into the C++11 standard as [`std::function`](https://en.cppreference.com/w/cp\
p/utility/functional/function).

## Currently supported compilers

* g++ 4.7 or later
* clang++ 3.9 or later
* Visual Studio 2013-2022

Tested on [Github Actions](https://github.com/boostorg/function/actions) and\
 [Appveyor](https://ci.appveyor.com/project/pdimov/function/).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/function
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/function
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-function

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-function-1.85.0.tar.gz
sha256sum: fd019005592e32d8fa0f74d7bbfb012b9d6ada7a61b53ac9961512b6f9fef196
:
name: libboost-function
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Function object wrappers for deferred calls or callbacks
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Function, a polymorphic function wrapper

[Boost.Function](http://boost.org/libs/function), part of the
[Boost C++ Libraries](http://boost.org), is the original implementation of the
polymorphic function wrapper `boost::function`, which was eventually accepted
into the C++11 standard as [`std::function`](https://en.cppreference.com/w/cp\
p/utility/functional/function).

## Currently supported compilers

* g++ 4.7 or later
* clang++ 3.9 or later
* Visual Studio 2013-2022

Tested on [Github Actions](https://github.com/boostorg/function/actions) and\
 [Appveyor](https://ci.appveyor.com/project/pdimov/function/).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/function
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/function
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-function

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-function-1.87.0.tar.gz
sha256sum: 3f8b932e94225945f1ee25c1b6c5ef921bc187804e75510c155a6d8b6aa8cf83
:
name: libboost-function-types
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Boost.FunctionTypes provides functionality to classify, decompose\
 and synthesize function, function pointer, function reference and pointer to\
 member types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/function_types
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/function_types
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-function-types

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-function-types-1.83.0.tar.gz
sha256sum: 6ebad435e8ed67bbe771814b8c5b1fd4ba1d94cf5ffc61915be49990ddac62e1
:
name: libboost-function-types
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Boost.FunctionTypes provides functionality to classify, decompose\
 and synthesize function, function pointer, function reference and pointer to\
 member types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/function_types
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/function_types
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-function-types

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-function-types-1.85.0.tar.gz
sha256sum: a4254a912544da66d85ba992ef5ea49d56ee8ea5367161540720836f3f828b2e
:
name: libboost-function-types
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Boost.FunctionTypes provides functionality to classify, decompose\
 and synthesize function, function pointer, function reference and pointer to\
 member types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/function_types
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/function_types
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-function-types

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-function-types-1.87.0.tar.gz
sha256sum: e6fa430d0ce73eec139ee20d070d6b28b52c564e6613b87f173080800864becb
:
name: libboost-functional
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The Boost.Function library contains a family of class templates that\
 are function object wrappers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/functional
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/functional
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-functional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-functional-1.83.0.tar.gz
sha256sum: a21e449499805ae05c63f3231cd10f2f9218f3f4e3f40197d6b5200723e61f82
:
name: libboost-functional
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The Boost.Function library contains a family of class templates that\
 are function object wrappers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/functional
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/functional
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-functional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-functional-1.85.0.tar.gz
sha256sum: 0706412a5a0c02bd02c9f77adc533fd274ad4cc644b1374fe1b132a9a0b9b5fa
:
name: libboost-functional
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The Boost.Function library contains a family of class templates that\
 are function object wrappers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/functional
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/functional
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-functional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-functional-1.87.0.tar.gz
sha256sum: c25c9e5bf1437a6546e18a7577c7bab586b13469d0253957c0e30e36040ad545
:
name: libboost-fusion
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Library for working with tuples, including various containers,\
 algorithms, etc
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/fusion
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/fusion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-functional == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-fusion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-fusion-1.83.0.tar.gz
sha256sum: f210a12d088415b7b95400eb32268be0a0a1e9aa40acb9831ae05462b26ff585
:
name: libboost-fusion
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Library for working with tuples, including various containers,\
 algorithms, etc
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/fusion
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/fusion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-functional == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-fusion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-fusion-1.85.0.tar.gz
sha256sum: 1b2ad73cfa0c936d19e660efce43e958ab135a229f82a9b451e4e731137ad477
:
name: libboost-fusion
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Library for working with tuples, including various containers,\
 algorithms, etc
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/fusion
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/fusion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-functional == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-fusion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-fusion-1.87.0.tar.gz
sha256sum: 0725c54805dcbc18e4c46cbb180f2cb172e543ce2575b79566f50b803df2de3b
:
name: libboost-geometry
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The Boost.Geometry library provides geometric algorithms, primitives\
 and spatial index
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Geometry](doc/other/logo/logo_bkg.png)

Boost.Geometry, part of collection of the [Boost C++ Libraries](http://github\
.com/boostorg), defines concepts, primitives and algorithms for solving\
 geometry problems. Boost.Geometry is a C++14 header-only library.

[![Licence](https://img.shields.io/badge/license-boost-4480cc.png)](http://ww\
w.boost.org/LICENSE_1_0.txt)
[![Documentation](https://img.shields.io/badge/-documentation-4480cc.png)](ht\
tp://boost.org/libs/geometry)
[![Wiki](https://img.shields.io/badge/-wiki-4480cc.png)](https://github.com/b\
oostorg/geometry/wiki)
[![Mailing List](https://img.shields.io/badge/-mailing%20list-4eb899.png)](ht\
tp://lists.boost.org/geometry/)
[![Chat](https://badges.gitter.im/boostorg/geometry.png)](https://gitter.im/b\
oostorg/geometry?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_\
content=badge)

### Test results

 Branch     | Build         | Coverage       | Regression | Documentation
------------|---------------|----------------|------------|--------------
**develop** | [![circleci](https://circleci.com/gh/boostorg/geometry/tree/dev\
elop.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/develo\
p) <br> [![minimal](https://github.com/boostorg/geometry/workflows/minimal/ba\
dge.svg?branch=develop)](https://github.com/boostorg/geometry/actions?query=b\
ranch:develop+workflow:minimal) | [![coveralls](https://coveralls.io/repos/gi\
thub/boostorg/geometry/badge.svg?branch=develop)](https://coveralls.io/github\
/boostorg/geometry?branch=develop) <br> [![codecov](https://codecov.io/gh/boo\
storg/geometry/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostor\
g/geometry/branch/develop) | [![geometry](https://img.shields.io/badge/-geome\
try-4480cc.png)](http://www.boost.org/development/tests/develop/developer/geo\
metry.html) [![index](https://img.shields.io/badge/-index-4480cc.png)](http:/\
/www.boost.org/development/tests/develop/developer/geometry-index.html)\
 [![extensions](https://img.shields.io/badge/-extensions-4480cc.png)](http://\
www.boost.org/development/tests/develop/developer/geometry-extensions.html) |\
 [![documentation](https://github.com/boostorg/geometry/workflows/documentati\
on/badge.svg?branch=develop)](https://github.com/boostorg/geometry/actions?qu\
ery=branch:develop+workflow:documentation)
**master**  | [![circleci](https://circleci.com/gh/boostorg/geometry/tree/mas\
ter.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/master)\
   <br> [![minimal](https://github.com/boostorg/geometry/workflows/minimal/ba\
dge.svg?branch=master)](https://github.com/boostorg/geometry/actions?query=br\
anch:master+workflow:minimal)   | [![coveralls](https://coveralls.io/repos/gi\
thub/boostorg/geometry/badge.svg?branch=master)](https://coveralls.io/github/\
boostorg/geometry?branch=master)   <br> [![codecov](https://codecov.io/gh/boo\
storg/geometry/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg\
/geometry/branch/master)   | [![geometry](https://img.shields.io/badge/-geome\
try-4480cc.png)](http://www.boost.org/development/tests/master/developer/geom\
etry.html)  [![index](https://img.shields.io/badge/-index-4480cc.png)](http:/\
/www.boost.org/development/tests/master/developer/geometry-index.html)       \
                                                                             \
                                                                      |\
 [![documentation](https://github.com/boostorg/geometry/workflows/documentati\
on/badge.svg?branch=master)](https://github.com/boostorg/geometry/actions?que\
ry=branch:master+workflow:documentation)

### Directories

* **doc** - QuickBook documentation sources
* **example** - Boost.Geometry examples
* **_extensions_** - examples and tests for the extensions - _develop branch_
* **include** - the sourcecode of Boost.Geometry
* **index** - examples and tests for the Spatial Index
* **meta** - library metadata
* **test** - Boost.Geometry unit tests

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/geometry
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/geometry
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.83.0
depends: libboost-any == 1.83.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-math == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-multiprecision == 1.83.0
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-polygon == 1.83.0
depends: libboost-qvm == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-rational == 1.83.0
depends: libboost-serialization == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-thread == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tokenizer == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-variant == 1.83.0
depends: libboost-variant2 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-geometry

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-geometry-1.83.0.tar.gz
sha256sum: 7d2afb975b9b159b255d98aa31726015c04026fd3dd355ced99ffb4df61562ec
:
name: libboost-geometry
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The Boost.Geometry library provides geometric algorithms, primitives\
 and spatial index
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Geometry](doc/other/logo/logo_bkg.png)

Boost.Geometry, part of collection of the [Boost C++ Libraries](http://github\
.com/boostorg), defines concepts, primitives and algorithms for solving\
 geometry problems. Boost.Geometry is a C++14 header-only library.

[![Licence](https://img.shields.io/badge/license-boost-4480cc.png)](http://ww\
w.boost.org/LICENSE_1_0.txt)
[![Documentation](https://img.shields.io/badge/-documentation-4480cc.png)](ht\
tp://boost.org/libs/geometry)
[![Wiki](https://img.shields.io/badge/-wiki-4480cc.png)](https://github.com/b\
oostorg/geometry/wiki)
[![Mailing List](https://img.shields.io/badge/-mailing%20list-4eb899.png)](ht\
tp://lists.boost.org/geometry/)
[![Chat](https://badges.gitter.im/boostorg/geometry.png)](https://gitter.im/b\
oostorg/geometry?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_\
content=badge)

### Test results

 Branch     | Build         | Coverage       | Regression | Documentation
------------|---------------|----------------|------------|--------------
**develop** | [![circleci](https://circleci.com/gh/boostorg/geometry/tree/dev\
elop.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/develo\
p) <br> [![minimal](https://github.com/boostorg/geometry/workflows/minimal/ba\
dge.svg?branch=develop)](https://github.com/boostorg/geometry/actions?query=b\
ranch:develop+workflow:minimal) | [![coveralls](https://coveralls.io/repos/gi\
thub/boostorg/geometry/badge.svg?branch=develop)](https://coveralls.io/github\
/boostorg/geometry?branch=develop) <br> [![codecov](https://codecov.io/gh/boo\
storg/geometry/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostor\
g/geometry/branch/develop) | [![geometry](https://img.shields.io/badge/-geome\
try-4480cc.png)](http://www.boost.org/development/tests/develop/developer/geo\
metry.html) [![index](https://img.shields.io/badge/-index-4480cc.png)](http:/\
/www.boost.org/development/tests/develop/developer/geometry-index.html)\
 [![extensions](https://img.shields.io/badge/-extensions-4480cc.png)](http://\
www.boost.org/development/tests/develop/developer/geometry-extensions.html) |\
 [![documentation](https://github.com/boostorg/geometry/workflows/documentati\
on/badge.svg?branch=develop)](https://github.com/boostorg/geometry/actions?qu\
ery=branch:develop+workflow:documentation)
**master**  | [![circleci](https://circleci.com/gh/boostorg/geometry/tree/mas\
ter.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/master)\
   <br> [![minimal](https://github.com/boostorg/geometry/workflows/minimal/ba\
dge.svg?branch=master)](https://github.com/boostorg/geometry/actions?query=br\
anch:master+workflow:minimal)   | [![coveralls](https://coveralls.io/repos/gi\
thub/boostorg/geometry/badge.svg?branch=master)](https://coveralls.io/github/\
boostorg/geometry?branch=master)   <br> [![codecov](https://codecov.io/gh/boo\
storg/geometry/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg\
/geometry/branch/master)   | [![geometry](https://img.shields.io/badge/-geome\
try-4480cc.png)](http://www.boost.org/development/tests/master/developer/geom\
etry.html)  [![index](https://img.shields.io/badge/-index-4480cc.png)](http:/\
/www.boost.org/development/tests/master/developer/geometry-index.html)       \
                                                                             \
                                                                      |\
 [![documentation](https://github.com/boostorg/geometry/workflows/documentati\
on/badge.svg?branch=master)](https://github.com/boostorg/geometry/actions?que\
ry=branch:master+workflow:documentation)

### Directories

* **doc** - QuickBook documentation sources
* **example** - Boost.Geometry examples
* **_extensions_** - examples and tests for the extensions - _develop branch_
* **include** - the sourcecode of Boost.Geometry
* **index** - examples and tests for the Spatial Index
* **meta** - library metadata
* **test** - Boost.Geometry unit tests

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/geometry
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/geometry
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.85.0
depends: libboost-any == 1.85.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-math == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-multiprecision == 1.85.0
depends: libboost-numeric-conversion == 1.85.0
depends: libboost-polygon == 1.85.0
depends: libboost-qvm == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-rational == 1.85.0
depends: libboost-serialization == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-thread == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tokenizer == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-variant == 1.85.0
depends: libboost-variant2 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-geometry

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-geometry-1.85.0.tar.gz
sha256sum: d39e3900038c765b4d19fd58db4f24eb421af70677554f7a7ba63075389924ac
:
name: libboost-geometry
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The Boost.Geometry library provides geometric algorithms, primitives\
 and spatial index
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Geometry](doc/other/logo/logo_bkg.png)

Boost.Geometry, part of collection of the [Boost C++ Libraries](http://github\
.com/boostorg), defines concepts, primitives and algorithms for solving\
 geometry problems. Boost.Geometry is a C++14 header-only library.

[![Licence](https://img.shields.io/badge/license-boost-4480cc.png)](http://ww\
w.boost.org/LICENSE_1_0.txt)
[![Documentation](https://img.shields.io/badge/-documentation-4480cc.png)](ht\
tp://boost.org/libs/geometry)
[![Wiki](https://img.shields.io/badge/-wiki-4480cc.png)](https://github.com/b\
oostorg/geometry/wiki)
[![Mailing List](https://img.shields.io/badge/-mailing%20list-4eb899.png)](ht\
tp://lists.boost.org/geometry/)
[![Chat](https://badges.gitter.im/boostorg/geometry.png)](https://gitter.im/b\
oostorg/geometry?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_\
content=badge)

### Test results

 Branch     | Build         | Coverage       | Regression | Documentation
------------|---------------|----------------|------------|--------------
**develop** | [![circleci](https://circleci.com/gh/boostorg/geometry/tree/dev\
elop.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/develo\
p) <br> [![minimal](https://github.com/boostorg/geometry/workflows/minimal/ba\
dge.svg?branch=develop)](https://github.com/boostorg/geometry/actions?query=b\
ranch:develop+workflow:minimal) | [![coveralls](https://coveralls.io/repos/gi\
thub/boostorg/geometry/badge.svg?branch=develop)](https://coveralls.io/github\
/boostorg/geometry?branch=develop) <br> [![codecov](https://codecov.io/gh/boo\
storg/geometry/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostor\
g/geometry/branch/develop) | [![geometry](https://img.shields.io/badge/-geome\
try-4480cc.png)](http://www.boost.org/development/tests/develop/developer/geo\
metry.html) [![index](https://img.shields.io/badge/-index-4480cc.png)](http:/\
/www.boost.org/development/tests/develop/developer/geometry-index.html)\
 [![extensions](https://img.shields.io/badge/-extensions-4480cc.png)](http://\
www.boost.org/development/tests/develop/developer/geometry-extensions.html) |\
 [![documentation](https://github.com/boostorg/geometry/workflows/documentati\
on/badge.svg?branch=develop)](https://github.com/boostorg/geometry/actions?qu\
ery=branch:develop+workflow:documentation)
**master**  | [![circleci](https://circleci.com/gh/boostorg/geometry/tree/mas\
ter.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/master)\
   <br> [![minimal](https://github.com/boostorg/geometry/workflows/minimal/ba\
dge.svg?branch=master)](https://github.com/boostorg/geometry/actions?query=br\
anch:master+workflow:minimal)   | [![coveralls](https://coveralls.io/repos/gi\
thub/boostorg/geometry/badge.svg?branch=master)](https://coveralls.io/github/\
boostorg/geometry?branch=master)   <br> [![codecov](https://codecov.io/gh/boo\
storg/geometry/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg\
/geometry/branch/master)   | [![geometry](https://img.shields.io/badge/-geome\
try-4480cc.png)](http://www.boost.org/development/tests/master/developer/geom\
etry.html)  [![index](https://img.shields.io/badge/-index-4480cc.png)](http:/\
/www.boost.org/development/tests/master/developer/geometry-index.html)       \
                                                                             \
                                                                      |\
 [![documentation](https://github.com/boostorg/geometry/workflows/documentati\
on/badge.svg?branch=master)](https://github.com/boostorg/geometry/actions?que\
ry=branch:master+workflow:documentation)

### Directories

* **doc** - QuickBook documentation sources
* **example** - Boost.Geometry examples
* **_extensions_** - examples and tests for the extensions - _develop branch_
* **include** - the sourcecode of Boost.Geometry
* **index** - examples and tests for the Spatial Index
* **meta** - library metadata
* **test** - Boost.Geometry unit tests

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/geometry
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/geometry
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-algorithm == 1.87.0
depends: libboost-any == 1.87.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-math == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-multiprecision == 1.87.0
depends: libboost-numeric-conversion == 1.87.0
depends: libboost-polygon == 1.87.0
depends: libboost-qvm == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-rational == 1.87.0
depends: libboost-serialization == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-thread == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tokenizer == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-variant == 1.87.0
depends: libboost-variant2 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-geometry

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-geometry-1.87.0.tar.gz
sha256sum: 1c5cff30559919baec79b4ac836bca7114fc7a4376dfb92b56e64afde4697eff
:
name: libboost-gil
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: (C++14) Generic Image Library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
![Boost Generic Image Library (GIL)](https://raw.githubusercontent.com/boosto\
rg/gil/develop/doc/_static/gil.png)

[![Language](https://img.shields.io/badge/C%2B%2B-14-blue.svg)](https://en.wi\
kipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-BSL-blue.svg)](https://opens\
ource.org/licenses/BSL-1.0)
[![Documentation](https://img.shields.io/badge/gil-documentation-blue.svg)](h\
ttp://boostorg.github.com/gil/)
[![Wiki](https://img.shields.io/badge/gil-wiki-blue.svg)](https://github.com/\
boostorg/gil/wiki)
[![Mailing List](https://img.shields.io/badge/gil-mailing%20list-4eb899.svg)]\
(https://lists.boost.org/mailman/listinfo.cgi/boost-gil)
[![Gitter](https://img.shields.io/badge/gil-chat%20on%20gitter-4eb899.svg)](h\
ttps://gitter.im/boostorg/gil)
[![Try it online](https://img.shields.io/badge/on-wandbox-blue.svg)](https://\
wandbox.org/permlink/isNgnMuqWcqTqzy7)
[![Conan](https://img.shields.io/badge/on-conan-blue.svg)](https://bintray.co\
m/bincrafters/public-conan/boost_gil%3Abincrafters)
[![Vcpkg](https://img.shields.io/badge/on-vcpkg-blue.svg)](https://github.com\
/Microsoft/vcpkg/tree/master/ports/boost-gil)

Documentation | GitHub Actions | AppVeyor | Azure Pipelines | Regression |\
 Codecov
--------------|----------------|----------|-----------------|------------|---\
-------
[![develop](https://img.shields.io/badge/doc-develop-blue.svg)](https://boost\
org.github.io/gil/develop/) | [![GitHub Actions](https://github.com/boostorg/\
gil/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/gil/a\
ctions?query=branch:develop) | [![AppVeyor](https://ci.appveyor.com/api/proje\
cts/status/w4k19d8io2af168h/branch/develop?svg=true)](https://ci.appveyor.com\
/project/stefanseefeld/gil/branch/develop) | [![Azure](https://dev.azure.com/\
boostorg/gil/_apis/build/status/boostorg.gil?branchName=develop)](https://dev\
.azure.com/boostorg/gil/_build/latest?definitionId=7&branchName=develop) |\
 [![gil](https://img.shields.io/badge/gil-develop-blue.svg)](http://www.boost\
.org/development/tests/develop/developer/gil.html) | [![codecov](https://code\
cov.io/gh/boostorg/gil/branch/develop/graphs/badge.svg)](https://app.codecov.\
io/gh/boostorg/gil/branch/develop)
[![master](https://img.shields.io/badge/doc-master-blue.svg)](https://boostor\
g.github.io/gil/) | [![GitHub Actions](https://github.com/boostorg/gil/workfl\
ows/CI/badge.svg?branch=master)](https://github.com/boostorg/gil/actions?quer\
y=branch:master) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w\
4k19d8io2af168h?svg=true)](https://ci.appveyor.com/project/stefanseefeld/gil/\
branch/master) | [![Azure](https://dev.azure.com/boostorg/gil/_apis/build/sta\
tus/boostorg.gil?branchName=master)](https://dev.azure.com/boostorg/gil/_buil\
d/latest?definitionId=7&branchName=master) | [![gil](https://img.shields.io/b\
adge/gil-master-blue.svg)](http://www.boost.org/development/tests/master/deve\
loper/gil.html) | [![codecov](https://codecov.io/gh/boostorg/gil/branch/maste\
r/graphs/badge.svg)](https://app.codecov.io/gh/boostorg/gil/branch/master)
 
# Boost.GIL

- [Introduction](#introduction)
- [Documentation](#documentation)
- [Requirements](#requirements)
- [Branches](#branches)
- [Community](#community)
- [Contributing](#contributing-we-need-your-help)
- [License](#license)

## Introduction

Boost.GIL is a part of the [Boost C++ Libraries](http://github.com/boostorg).

The Boost Generic Image Library (GIL) is a **C++14** header-only library that\
 abstracts image
representations from algorithms and allows writing code that can work on a
variety of images with performance similar to hand-writing for a specific\
 image type.

## Documentation

- [Latest release](https://boost.org/libs/gil)
- [Branch master](http://boostorg.github.io/gil/) (latest release with minor\
 changes)
- [Branch develop](http://boostorg.github.io/gil/develop/)

See [RELEASES.md](RELEASES.md) for release notes.

See [CONTRIBUTING.md](CONTRIBUTING.md) for instructions about how to build and
run tests and examples using Boost.Build or CMake.

See [example/README.md](example/README.md) for GIL usage examples.

See [example/b2/README.md](example/b2/README.md) for Boost.Build\
 configuration examples.

See [example/cmake/README.md](example/cmake/README.md) for CMake\
 configuration examples.

## Requirements

The Boost Generic Image Library (GIL) requires:

- C++14 compiler (GCC 6, clang 3.9, MSVC++ 14.1 (1910) or any later version)
- Boost header-only libraries

Optionally, in order to build and run tests and examples:

- Boost.Filesystem
- Boost.Test
- Headers and libraries of libjpeg, libpng, libtiff, libraw for the I/O\
 extension and some of examples.

## Branches

The official repository contains the following branches:

- [**master**](https://github.com/boostorg/gil/tree/master) This
  holds the most recent snapshot with code that is known to be stable.

- [**develop**](https://github.com/boostorg/gil/tree/develop) This
  holds the most recent snapshot. It may contain unstable code.

## Community

There is number of communication channels to ask questions and discuss\
 Boost.GIL issues:

- [GitHub Discussions](https://github.com/boostorg/gil/discussions/)
- Mailing lists ([Boost discussion policy](https://www.boost.org/more/discuss\
ion_policy.html))
    - [boost-gil](https://lists.boost.org/mailman/listinfo.cgi/boost-gil)\
 (*recommended*) official Boost.GIL mailing list ([archive](https://lists.boo\
st.org/boost-gil/))
    - [boost-users](https://lists.boost.org/mailman/listinfo.cgi/boost-users)\
 for all Boost users
    - [boost](https://lists.boost.org/mailman/listinfo.cgi/boost) for all\
 Boost developers
- Slack at [cpplang.slack.com](https://cppalliance.org/slack/) with Boost\
 channels:
    - [\#boost-gil](https://cpplang.slack.com/archives/CSVT0STV2)\
 (*recommended*) official Boost.GIL channel
    - [\#boost-user](https://cpplang.slack.com/messages/CEWTCFDN0/) for all\
 Boost users
    - [\#boost](https://cpplang.slack.com/messages/C27KZLB0X/) for all Boost\
 developers
- Gitter room [boostorg/gil](https://gitter.im/boostorg/gil) (old real-time\
 chat space)
- You can also ask questions via GitHub issue.

## Contributing (We Need Your Help!)

If you would like to contribute to Boost.GIL, help us improve the library
and maintain high quality, there is number of ways to do it.

If you would like to test the library, contribute new feature or a bug fix,
see the [CONTRIBUTING.md](CONTRIBUTING.md) where the whole development
infrastructure and the contributing workflow is explained in details.

You may consider performing code reviews on active
[pull requests](https://github.com/boostorg/gil/pulls) or help
with solving reported issues, especially those labelled with:

- [status/need-help](https://github.com/boostorg/gil/labels/status%2Fneed-hel\
p)
- [status/need-feedback](https://github.com/boostorg/gil/labels/status%2Fneed\
-feedback)
- [need-minimal-example](https://github.com/boostorg/gil/labels/status%2Fneed\
-minimal-example)

Any feedback from users and developers, even simple questions about how\
 things work
or why they were done a certain way, carries value and can be used to improve\
 the library.

## License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/gil
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/gil
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-filesystem == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-variant2 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-gil

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-gil-1.83.0.tar.gz
sha256sum: 11d711840701fa995a011a514d05c049530e033b195972908c52b048229be998
:
name: libboost-gil
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: (C++14) Generic Image Library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
![Boost Generic Image Library (GIL)](https://raw.githubusercontent.com/boosto\
rg/gil/develop/doc/_static/gil.png)

[![Language](https://img.shields.io/badge/C%2B%2B-14-blue.svg)](https://en.wi\
kipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-BSL-blue.svg)](https://opens\
ource.org/licenses/BSL-1.0)
[![Documentation](https://img.shields.io/badge/gil-documentation-blue.svg)](h\
ttp://boostorg.github.com/gil/)
[![Wiki](https://img.shields.io/badge/gil-wiki-blue.svg)](https://github.com/\
boostorg/gil/wiki)
[![Mailing List](https://img.shields.io/badge/gil-mailing%20list-4eb899.svg)]\
(https://lists.boost.org/mailman/listinfo.cgi/boost-gil)
[![Gitter](https://img.shields.io/badge/gil-chat%20on%20gitter-4eb899.svg)](h\
ttps://gitter.im/boostorg/gil)
[![Try it online](https://img.shields.io/badge/on-wandbox-blue.svg)](https://\
wandbox.org/permlink/isNgnMuqWcqTqzy7)
[![Conan](https://img.shields.io/badge/on-conan-blue.svg)](https://bintray.co\
m/bincrafters/public-conan/boost_gil%3Abincrafters)
[![Vcpkg](https://img.shields.io/badge/on-vcpkg-blue.svg)](https://github.com\
/Microsoft/vcpkg/tree/master/ports/boost-gil)

Documentation | GitHub Actions | AppVeyor | Azure Pipelines | Regression |\
 Codecov
--------------|----------------|----------|-----------------|------------|---\
-------
[![develop](https://img.shields.io/badge/doc-develop-blue.svg)](https://boost\
org.github.io/gil/develop/) | [![GitHub Actions](https://github.com/boostorg/\
gil/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/gil/a\
ctions?query=branch:develop) | [![AppVeyor](https://ci.appveyor.com/api/proje\
cts/status/w4k19d8io2af168h/branch/develop?svg=true)](https://ci.appveyor.com\
/project/stefanseefeld/gil/branch/develop) | [![Azure](https://dev.azure.com/\
boostorg/gil/_apis/build/status/boostorg.gil?branchName=develop)](https://dev\
.azure.com/boostorg/gil/_build/latest?definitionId=7&branchName=develop) |\
 [![gil](https://img.shields.io/badge/gil-develop-blue.svg)](http://www.boost\
.org/development/tests/develop/developer/gil.html) | [![codecov](https://code\
cov.io/gh/boostorg/gil/branch/develop/graphs/badge.svg)](https://app.codecov.\
io/gh/boostorg/gil/branch/develop)
[![master](https://img.shields.io/badge/doc-master-blue.svg)](https://boostor\
g.github.io/gil/) | [![GitHub Actions](https://github.com/boostorg/gil/workfl\
ows/CI/badge.svg?branch=master)](https://github.com/boostorg/gil/actions?quer\
y=branch:master) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w\
4k19d8io2af168h?svg=true)](https://ci.appveyor.com/project/stefanseefeld/gil/\
branch/master) | [![Azure](https://dev.azure.com/boostorg/gil/_apis/build/sta\
tus/boostorg.gil?branchName=master)](https://dev.azure.com/boostorg/gil/_buil\
d/latest?definitionId=7&branchName=master) | [![gil](https://img.shields.io/b\
adge/gil-master-blue.svg)](http://www.boost.org/development/tests/master/deve\
loper/gil.html) | [![codecov](https://codecov.io/gh/boostorg/gil/branch/maste\
r/graphs/badge.svg)](https://app.codecov.io/gh/boostorg/gil/branch/master)
 
# Boost.GIL

- [Introduction](#introduction)
- [Documentation](#documentation)
- [Requirements](#requirements)
- [Branches](#branches)
- [Community](#community)
- [Contributing](#contributing-we-need-your-help)
- [License](#license)

## Introduction

Boost.GIL is a part of the [Boost C++ Libraries](http://github.com/boostorg).

The Boost Generic Image Library (GIL) is a **C++14** header-only library that\
 abstracts image
representations from algorithms and allows writing code that can work on a
variety of images with performance similar to hand-writing for a specific\
 image type.

## Documentation

- [Latest release](https://boost.org/libs/gil)
- [Branch master](http://boostorg.github.io/gil/) (latest release with minor\
 changes)
- [Branch develop](http://boostorg.github.io/gil/develop/)

See [RELEASES.md](RELEASES.md) for release notes.

See [CONTRIBUTING.md](CONTRIBUTING.md) for instructions about how to build and
run tests and examples using Boost.Build or CMake.

See [example/README.md](example/README.md) for GIL usage examples.

See [example/b2/README.md](example/b2/README.md) for Boost.Build\
 configuration examples.

See [example/cmake/README.md](example/cmake/README.md) for CMake\
 configuration examples.

## Requirements

The Boost Generic Image Library (GIL) requires:

- C++14 compiler (GCC 6, clang 3.9, MSVC++ 14.1 (1910) or any later version)
- Boost header-only libraries

Optionally, in order to build and run tests and examples:

- Boost.Filesystem
- Boost.Test
- Headers and libraries of libjpeg, libpng, libtiff, libraw for the I/O\
 extension and some of examples.

## Branches

The official repository contains the following branches:

- [**master**](https://github.com/boostorg/gil/tree/master) This
  holds the most recent snapshot with code that is known to be stable.

- [**develop**](https://github.com/boostorg/gil/tree/develop) This
  holds the most recent snapshot. It may contain unstable code.

## Community

There is number of communication channels to ask questions and discuss\
 Boost.GIL issues:

- [GitHub Discussions](https://github.com/boostorg/gil/discussions/)
- Mailing lists ([Boost discussion policy](https://www.boost.org/more/discuss\
ion_policy.html))
    - [boost-gil](https://lists.boost.org/mailman/listinfo.cgi/boost-gil)\
 (*recommended*) official Boost.GIL mailing list ([archive](https://lists.boo\
st.org/boost-gil/))
    - [boost-users](https://lists.boost.org/mailman/listinfo.cgi/boost-users)\
 for all Boost users
    - [boost](https://lists.boost.org/mailman/listinfo.cgi/boost) for all\
 Boost developers
- Slack at [cpplang.slack.com](https://cppalliance.org/slack/) with Boost\
 channels:
    - [\#boost-gil](https://cpplang.slack.com/archives/CSVT0STV2)\
 (*recommended*) official Boost.GIL channel
    - [\#boost-user](https://cpplang.slack.com/messages/CEWTCFDN0/) for all\
 Boost users
    - [\#boost](https://cpplang.slack.com/messages/C27KZLB0X/) for all Boost\
 developers
- Gitter room [boostorg/gil](https://gitter.im/boostorg/gil) (old real-time\
 chat space)
- You can also ask questions via GitHub issue.

## Contributing (We Need Your Help!)

If you would like to contribute to Boost.GIL, help us improve the library
and maintain high quality, there is number of ways to do it.

If you would like to test the library, contribute new feature or a bug fix,
see the [CONTRIBUTING.md](CONTRIBUTING.md) where the whole development
infrastructure and the contributing workflow is explained in details.

You may consider performing code reviews on active
[pull requests](https://github.com/boostorg/gil/pulls) or help
with solving reported issues, especially those labelled with:

- [status/need-help](https://github.com/boostorg/gil/labels/status%2Fneed-hel\
p)
- [status/need-feedback](https://github.com/boostorg/gil/labels/status%2Fneed\
-feedback)
- [need-minimal-example](https://github.com/boostorg/gil/labels/status%2Fneed\
-minimal-example)

Any feedback from users and developers, even simple questions about how\
 things work
or why they were done a certain way, carries value and can be used to improve\
 the library.

## License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/gil
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/gil
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-filesystem == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-variant2 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-gil

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-gil-1.85.0.tar.gz
sha256sum: 1a33901cb985657a459ec686d4b3567a780797c4609ce1bf1ac11af758823e1c
:
name: libboost-gil
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: (C++14) Generic Image Library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
![Boost Generic Image Library (GIL)](https://raw.githubusercontent.com/boosto\
rg/gil/develop/doc/_static/gil.png)

[![Language](https://img.shields.io/badge/C%2B%2B-14-blue.svg)](https://en.wi\
kipedia.org/wiki/C%2B%2B#Standardization)
[![License](https://img.shields.io/badge/license-BSL-blue.svg)](https://opens\
ource.org/licenses/BSL-1.0)
[![Documentation](https://img.shields.io/badge/gil-documentation-blue.svg)](h\
ttp://boostorg.github.com/gil/)
[![Wiki](https://img.shields.io/badge/gil-wiki-blue.svg)](https://github.com/\
boostorg/gil/wiki)
[![Mailing List](https://img.shields.io/badge/gil-mailing%20list-4eb899.svg)]\
(https://lists.boost.org/mailman/listinfo.cgi/boost-gil)
[![Gitter](https://img.shields.io/badge/gil-chat%20on%20gitter-4eb899.svg)](h\
ttps://gitter.im/boostorg/gil)
[![Try it online](https://img.shields.io/badge/on-wandbox-blue.svg)](https://\
wandbox.org/permlink/isNgnMuqWcqTqzy7)
[![Conan](https://img.shields.io/badge/on-conan-blue.svg)](https://bintray.co\
m/bincrafters/public-conan/boost_gil%3Abincrafters)
[![Vcpkg](https://img.shields.io/badge/on-vcpkg-blue.svg)](https://github.com\
/Microsoft/vcpkg/tree/master/ports/boost-gil)

Documentation | GitHub Actions | AppVeyor | Regression | Codecov
--------------|----------------|----------|------------|----------
[![develop](https://img.shields.io/badge/doc-develop-blue.svg)](https://boost\
org.github.io/gil/develop/) | [![GitHub Actions](https://github.com/boostorg/\
gil/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/gil/a\
ctions?query=branch:develop) | [![AppVeyor](https://ci.appveyor.com/api/proje\
cts/status/w4k19d8io2af168h/branch/develop?svg=true)](https://ci.appveyor.com\
/project/stefanseefeld/gil/branch/develop) | [![gil](https://img.shields.io/b\
adge/gil-develop-blue.svg)](http://www.boost.org/development/tests/develop/de\
veloper/gil.html) | [![codecov](https://codecov.io/gh/boostorg/gil/branch/dev\
elop/graphs/badge.svg)](https://app.codecov.io/gh/boostorg/gil/branch/develop)
[![master](https://img.shields.io/badge/doc-master-blue.svg)](https://boostor\
g.github.io/gil/) | [![GitHub Actions](https://github.com/boostorg/gil/workfl\
ows/CI/badge.svg?branch=master)](https://github.com/boostorg/gil/actions?quer\
y=branch:master) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w\
4k19d8io2af168h?svg=true)](https://ci.appveyor.com/project/stefanseefeld/gil/\
branch/master) | [![gil](https://img.shields.io/badge/gil-master-blue.svg)](h\
ttp://www.boost.org/development/tests/master/developer/gil.html) |\
 [![codecov](https://codecov.io/gh/boostorg/gil/branch/master/graphs/badge.sv\
g)](https://app.codecov.io/gh/boostorg/gil/branch/master)
 
# Boost.GIL

- [Introduction](#introduction)
- [Documentation](#documentation)
- [Requirements](#requirements)
- [Branches](#branches)
- [Community](#community)
- [Contributing](#contributing-we-need-your-help)
- [License](#license)

## Introduction

Boost.GIL is a part of the [Boost C++ Libraries](http://github.com/boostorg).

The Boost Generic Image Library (GIL) is a **C++14** header-only library that\
 abstracts image
representations from algorithms and allows writing code that can work on a
variety of images with performance similar to hand-writing for a specific\
 image type.

## Documentation

- [Latest release](https://boost.org/libs/gil)
- [Branch master](http://boostorg.github.io/gil/) (latest release with minor\
 changes)
- [Branch develop](http://boostorg.github.io/gil/develop/)

See [RELEASES.md](RELEASES.md) for release notes.

See [CONTRIBUTING.md](CONTRIBUTING.md) for instructions about how to build and
run tests and examples using Boost.Build or CMake.

See [example/README.md](example/README.md) for GIL usage examples.

See [example/b2/README.md](example/b2/README.md) for Boost.Build\
 configuration examples.

See [example/cmake/README.md](example/cmake/README.md) for CMake\
 configuration examples.

## Requirements

The Boost Generic Image Library (GIL) requires:

- C++14 compiler (GCC 6, clang 3.9, MSVC++ 14.1 (1910) or any later version)
- Boost header-only libraries

Optionally, in order to build and run tests and examples:

- Boost.Filesystem
- Boost.Test
- Headers and libraries of libjpeg, libpng, libtiff, libraw for the I/O\
 extension and some of examples.

## Branches

The official repository contains the following branches:

- [**master**](https://github.com/boostorg/gil/tree/master) This
  holds the most recent snapshot with code that is known to be stable.

- [**develop**](https://github.com/boostorg/gil/tree/develop) This
  holds the most recent snapshot. It may contain unstable code.

## Community

There is number of communication channels to ask questions and discuss\
 Boost.GIL issues:

- [GitHub Discussions](https://github.com/boostorg/gil/discussions/)
- Mailing lists ([Boost discussion policy](https://www.boost.org/more/discuss\
ion_policy.html))
    - [boost-gil](https://lists.boost.org/mailman/listinfo.cgi/boost-gil)\
 (*recommended*) official Boost.GIL mailing list ([archive](https://lists.boo\
st.org/boost-gil/))
    - [boost-users](https://lists.boost.org/mailman/listinfo.cgi/boost-users)\
 for all Boost users
    - [boost](https://lists.boost.org/mailman/listinfo.cgi/boost) for all\
 Boost developers
- Slack at [cpplang.slack.com](https://cppalliance.org/slack/) with Boost\
 channels:
    - [\#boost-gil](https://cpplang.slack.com/archives/CSVT0STV2)\
 (*recommended*) official Boost.GIL channel
    - [\#boost-user](https://cpplang.slack.com/messages/CEWTCFDN0/) for all\
 Boost users
    - [\#boost](https://cpplang.slack.com/messages/C27KZLB0X/) for all Boost\
 developers
- Gitter room [boostorg/gil](https://gitter.im/boostorg/gil) (old real-time\
 chat space)
- You can also ask questions via GitHub issue.

## Contributing (We Need Your Help!)

If you would like to contribute to Boost.GIL, help us improve the library
and maintain high quality, there is number of ways to do it.

If you would like to test the library, contribute new feature or a bug fix,
see the [CONTRIBUTING.md](CONTRIBUTING.md) where the whole development
infrastructure and the contributing workflow is explained in details.

You may consider performing code reviews on active
[pull requests](https://github.com/boostorg/gil/pulls) or help
with solving reported issues, especially those labelled with:

- [status/need-help](https://github.com/boostorg/gil/labels/status%2Fneed-hel\
p)
- [status/need-feedback](https://github.com/boostorg/gil/labels/status%2Fneed\
-feedback)
- [need-minimal-example](https://github.com/boostorg/gil/labels/status%2Fneed\
-minimal-example)

Any feedback from users and developers, even simple questions about how\
 things work
or why they were done a certain way, carries value and can be used to improve\
 the library.

## License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/gil
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/gil
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-filesystem == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-variant2 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-gil

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-gil-1.87.0.tar.gz
sha256sum: 129f3971ef4b4ecb6fe64de3d857b0f28eafc88f5da9cef43a6667c5489fa703
:
name: libboost-graph
version: 1.83.0
language: c++
project: boost
summary: The BGL graph interface and graph components are generic, in the\
 same sense as the Standard Template Library (STL)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Graph Library  [![Build Status](https://drone.cpp.al/api/badges/boostor\
g/graph/status.svg)](https://drone.cpp.al/boostorg/graph)[![Build\
 Status](https://github.com/boostorg/graph/workflows/CI/badge.svg?branch=deve\
lop)](https://github.com/boostorg/graph/actions)

===================

A generic interface for traversing graphs, using C++ templates.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/graph/doc/index.html).

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Github issue\
 page](https://github.com/boostorg/graph/issues).

See also:

* [Current open issues](https://github.com/boostorg/graph/issues)
* [Closed issues](https://github.com/boostorg/graph/issues?utf8=%E2%9C%93&q=i\
s%3Aissue+is%3Aclosed)
* Old issues still open on [Trac](https://svn.boost.org/trac/boost/query?stat\
us=!closed&component=graph&desc=1&order=id)
* Closed issues on [Trac](https://svn.boost.org/trac/boost/query?status=close\
d&component=graph&col=id&col=summary&col=status&col=owner&col=type&col=milest\
one&col=version&desc=1&order=id)

You can submit your changes through a [pull request](https://github.com/boost\
org/graph/pulls). One of the maintainers will take a look (remember that it\
 can take some time).

There is no mailing-list specific to Boost Graph, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [graph].


## Development ##

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Github Actions | [![Build Status](https://github.com/boostorg/graph/workflo\
ws/CI/badge.svg?branch=master)](https://github.com/boostorg/graph/actions) |\
 [![Build Status](https://github.com/boostorg/graph/workflows/CI/badge.svg?br\
anch=develop)](https://github.com/boostorg/graph/actions) |
|Drone | [![Build Status](https://drone.cpp.al/api/badges/boostorg/graph/stat\
us.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/graph) |\
 [![Build Status](https://drone.cpp.al/api/badges/boostorg/graph/status.svg)]\
(https:/drone.cpp.al/boostorg/graph) |

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)):

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Graph Library is located in `libs/graph/`.

Boost Graph Library is mostly made of headers but also contains some compiled\
 components. Here are the build commands:

    ./bootstrap.sh            <- compile b2
    ./b2 headers              <- just installs headers
    ./b2                      <- build compiled components

**Note:** The Boost Graph Library cannot currently be built outside of Boost\
 itself.

### Running tests ###
First, make sure you are in `libs/graph/test`.
You can either run all the 300+ tests listed in `Jamfile.v2` or run a single\
 test:

    ../../../b2                        <- run all tests
    ../../../b2 cycle_canceling_test   <- single test

You can also check the [regression tests reports](http://beta.boost.org/devel\
opment/tests/develop/developer/graph.html).

\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-graph

The `build2` package of `libboost-graph` supports the following configuration
variables:


### `config.libboost_graph.graphviz`

Enable graphviz input support. Default is `false`. Note that enabling this
support will cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/graph
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/graph
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-regex == 1.83.0 ? ($config.libboost_graph.graphviz)
depends: libboost-algorithm == 1.83.0
depends: libboost-any == 1.83.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bimap == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-conversion == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-foreach == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-math == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-multi-index == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-property-map == 1.83.0
depends: libboost-property-tree == 1.83.0
depends: libboost-random == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-serialization == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends:
\
libboost-spirit == 1.83.0
{
  enable ($config.libboost_graph.graphviz)

  require
  {
    config.libboost_spirit.classic = true
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tti == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-unordered == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-xpressive == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-graph

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_graph.graphviz ?= false

\
location: boost/libboost-graph-1.83.0.tar.gz
sha256sum: d2b8a273344fd26e1ecb802463f6a7ddb31dd006d834231a422fe1f5c38dcdf4
:
name: libboost-graph
version: 1.85.0
language: c++
project: boost
summary: The BGL graph interface and graph components are generic, in the\
 same sense as the Standard Template Library (STL)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Graph Library  [![Build Status](https://drone.cpp.al/api/badges/boostor\
g/graph/status.svg)](https://drone.cpp.al/boostorg/graph)[![Build\
 Status](https://github.com/boostorg/graph/workflows/CI/badge.svg?branch=deve\
lop)](https://github.com/boostorg/graph/actions)

===================

A generic interface for traversing graphs, using C++ templates.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/graph/doc/index.html).

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Github issue\
 page](https://github.com/boostorg/graph/issues).

See also:

* [Current open issues](https://github.com/boostorg/graph/issues)
* [Closed issues](https://github.com/boostorg/graph/issues?utf8=%E2%9C%93&q=i\
s%3Aissue+is%3Aclosed)
* Old issues still open on [Trac](https://svn.boost.org/trac/boost/query?stat\
us=!closed&component=graph&desc=1&order=id)
* Closed issues on [Trac](https://svn.boost.org/trac/boost/query?status=close\
d&component=graph&col=id&col=summary&col=status&col=owner&col=type&col=milest\
one&col=version&desc=1&order=id)

You can submit your changes through a [pull request](https://github.com/boost\
org/graph/pulls). One of the maintainers will take a look (remember that it\
 can take some time).

There is no mailing-list specific to Boost Graph, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [graph].


## Development ##

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Github Actions | [![Build Status](https://github.com/boostorg/graph/workflo\
ws/CI/badge.svg?branch=master)](https://github.com/boostorg/graph/actions) |\
 [![Build Status](https://github.com/boostorg/graph/workflows/CI/badge.svg?br\
anch=develop)](https://github.com/boostorg/graph/actions) |
|Drone | [![Build Status](https://drone.cpp.al/api/badges/boostorg/graph/stat\
us.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/graph) |\
 [![Build Status](https://drone.cpp.al/api/badges/boostorg/graph/status.svg)]\
(https:/drone.cpp.al/boostorg/graph) |

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)):

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Graph Library is located in `libs/graph/`.

Boost Graph Library is mostly made of headers but also contains some compiled\
 components. Here are the build commands:

    ./bootstrap.sh            <- compile b2
    ./b2 headers              <- just installs headers
    ./b2                      <- build compiled components

**Note:** The Boost Graph Library cannot currently be built outside of Boost\
 itself.

### Running tests ###
First, make sure you are in `libs/graph/test`.
You can either run all the 300+ tests listed in `Jamfile.v2` or run a single\
 test:

    ../../../b2                        <- run all tests
    ../../../b2 cycle_canceling_test   <- single test

You can also check the [regression tests reports](http://beta.boost.org/devel\
opment/tests/develop/developer/graph.html).

\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-graph

The `build2` package of `libboost-graph` supports the following configuration
variables:


### `config.libboost_graph.graphviz`

Enable graphviz input support. Default is `false`. Note that enabling this
support will cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/graph
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/graph
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-regex == 1.85.0 ? ($config.libboost_graph.graphviz)
depends: libboost-algorithm == 1.85.0
depends: libboost-any == 1.85.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-bimap == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-conversion == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-foreach == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-math == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-multi-index == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-property-map == 1.85.0
depends: libboost-property-tree == 1.85.0
depends: libboost-random == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-serialization == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends:
\
libboost-spirit == 1.85.0
{
  enable ($config.libboost_graph.graphviz)

  require
  {
    config.libboost_spirit.classic = true
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tti == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-unordered == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-xpressive == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-graph

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_graph.graphviz ?= false

\
location: boost/libboost-graph-1.85.0.tar.gz
sha256sum: 27e885894feb4701f9011b1df5bd3ad23acadf4e5510b5dbb632daf0543a7ae7
:
name: libboost-graph
version: 1.87.0
language: c++
project: boost
summary: The BGL graph interface and graph components are generic, in the\
 same sense as the Standard Template Library (STL)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Graph Library  [![Build Status](https://drone.cpp.al/api/badges/boostor\
g/graph/status.svg)](https://drone.cpp.al/boostorg/graph)[![Build\
 Status](https://github.com/boostorg/graph/workflows/CI/badge.svg?branch=deve\
lop)](https://github.com/boostorg/graph/actions)

===================

A generic interface for traversing graphs, using C++ templates.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/graph/doc/index.html).

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Github issue\
 page](https://github.com/boostorg/graph/issues).

See also:

* [Current open issues](https://github.com/boostorg/graph/issues)
* [Closed issues](https://github.com/boostorg/graph/issues?utf8=%E2%9C%93&q=i\
s%3Aissue+is%3Aclosed)
* Old issues still open on [Trac](https://svn.boost.org/trac/boost/query?stat\
us=!closed&component=graph&desc=1&order=id)
* Closed issues on [Trac](https://svn.boost.org/trac/boost/query?status=close\
d&component=graph&col=id&col=summary&col=status&col=owner&col=type&col=milest\
one&col=version&desc=1&order=id)

You can submit your changes through a [pull request](https://github.com/boost\
org/graph/pulls). One of the maintainers will take a look (remember that it\
 can take some time).

There is no mailing-list specific to Boost Graph, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [graph].


## Development ##

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Github Actions | [![Build Status](https://github.com/boostorg/graph/workflo\
ws/CI/badge.svg?branch=master)](https://github.com/boostorg/graph/actions) |\
 [![Build Status](https://github.com/boostorg/graph/workflows/CI/badge.svg?br\
anch=develop)](https://github.com/boostorg/graph/actions) |
|Drone | [![Build Status](https://drone.cpp.al/api/badges/boostorg/graph/stat\
us.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/graph) |\
 [![Build Status](https://drone.cpp.al/api/badges/boostorg/graph/status.svg)]\
(https:/drone.cpp.al/boostorg/graph) |

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)):

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Graph Library is located in `libs/graph/`.

Boost Graph Library is mostly made of headers but also contains some compiled\
 components. Here are the build commands:

    ./bootstrap.sh            <- compile b2
    ./b2 headers              <- just installs headers
    ./b2                      <- build compiled components

**Note:** The Boost Graph Library cannot currently be built outside of Boost\
 itself.

### Running tests ###
First, make sure you are in `libs/graph/test`.
You can either run all the 300+ tests listed in `Jamfile.v2` or run a single\
 test:

    ../../../b2                        <- run all tests
    ../../../b2 cycle_canceling_test   <- single test

You can also check the [regression tests reports](http://beta.boost.org/devel\
opment/tests/develop/developer/graph.html).

\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-graph

The `build2` package of `libboost-graph` supports the following configuration
variables:


### `config.libboost_graph.graphviz`

Enable graphviz input support. Default is `false`. Note that enabling this
support will cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/graph
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/graph
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-regex == 1.87.0 ? ($config.libboost_graph.graphviz)
depends: libboost-algorithm == 1.87.0
depends: libboost-any == 1.87.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-bimap == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-conversion == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-foreach == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-math == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-multi-index == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-property-map == 1.87.0
depends: libboost-property-tree == 1.87.0
depends: libboost-random == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-serialization == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends:
\
libboost-spirit == 1.87.0
{
  enable ($config.libboost_graph.graphviz)

  require
  {
    config.libboost_spirit.classic = true
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tti == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-unordered == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-xpressive == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-graph

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_graph.graphviz ?= false

\
location: boost/libboost-graph-1.87.0.tar.gz
sha256sum: c82f86fd5e7b4c9136eb71b990f3b895bed6f1d44e2807200b727f2e0b4df09a
:
name: libboost-hana
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A modern C++ metaprogramming library. It provides high level\
 algorithms to manipulate heterogeneous sequences, allows writing type-level\
 computations with a natural syntax, provides tools to introspect\
 user-defined types and much more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Hana <a target="_blank" href="http://semver.org">![Version][badge.ver\
sion]</a> <a target="_blank" href="https://travis-ci.org/boostorg/hana">![Tra\
vis status][badge.Travis]</a> <a target="_blank" href="https://ci.appveyor.co\
m/project/ldionne/hana">![Appveyor status][badge.Appveyor]</a> <a\
 target="_blank" href="https://godbolt.org/z/36MvzMb7n">![Try it\
 online][badge.tryit]</a> <a target="_blank" href="https://gitter.im/boostorg\
/hana">![Gitter Chat][badge.Gitter]</a>

> Your standard library for metaprogramming

## Overview
<!-- Important: keep this in sync with example/overview.cpp -->
```cpp
#include <boost/hana.hpp>
#include <cassert>
#include <string>
namespace hana = boost::hana;
using namespace hana::literals;

struct Fish { std::string name; };
struct Cat  { std::string name; };
struct Dog  { std::string name; };

int main() {
  // Sequences capable of holding heterogeneous objects, and algorithms
  // to manipulate them.
  auto animals = hana::make_tuple(Fish{"Nemo"}, Cat{"Garfield"},\
 Dog{"Snoopy"});
  auto names = hana::transform(animals, [](auto a) {
    return a.name;
  });
  assert(hana::reverse(names) == hana::make_tuple("Snoopy", "Garfield",\
 "Nemo"));

  // No compile-time information is lost: even if `animals` can't be a
  // constant expression because it contains strings, its length is constexpr.
  static_assert(hana::length(animals) == 3u, "");

  // Computations on types can be performed with the same syntax as that of
  // normal C++. Believe it or not, everything is done at compile-time.
  auto animal_types = hana::make_tuple(hana::type_c<Fish*>,\
 hana::type_c<Cat&>, hana::type_c<Dog*>);
  auto animal_ptrs = hana::filter(animal_types, [](auto a) {
    return hana::traits::is_pointer(a);
  });
  static_assert(animal_ptrs == hana::make_tuple(hana::type_c<Fish*>,\
 hana::type_c<Dog*>), "");

  // And many other goodies to make your life easier, including:
  // 1. Access to elements in a tuple with a sane syntax.
  static_assert(animal_ptrs[0_c] == hana::type_c<Fish*>, "");
  static_assert(animal_ptrs[1_c] == hana::type_c<Dog*>, "");

  // 2. Unroll loops at compile-time without hassle.
  std::string s;
  hana::int_c<10>.times([&]{ s += "x"; });
  // equivalent to s += "x"; s += "x"; ... s += "x";

  // 3. Easily check whether an expression is valid.
  //    This is usually achieved with complex SFINAE-based tricks.
  auto has_name = hana::is_valid([](auto&& x) -> decltype((void)x.name) { });
  static_assert(has_name(animals[0_c]), "");
  static_assert(!has_name(1), "");
}
```


## Documentation
You can browse the documentation online at http://boostorg.github.io/hana.
The documentation covers everything you should need including installing the
library, a tutorial explaining what Hana is and how to use it, and an\
 extensive
reference section with examples. The remainder of this README is mostly for
people that wish to work on the library itself, not for its users.

An offline copy of the documentation can be obtained by checking out the
`gh-pages` branch. To avoid overwriting the current directory, you can clone
the `gh-pages` branch into a subdirectory like `doc/html`:
```shell
git clone http://github.com/boostorg/hana --branch=gh-pages --depth=1 doc/html
```

After issuing this, `doc/html` will contain exactly the same static website
that is [available online][Hana.docs]. Note that `doc/html` is automatically
ignored by Git so updating the documentation won't pollute your index.


## Hacking on Hana
Setting yourself up to work on Hana is easy. First, you will need an
installation of [CMake][]. Once this is done, you can `cd` to the root
of the project and setup the build directory:
```shell
mkdir build
cmake -S . -B build
```

Sometimes, you'll want to specify a custom compiler because the system's
compiler is too old:
```shell
cmake -S . -B build -DCMAKE_CXX_COMPILER=/path/to/compiler
```

Usually, this will work just fine. However, on some older systems, the\
 standard
library and/or compiler provided by default does not support C++14. If
this is your case, the [wiki][Hana.wiki] has more information about
setting you up on different systems.

Normally, Hana tries to find Boost headers if you have them on your system.
It's also fine if you don't have them; a few tests requiring the Boost headers
will be disabled in that case. However, if you'd like Hana to use a custom
installation of Boost, you can specify the path to this custom installation:
```shell
cmake -S . -B build -DCMAKE_CXX_COMPILER=/path/to/compiler\
 -DBOOST_ROOT=/path/to/boost
```

You can now build and run the unit tests and the examples:
```shell
cmake --build build --target check
```

You should be aware that compiling the unit tests is pretty time and RAM
consuming, especially the tests for external adapters. This is due to the
fact that Hana's unit tests are very thorough, and also that heterogeneous
sequences in other libraries tend to have horrible compile-time performance.

There are also optional targets which are enabled only when the required
software is available on your computer. For example, generating the
documentation requires [Doxygen][] to be installed. An informative message
will be printed during the CMake generation step whenever an optional target
is disabled. You can install any missing software and then re-run the CMake
generation to update the list of available targets.

> #### Tip
> You can use the `help` target to get a list of all the available targets.

If you want to add unit tests or examples, just add a source file in `test/`
or `example/` and then re-run the CMake generation step so the new source
file is known to the build system. Let's suppose the relative path from the
root of the project to the new source file is `path/to/file.cpp`. When you
re-run the CMake generation step, a new target named `path.to.file` will be
created, and a test of the same name will also be created. Hence,
```shell
cmake --build build --target path.to.file # Builds the program associated to\
 path/to/file.cpp
cd build && ctest -R path.to.file # Runs the program as a test
```

> #### Tip for Sublime Text users
> If you use the provided [hana.sublime-project](hana.sublime-project) file,
> you can select the "[Hana] Build current file" build system. When viewing a
> file to which a target is associated (like a test or an example), you can
> then compile it by pressing ⌘B, or compile and then run it using ⇧⌘B.


## Project organization
The project is organized in a couple of subdirectories.
- The [benchmark](benchmark) directory contains compile-time and runtime
  benchmarks to make sure the library is as fast as advertised. The benchmark
  code is written mostly in the form of [eRuby][] templates. The templates
  are used to generate C++ files which are then compiled while gathering
  compilation and execution statistics.
- The [cmake](cmake) directory contains various CMake modules and other
  scripts needed by the build system.
- The [doc](doc) directory contains configuration files needed to generate
  the documentation. The `doc/html` subdirectory is automatically ignored
  by Git; you can conveniently store a local copy of the documentation by
  cloning the `gh-pages` branch into that directory, as explained above.
- The [example](example) directory contains the source code for all the
  examples of both the tutorial and the reference documentation.
- The [include](include) directory contains the library itself, which is
  header only.
- The [test](test) directory contains the source code for all the unit tests.


## Contributing
Please see [CONTRIBUTING.md](CONTRIBUTING.md).


## License
Please see [LICENSE.md](LICENSE.md).


## Releasing
Releasing is now done exclusively via the Boost release process. There are no
separate releases of Hana since the library is now pretty stable.


<!-- Links -->
[badge.Appveyor]: https://ci.appveyor.com/api/projects/status/github/boostorg\
/hana?svg=true&branch=master
[badge.Gitter]: https://img.shields.io/badge/gitter-join%20chat-blue.svg
[badge.Travis]: https://travis-ci.org/boostorg/hana.svg?branch=master
[badge.version]: https://badge.fury.io/gh/boostorg%2Fhana.svg
[badge.tryit]: https://img.shields.io/badge/try%20it-online-blue.svg
[CMake]: http://www.cmake.org
[Doxygen]: http://www.doxygen.org
[eRuby]: http://en.wikipedia.org/wiki/ERuby
[Hana.docs]: http://boostorg.github.io/hana
[Hana.wiki]: https://github.com/boostorg/hana/wiki

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/hana
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/hana
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-tuple == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-hana

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-hana-1.83.0.tar.gz
sha256sum: 72d73da35637e0f8caf34c80ef6d3fba49b50b563b7c2dd7bed2a2938373b057
:
name: libboost-hana
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A modern C++ metaprogramming library. It provides high level\
 algorithms to manipulate heterogeneous sequences, allows writing type-level\
 computations with a natural syntax, provides tools to introspect\
 user-defined types and much more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Hana <a target="_blank" href="http://semver.org">![Version][badge.ver\
sion]</a> <a target="_blank" href="https://travis-ci.org/boostorg/hana">![Tra\
vis status][badge.Travis]</a> <a target="_blank" href="https://ci.appveyor.co\
m/project/ldionne/hana">![Appveyor status][badge.Appveyor]</a> <a\
 target="_blank" href="https://godbolt.org/z/36MvzMb7n">![Try it\
 online][badge.tryit]</a> <a target="_blank" href="https://gitter.im/boostorg\
/hana">![Gitter Chat][badge.Gitter]</a>

> Your standard library for metaprogramming

## Overview
<!-- Important: keep this in sync with example/overview.cpp -->
```cpp
#include <boost/hana.hpp>
#include <cassert>
#include <string>
namespace hana = boost::hana;
using namespace hana::literals;

struct Fish { std::string name; };
struct Cat  { std::string name; };
struct Dog  { std::string name; };

int main() {
  // Sequences capable of holding heterogeneous objects, and algorithms
  // to manipulate them.
  auto animals = hana::make_tuple(Fish{"Nemo"}, Cat{"Garfield"},\
 Dog{"Snoopy"});
  auto names = hana::transform(animals, [](auto a) {
    return a.name;
  });
  assert(hana::reverse(names) == hana::make_tuple("Snoopy", "Garfield",\
 "Nemo"));

  // No compile-time information is lost: even if `animals` can't be a
  // constant expression because it contains strings, its length is constexpr.
  static_assert(hana::length(animals) == 3u, "");

  // Computations on types can be performed with the same syntax as that of
  // normal C++. Believe it or not, everything is done at compile-time.
  auto animal_types = hana::make_tuple(hana::type_c<Fish*>,\
 hana::type_c<Cat&>, hana::type_c<Dog*>);
  auto animal_ptrs = hana::filter(animal_types, [](auto a) {
    return hana::traits::is_pointer(a);
  });
  static_assert(animal_ptrs == hana::make_tuple(hana::type_c<Fish*>,\
 hana::type_c<Dog*>), "");

  // And many other goodies to make your life easier, including:
  // 1. Access to elements in a tuple with a sane syntax.
  static_assert(animal_ptrs[0_c] == hana::type_c<Fish*>, "");
  static_assert(animal_ptrs[1_c] == hana::type_c<Dog*>, "");

  // 2. Unroll loops at compile-time without hassle.
  std::string s;
  hana::int_c<10>.times([&]{ s += "x"; });
  // equivalent to s += "x"; s += "x"; ... s += "x";

  // 3. Easily check whether an expression is valid.
  //    This is usually achieved with complex SFINAE-based tricks.
  auto has_name = hana::is_valid([](auto&& x) -> decltype((void)x.name) { });
  static_assert(has_name(animals[0_c]), "");
  static_assert(!has_name(1), "");
}
```


## Documentation
You can browse the documentation online at http://boostorg.github.io/hana.
The documentation covers everything you should need including installing the
library, a tutorial explaining what Hana is and how to use it, and an\
 extensive
reference section with examples. The remainder of this README is mostly for
people that wish to work on the library itself, not for its users.

An offline copy of the documentation can be obtained by checking out the
`gh-pages` branch. To avoid overwriting the current directory, you can clone
the `gh-pages` branch into a subdirectory like `doc/html`:
```shell
git clone http://github.com/boostorg/hana --branch=gh-pages --depth=1 doc/html
```

After issuing this, `doc/html` will contain exactly the same static website
that is [available online][Hana.docs]. Note that `doc/html` is automatically
ignored by Git so updating the documentation won't pollute your index.


## Hacking on Hana
Setting yourself up to work on Hana is easy. First, you will need an
installation of [CMake][]. Once this is done, you can `cd` to the root
of the project and setup the build directory:
```shell
mkdir build
cmake -S . -B build
```

Sometimes, you'll want to specify a custom compiler because the system's
compiler is too old:
```shell
cmake -S . -B build -DCMAKE_CXX_COMPILER=/path/to/compiler
```

Usually, this will work just fine. However, on some older systems, the\
 standard
library and/or compiler provided by default does not support C++14. If
this is your case, the [wiki][Hana.wiki] has more information about
setting you up on different systems.

Normally, Hana tries to find Boost headers if you have them on your system.
It's also fine if you don't have them; a few tests requiring the Boost headers
will be disabled in that case. However, if you'd like Hana to use a custom
installation of Boost, you can specify the path to this custom installation:
```shell
cmake -S . -B build -DCMAKE_CXX_COMPILER=/path/to/compiler\
 -DBOOST_ROOT=/path/to/boost
```

You can now build and run the unit tests and the examples:
```shell
cmake --build build --target check
```

You should be aware that compiling the unit tests is pretty time and RAM
consuming, especially the tests for external adapters. This is due to the
fact that Hana's unit tests are very thorough, and also that heterogeneous
sequences in other libraries tend to have horrible compile-time performance.

There are also optional targets which are enabled only when the required
software is available on your computer. For example, generating the
documentation requires [Doxygen][] to be installed. An informative message
will be printed during the CMake generation step whenever an optional target
is disabled. You can install any missing software and then re-run the CMake
generation to update the list of available targets.

> #### Tip
> You can use the `help` target to get a list of all the available targets.

If you want to add unit tests or examples, just add a source file in `test/`
or `example/` and then re-run the CMake generation step so the new source
file is known to the build system. Let's suppose the relative path from the
root of the project to the new source file is `path/to/file.cpp`. When you
re-run the CMake generation step, a new target named `path.to.file` will be
created, and a test of the same name will also be created. Hence,
```shell
cmake --build build --target path.to.file # Builds the program associated to\
 path/to/file.cpp
ctest --test-dir build -R path.to.file # Runs the program as a test
```

> #### Tip for Sublime Text users
> If you use the provided [hana.sublime-project](hana.sublime-project) file,
> you can select the "[Hana] Build current file" build system. When viewing a
> file to which a target is associated (like a test or an example), you can
> then compile it by pressing ⌘B, or compile and then run it using ⇧⌘B.


## Project organization
The project is organized in a couple of subdirectories.
- The [benchmark](benchmark) directory contains compile-time and runtime
  benchmarks to make sure the library is as fast as advertised. The benchmark
  code is written mostly in the form of [eRuby][] templates. The templates
  are used to generate C++ files which are then compiled while gathering
  compilation and execution statistics.
- The [cmake](cmake) directory contains various CMake modules and other
  scripts needed by the build system.
- The [doc](doc) directory contains configuration files needed to generate
  the documentation. The `doc/html` subdirectory is automatically ignored
  by Git; you can conveniently store a local copy of the documentation by
  cloning the `gh-pages` branch into that directory, as explained above.
- The [example](example) directory contains the source code for all the
  examples of both the tutorial and the reference documentation.
- The [include](include) directory contains the library itself, which is
  header only.
- The [test](test) directory contains the source code for all the unit tests.


## Contributing
Please see [CONTRIBUTING.md](CONTRIBUTING.md).


## License
Please see [LICENSE.md](LICENSE.md).


## Releasing
Releasing is now done exclusively via the Boost release process. There are no
separate releases of Hana since the library is now pretty stable.


<!-- Links -->
[badge.Appveyor]: https://ci.appveyor.com/api/projects/status/github/boostorg\
/hana?svg=true&branch=master
[badge.Gitter]: https://img.shields.io/badge/gitter-join%20chat-blue.svg
[badge.Travis]: https://travis-ci.org/boostorg/hana.svg?branch=master
[badge.version]: https://badge.fury.io/gh/boostorg%2Fhana.svg
[badge.tryit]: https://img.shields.io/badge/try%20it-online-blue.svg
[CMake]: http://www.cmake.org
[Doxygen]: http://www.doxygen.org
[eRuby]: http://en.wikipedia.org/wiki/ERuby
[Hana.docs]: http://boostorg.github.io/hana
[Hana.wiki]: https://github.com/boostorg/hana/wiki

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/hana
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/hana
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-tuple == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-hana

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-hana-1.85.0.tar.gz
sha256sum: b89415f23ecc4f44a33df9cd158430a568eab77dd4f12e3e6fe5b042d0f49c68
:
name: libboost-hana
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A modern C++ metaprogramming library. It provides high level\
 algorithms to manipulate heterogeneous sequences, allows writing type-level\
 computations with a natural syntax, provides tools to introspect\
 user-defined types and much more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Hana <a target="_blank" href="http://semver.org">![Version][badge.ver\
sion]</a> <a target="_blank" href="https://travis-ci.org/boostorg/hana">![Tra\
vis status][badge.Travis]</a> <a target="_blank" href="https://ci.appveyor.co\
m/project/ldionne/hana">![Appveyor status][badge.Appveyor]</a> <a\
 target="_blank" href="https://godbolt.org/z/36MvzMb7n">![Try it\
 online][badge.tryit]</a> <a target="_blank" href="https://gitter.im/boostorg\
/hana">![Gitter Chat][badge.Gitter]</a>

> Your standard library for metaprogramming

## Overview
<!-- Important: keep this in sync with example/overview.cpp -->
```cpp
#include <boost/hana.hpp>
#include <cassert>
#include <string>
namespace hana = boost::hana;
using namespace hana::literals;

struct Fish { std::string name; };
struct Cat  { std::string name; };
struct Dog  { std::string name; };

int main() {
  // Sequences capable of holding heterogeneous objects, and algorithms
  // to manipulate them.
  auto animals = hana::make_tuple(Fish{"Nemo"}, Cat{"Garfield"},\
 Dog{"Snoopy"});
  auto names = hana::transform(animals, [](auto a) {
    return a.name;
  });
  assert(hana::reverse(names) == hana::make_tuple("Snoopy", "Garfield",\
 "Nemo"));

  // No compile-time information is lost: even if `animals` can't be a
  // constant expression because it contains strings, its length is constexpr.
  static_assert(hana::length(animals) == 3u, "");

  // Computations on types can be performed with the same syntax as that of
  // normal C++. Believe it or not, everything is done at compile-time.
  auto animal_types = hana::make_tuple(hana::type_c<Fish*>,\
 hana::type_c<Cat&>, hana::type_c<Dog*>);
  auto animal_ptrs = hana::filter(animal_types, [](auto a) {
    return hana::traits::is_pointer(a);
  });
  static_assert(animal_ptrs == hana::make_tuple(hana::type_c<Fish*>,\
 hana::type_c<Dog*>), "");

  // And many other goodies to make your life easier, including:
  // 1. Access to elements in a tuple with a sane syntax.
  static_assert(animal_ptrs[0_c] == hana::type_c<Fish*>, "");
  static_assert(animal_ptrs[1_c] == hana::type_c<Dog*>, "");

  // 2. Unroll loops at compile-time without hassle.
  std::string s;
  hana::int_c<10>.times([&]{ s += "x"; });
  // equivalent to s += "x"; s += "x"; ... s += "x";

  // 3. Easily check whether an expression is valid.
  //    This is usually achieved with complex SFINAE-based tricks.
  auto has_name = hana::is_valid([](auto&& x) -> decltype((void)x.name) { });
  static_assert(has_name(animals[0_c]), "");
  static_assert(!has_name(1), "");
}
```


## Documentation
You can browse the documentation online at http://boostorg.github.io/hana.
The documentation covers everything you should need including installing the
library, a tutorial explaining what Hana is and how to use it, and an\
 extensive
reference section with examples. The remainder of this README is mostly for
people that wish to work on the library itself, not for its users.

An offline copy of the documentation can be obtained by checking out the
`gh-pages` branch. To avoid overwriting the current directory, you can clone
the `gh-pages` branch into a subdirectory like `doc/html`:
```shell
git clone http://github.com/boostorg/hana --branch=gh-pages --depth=1 doc/html
```

After issuing this, `doc/html` will contain exactly the same static website
that is [available online][Hana.docs]. Note that `doc/html` is automatically
ignored by Git so updating the documentation won't pollute your index.


## Hacking on Hana
Setting yourself up to work on Hana is easy. First, you will need an
installation of [CMake][]. Once this is done, you can `cd` to the root
of the project and setup the build directory:
```shell
mkdir build
cmake -S . -B build
```

Sometimes, you'll want to specify a custom compiler because the system's
compiler is too old:
```shell
cmake -S . -B build -DCMAKE_CXX_COMPILER=/path/to/compiler
```

Usually, this will work just fine. However, on some older systems, the\
 standard
library and/or compiler provided by default does not support C++14. If
this is your case, the [wiki][Hana.wiki] has more information about
setting you up on different systems.

Normally, Hana tries to find Boost headers if you have them on your system.
It's also fine if you don't have them; a few tests requiring the Boost headers
will be disabled in that case. However, if you'd like Hana to use a custom
installation of Boost, you can specify the path to this custom installation:
```shell
cmake -S . -B build -DCMAKE_CXX_COMPILER=/path/to/compiler\
 -DBOOST_ROOT=/path/to/boost
```

You can now build and run the unit tests and the examples:
```shell
cmake --build build --target check
```

You should be aware that compiling the unit tests is pretty time and RAM
consuming, especially the tests for external adapters. This is due to the
fact that Hana's unit tests are very thorough, and also that heterogeneous
sequences in other libraries tend to have horrible compile-time performance.

There are also optional targets which are enabled only when the required
software is available on your computer. For example, generating the
documentation requires [Doxygen][] to be installed. An informative message
will be printed during the CMake generation step whenever an optional target
is disabled. You can install any missing software and then re-run the CMake
generation to update the list of available targets.

> #### Tip
> You can use the `help` target to get a list of all the available targets.

If you want to add unit tests or examples, just add a source file in `test/`
or `example/` and then re-run the CMake generation step so the new source
file is known to the build system. Let's suppose the relative path from the
root of the project to the new source file is `path/to/file.cpp`. When you
re-run the CMake generation step, a new target named `path.to.file` will be
created, and a test of the same name will also be created. Hence,
```shell
cmake --build build --target path.to.file # Builds the program associated to\
 path/to/file.cpp
ctest --test-dir build -R path.to.file # Runs the program as a test
```

> #### Tip for Sublime Text users
> If you use the provided [hana.sublime-project](hana.sublime-project) file,
> you can select the "[Hana] Build current file" build system. When viewing a
> file to which a target is associated (like a test or an example), you can
> then compile it by pressing ⌘B, or compile and then run it using ⇧⌘B.


## Project organization
The project is organized in a couple of subdirectories.
- The [benchmark](benchmark) directory contains compile-time and runtime
  benchmarks to make sure the library is as fast as advertised. The benchmark
  code is written mostly in the form of [eRuby][] templates. The templates
  are used to generate C++ files which are then compiled while gathering
  compilation and execution statistics.
- The [cmake](cmake) directory contains various CMake modules and other
  scripts needed by the build system.
- The [doc](doc) directory contains configuration files needed to generate
  the documentation. The `doc/html` subdirectory is automatically ignored
  by Git; you can conveniently store a local copy of the documentation by
  cloning the `gh-pages` branch into that directory, as explained above.
- The [example](example) directory contains the source code for all the
  examples of both the tutorial and the reference documentation.
- The [include](include) directory contains the library itself, which is
  header only.
- The [test](test) directory contains the source code for all the unit tests.


## Contributing
Please see [CONTRIBUTING.md](CONTRIBUTING.md).


## License
Please see [LICENSE.md](LICENSE.md).


## Releasing
Releasing is now done exclusively via the Boost release process. There are no
separate releases of Hana since the library is now pretty stable.


<!-- Links -->
[badge.Appveyor]: https://ci.appveyor.com/api/projects/status/github/boostorg\
/hana?svg=true&branch=master
[badge.Gitter]: https://img.shields.io/badge/gitter-join%20chat-blue.svg
[badge.Travis]: https://travis-ci.org/boostorg/hana.svg?branch=master
[badge.version]: https://badge.fury.io/gh/boostorg%2Fhana.svg
[badge.tryit]: https://img.shields.io/badge/try%20it-online-blue.svg
[CMake]: http://www.cmake.org
[Doxygen]: http://www.doxygen.org
[eRuby]: http://en.wikipedia.org/wiki/ERuby
[Hana.docs]: http://boostorg.github.io/hana
[Hana.wiki]: https://github.com/boostorg/hana/wiki

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/hana
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/hana
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-tuple == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-hana

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-hana-1.87.0.tar.gz
sha256sum: d9757201ec99b0ce4f9d929b11eb90e3035655ba185321b0ffbb67048dd46d51
:
name: libboost-heap
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Priority queue data structures
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/heap
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/heap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-intrusive == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-heap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-heap-1.83.0.tar.gz
sha256sum: 26a07a38a791cec5036a9e04814fccc220b9fa75a1051eae8df355bc78911ac8
:
name: libboost-heap
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Priority queue data structures
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/heap
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/heap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-heap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-heap-1.85.0.tar.gz
sha256sum: aa8b1165812cf3b4f3a5ad2fc166af91f78299113104c70697384a58e5fa3a89
:
name: libboost-heap
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Priority queue data structures
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/heap
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/heap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-heap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-heap-1.87.0.tar.gz
sha256sum: c22212d23914d69ae15236d84869d1fcde2db9c68390e410f65f02191bee1d44
:
name: libboost-histogram
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Fast multi-dimensional histogram with convenient interface for C++14
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<!--
  Copyright Hans Dembinski 2016 - 2019.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  https://www.boost.org/LICENSE_1_0.txt)
-->

![](doc/logo/color.svg)

**Multi-dimensional generalised histograms with convenient interface**

Coded with ❤. Powered by the [Boost community](https://www.boost.org) and the\
 [Scikit-HEP Project](http://scikit-hep.org). Licensed under the [Boost\
 Software License](http://www.boost.org/LICENSE_1_0.txt).

**Supported compiler versions** gcc >= 5.5, clang >= 3.8, msvc >= 14.1
**Supported C++ versions** 14, 17, 20

Branch  | Linux, OSX, Windows    | Coverage
------- | ---------------------- | --------
develop | ![Fast](https://github.com/boostorg/histogram/workflows/Fast/badge.\
svg?branch=develop) | [![Coveralls](https://coveralls.io/repos/github/boostor\
g/histogram/badge.svg?branch=develop)](https://coveralls.io/github/boostorg/h\
istogram?branch=develop)
master  | ![Fast](https://github.com/boostorg/histogram/workflows/Fast/badge.\
svg?branch=master) | [![Coveralls](https://coveralls.io/repos/github/boostorg\
/histogram/badge.svg?branch=master)](https://coveralls.io/github/boostorg/his\
togram?branch=master)

Boost.Histogram is a very fast state-of-the-art multi-dimensional generalised\
 [histogram](https://en.wikipedia.org/wiki/Histogram) class for the beginner\
 and expert alike.

* Header-only
* Easy to use, easy to customise
* Designed for performance
* Just count or use accumulators to compute means, minimum, maximum, ...
* Supports multi-threading and restricted environments (no heap allocation,\
 exceptions or RTTI)
* Open hacker-friendly modular design
* Has [official Python bindings](https://github.com/scikit-hep/boost-histogra\
m)

Check out the [full documentation](https://www.boost.org/doc/libs/master/libs\
/histogram/doc/html/index.html).

💡 Boost.Histogram is a mature library with 100 % of code lines covered by\
 unit tests, is benchmarked for performance, and has extensive documentation.\
 If you still find some issue or find the documentation lacking, tell us\
 about it by [submitting an issue](https://github.com/boostorg/histogram/issu\
es). Chat with us on the [Boost channel on Slack](https://cpplang.slack.com)\
 and [Gitter](https://gitter.im/boostorg/histogram).

## Code examples

The following stripped-down example was taken from the [Getting\
 started](https://www.boost.org/doc/libs/master/libs/histogram/doc/html/histo\
gram/getting_started.html) section in the documentation. Have a look into the\
 docs to see the full version with comments and more examples.

Example: Make and fill a 1d-histogram ([try it live on Wandbox](https://wandb\
ox.org/permlink/NSM2ZiDyntUi6RDC)). The core of this example [compiles into\
 53 lines of assembly code](https://godbolt.org/z/632yzE).

```cpp
#include <boost/histogram.hpp>
#include <boost/format.hpp> // used here for printing
#include <iostream>

int main() {
    using namespace boost::histogram;

    // make 1d histogram with 4 regular bins from 0 to 2
    auto h = make_histogram( axis::regular<>(4, 0.0, 2.0) );

    // push some values into the histogram
    for (auto&& value : { 0.4, 1.1, 0.3, 1.7, 10. })
      h(value);

    // iterate over bins
    for (auto&& x : indexed(h)) {
      std::cout << boost::format("bin %i [ %.1f, %.1f ): %i\n")
        % x.index() % x.bin().lower() % x.bin().upper() % *x;
    }

    std::cout << std::flush;

    /* program output:

    bin 0 [ 0.0, 0.5 ): 2
    bin 1 [ 0.5, 1.0 ): 0
    bin 2 [ 1.0, 1.5 ): 1
    bin 3 [ 1.5, 2.0 ): 1
    */
}
```

## Features

* Extremely customisable multi-dimensional histogram
* Simple, convenient, STL and Boost-compatible interface
* Counters with high dynamic range, cannot overflow or be capped [[1]](#note1)
* Better performance than other libraries (see benchmarks for details)
* Efficient use of memory [[1]](#note1)
* Hand-crafted C++17 deduction guides for axes and histogram types
* Support for custom axis types: define how input values should map to indices
* Support for under-/overflow bins (can be disabled individually to reduce\
 memory consumption)
* Support for axes that grow automatically with input values [[2]](#note2)
* Support for weighted increments
* Support for profiles and more generally, user-defined accumulators in cells\
 [[3]](#note3)
* Support for completely stack-based histograms
* Support for compilation without exceptions or RTTI [[4]](#note4)
* Support for adding, subtracting, multiplying, dividing, and scaling\
 histograms
* Support for custom allocators
* Support for programming with units [[5]](#note5)
* Optional serialization based on [Boost.Serialization](https://www.boost.org\
/doc/libs/release/libs/serialization/)

<b id="note1">Note 1</b> In the standard configuration, if you don't use\
 weighted increments. The counter capacity is increased dynamically as the\
 cell counts grow. When even the largest plain integral type would overflow,\
 the storage switches to a multiprecision integer similar to those in\
 [Boost.Multiprecision](https://www.boost.org/doc/libs/release/libs/multiprec\
ision/), which is only limited by available memory.

<b id="note2">Note 2</b> An axis can be configured to grow when a value is\
 encountered that is outside of its range. It then grows new bins towards\
 this value so that the value ends up in the new highest or lowest bin.

<b id="note3">Note 3</b> The histogram can be configured to hold an arbitrary\
 accumulator in each cell instead of a simple counter. Extra values can be\
 passed to the histogram, for example, to compute the mean and variance of\
 values which fall into the same cell. This feature can be used to calculate\
 variance estimates for each cell, which are useful when you need to fit a\
 statistical model to the cell values.

<b id="note4">Note 4</b> The library throws exceptions when exceptions are\
 enabled. When exceptions are disabled, a user-defined exception handler is\
 called instead upon a throw and the program terminates, see\
 [boost::throw_exception](https://www.boost.org/doc/libs/master/libs/exceptio\
n/doc/throw_exception.html) for details. Disabling exceptions improves\
 performance by 10 % to 20 % in benchmarks. The library does not use RTTI\
 (only CTTI) so disabling it has no effect.

<b id="note5">Note 5</b> Builtin axis types can be configured to only accept\
 dimensional quantities, like those from [Boost.Units](https://www.boost.org/\
doc/libs/release/libs/units/). This means you get a useful error if you\
 accidentally try to fill a length where the histogram axis expects a time,\
 for example.

## Benchmarks

Boost.Histogram is more flexible and faster than other C/C++ libraries. It\
 was compared to:
 - [GNU Scientific Library](https://www.gnu.org/software/gsl)
 - [ROOT framework from CERN](https://root.cern.ch)

Details on the benchmark are given in the [documentation](https://www.boost.o\
rg/doc/libs/develop/libs/histogram/doc/html/histogram/benchmarks.html).

## What users say

**John Buonagurio** | Manager at [**E<sup><i>x</i></sup>ponent<sup>&reg;</sup\
>**](https://www.exponent.com)

*"I just wanted to say 'thanks' for your awesome Histogram library. I'm\
 working on a software package for processing meteorology data and I'm using\
 it to generate wind roses with the help of Qt and QwtPolar. Looks like you\
 thought of just about everything here &ndash; the circular axis type was\
 practically designed for this application, everything 'just worked'."*

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/histogram
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/histogram
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-math == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-serialization == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-variant2 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-histogram

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-histogram-1.83.0.tar.gz
sha256sum: 51ec8546e68b94ac2e43218ad0f9c914320d50a8c5bc83ee0ecc871a540139fa
:
name: libboost-histogram
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Fast multi-dimensional histogram with convenient interface for C++14
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<!--
  Copyright Hans Dembinski 2016 - 2019.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  https://www.boost.org/LICENSE_1_0.txt)
-->

![](doc/logo/color.svg)

**Multi-dimensional generalised histograms with convenient interface**

Coded with ❤. Powered by the [Boost community](https://www.boost.org) and the\
 [Scikit-HEP Project](http://scikit-hep.org). Licensed under the [Boost\
 Software License](http://www.boost.org/LICENSE_1_0.txt).

**Supported compiler versions** gcc >= 5.5, clang >= 3.8, msvc >= 14.1
**Supported C++ versions** 14, 17, 20

Branch  | Linux, OSX, Windows    | Coverage
------- | ---------------------- | --------
develop | ![Fast](https://github.com/boostorg/histogram/workflows/Fast/badge.\
svg?branch=develop) | [![Coveralls](https://coveralls.io/repos/github/boostor\
g/histogram/badge.svg?branch=develop)](https://coveralls.io/github/boostorg/h\
istogram?branch=develop)
master  | ![Fast](https://github.com/boostorg/histogram/workflows/Fast/badge.\
svg?branch=master) | [![Coveralls](https://coveralls.io/repos/github/boostorg\
/histogram/badge.svg?branch=master)](https://coveralls.io/github/boostorg/his\
togram?branch=master)

Boost.Histogram is a very fast state-of-the-art multi-dimensional generalised\
 [histogram](https://en.wikipedia.org/wiki/Histogram) class for the beginner\
 and expert alike.

* Header-only
* Easy to use, easy to customise
* Designed for performance
* Just count or use accumulators to compute means, minimum, maximum, ...
* Supports multi-threading and restricted environments (no heap allocation,\
 exceptions or RTTI)
* Open hacker-friendly modular design
* Has [official Python bindings](https://github.com/scikit-hep/boost-histogra\
m)

Check out the [full documentation](https://www.boost.org/doc/libs/master/libs\
/histogram/doc/html/index.html).

💡 Boost.Histogram is a mature library with 100 % of code lines covered by\
 unit tests, is benchmarked for performance, and has extensive documentation.\
 If you still find some issue or find the documentation lacking, tell us\
 about it by [submitting an issue](https://github.com/boostorg/histogram/issu\
es). Chat with us on the [Boost channel on Slack](https://cpplang.slack.com)\
 and [Gitter](https://gitter.im/boostorg/histogram).

## Code examples

The following stripped-down example was taken from the [Getting\
 started](https://www.boost.org/doc/libs/master/libs/histogram/doc/html/histo\
gram/getting_started.html) section in the documentation. Have a look into the\
 docs to see the full version with comments and more examples.

Example: Make and fill a 1d-histogram ([try it live on Wandbox](https://wandb\
ox.org/permlink/NSM2ZiDyntUi6RDC)). The core of this example [compiles into\
 53 lines of assembly code](https://godbolt.org/z/632yzE).

```cpp
#include <boost/histogram.hpp>
#include <boost/format.hpp> // used here for printing
#include <iostream>

int main() {
    using namespace boost::histogram;

    // make 1d histogram with 4 regular bins from 0 to 2
    auto h = make_histogram( axis::regular<>(4, 0.0, 2.0) );

    // push some values into the histogram
    for (auto&& value : { 0.4, 1.1, 0.3, 1.7, 10. })
      h(value);

    // iterate over bins
    for (auto&& x : indexed(h)) {
      std::cout << boost::format("bin %i [ %.1f, %.1f ): %i\n")
        % x.index() % x.bin().lower() % x.bin().upper() % *x;
    }

    std::cout << std::flush;

    /* program output:

    bin 0 [ 0.0, 0.5 ): 2
    bin 1 [ 0.5, 1.0 ): 0
    bin 2 [ 1.0, 1.5 ): 1
    bin 3 [ 1.5, 2.0 ): 1
    */
}
```

## Features

* Extremely customisable multi-dimensional histogram
* Simple, convenient, STL and Boost-compatible interface
* Counters with high dynamic range, cannot overflow or be capped [[1]](#note1)
* Better performance than other libraries (see benchmarks for details)
* Efficient use of memory [[1]](#note1)
* Hand-crafted C++17 deduction guides for axes and histogram types
* Support for custom axis types: define how input values should map to indices
* Support for under-/overflow bins (can be disabled individually to reduce\
 memory consumption)
* Support for axes that grow automatically with input values [[2]](#note2)
* Support for weighted increments
* Support for profiles and more generally, user-defined accumulators in cells\
 [[3]](#note3)
* Support for completely stack-based histograms
* Support for compilation without exceptions or RTTI [[4]](#note4)
* Support for adding, subtracting, multiplying, dividing, and scaling\
 histograms
* Support for custom allocators
* Support for programming with units [[5]](#note5)
* Optional serialization based on [Boost.Serialization](https://www.boost.org\
/doc/libs/release/libs/serialization/)

<b id="note1">Note 1</b> In the standard configuration, if you don't use\
 weighted increments. The counter capacity is increased dynamically as the\
 cell counts grow. When even the largest plain integral type would overflow,\
 the storage switches to a multiprecision integer similar to those in\
 [Boost.Multiprecision](https://www.boost.org/doc/libs/release/libs/multiprec\
ision/), which is only limited by available memory.

<b id="note2">Note 2</b> An axis can be configured to grow when a value is\
 encountered that is outside of its range. It then grows new bins towards\
 this value so that the value ends up in the new highest or lowest bin.

<b id="note3">Note 3</b> The histogram can be configured to hold an arbitrary\
 accumulator in each cell instead of a simple counter. Extra values can be\
 passed to the histogram, for example, to compute the mean and variance of\
 values which fall into the same cell. This feature can be used to calculate\
 variance estimates for each cell, which are useful when you need to fit a\
 statistical model to the cell values.

<b id="note4">Note 4</b> The library throws exceptions when exceptions are\
 enabled. When exceptions are disabled, a user-defined exception handler is\
 called instead upon a throw and the program terminates, see\
 [boost::throw_exception](https://www.boost.org/doc/libs/master/libs/exceptio\
n/doc/throw_exception.html) for details. Disabling exceptions improves\
 performance by 10 % to 20 % in benchmarks. The library does not use RTTI\
 (only CTTI) so disabling it has no effect.

<b id="note5">Note 5</b> Builtin axis types can be configured to only accept\
 dimensional quantities, like those from [Boost.Units](https://www.boost.org/\
doc/libs/release/libs/units/). This means you get a useful error if you\
 accidentally try to fill a length where the histogram axis expects a time,\
 for example.

## Benchmarks

Boost.Histogram is more flexible and faster than other C/C++ libraries. It\
 was compared to:
 - [GNU Scientific Library](https://www.gnu.org/software/gsl)
 - [ROOT framework from CERN](https://root.cern.ch)

Details on the benchmark are given in the [documentation](https://www.boost.o\
rg/doc/libs/develop/libs/histogram/doc/html/histogram/benchmarks.html).

## What users say

**John Buonagurio** | Manager at [**E<sup><i>x</i></sup>ponent<sup>&reg;</sup\
>**](https://www.exponent.com)

*"I just wanted to say 'thanks' for your awesome Histogram library. I'm\
 working on a software package for processing meteorology data and I'm using\
 it to generate wind roses with the help of Qt and QwtPolar. Looks like you\
 thought of just about everything here &ndash; the circular axis type was\
 practically designed for this application, everything 'just worked'."*

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/histogram
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/histogram
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-math == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-serialization == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-variant2 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-histogram

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-histogram-1.85.0.tar.gz
sha256sum: 8aa265f7210f540cdb89452bebdff8aac41de280ffe53e7384649883c865e4ff
:
name: libboost-histogram
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Fast multi-dimensional histogram with convenient interface for C++14
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<!--
  Copyright Hans Dembinski 2016 - 2019.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  https://www.boost.org/LICENSE_1_0.txt)
-->

![](doc/logo/color.svg)

**Multi-dimensional generalised histograms with convenient interface**

Coded with ❤. Powered by the [Boost community](https://www.boost.org) and the\
 [Scikit-HEP Project](http://scikit-hep.org). Licensed under the [Boost\
 Software License](http://www.boost.org/LICENSE_1_0.txt).

**Supported compiler versions** gcc >= 5.5, clang >= 3.8, msvc >= 14.1
**Supported C++ versions** 14, 17, 20

Branch  | Linux, OSX, Windows    | Coverage
------- | ---------------------- | --------
develop | ![Fast](https://github.com/boostorg/histogram/workflows/Fast/badge.\
svg?branch=develop) | [![Coveralls](https://coveralls.io/repos/github/boostor\
g/histogram/badge.svg?branch=develop)](https://coveralls.io/github/boostorg/h\
istogram?branch=develop)
master  | ![Fast](https://github.com/boostorg/histogram/workflows/Fast/badge.\
svg?branch=master) | [![Coveralls](https://coveralls.io/repos/github/boostorg\
/histogram/badge.svg?branch=master)](https://coveralls.io/github/boostorg/his\
togram?branch=master)

Boost.Histogram is a very fast state-of-the-art multi-dimensional generalised\
 [histogram](https://en.wikipedia.org/wiki/Histogram) class for the beginner\
 and expert alike.

* Header-only
* Easy to use, easy to customise
* Designed for performance
* Just count or use accumulators to compute means, minimum, maximum, ...
* Supports multi-threading and restricted environments (no heap allocation,\
 exceptions or RTTI)
* Open hacker-friendly modular design
* Has [official Python bindings](https://github.com/scikit-hep/boost-histogra\
m)

Check out the [full documentation](https://www.boost.org/doc/libs/master/libs\
/histogram/doc/html/index.html).

💡 Boost.Histogram is a mature library with 100 % of code lines covered by\
 unit tests, is benchmarked for performance, and has extensive documentation.\
 If you still find some issue or find the documentation lacking, tell us\
 about it by [submitting an issue](https://github.com/boostorg/histogram/issu\
es). Chat with us on the [Boost channel on Slack](https://cpplang.slack.com)\
 and [Gitter](https://gitter.im/boostorg/histogram).

## Code examples

The following stripped-down example was taken from the [Getting\
 started](https://www.boost.org/doc/libs/master/libs/histogram/doc/html/histo\
gram/getting_started.html) section in the documentation. Have a look into the\
 docs to see the full version with comments and more examples.

Example: Make and fill a 1d-histogram ([try it live on Wandbox](https://wandb\
ox.org/permlink/NSM2ZiDyntUi6RDC)). The core of this example [compiles into\
 53 lines of assembly code](https://godbolt.org/z/632yzE).

```cpp
#include <boost/histogram.hpp>
#include <boost/format.hpp> // used here for printing
#include <iostream>

int main() {
    using namespace boost::histogram;

    // make 1d histogram with 4 regular bins from 0 to 2
    auto h = make_histogram( axis::regular<>(4, 0.0, 2.0) );

    // push some values into the histogram
    for (auto&& value : { 0.4, 1.1, 0.3, 1.7, 10. })
      h(value);

    // iterate over bins
    for (auto&& x : indexed(h)) {
      std::cout << boost::format("bin %i [ %.1f, %.1f ): %i\n")
        % x.index() % x.bin().lower() % x.bin().upper() % *x;
    }

    std::cout << std::flush;

    /* program output:

    bin 0 [ 0.0, 0.5 ): 2
    bin 1 [ 0.5, 1.0 ): 0
    bin 2 [ 1.0, 1.5 ): 1
    bin 3 [ 1.5, 2.0 ): 1
    */
}
```

## Features

* Extremely customisable multi-dimensional histogram
* Simple, convenient, STL and Boost-compatible interface
* Counters with high dynamic range, cannot overflow or be capped [[1]](#note1)
* Better performance than other libraries (see benchmarks for details)
* Efficient use of memory [[1]](#note1)
* Hand-crafted C++17 deduction guides for axes and histogram types
* Support for custom axis types: define how input values should map to indices
* Support for under-/overflow bins (can be disabled individually to reduce\
 memory consumption)
* Support for axes that grow automatically with input values [[2]](#note2)
* Support for weighted increments
* Support for profiles and more generally, user-defined accumulators in cells\
 [[3]](#note3)
* Support for completely stack-based histograms
* Support for compilation without exceptions or RTTI [[4]](#note4)
* Support for adding, subtracting, multiplying, dividing, and scaling\
 histograms
* Support for custom allocators
* Support for programming with units [[5]](#note5)
* Optional serialization based on [Boost.Serialization](https://www.boost.org\
/doc/libs/release/libs/serialization/)

<b id="note1">Note 1</b> In the standard configuration, if you don't use\
 weighted increments. The counter capacity is increased dynamically as the\
 cell counts grow. When even the largest plain integral type would overflow,\
 the storage switches to a multiprecision integer similar to those in\
 [Boost.Multiprecision](https://www.boost.org/doc/libs/release/libs/multiprec\
ision/), which is only limited by available memory.

<b id="note2">Note 2</b> An axis can be configured to grow when a value is\
 encountered that is outside of its range. It then grows new bins towards\
 this value so that the value ends up in the new highest or lowest bin.

<b id="note3">Note 3</b> The histogram can be configured to hold an arbitrary\
 accumulator in each cell instead of a simple counter. Extra values can be\
 passed to the histogram, for example, to compute the mean and variance of\
 values which fall into the same cell. This feature can be used to calculate\
 variance estimates for each cell, which are useful when you need to fit a\
 statistical model to the cell values.

<b id="note4">Note 4</b> The library throws exceptions when exceptions are\
 enabled. When exceptions are disabled, a user-defined exception handler is\
 called instead upon a throw and the program terminates, see\
 [boost::throw_exception](https://www.boost.org/doc/libs/master/libs/exceptio\
n/doc/throw_exception.html) for details. Disabling exceptions improves\
 performance by 10 % to 20 % in benchmarks. The library does not use RTTI\
 (only CTTI) so disabling it has no effect.

<b id="note5">Note 5</b> Builtin axis types can be configured to only accept\
 dimensional quantities, like those from [Boost.Units](https://www.boost.org/\
doc/libs/release/libs/units/). This means you get a useful error if you\
 accidentally try to fill a length where the histogram axis expects a time,\
 for example.

## Benchmarks

Boost.Histogram is more flexible and faster than other C/C++ libraries. It\
 was compared to:
 - [GNU Scientific Library](https://www.gnu.org/software/gsl)
 - [ROOT framework from CERN](https://root.cern.ch)

Details on the benchmark are given in the [documentation](https://www.boost.o\
rg/doc/libs/develop/libs/histogram/doc/html/histogram/benchmarks.html).

## What users say

**John Buonagurio** | Manager at [**E<sup><i>x</i></sup>ponent<sup>&reg;</sup\
>**](https://www.exponent.com)

*"I just wanted to say 'thanks' for your awesome Histogram library. I'm\
 working on a software package for processing meteorology data and I'm using\
 it to generate wind roses with the help of Qt and QwtPolar. Looks like you\
 thought of just about everything here &ndash; the circular axis type was\
 practically designed for this application, everything 'just worked'."*

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/histogram
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/histogram
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-math == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-serialization == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-variant2 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-histogram

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-histogram-1.87.0.tar.gz
sha256sum: 7eecfcae4762baeed92253d55d71cb0cfd1f8f57c53a1dfdc3a56c31ec5cf4fa
:
name: libboost-hof
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Higher-order functions for C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Hof <a target="_blank" href="https://travis-ci.org/boostorg/hof">![Tr\
avis status][badge.Travis]</a> <a target="_blank" href="https://ci.appveyor.c\
om/project/pfultz2/hof">![Appveyor status][badge.Appveyor]</a>

About
=====

HigherOrderFunctions is a header-only C++11/C++14 library that provides\
 utilities for functions and function objects, which can solve many problems\
 with much simpler constructs than whats traditionally been done with\
 metaprogramming.

HigherOrderFunctions is:

- Modern: HigherOrderFunctions takes advantages of modern C++11/C++14\
 features. It support both `constexpr` initialization and `constexpr`\
 evaluation of functions. It takes advantage of type deduction, variadic\
 templates, and perfect forwarding to provide a simple and modern interface. 
- Relevant: HigherOrderFunctions provides utilities for functions and does\
 not try to implement a functional language in C++. As such,\
 HigherOrderFunctions solves many problems relevant to C++ programmers,\
 including initialization of function objects and lambdas, overloading with\
 ordering, improved return type deduction, and much more.
- Lightweight: HigherOrderFunctions builds simple lightweight abstraction on\
 top of function objects. It does not require subscribing to an entire\
 framework. Just use the parts you need.

HigherOrderFunctions is divided into three components:

* Function Adaptors and Decorators: These enhance functions with additional\
 capability.
* Functions: These return functions that achieve a specific purpose.
* Utilities: These are general utilities that are useful when defining or\
 using functions

Github: [https://github.com/boostorg/hof/](https://github.com/boostorg/hof/)

Documentation: [http://boost-hof.readthedocs.io/](http://boost-hof.readthedoc\
s.io/)

Motivation
==========

- Improve the expressiveness and capabilities of functions, including\
 first-class citizens for function overload set, extension methods, infix\
 operators and much more.
- Simplify constructs in C++ that have generally required metaprogramming
- Enable point-free style programming
- Workaround the limitations of lambdas in C++14

Requirements
============

This requires a C++11 compiler. There are no third-party dependencies. This\
 has been tested on clang 3.5-3.8, gcc 4.6-7, and Visual Studio 2015 and 2017.

Contexpr support
----------------

Both MSVC and gcc 4.6 have limited constexpr support due to many bugs in the\
 implementation of constexpr. However, constexpr initialization of functions\
 is supported when using the [`BOOST_HOF_STATIC_FUNCTION`](BOOST_HOF_STATIC_F\
UNCTION) and [`BOOST_HOF_STATIC_LAMBDA_FUNCTION`](BOOST_HOF_STATIC_LAMBDA_FUN\
CTION) constructs.

Noexcept support
----------------

On older compilers such as gcc 4.6 and gcc 4.7, `noexcept` is not used due to\
 many bugs in the implementation. Also, most compilers don't support deducing\
 `noexcept` with member function pointers. Only newer versions of gcc(4.9 and\
 later) support this.

Building
========

Boost.HigherOrderFunctions library uses cmake to build. To configure with\
 cmake create a build directory, and run cmake:

    mkdir build
    cd build
    cmake ..

Installing
----------

To install the library just run the `install` target:

    cmake --build . --target install

Tests
-----

The tests can be built and run by using the `check` target:

    cmake --build . --target check

The tests can also be ran using Boost.Build, just copy library to the boost\
 source tree, and then:

    cd test
    b2

Documentation
-------------

The documentation is built using Sphinx. First, install the requirements\
 needed for the documentation using `pip`:

    pip install -r doc/requirements.txt

Then html documentation can be generated using `sphinx-build`:

    sphinx-build -b html doc/ doc/html/

The final docs will be in the `doc/html` folder.

<!-- Links -->
[badge.Travis]: https://travis-ci.org/boostorg/hof.svg?branch=master
[badge.Appveyor]: https://ci.appveyor.com/api/projects/status/bjj27h3v3bxbgps\
p/branch/develop

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/hof
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/hof
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-hof

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-hof-1.83.0.tar.gz
sha256sum: 7ed63dc575754c54c0bba92c634c56d9c689d11f2db50e0ddc38b7336d75495c
:
name: libboost-hof
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Higher-order functions for C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Hof <a target="_blank" href="https://travis-ci.org/boostorg/hof">![Tr\
avis status][badge.Travis]</a> <a target="_blank" href="https://ci.appveyor.c\
om/project/pfultz2/hof">![Appveyor status][badge.Appveyor]</a>

About
=====

HigherOrderFunctions is a header-only C++11/C++14 library that provides\
 utilities for functions and function objects, which can solve many problems\
 with much simpler constructs than whats traditionally been done with\
 metaprogramming.

HigherOrderFunctions is:

- Modern: HigherOrderFunctions takes advantages of modern C++11/C++14\
 features. It support both `constexpr` initialization and `constexpr`\
 evaluation of functions. It takes advantage of type deduction, variadic\
 templates, and perfect forwarding to provide a simple and modern interface. 
- Relevant: HigherOrderFunctions provides utilities for functions and does\
 not try to implement a functional language in C++. As such,\
 HigherOrderFunctions solves many problems relevant to C++ programmers,\
 including initialization of function objects and lambdas, overloading with\
 ordering, improved return type deduction, and much more.
- Lightweight: HigherOrderFunctions builds simple lightweight abstraction on\
 top of function objects. It does not require subscribing to an entire\
 framework. Just use the parts you need.

HigherOrderFunctions is divided into three components:

* Function Adaptors and Decorators: These enhance functions with additional\
 capability.
* Functions: These return functions that achieve a specific purpose.
* Utilities: These are general utilities that are useful when defining or\
 using functions

Github: [https://github.com/boostorg/hof/](https://github.com/boostorg/hof/)

Documentation: [http://boost-hof.readthedocs.io/](http://boost-hof.readthedoc\
s.io/)

Motivation
==========

- Improve the expressiveness and capabilities of functions, including\
 first-class citizens for function overload set, extension methods, infix\
 operators and much more.
- Simplify constructs in C++ that have generally required metaprogramming
- Enable point-free style programming
- Workaround the limitations of lambdas in C++14

Requirements
============

This requires a C++11 compiler. There are no third-party dependencies. This\
 has been tested on clang 3.5-3.8, gcc 4.6-7, and Visual Studio 2015 and 2017.

Contexpr support
----------------

Both MSVC and gcc 4.6 have limited constexpr support due to many bugs in the\
 implementation of constexpr. However, constexpr initialization of functions\
 is supported when using the [`BOOST_HOF_STATIC_FUNCTION`](BOOST_HOF_STATIC_F\
UNCTION) and [`BOOST_HOF_STATIC_LAMBDA_FUNCTION`](BOOST_HOF_STATIC_LAMBDA_FUN\
CTION) constructs.

Noexcept support
----------------

On older compilers such as gcc 4.6 and gcc 4.7, `noexcept` is not used due to\
 many bugs in the implementation. Also, most compilers don't support deducing\
 `noexcept` with member function pointers. Only newer versions of gcc(4.9 and\
 later) support this.

Building
========

Boost.HigherOrderFunctions library uses cmake to build. To configure with\
 cmake create a build directory, and run cmake:

    mkdir build
    cd build
    cmake ..

Installing
----------

To install the library just run the `install` target:

    cmake --build . --target install

Tests
-----

The tests can be built and run by using the `check` target:

    cmake --build . --target check

The tests can also be ran using Boost.Build, just copy library to the boost\
 source tree, and then:

    cd test
    b2

Documentation
-------------

The documentation is built using Sphinx. First, install the requirements\
 needed for the documentation using `pip`:

    pip install -r doc/requirements.txt

Then html documentation can be generated using `sphinx-build`:

    sphinx-build -b html doc/ doc/html/

The final docs will be in the `doc/html` folder.

<!-- Links -->
[badge.Travis]: https://travis-ci.org/boostorg/hof.svg?branch=master
[badge.Appveyor]: https://ci.appveyor.com/api/projects/status/bjj27h3v3bxbgps\
p/branch/develop

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/hof
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/hof
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-hof

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-hof-1.85.0.tar.gz
sha256sum: c6f2a641b84d550cdf96b068283b14f86dc7bfd2ddfa7a279daf3803a8f07e13
:
name: libboost-hof
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Higher-order functions for C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Hof <a target="_blank" href="https://travis-ci.org/boostorg/hof">![Tr\
avis status][badge.Travis]</a> <a target="_blank" href="https://ci.appveyor.c\
om/project/pfultz2/hof">![Appveyor status][badge.Appveyor]</a>

About
=====

HigherOrderFunctions is a header-only C++11/C++14 library that provides\
 utilities for functions and function objects, which can solve many problems\
 with much simpler constructs than whats traditionally been done with\
 metaprogramming.

HigherOrderFunctions is:

- Modern: HigherOrderFunctions takes advantages of modern C++11/C++14\
 features. It support both `constexpr` initialization and `constexpr`\
 evaluation of functions. It takes advantage of type deduction, variadic\
 templates, and perfect forwarding to provide a simple and modern interface. 
- Relevant: HigherOrderFunctions provides utilities for functions and does\
 not try to implement a functional language in C++. As such,\
 HigherOrderFunctions solves many problems relevant to C++ programmers,\
 including initialization of function objects and lambdas, overloading with\
 ordering, improved return type deduction, and much more.
- Lightweight: HigherOrderFunctions builds simple lightweight abstraction on\
 top of function objects. It does not require subscribing to an entire\
 framework. Just use the parts you need.

HigherOrderFunctions is divided into three components:

* Function Adaptors and Decorators: These enhance functions with additional\
 capability.
* Functions: These return functions that achieve a specific purpose.
* Utilities: These are general utilities that are useful when defining or\
 using functions

Github: [https://github.com/boostorg/hof/](https://github.com/boostorg/hof/)

Documentation: [http://boost-hof.readthedocs.io/](http://boost-hof.readthedoc\
s.io/)

Motivation
==========

- Improve the expressiveness and capabilities of functions, including\
 first-class citizens for function overload set, extension methods, infix\
 operators and much more.
- Simplify constructs in C++ that have generally required metaprogramming
- Enable point-free style programming
- Workaround the limitations of lambdas in C++14

Requirements
============

This requires a C++11 compiler. There are no third-party dependencies. This\
 has been tested on clang 3.5-3.8, gcc 4.6-7, and Visual Studio 2015 and 2017.

Contexpr support
----------------

Both MSVC and gcc 4.6 have limited constexpr support due to many bugs in the\
 implementation of constexpr. However, constexpr initialization of functions\
 is supported when using the [`BOOST_HOF_STATIC_FUNCTION`](BOOST_HOF_STATIC_F\
UNCTION) and [`BOOST_HOF_STATIC_LAMBDA_FUNCTION`](BOOST_HOF_STATIC_LAMBDA_FUN\
CTION) constructs.

Noexcept support
----------------

On older compilers such as gcc 4.6 and gcc 4.7, `noexcept` is not used due to\
 many bugs in the implementation. Also, most compilers don't support deducing\
 `noexcept` with member function pointers. Only newer versions of gcc(4.9 and\
 later) support this.

Building
========

Boost.HigherOrderFunctions library uses cmake to build. To configure with\
 cmake create a build directory, and run cmake:

    mkdir build
    cd build
    cmake ..

Installing
----------

To install the library just run the `install` target:

    cmake --build . --target install

Tests
-----

The tests can be built and run by using the `check` target:

    cmake --build . --target check

The tests can also be ran using Boost.Build, just copy library to the boost\
 source tree, and then:

    cd test
    b2

Documentation
-------------

The documentation is built using Sphinx. First, install the requirements\
 needed for the documentation using `pip`:

    pip install -r doc/requirements.txt

Then html documentation can be generated using `sphinx-build`:

    sphinx-build -b html doc/ doc/html/

The final docs will be in the `doc/html` folder.

<!-- Links -->
[badge.Travis]: https://travis-ci.org/boostorg/hof.svg?branch=master
[badge.Appveyor]: https://ci.appveyor.com/api/projects/status/bjj27h3v3bxbgps\
p/branch/develop

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/hof
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/hof
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-hof

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-hof-1.87.0.tar.gz
sha256sum: 2f1f9991508ae23f4f6c3c6eec65650cb48988f8937249d5445461dadaa94ac8
:
name: libboost-icl
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Interval Container Library, interval sets and maps and aggregation\
 of associated values
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/icl
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/icl
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-date-time == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-rational == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-icl

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-icl-1.83.0.tar.gz
sha256sum: 80d00297db084cad95cd1de4823f351a61905b4caa775aa83a17fb3ac712c2b4
:
name: libboost-icl
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Interval Container Library, interval sets and maps and aggregation\
 of associated values
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/icl
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/icl
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-date-time == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-rational == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-icl

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-icl-1.85.0.tar.gz
sha256sum: b15fcacb9b1c6ca2f18879a717e4b829d0729d49a9d357567359625e6c6cfeb8
:
name: libboost-icl
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Interval Container Library, interval sets and maps and aggregation\
 of associated values
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/icl
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/icl
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-date-time == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-rational == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-icl

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-icl-1.87.0.tar.gz
sha256sum: c39bce21b8119a2868d8f0fbc1df0c51521f7bb93a0be89709ccc362dd51b181
:
name: libboost-integer
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The organization of boost integer headers and classes is designed to\
 take advantage of <stdint.h> types from the 1999 C standard without\
 resorting to undefined behavior in terms of the 1998 C++ standard. The\
 header <boost/cstdint.hpp> makes the standard integer types safely available\
 in namespace boost without placing any names in namespace std
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Integer

Boost.Integer, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg), provides
integer type support, particularly helpful in generic programming. It\
 provides the means to select
an integer type based upon its properties, like the number of bits or the\
 maximum supported value,
as well as compile-time bit mask selection. There is a derivative of\
 `std::numeric_limits` that provides
integral constant expressions for `min` and `max`...
Finally, it provides two compile-time algorithms: determining the highest\
 power of two in a
compile-time value; and computing min and max of constant expressions.

### Directories

* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Integer
* **test** - Boost.Integer unit tests

### More information

* [Documentation](https://boost.org/libs/integer)
* [Report bugs](https://github.com/boostorg/integer/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | Drone | AppVeyor | Test Matrix |\
 Dependencies |
:-------------: | -------------- | ----- | -------- | ----------- |\
 ------------ |
[`master`](https://github.com/boostorg/integer/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/integer/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/integer/actions?query=branch%\
3Amaster) | [![Drone](https://drone.cpp.al/api/badges/boostorg/integer/status\
.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/integer) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/iugyf5rf51n99g3w/br\
anch/master?svg=true)](https://ci.appveyor.com/project/Lastique/integer/branc\
h/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/integer.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/integer.html)
[`develop`](https://github.com/boostorg/integer/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/integer/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/integer/actions?query=branch\
%3Adevelop) | [![Drone](https://drone.cpp.al/api/badges/boostorg/integer/stat\
us.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/integer) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/iugyf5rf51n99g3w/br\
anch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/integer/bran\
ch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgre\
en.svg)](http://www.boost.org/development/tests/develop/developer/integer.htm\
l) | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.s\
vg)](https://pdimov.github.io/boostdep-report/develop/integer.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/integer
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/integer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-integer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-integer-1.83.0.tar.gz
sha256sum: e2af4eb5a2000cf8d6abc4808736c2642791e4fae6c9d799517e16e2a6bbf5c7
:
name: libboost-integer
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The organization of boost integer headers and classes is designed to\
 take advantage of <stdint.h> types from the 1999 C standard without\
 resorting to undefined behavior in terms of the 1998 C++ standard. The\
 header <boost/cstdint.hpp> makes the standard integer types safely available\
 in namespace boost without placing any names in namespace std
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Integer

Boost.Integer, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg), provides
integer type support, particularly helpful in generic programming. It\
 provides the means to select
an integer type based upon its properties, like the number of bits or the\
 maximum supported value,
as well as compile-time bit mask selection. There is a derivative of\
 `std::numeric_limits` that provides
integral constant expressions for `min` and `max`...
Finally, it provides two compile-time algorithms: determining the highest\
 power of two in a
compile-time value; and computing min and max of constant expressions.

### Directories

* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Integer
* **test** - Boost.Integer unit tests

### More information

* [Documentation](https://boost.org/libs/integer)
* [Report bugs](https://github.com/boostorg/integer/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | Drone | AppVeyor | Test Matrix |\
 Dependencies |
:-------------: | -------------- | ----- | -------- | ----------- |\
 ------------ |
[`master`](https://github.com/boostorg/integer/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/integer/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/integer/actions?query=branch%\
3Amaster) | [![Drone](https://drone.cpp.al/api/badges/boostorg/integer/status\
.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/integer) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/iugyf5rf51n99g3w/br\
anch/master?svg=true)](https://ci.appveyor.com/project/Lastique/integer/branc\
h/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/integer.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/integer.html)
[`develop`](https://github.com/boostorg/integer/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/integer/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/integer/actions?query=branch\
%3Adevelop) | [![Drone](https://drone.cpp.al/api/badges/boostorg/integer/stat\
us.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/integer) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/iugyf5rf51n99g3w/br\
anch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/integer/bran\
ch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgre\
en.svg)](http://www.boost.org/development/tests/develop/developer/integer.htm\
l) | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.s\
vg)](https://pdimov.github.io/boostdep-report/develop/integer.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/integer
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/integer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-integer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-integer-1.85.0.tar.gz
sha256sum: efdf62e1d7e552cbd04d5687e66aff886c08d1d50219fc17bf138471893e4ca3
:
name: libboost-integer
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The organization of boost integer headers and classes is designed to\
 take advantage of <stdint.h> types from the 1999 C standard without\
 resorting to undefined behavior in terms of the 1998 C++ standard. The\
 header <boost/cstdint.hpp> makes the standard integer types safely available\
 in namespace boost without placing any names in namespace std
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Integer

Boost.Integer, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg), provides
integer type support, particularly helpful in generic programming. It\
 provides the means to select
an integer type based upon its properties, like the number of bits or the\
 maximum supported value,
as well as compile-time bit mask selection. There is a derivative of\
 `std::numeric_limits` that provides
integral constant expressions for `min` and `max`...
Finally, it provides two compile-time algorithms: determining the highest\
 power of two in a
compile-time value; and computing min and max of constant expressions.

### Directories

* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Integer
* **test** - Boost.Integer unit tests

### More information

* [Documentation](https://boost.org/libs/integer)
* [Report bugs](https://github.com/boostorg/integer/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | Drone | AppVeyor | Test Matrix |\
 Dependencies |
:-------------: | -------------- | ----- | -------- | ----------- |\
 ------------ |
[`master`](https://github.com/boostorg/integer/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/integer/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/integer/actions?query=branch%\
3Amaster) | [![Drone](https://drone.cpp.al/api/badges/boostorg/integer/status\
.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/integer) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/iugyf5rf51n99g3w/br\
anch/master?svg=true)](https://ci.appveyor.com/project/Lastique/integer/branc\
h/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/integer.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/integer.html)
[`develop`](https://github.com/boostorg/integer/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/integer/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/integer/actions?query=branch\
%3Adevelop) | [![Drone](https://drone.cpp.al/api/badges/boostorg/integer/stat\
us.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/integer) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/iugyf5rf51n99g3w/br\
anch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/integer/bran\
ch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgre\
en.svg)](http://www.boost.org/development/tests/develop/developer/integer.htm\
l) | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.s\
vg)](https://pdimov.github.io/boostdep-report/develop/integer.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/integer
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/integer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-integer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-integer-1.87.0.tar.gz
sha256sum: 61dc5b91c9230c5945048cbd04fc433a37875bff814aea43c5ffd28a10346d73
:
name: libboost-interprocess
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Shared memory, memory mapped files, process-shared mutexes,\
 condition variables, containers and allocators
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/interprocess
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/interprocess
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-intrusive == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-unordered == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-interprocess

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-interprocess-1.83.0.tar.gz
sha256sum: 1db8afd5abcf3e9cb01445338b785e6ac0a6372aa42ebc35876b60e9b5ecf097
:
name: libboost-interprocess
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Shared memory, memory mapped files, process-shared mutexes,\
 condition variables, containers and allocators
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/interprocess
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/interprocess
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-interprocess

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-interprocess-1.85.0.tar.gz
sha256sum: b7e60b4a9e3568a69e5e9b56668e1533f9c411c769e18dced3b3727c5a5f06cd
:
name: libboost-interprocess
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Shared memory, memory mapped files, process-shared mutexes,\
 condition variables, containers and allocators
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/interprocess
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/interprocess
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-interprocess

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-interprocess-1.87.0.tar.gz
sha256sum: 5c918542dfd148c51539035ed6e1663476a6940675d6a148c11bc2fc9b9c15ac
:
name: libboost-intrusive
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Intrusive containers and algorithms
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Intrusive
==========

Boost.Intrusive, part of collection of the [Boost C++ Libraries](http://githu\
b.com/boostorg), is a library presenting intrusive containers to the world of\
 C++. Intrusive containers are special containers that offer better\
 performance and exception safety guarantees than non-intrusive containers\
 (like STL containers). The performance benefits of intrusive containers\
 makes them ideal as a building block to efficiently construct complex data\
 structures like multi-index containers or to design high performance code\
 like memory allocation algorithms.

While intrusive containers were and are widely used in C, they became more\
 and more forgotten in C++ due to the presence of the standard containers\
 which don't support intrusive techniques.Boost.Intrusive wants to push\
 intrusive containers usage encapsulating the implementation in STL-like\
 interfaces. Hence anyone familiar with standard containers can easily use\
 Boost.Intrusive.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/intrusive/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/intrusive.svg?branch=master)](https:/\
/travis-ci.org/boostorg/intrusive) | [![Build status](https://ci.appveyor.com\
/api/projects/status/9ckrveolxsonxfnb/branch/master?svg=true)](https://ci.app\
veyor.com/project/jeking3/intrusive-0k1xg/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://s\
can.coverity.com/projects/boostorg-intrusive) | [![codecov](https://codecov.i\
o/gh/boostorg/intrusive/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/intrusive/branch/master)| [![Deps](https://img.shields.io/badge/dep\
s-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/in\
trusive.html) | [![Documentation](https://img.shields.io/badge/docs-master-br\
ightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/intrusive.html)\
 | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgree\
n.svg)](http://www.boost.org/development/tests/master/developer/intrusive.htm\
l)
[`develop`](https://github.com/boostorg/intrusive/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/intrusive.svg?branch=develop)](https:\
//travis-ci.org/boostorg/intrusive) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/9ckrveolxsonxfnb/branch/develop?svg=true)](https://ci.a\
ppveyor.com/project/jeking3/intrusive-0k1xg/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-intrusive) | [![codecov](https://code\
cov.io/gh/boostorg/intrusive/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/intrusive/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/intrusive.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/int\
rusive.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-devel\
op-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer\
/intrusive.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-intrusive)
* [Report bugs](https://github.com/boostorg/intrusive/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[intrusive]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/intrusive
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/intrusive
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-static-assert == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-intrusive

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-intrusive-1.83.0.tar.gz
sha256sum: f74596e83fce4de1a6740de5a6f79d301204476080cb38f3758a9096a3cf3113
:
name: libboost-intrusive
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Intrusive containers and algorithms
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Intrusive
==========

Boost.Intrusive, part of collection of the [Boost C++ Libraries](http://githu\
b.com/boostorg), is a library presenting intrusive containers to the world of\
 C++. Intrusive containers are special containers that offer better\
 performance and exception safety guarantees than non-intrusive containers\
 (like STL containers). The performance benefits of intrusive containers\
 makes them ideal as a building block to efficiently construct complex data\
 structures like multi-index containers or to design high performance code\
 like memory allocation algorithms.

While intrusive containers were and are widely used in C, they became more\
 and more forgotten in C++ due to the presence of the standard containers\
 which don't support intrusive techniques.Boost.Intrusive wants to push\
 intrusive containers usage encapsulating the implementation in STL-like\
 interfaces. Hence anyone familiar with standard containers can easily use\
 Boost.Intrusive.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/intrusive/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/intrusive.svg?branch=master)](https:/\
/travis-ci.org/boostorg/intrusive) | [![Build status](https://ci.appveyor.com\
/api/projects/status/9ckrveolxsonxfnb/branch/master?svg=true)](https://ci.app\
veyor.com/project/jeking3/intrusive-0k1xg/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://s\
can.coverity.com/projects/boostorg-intrusive) | [![codecov](https://codecov.i\
o/gh/boostorg/intrusive/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/intrusive/branch/master)| [![Deps](https://img.shields.io/badge/dep\
s-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/in\
trusive.html) | [![Documentation](https://img.shields.io/badge/docs-master-br\
ightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/intrusive.html)\
 | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgree\
n.svg)](http://www.boost.org/development/tests/master/developer/intrusive.htm\
l)
[`develop`](https://github.com/boostorg/intrusive/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/intrusive.svg?branch=develop)](https:\
//travis-ci.org/boostorg/intrusive) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/9ckrveolxsonxfnb/branch/develop?svg=true)](https://ci.a\
ppveyor.com/project/jeking3/intrusive-0k1xg/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-intrusive) | [![codecov](https://code\
cov.io/gh/boostorg/intrusive/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/intrusive/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/intrusive.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/int\
rusive.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-devel\
op-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer\
/intrusive.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-intrusive)
* [Report bugs](https://github.com/boostorg/intrusive/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[intrusive]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/intrusive
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/intrusive
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-move == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-intrusive

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-intrusive-1.85.0.tar.gz
sha256sum: 33241029be2ff8cb43446e0d9ea62ac435b4213752ad62e1038f214c2a10488a
:
name: libboost-intrusive
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Intrusive containers and algorithms
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Intrusive
==========

Boost.Intrusive, part of collection of the [Boost C++ Libraries](http://githu\
b.com/boostorg), is a library presenting intrusive containers to the world of\
 C++. Intrusive containers are special containers that offer better\
 performance and exception safety guarantees than non-intrusive containers\
 (like STL containers). The performance benefits of intrusive containers\
 makes them ideal as a building block to efficiently construct complex data\
 structures like multi-index containers or to design high performance code\
 like memory allocation algorithms.

While intrusive containers were and are widely used in C, they became more\
 and more forgotten in C++ due to the presence of the standard containers\
 which don't support intrusive techniques.Boost.Intrusive wants to push\
 intrusive containers usage encapsulating the implementation in STL-like\
 interfaces. Hence anyone familiar with standard containers can easily use\
 Boost.Intrusive.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/intrusive/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/intrusive.svg?branch=master)](https:/\
/travis-ci.org/boostorg/intrusive) | [![Build status](https://ci.appveyor.com\
/api/projects/status/9ckrveolxsonxfnb/branch/master?svg=true)](https://ci.app\
veyor.com/project/jeking3/intrusive-0k1xg/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://s\
can.coverity.com/projects/boostorg-intrusive) | [![codecov](https://codecov.i\
o/gh/boostorg/intrusive/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/intrusive/branch/master)| [![Deps](https://img.shields.io/badge/dep\
s-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/in\
trusive.html) | [![Documentation](https://img.shields.io/badge/docs-master-br\
ightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/intrusive.html)\
 | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgree\
n.svg)](http://www.boost.org/development/tests/master/developer/intrusive.htm\
l)
[`develop`](https://github.com/boostorg/intrusive/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/intrusive.svg?branch=develop)](https:\
//travis-ci.org/boostorg/intrusive) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/9ckrveolxsonxfnb/branch/develop?svg=true)](https://ci.a\
ppveyor.com/project/jeking3/intrusive-0k1xg/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-intrusive) | [![codecov](https://code\
cov.io/gh/boostorg/intrusive/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/intrusive/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/intrusive.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/int\
rusive.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-devel\
op-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer\
/intrusive.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-intrusive)
* [Report bugs](https://github.com/boostorg/intrusive/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[intrusive]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/intrusive
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/intrusive
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-move == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-intrusive

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-intrusive-1.87.0.tar.gz
sha256sum: 00c577cfa8de088d0a8b2b52c491ce93064cd4ca00cd2dd6b54b9f0a27ef341a
:
name: libboost-io
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Utilities for the standard I/O library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.IO

The Boost IO C++ library provides utilities for dealing with the C++ standard
library IO streams.

### License

Distributed under the
[Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/io
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/io
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-io

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-io-1.83.0.tar.gz
sha256sum: 4781245d1854621583ba011809d1d82ad7cc3e4c4b165e8323f525c755deb844
:
name: libboost-io
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Utilities for the standard I/O library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.IO

The Boost IO C++ library provides utilities for dealing with the C++ standard
library IO streams.

### License

Distributed under the
[Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/io
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/io
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-io

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-io-1.85.0.tar.gz
sha256sum: 12bf1d1cd1be5f77488c30f29d17b187240d3bac8c9a80e130e6ab13d04f35f7
:
name: libboost-io
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Utilities for the standard I/O library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.IO

The Boost IO C++ library provides utilities for dealing with the C++ standard
library IO streams.

### License

Distributed under the
[Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/io
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/io
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-io

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-io-1.87.0.tar.gz
sha256sum: 8502b53ca615f3e21c6701ba1b8b09071972821389ab671c7896045e2e3ed5e5
:
name: libboost-iostreams
version: 1.83.0
language: c++
project: boost
summary: Boost.IOStreams provides a framework for defining streams, stream\
 buffers and i/o filters
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Iostreams, part of collection of the [Boost C++ Libraries](http://github.com/\
boostorg), provides:

* Tools to make it easy to create standard C++ streams and stream buffers for\
 accessing new Sources and Sinks.
* A framework for defining filters and attaching them to standard streams and\
 stream buffers.
* A collection of ready-to-use Filters, Sources and Sinks.
* Utilities to save and restore stream state.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Requires a Link Library

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/iostreams/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/iostreams.svg?branch=master)](https:/\
/travis-ci.org/boostorg/iostreams) | [![Build status](https://ci.appveyor.com\
/api/projects/status/github/boostorg/iostreams?branch=master&svg=true)](https\
://ci.appveyor.com/project/eldiener/iostreams/branch/master) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16463/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-iostreams) | [![codecov](https://code\
cov.io/gh/boostorg/iostreams/branch/master/graph/badge.svg)](https://codecov.\
io/gh/boostorg/iostreams/branch/master)| [![Deps](https://img.shields.io/badg\
e/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mast\
er/iostreams.html) | [![Documentation](https://img.shields.io/badge/docs-mast\
er-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/iostreams/doc\
/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/i\
ostreams.html)
[`develop`](https://github.com/boostorg/iostreams/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/iostreams.svg?branch=develop)](https:\
//travis-ci.org/boostorg/iostreams) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/github/boostorg/iostreams?branch=develop&svg=true)](htt\
ps://ci.appveyor.com/project/eldiener/iostreams/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16463/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-iostreams) | [![codecov](https://code\
cov.io/gh/boostorg/iostreams/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/iostreams/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/iostreams.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/iostre\
ams/doc/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matri\
x-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/de\
veloper/iostreams.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-iostreams)
* [Report bugs](https://github.com/boostorg/iostreams/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[iostreams]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-iostreams

The `build2` package of `libboost-iostreams` supports the following
configuration variables:


### `config.libboost_iostreams.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/iostreams
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/iostreams
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libz ^1.2.1100
depends: libbzip2 ^1.0.8
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-random == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-regex == 1.83.0 ? ($config.libboost_iostreams.regex)
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-iostreams

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_iostreams.regex ?= false

\
location: boost/libboost-iostreams-1.83.0.tar.gz
sha256sum: 3ebe0ddce7f30e03bb4e47b20938ea97d34e30acafcbb1115dc864a1d8601927
:
name: libboost-iostreams
version: 1.85.0
language: c++
project: boost
summary: Boost.IOStreams provides a framework for defining streams, stream\
 buffers and i/o filters
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Iostreams, part of collection of the [Boost C++ Libraries](http://github.com/\
boostorg), provides:

* Tools to make it easy to create standard C++ streams and stream buffers for\
 accessing new Sources and Sinks.
* A framework for defining filters and attaching them to standard streams and\
 stream buffers.
* A collection of ready-to-use Filters, Sources and Sinks.
* Utilities to save and restore stream state.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Requires a Link Library

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/iostreams/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/iostreams.svg?branch=master)](https:/\
/travis-ci.org/boostorg/iostreams) | [![Build status](https://ci.appveyor.com\
/api/projects/status/github/boostorg/iostreams?branch=master&svg=true)](https\
://ci.appveyor.com/project/eldiener/iostreams/branch/master) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16463/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-iostreams) | [![codecov](https://code\
cov.io/gh/boostorg/iostreams/branch/master/graph/badge.svg)](https://codecov.\
io/gh/boostorg/iostreams/branch/master)| [![Deps](https://img.shields.io/badg\
e/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mast\
er/iostreams.html) | [![Documentation](https://img.shields.io/badge/docs-mast\
er-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/iostreams/doc\
/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/i\
ostreams.html)
[`develop`](https://github.com/boostorg/iostreams/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/iostreams.svg?branch=develop)](https:\
//travis-ci.org/boostorg/iostreams) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/github/boostorg/iostreams?branch=develop&svg=true)](htt\
ps://ci.appveyor.com/project/eldiener/iostreams/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16463/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-iostreams) | [![codecov](https://code\
cov.io/gh/boostorg/iostreams/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/iostreams/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/iostreams.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/iostre\
ams/doc/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matri\
x-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/de\
veloper/iostreams.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-iostreams)
* [Report bugs](https://github.com/boostorg/iostreams/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[iostreams]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-iostreams

The `build2` package of `libboost-iostreams` supports the following
configuration variables:


### `config.libboost_iostreams.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/iostreams
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/iostreams
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libz ^1.2.1100
depends: libbzip2 ^1.0.8
depends: libboost-numeric-conversion == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-random == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-regex == 1.85.0 ? ($config.libboost_iostreams.regex)
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-iostreams

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_iostreams.regex ?= false

\
location: boost/libboost-iostreams-1.85.0.tar.gz
sha256sum: 5c9fffbcff5f13e20a91b126b1d1c7fbcf62510fe782b4c20604ee73ec5ae168
:
name: libboost-iostreams
version: 1.87.0
language: c++
project: boost
summary: Boost.IOStreams provides a framework for defining streams, stream\
 buffers and i/o filters
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Iostreams, part of collection of the [Boost C++ Libraries](http://github.com/\
boostorg), provides:

* Tools to make it easy to create standard C++ streams and stream buffers for\
 accessing new Sources and Sinks.
* A framework for defining filters and attaching them to standard streams and\
 stream buffers.
* A collection of ready-to-use Filters, Sources and Sinks.
* Utilities to save and restore stream state.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Requires a Link Library

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/iostreams/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/iostreams.svg?branch=master)](https:/\
/travis-ci.org/boostorg/iostreams) | [![Build status](https://ci.appveyor.com\
/api/projects/status/github/boostorg/iostreams?branch=master&svg=true)](https\
://ci.appveyor.com/project/eldiener/iostreams/branch/master) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16463/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-iostreams) | [![codecov](https://code\
cov.io/gh/boostorg/iostreams/branch/master/graph/badge.svg)](https://codecov.\
io/gh/boostorg/iostreams/branch/master)| [![Deps](https://img.shields.io/badg\
e/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mast\
er/iostreams.html) | [![Documentation](https://img.shields.io/badge/docs-mast\
er-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/iostreams/doc\
/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/i\
ostreams.html)
[`develop`](https://github.com/boostorg/iostreams/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/iostreams.svg?branch=develop)](https:\
//travis-ci.org/boostorg/iostreams) | [![Build status](https://ci.appveyor.co\
m/api/projects/status/github/boostorg/iostreams?branch=develop&svg=true)](htt\
ps://ci.appveyor.com/project/eldiener/iostreams/branch/develop) | [![Coverity\
 Scan Build Status](https://scan.coverity.com/projects/16463/badge.svg)](http\
s://scan.coverity.com/projects/boostorg-iostreams) | [![codecov](https://code\
cov.io/gh/boostorg/iostreams/branch/develop/graph/badge.svg)](https://codecov\
.io/gh/boostorg/iostreams/branch/develop) | [![Deps](https://img.shields.io/b\
adge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/\
develop/iostreams.html) | [![Documentation](https://img.shields.io/badge/docs\
-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/iostre\
ams/doc/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matri\
x-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/de\
veloper/iostreams.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-iostreams)
* [Report bugs](https://github.com/boostorg/iostreams/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[iostreams]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-iostreams

The `build2` package of `libboost-iostreams` supports the following
configuration variables:


### `config.libboost_iostreams.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/iostreams
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/iostreams
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libz ^1.2.1100
depends: libbzip2 ^1.0.8
depends: libboost-numeric-conversion == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-random == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-regex == 1.87.0 ? ($config.libboost_iostreams.regex)
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-iostreams

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_iostreams.regex ?= false

\
location: boost/libboost-iostreams-1.87.0.tar.gz
sha256sum: 032884524d3b19fc4b3947c2fc6b5239803ed2cb861d24416bc72ea916b9ab53
:
name: libboost-iterator
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The Boost Iterator Library contains two parts. The first is a system\
 of concepts which extend the C++ standard iterator requirements. The second\
 is a framework of components for building iterators based on these extended\
 concepts and includes several useful iterator adaptors
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Iterator

Boost.Iterator, part of collection of the [Boost C++ Libraries](https://githu\
b.com/boostorg), provides tools for building and working with iterators in\
 C++. The library also provides a number of iterator classes that can be used\
 out of the box.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Iterator
* **test** - Boost.Iterator unit tests
* **example** - Boost.Iterator usage examples

### More information

* [Documentation](https://boost.org/libs/iterator)
* [Report bugs](https://github.com/boostorg/iterator/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/iterator\
/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/iterator/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/iterator/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/iterator/actions?query=branc\
h%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/ud8ug5\
aai8vd30hg/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/\
iterator/branch/master) | [![Tests](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/i\
terator.html) | [![Dependencies](https://img.shields.io/badge/deps-master-bri\
ghtgreen.svg)](https://pdimov.github.io/boostdep-report/master/iterator.html)
[`develop`](https://github.com/boostorg/iterator/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/iterator/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/iterator/actions?query=bran\
ch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/ud8u\
g5aai8vd30hg/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastiq\
ue/iterator/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-d\
evelop-brightgreen.svg)](http://www.boost.org/development/tests/develop/devel\
oper/iterator.html) | [![Dependencies](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/iterat\
or.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/iterator
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/iterator
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-conversion == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-iterator

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-iterator-1.83.0.tar.gz
sha256sum: 048b3b95424b957f412fbd0518a478983e16faca79ccc5d86847ceef75bc9de9
:
name: libboost-iterator
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The Boost Iterator Library contains two parts. The first is a system\
 of concepts which extend the C++ standard iterator requirements. The second\
 is a framework of components for building iterators based on these extended\
 concepts and includes several useful iterator adaptors
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Iterator

Boost.Iterator, part of collection of the [Boost C++ Libraries](https://githu\
b.com/boostorg), provides tools for building and working with iterators in\
 C++. The library also provides a number of iterator classes that can be used\
 out of the box.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Iterator
* **test** - Boost.Iterator unit tests
* **example** - Boost.Iterator usage examples

### More information

* [Documentation](https://boost.org/libs/iterator)
* [Report bugs](https://github.com/boostorg/iterator/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/iterator\
/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/iterator/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/iterator/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/iterator/actions?query=branc\
h%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/ud8ug5\
aai8vd30hg/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/\
iterator/branch/master) | [![Tests](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/i\
terator.html) | [![Dependencies](https://img.shields.io/badge/deps-master-bri\
ghtgreen.svg)](https://pdimov.github.io/boostdep-report/master/iterator.html)
[`develop`](https://github.com/boostorg/iterator/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/iterator/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/iterator/actions?query=bran\
ch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/ud8u\
g5aai8vd30hg/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastiq\
ue/iterator/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-d\
evelop-brightgreen.svg)](http://www.boost.org/development/tests/develop/devel\
oper/iterator.html) | [![Dependencies](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/iterat\
or.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/iterator
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/iterator
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-iterator

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-iterator-1.85.0.tar.gz
sha256sum: cdef55be72c769b0155558a8473fefb1a9848f4f3346c8f8f42ac963869034a2
:
name: libboost-iterator
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The Boost Iterator Library contains two parts. The first is a system\
 of concepts which extend the C++ standard iterator requirements. The second\
 is a framework of components for building iterators based on these extended\
 concepts and includes several useful iterator adaptors
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Iterator

Boost.Iterator, part of collection of the [Boost C++ Libraries](https://githu\
b.com/boostorg), provides tools for building and working with iterators in\
 C++. The library also provides a number of iterator classes that can be used\
 out of the box.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Iterator
* **test** - Boost.Iterator unit tests
* **example** - Boost.Iterator usage examples

### More information

* [Documentation](https://boost.org/libs/iterator)
* [Report bugs](https://github.com/boostorg/iterator/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/iterator\
/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/iterator/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/iterator/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/iterator/actions?query=branc\
h%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/ud8ug5\
aai8vd30hg/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/\
iterator/branch/master) | [![Tests](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/i\
terator.html) | [![Dependencies](https://img.shields.io/badge/deps-master-bri\
ghtgreen.svg)](https://pdimov.github.io/boostdep-report/master/iterator.html)
[`develop`](https://github.com/boostorg/iterator/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/iterator/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/iterator/actions?query=bran\
ch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/ud8u\
g5aai8vd30hg/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastiq\
ue/iterator/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-d\
evelop-brightgreen.svg)](http://www.boost.org/development/tests/develop/devel\
oper/iterator.html) | [![Dependencies](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/iterat\
or.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/iterator
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/iterator
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-iterator

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-iterator-1.87.0.tar.gz
sha256sum: 1625d668036b34ede51a6c90e364325569e0e3eafb87055857d352299b1cc824
:
name: libboost-json
version: 1.83.0
language: c++
project: boost
summary: JSON parsing, serialization, and DOM in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Boost.JSON](https://raw.githubusercontent.com/CPPAlliance/json/master/doc/\
images/repo-logo-3.png)](https://www.boost.org/doc/libs/release/libs/json)

Branch          | [`master`](https://github.com/boostorg/json/tree/master) |\
 [`develop`](https://github.com/boostorg/json/tree/develop) |
--------------- | -----------------------------------------------------------\
 | ------------------------------------------------------------- |
[Azure](https://azure.microsoft.com/en-us/services/devops/pipelines/) |\
 [![Build Status](https://img.shields.io/azure-devops/build/vinniefalco/2571d\
415-8cc8-4120-a762-c03a8eda0659/8/master)](https://vinniefalco.visualstudio.c\
om/json/_build/latest?definitionId=5&branchName=master) | [![Build\
 Status](https://img.shields.io/azure-devops/build/vinniefalco/2571d415-8cc8-\
4120-a762-c03a8eda0659/8/develop)](https://vinniefalco.visualstudio.com/json/\
_build/latest?definitionId=8&branchName=develop)
Docs            | [![Documentation](https://img.shields.io/badge/docs-master-\
brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/json/) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](https://www.boost.org/doc/libs/develop/libs/json/)
[Drone](https://drone.io/) | [![Build Status](https://drone.cpp.al/api/badges\
/boostorg/json/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boosto\
rg/json) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/json/sta\
tus.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/json)
Matrix          | [![Matrix](https://img.shields.io/badge/matrix-master-brigh\
tgreen.svg)](http://www.boost.org/development/tests/master/developer/json.htm\
l) | [![Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)]\
(http://www.boost.org/development/tests/develop/developer/json.html)
Fuzzing         | --- |  [![fuzz](https://github.com/boostorg/json/workflows/\
fuzz/badge.svg?branch=develop)](https://github.com/boostorg/json/actions?quer\
y=workflow%3Afuzz+branch%3Adevelop)
[Appveyor](https://ci.appveyor.com/) | [![Build status](https://ci.appveyor.c\
om/api/projects/status/8csswcnmfm798203?branch=master&svg=true)](https://ci.a\
ppveyor.com/project/vinniefalco/cppalliance-json/branch/master) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/8csswcnmfm798203?branch=\
develop&svg=true)](https://ci.appveyor.com/project/vinniefalco/cppalliance-js\
on/branch/develop)
[codecov.io](https://codecov.io) | [![codecov](https://codecov.io/gh/boostorg\
/json/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/json/bra\
nch/master) | [![codecov](https://codecov.io/gh/boostorg/json/branch/develop/\
graph/badge.svg)](https://codecov.io/gh/boostorg/json/branch/develop)

# Boost.JSON

## Overview

Boost.JSON is a portable C++ library which provides containers and
algorithms that implement
[JavaScript Object Notation](https://json.org/), or simply "JSON",
a lightweight data-interchange format. This format is easy for humans to
read and write, and easy for machines to parse and generate. It is based
on a subset of the JavaScript Programming Language
([Standard ECMA-262](https://www.ecma-international.org/ecma-262/10.0/index.h\
tml)),
and is currently standardised in [RFC 8259](https://datatracker.ietf.org/doc/\
html/rfc8259).
JSON is a text format that is language-independent but uses conventions
that are familiar to programmers of the C-family of languages, including
C, C++, C#, Java, JavaScript, Perl, Python, and many others. These
properties make JSON an ideal data-interchange language.

This library focuses on a common and popular use-case: parsing
and serializing to and from a container called `value` which
holds JSON types. Any `value` which you build can be serialized
and then deserialized, guaranteeing that the result will be equal
to the original value. Whatever JSON output you produce with this
library will be readable by most common JSON implementations
in any language.

The `value` container is designed to be well suited as a
vocabulary type appropriate for use in public interfaces and
libraries, allowing them to be composed. The library restricts
the representable data types to the ranges which are almost
universally accepted by most JSON implementations, especially
JavaScript. The parser and serializer are both highly performant,
meeting or exceeding the benchmark performance of the best comparable
libraries. Allocators are very well supported. Code which uses these
types will be easy to understand, flexible, and performant.

Boost.JSON offers these features:

* Fast compilation
* Require only C++11
* Fast streaming parser and serializer
* Constant-time key lookup for objects
* Options to allow non-standard JSON
* Easy and safe modern API with allocator support
* Optional header-only, without linking to a library

Visit https://boost.org/libs/json for complete documentation.

## Requirements

* Requires only C++11
* Link to a built static or dynamic Boost library, or use header-only (see\
 below)
* Supports -fno-exceptions, detected automatically

The library relies heavily on these well known C++ types in
its interfaces (henceforth termed _standard types_):

* `string_view`
* `memory_resource`, `polymorphic_allocator`
* `error_category`, `error_code`, `error_condition`, `system_error`

### Header-Only

To use as header-only; that is, to eliminate the requirement to
link a program to a static or dynamic Boost.JSON library, simply
place the following line in exactly one new or existing source
file in your project.
```
#include <boost/json/src.hpp>
```

MSVC users must also define the macro `BOOST_JSON_NO_LIB` to disable
auto-linking.

### Embedded

Boost.JSON works great on embedded devices. The library uses local
stack buffers to increase the performance of some operations. On
Intel platforms these buffers are large (4KB), while on non-Intel
platforms they are small (256 bytes). To adjust the size of the
stack buffers for embedded applications define this macro when
building the library or including the function definitions:
```
#define BOOST_JSON_STACK_BUFFER_SIZE 1024
#include <boost/json/src.hpp>
```

### Supported Compilers

Boost.JSON has been tested with the following compilers:

* clang: 3.5, 3.6, 3.7, 3.8, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
* gcc: 4.8, 4.9, 5, 6, 7, 8, 9, 10, 11, 12
* msvc: 14.0, 14.1, 14.2, 14.3

### Supported JSON Text

The library expects input text to be encoded using UTF-8, which is a
requirement put on all JSON exchanged between systems by the
[RFC](https://datatracker.ietf.org/doc/html/rfc8259#section-8.1). Similarly,
the text generated by the library is valid UTF-8.

The RFC does not allow byte order marks (BOM) to appear in JSON text, so the
library considers BOM syntax errors.

The library supports several popular JSON extensions. These have to be
explicitly enabled.

### Visual Studio Solution

    cmake -G "Visual Studio 16 2019" -A Win32 -B bin -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake
    cmake -G "Visual Studio 16 2019" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake

## Quality Assurance

The development infrastructure for the library includes
these per-commit analyses:

* Coverage reports
* Benchmark performance comparisons
* Compilation and tests on Drone.io, Azure Pipelines, Appveyor
* Fuzzing using clang-llvm and machine learning

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/json
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/json
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-describe == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-json

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-json-1.83.0.tar.gz
sha256sum: 35f9d10adf793e16f88e0a4b5fbd6e6bbed1330702839080c9a863078e219274
:
name: libboost-json
version: 1.85.0
language: c++
project: boost
summary: JSON parsing, serialization, and DOM in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Boost.JSON](https://raw.githubusercontent.com/CPPAlliance/json/master/doc/\
images/repo-logo-3.png)](https://www.boost.org/doc/libs/release/libs/json)

Branch          | [`master`](https://github.com/boostorg/json/tree/master) |\
 [`develop`](https://github.com/boostorg/json/tree/develop) |
--------------- | -----------------------------------------------------------\
 | ------------------------------------------------------------- |
[Azure](https://azure.microsoft.com/en-us/services/devops/pipelines/) |\
 [![Build Status](https://img.shields.io/azure-devops/build/vinniefalco/2571d\
415-8cc8-4120-a762-c03a8eda0659/8/master)](https://vinniefalco.visualstudio.c\
om/json/_build/latest?definitionId=5&branchName=master) | [![Build\
 Status](https://img.shields.io/azure-devops/build/vinniefalco/2571d415-8cc8-\
4120-a762-c03a8eda0659/8/develop)](https://vinniefalco.visualstudio.com/json/\
_build/latest?definitionId=8&branchName=develop)
Docs            | [![Documentation](https://img.shields.io/badge/docs-master-\
brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/json/) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](https://www.boost.org/doc/libs/develop/libs/json/)
[Drone](https://drone.io/) | [![Build Status](https://drone.cpp.al/api/badges\
/boostorg/json/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boosto\
rg/json) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/json/sta\
tus.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/json)
Matrix          | [![Matrix](https://img.shields.io/badge/matrix-master-brigh\
tgreen.svg)](http://www.boost.org/development/tests/master/developer/json.htm\
l) | [![Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)]\
(http://www.boost.org/development/tests/develop/developer/json.html)
Fuzzing         | --- |  [![fuzz](https://github.com/boostorg/json/workflows/\
fuzz/badge.svg?branch=develop)](https://github.com/boostorg/json/actions?quer\
y=workflow%3Afuzz+branch%3Adevelop)
[Appveyor](https://ci.appveyor.com/) | [![Build status](https://ci.appveyor.c\
om/api/projects/status/8csswcnmfm798203?branch=master&svg=true)](https://ci.a\
ppveyor.com/project/vinniefalco/cppalliance-json/branch/master) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/8csswcnmfm798203?branch=\
develop&svg=true)](https://ci.appveyor.com/project/vinniefalco/cppalliance-js\
on/branch/develop)
[codecov.io](https://codecov.io) | [![codecov](https://codecov.io/gh/boostorg\
/json/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/json/bra\
nch/master) | [![codecov](https://codecov.io/gh/boostorg/json/branch/develop/\
graph/badge.svg)](https://codecov.io/gh/boostorg/json/branch/develop)

# Boost.JSON

## Overview

Boost.JSON is a portable C++ library which provides containers and
algorithms that implement
[JavaScript Object Notation](https://json.org/), or simply "JSON",
a lightweight data-interchange format. This format is easy for humans to
read and write, and easy for machines to parse and generate. It is based
on a subset of the JavaScript Programming Language
([Standard ECMA-262](https://www.ecma-international.org/ecma-262/10.0/index.h\
tml)),
and is currently standardised in [RFC 8259](https://datatracker.ietf.org/doc/\
html/rfc8259).
JSON is a text format that is language-independent but uses conventions
that are familiar to programmers of the C-family of languages, including
C, C++, C#, Java, JavaScript, Perl, Python, and many others. These
properties make JSON an ideal data-interchange language.

This library focuses on a common and popular use-case: parsing
and serializing to and from a container called `value` which
holds JSON types. Any `value` which you build can be serialized
and then deserialized, guaranteeing that the result will be equal
to the original value. Whatever JSON output you produce with this
library will be readable by most common JSON implementations
in any language.

The `value` container is designed to be well suited as a
vocabulary type appropriate for use in public interfaces and
libraries, allowing them to be composed. The library restricts
the representable data types to the ranges which are almost
universally accepted by most JSON implementations, especially
JavaScript. The parser and serializer are both highly performant,
meeting or exceeding the benchmark performance of the best comparable
libraries. Allocators are very well supported. Code which uses these
types will be easy to understand, flexible, and performant.

Boost.JSON offers these features:

* Fast compilation
* Require only C++11
* Fast streaming parser and serializer
* Constant-time key lookup for objects
* Options to allow non-standard JSON
* Easy and safe modern API with allocator support
* Optional header-only, without linking to a library

Visit https://boost.org/libs/json for complete documentation.

## Requirements

* Requires only C++11
* Link to a built static or dynamic Boost library, or use header-only (see\
 below)
* Supports -fno-exceptions, detected automatically

The library relies heavily on these well known C++ types in
its interfaces (henceforth termed _standard types_):

* `string_view`
* `memory_resource`, `polymorphic_allocator`
* `error_category`, `error_code`, `error_condition`, `system_error`

### Header-Only

To use as header-only; that is, to eliminate the requirement to
link a program to a static or dynamic Boost.JSON library, simply
place the following line in exactly one new or existing source
file in your project.
```
#include <boost/json/src.hpp>
```

MSVC users must also define the macro `BOOST_JSON_NO_LIB` to disable
auto-linking.

### Embedded

Boost.JSON works great on embedded devices. The library uses local
stack buffers to increase the performance of some operations. On
Intel platforms these buffers are large (4KB), while on non-Intel
platforms they are small (256 bytes). To adjust the size of the
stack buffers for embedded applications define this macro when
building the library or including the function definitions:
```
#define BOOST_JSON_STACK_BUFFER_SIZE 1024
#include <boost/json/src.hpp>
```
### Endianness

Boost.JSON uses [Boost.Endian](https://www.boost.org/doc/libs/release/libs/en\
dian/doc/html/endian.html)
in order to support both little endian and big endian platforms.

### Supported Compilers

Boost.JSON has been tested with the following compilers:

* clang: 3.5, 3.6, 3.7, 3.8, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
* gcc: 4.8, 4.9, 5, 6, 7, 8, 9, 10, 11, 12
* msvc: 14.0, 14.1, 14.2, 14.3

### Supported JSON Text

The library expects input text to be encoded using UTF-8, which is a
requirement put on all JSON exchanged between systems by the
[RFC](https://datatracker.ietf.org/doc/html/rfc8259#section-8.1). Similarly,
the text generated by the library is valid UTF-8.

The RFC does not allow byte order marks (BOM) to appear in JSON text, so the
library considers BOM syntax errors.

The library supports several popular JSON extensions. These have to be
explicitly enabled.

### Visual Studio Solution

    cmake -G "Visual Studio 16 2019" -A Win32 -B bin -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake
    cmake -G "Visual Studio 16 2019" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake

## Quality Assurance

The development infrastructure for the library includes
these per-commit analyses:

* Coverage reports
* Benchmark performance comparisons
* Compilation and tests on Drone.io, Azure Pipelines, Appveyor
* Fuzzing using clang-llvm and machine learning

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/json
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/json
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-describe == 1.85.0
depends: libboost-endian == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-json

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-json-1.85.0.tar.gz
sha256sum: c3438735274f7dd79a7ed3281e507c8885e350ddb6d7ec2e0e535714eace927d
:
name: libboost-json
version: 1.87.0
language: c++
project: boost
summary: JSON parsing, serialization, and DOM in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Boost.JSON](https://raw.githubusercontent.com/CPPAlliance/json/master/doc/\
images/repo-logo-3.png)](https://www.boost.org/doc/libs/release/libs/json)

Branch          | [`master`](https://github.com/boostorg/json/tree/master) |\
 [`develop`](https://github.com/boostorg/json/tree/develop) |
--------------- | -----------------------------------------------------------\
 | ------------------------------------------------------------- |
[Azure](https://azure.microsoft.com/en-us/services/devops/pipelines/) |\
 [![Build Status](https://img.shields.io/azure-devops/build/vinniefalco/2571d\
415-8cc8-4120-a762-c03a8eda0659/8/master)](https://vinniefalco.visualstudio.c\
om/json/_build/latest?definitionId=5&branchName=master) | [![Build\
 Status](https://img.shields.io/azure-devops/build/vinniefalco/2571d415-8cc8-\
4120-a762-c03a8eda0659/8/develop)](https://vinniefalco.visualstudio.com/json/\
_build/latest?definitionId=8&branchName=develop)
Docs            | [![Documentation](https://img.shields.io/badge/docs-master-\
brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/json/) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](https://www.boost.org/doc/libs/develop/libs/json/)
[Drone](https://drone.io/) | [![Build Status](https://drone.cpp.al/api/badges\
/boostorg/json/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boosto\
rg/json) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/json/sta\
tus.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/json)
Matrix          | [![Matrix](https://img.shields.io/badge/matrix-master-brigh\
tgreen.svg)](http://www.boost.org/development/tests/master/developer/json.htm\
l) | [![Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)]\
(http://www.boost.org/development/tests/develop/developer/json.html)
Fuzzing         | --- |  [![fuzz](https://github.com/boostorg/json/workflows/\
fuzz/badge.svg?branch=develop)](https://github.com/boostorg/json/actions?quer\
y=workflow%3Afuzz+branch%3Adevelop)
[Appveyor](https://ci.appveyor.com/) | [![Build status](https://ci.appveyor.c\
om/api/projects/status/8csswcnmfm798203?branch=master&svg=true)](https://ci.a\
ppveyor.com/project/vinniefalco/cppalliance-json/branch/master) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/8csswcnmfm798203?branch=\
develop&svg=true)](https://ci.appveyor.com/project/vinniefalco/cppalliance-js\
on/branch/develop)
[codecov.io](https://codecov.io) | [![codecov](https://codecov.io/gh/boostorg\
/json/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/json/bra\
nch/master) | [![codecov](https://codecov.io/gh/boostorg/json/branch/develop/\
graph/badge.svg)](https://codecov.io/gh/boostorg/json/branch/develop)

# Boost.JSON

## Overview

Boost.JSON is a portable C++ library which provides containers and
algorithms that implement
[JavaScript Object Notation](https://json.org/), or simply "JSON",
a lightweight data-interchange format. This format is easy for humans to
read and write, and easy for machines to parse and generate. It is based
on a subset of the JavaScript Programming Language
([Standard ECMA-262](https://www.ecma-international.org/ecma-262/10.0/index.h\
tml)),
and is currently standardised in [RFC 8259](https://datatracker.ietf.org/doc/\
html/rfc8259).
JSON is a text format that is language-independent but uses conventions
that are familiar to programmers of the C-family of languages, including
C, C++, C#, Java, JavaScript, Perl, Python, and many others. These
properties make JSON an ideal data-interchange language.

This library focuses on a common and popular use-case: parsing
and serializing to and from a container called `value` which
holds JSON types. Any `value` which you build can be serialized
and then deserialized, guaranteeing that the result will be equal
to the original value. Whatever JSON output you produce with this
library will be readable by most common JSON implementations
in any language.

The `value` container is designed to be well suited as a
vocabulary type appropriate for use in public interfaces and
libraries, allowing them to be composed. The library restricts
the representable data types to the ranges which are almost
universally accepted by most JSON implementations, especially
JavaScript. The parser and serializer are both highly performant,
meeting or exceeding the benchmark performance of the best comparable
libraries. Allocators are very well supported. Code which uses these
types will be easy to understand, flexible, and performant.

Boost.JSON offers these features:

* Fast compilation
* Require only C++11
* Fast streaming parser and serializer
* Constant-time key lookup for objects
* Options to allow non-standard JSON
* Easy and safe modern API with allocator support
* Optional header-only, without linking to a library

Visit https://boost.org/libs/json for complete documentation.

## Requirements

* Requires only C++11
* Link to a built static or dynamic Boost library, or use header-only (see\
 below)
* Supports -fno-exceptions, detected automatically

The library relies heavily on these well known C++ types in
its interfaces (henceforth termed _standard types_):

* `string_view`
* `memory_resource`, `polymorphic_allocator`
* `error_category`, `error_code`, `error_condition`, `system_error`

### Header-Only

To use as header-only; that is, to eliminate the requirement to
link a program to a static or dynamic Boost.JSON library, simply
place the following line in exactly one new or existing source
file in your project.
```
#include <boost/json/src.hpp>
```

MSVC users must also define the macro `BOOST_JSON_NO_LIB` to disable
auto-linking. Note, that if you also want to avoid linking to Boost.Container,
which is a dependency of Boost.JSON, you have to define
`BOOST_CONTAINER_NO_LIB`. In order to disable auto-linking to Boost libraries
completely you can define `BOOST_ALL_NO_LIB` instead.

### Embedded

Boost.JSON works great on embedded devices. The library uses local
stack buffers to increase the performance of some operations. On
Intel platforms these buffers are large (4KB), while on non-Intel
platforms they are small (256 bytes). To adjust the size of the
stack buffers for embedded applications define this macro when
building the library or including the function definitions:
```
#define BOOST_JSON_STACK_BUFFER_SIZE 1024
#include <boost/json/src.hpp>
```
### Endianness

Boost.JSON uses [Boost.Endian](https://www.boost.org/doc/libs/release/libs/en\
dian/doc/html/endian.html)
in order to support both little endian and big endian platforms.

### Supported Compilers

Boost.JSON has been tested with the following compilers:

* clang: 3.5, 3.6, 3.7, 3.8, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
* gcc: 4.8, 4.9, 5, 6, 7, 8, 9, 10, 11, 12
* msvc: 14.0, 14.1, 14.2, 14.3

**Note: support for GCC 4.8 and 4.9 is deprecated and will stop in
Boost 1.88.0.**

### Supported JSON Text

The library expects input text to be encoded using UTF-8, which is a
requirement put on all JSON exchanged between systems by the
[RFC](https://datatracker.ietf.org/doc/html/rfc8259#section-8.1). Similarly,
the text generated by the library is valid UTF-8.

The RFC does not allow byte order marks (BOM) to appear in JSON text, so the
library considers BOM syntax errors.

The library supports several popular JSON extensions. These have to be
explicitly enabled.

### Visual Studio Solution

    cmake -G "Visual Studio 16 2019" -A Win32 -B bin -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake
    cmake -G "Visual Studio 16 2019" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake

## Quality Assurance

The development infrastructure for the library includes
these per-commit analyses:

* Coverage reports
* Benchmark performance comparisons
* Compilation and tests on Drone.io, Azure Pipelines, Appveyor
* Fuzzing using clang-llvm and machine learning

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/json
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/json
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-align == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-describe == 1.87.0
depends: libboost-endian == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-json

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-json-1.87.0.tar.gz
sha256sum: 84f26f6735edd7ed49bd967a0c1a622a80646bc37f99a664afeeadf84957a75f
:
name: libboost-lambda
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Define small unnamed function objects at the actual call site, and\
 more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/lambda
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/lambda
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lambda

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lambda-1.83.0.tar.gz
sha256sum: 87b1643841eab9e61d03eeb41ac9794085f73381f422ac83a8f0d48e9d465d6f
:
name: libboost-lambda
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Define small unnamed function objects at the actual call site, and\
 more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/lambda
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/lambda
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lambda

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lambda-1.85.0.tar.gz
sha256sum: 80f9765fe79eb837cf97931eb3acb769d5427e69ed9a704183354282633ce41b
:
name: libboost-lambda
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Define small unnamed function objects at the actual call site, and\
 more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/lambda
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/lambda
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lambda

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lambda-1.87.0.tar.gz
sha256sum: 5c34a84896947a325e78945d95c1c48e5b6fc98a20b693909a3292cb555764ef
:
name: libboost-lambda2
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A C++14 lambda library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Lambda2

This is an implementation of the simple C++14 lambda library
described in [this post](https://pdimov.github.io/blog/2020/07/22/a-c14-lambd\
a-library/).

It has no dependencies and consists of a [single header](include/boost/lambda\
2/lambda2.hpp).

See [the documentation](https://www.boost.org/libs/lambda2/) for more\
 information.

## Supported Compilers

* g++ 5 or later with `-std=c++14` or above
* clang++ 3.9 or later with `-std=c++14` or above
* Visual Studio 2015, 2017, 2019

Tested on [Github Actions](https://github.com/boostorg/lambda2/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/lambda2).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/lambda2
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/lambda2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lambda2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lambda2-1.83.0.tar.gz
sha256sum: c1baefe0d958059ba05d52325252522ed7c690af9d683c4d98f63eb3e701bc44
:
name: libboost-lambda2
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A C++14 lambda library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Lambda2

This is an implementation of the simple C++14 lambda library
described in [this post](https://pdimov.github.io/blog/2020/07/22/a-c14-lambd\
a-library/).

It has no dependencies and consists of a [single header](include/boost/lambda\
2/lambda2.hpp).

See [the documentation](https://www.boost.org/libs/lambda2/) for more\
 information.

## Supported Compilers

* g++ 5 or later with `-std=c++14` or above
* clang++ 3.9 or later with `-std=c++14` or above
* Visual Studio 2015, 2017, 2019

Tested on [Github Actions](https://github.com/boostorg/lambda2/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/lambda2).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/lambda2
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/lambda2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lambda2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lambda2-1.85.0.tar.gz
sha256sum: 21d8564966b57e7850341568f2680a78767459e0ec2ff574de2386cc91026d98
:
name: libboost-lambda2
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A C++14 lambda library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Lambda2

This is an implementation of the simple C++14 lambda library
described in [this post](https://pdimov.github.io/blog/2020/07/22/a-c14-lambd\
a-library/).

It has no dependencies and consists of a [single header](include/boost/lambda\
2/lambda2.hpp).

See [the documentation](https://www.boost.org/libs/lambda2/) for more\
 information.

## Supported Compilers

* g++ 5 or later with `-std=c++14` or above
* clang++ 3.9 or later with `-std=c++14` or above
* Visual Studio 2015, 2017, 2019

Tested on [Github Actions](https://github.com/boostorg/lambda2/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/lambda2).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/lambda2
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/lambda2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lambda2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lambda2-1.87.0.tar.gz
sha256sum: e8557a6dc651ba4aad03a01551cd814342d2cf1e1d746d67326efbcae2cc9157
:
name: libboost-leaf
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A lightweight error handling library for C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# LEAF

> A lightweight error handling library for C++11.

## Documentation

https://boostorg.github.io/leaf/

## Features

* Portable single-header format, no dependencies.
* Tiny code size when configured for embedded development.
* No dynamic memory allocations, even with very large payloads.
* Deterministic unbiased efficiency on the "happy" path and the "sad" path.
* Error objects are handled in constant time, independent of call stack depth.
* Can be used with or without exception handling.

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Besides GitHub, there are two other distribution channels:

* LEAF is included in official [Boost](https://www.boost.org/) releases,\
 starting with Boost 1.75.
* For maximum portability, the library is also available in single-header\
 format: simply download [leaf.hpp](https://boostorg.github.io/leaf/leaf.hpp)\
 (direct download link).

Copyright 2018-2022 Emil Dotchevski and Reverge Studios, Inc. Distributed\
 under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License,\
 Version 1.0].

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/leaf
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/leaf
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-leaf

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-leaf-1.83.0.tar.gz
sha256sum: af7877aacfd3f32676c7a572f87b6ab9aaaddc0ed2709fc5da31a393fbeb628a
:
name: libboost-leaf
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A lightweight error handling library for C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# LEAF

> A lightweight error handling library for C++11.

## Documentation

https://boostorg.github.io/leaf/

## Features

* Portable single-header format, no dependencies.
* Tiny code size when configured for embedded development.
* No dynamic memory allocations, even with very large payloads.
* Deterministic unbiased efficiency on the "happy" path and the "sad" path.
* Error objects are handled in constant time, independent of call stack depth.
* Can be used with or without exception handling.

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Besides GitHub, there are two other distribution channels:

* LEAF is included in official [Boost](https://www.boost.org/) releases,\
 starting with Boost 1.75.
* For maximum portability, the library is also available in single-header\
 format: simply download [leaf.hpp](https://boostorg.github.io/leaf/leaf.hpp)\
 (direct download link).

Copyright 2018-2023 Emil Dotchevski and Reverge Studios, Inc. Distributed\
 under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License,\
 Version 1.0].

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/leaf
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/leaf
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-leaf

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-leaf-1.85.0.tar.gz
sha256sum: 2a1948dff2824d04268c966da927671b6481b435e4193dbb7d1e96db015e30f5
:
name: libboost-leaf
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A lightweight error handling library for C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# LEAF

> A lightweight error handling library for C++11.

## Documentation

https://boostorg.github.io/leaf/

## Features

* Portable single-header format, no dependencies.
* Tiny code size, configurable for embedded development.
* No dynamic memory allocations, even with very large payloads.
* Deterministic unbiased efficiency on the "happy" path and the "sad" path.
* Error objects are handled in constant time, independent of call stack depth.
* Can be used with or without exception handling.

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Besides GitHub, there are two other distribution channels:

* LEAF is included in official [Boost](https://www.boost.org/) releases,\
 starting with Boost 1.75.
* For maximum portability, the library is also available in single-header\
 format: [leaf.hpp](https://raw.githubusercontent.com/boostorg/leaf/gh-pages/\
leaf.hpp).

Copyright 2018-2024 Emil Dotchevski and Reverge Studios, Inc. Distributed\
 under the http://www.boost.org/LICENSE_1_0.txt[Boost Software License,\
 Version 1.0].

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/leaf
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/leaf
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-leaf

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-leaf-1.87.0.tar.gz
sha256sum: 0ce462a4876c7dbb091b20c13bd639abf17816f6a7a94ecc3aa52c8d1688729d
:
name: libboost-lexical-cast
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: General literal text conversions, such as an int represented a\
 string, or vice-versa
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.LexicalCast](https://boost.org/libs/lexical_cast)
Boost.LexicalCast is one of the [Boost C++ Libraries](https://github.com/boos\
torg). This library is meant for general literal text conversions, such as an\
 int represented a string, or vice-versa.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/lexical_cast/actions/wor\
kflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/lexical_\
cast/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/p\
rojects/status/mwwanh1bpsnuv38h/branch/develop?svg=true)](https://ci.appveyor\
.com/project/apolukhin/lexical-cast/branch/develop)  | [![Coverage\
 Status](https://coveralls.io/repos/boostorg/lexical_cast/badge.png?branch=de\
velop)](https://coveralls.io/r/boostorg/lexical_cast?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/lexic\
al_cast.html)
Master branch:  | [![CI](https://github.com/boostorg/lexical_cast/actions/wor\
kflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/lexical_c\
ast/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/mwwanh1bpsnuv38h/branch/master?svg=true)](https://ci.appveyor.c\
om/project/apolukhin/lexical-cast/branch/master)  | [![Coverage\
 Status](https://coveralls.io/repos/boostorg/lexical_cast/badge.png?branch=ma\
ster)](https://coveralls.io/r/boostorg/lexical_cast?branch=master) |\
 [details...](https://www.boost.org/development/tests/master/developer/lexica\
l_cast.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_lexical_cast.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/lexical_cast
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/lexical_cast
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lexical-cast

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lexical-cast-1.83.0.tar.gz
sha256sum: 6585da6768d466a801a97f475ee2d6a50bfc7a734bbff11e679c73c42d149aee
:
name: libboost-lexical-cast
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: General literal text conversions, such as an int represented a\
 string, or vice-versa
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.LexicalCast](https://boost.org/libs/lexical_cast)
Boost.LexicalCast is one of the [Boost C++ Libraries](https://github.com/boos\
torg). This library is meant for general literal text conversions, such as an\
 int represented a string, or vice-versa.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/lexical_cast/actions/wor\
kflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/lexical_\
cast/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/p\
rojects/status/mwwanh1bpsnuv38h/branch/develop?svg=true)](https://ci.appveyor\
.com/project/apolukhin/lexical-cast/branch/develop)  | [![Coverage\
 Status](https://coveralls.io/repos/boostorg/lexical_cast/badge.png?branch=de\
velop)](https://coveralls.io/r/boostorg/lexical_cast?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/lexic\
al_cast.html)
Master branch:  | [![CI](https://github.com/boostorg/lexical_cast/actions/wor\
kflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/lexical_c\
ast/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/mwwanh1bpsnuv38h/branch/master?svg=true)](https://ci.appveyor.c\
om/project/apolukhin/lexical-cast/branch/master)  | [![Coverage\
 Status](https://coveralls.io/repos/boostorg/lexical_cast/badge.png?branch=ma\
ster)](https://coveralls.io/r/boostorg/lexical_cast?branch=master) |\
 [details...](https://www.boost.org/development/tests/master/developer/lexica\
l_cast.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_lexical_cast.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/lexical_cast
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/lexical_cast
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lexical-cast

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lexical-cast-1.85.0.tar.gz
sha256sum: cd69bb7ba0eb8f46e220e6399bdf8549956ca5d8382cc2d328ffdf3e5301d80e
:
name: libboost-lexical-cast
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: General literal text conversions, such as an int represented a\
 string, or vice-versa
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.LexicalCast](https://boost.org/libs/lexical_cast)
Boost.LexicalCast is one of the [Boost C++ Libraries](https://github.com/boos\
torg). This library is meant for general literal text conversions, such as an\
 int represented a string, or vice-versa.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/lexical_cast/actions/wor\
kflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/lexical_\
cast/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/p\
rojects/status/mwwanh1bpsnuv38h/branch/develop?svg=true)](https://ci.appveyor\
.com/project/apolukhin/lexical-cast/branch/develop)  | [![Coverage\
 Status](https://coveralls.io/repos/boostorg/lexical_cast/badge.png?branch=de\
velop)](https://coveralls.io/r/boostorg/lexical_cast?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/lexic\
al_cast.html)
Master branch:  | [![CI](https://github.com/boostorg/lexical_cast/actions/wor\
kflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/lexical_c\
ast/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/mwwanh1bpsnuv38h/branch/master?svg=true)](https://ci.appveyor.c\
om/project/apolukhin/lexical-cast/branch/master)  | [![Coverage\
 Status](https://coveralls.io/repos/boostorg/lexical_cast/badge.png?branch=ma\
ster)](https://coveralls.io/r/boostorg/lexical_cast?branch=master) |\
 [details...](https://www.boost.org/development/tests/master/developer/lexica\
l_cast.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_lexical_cast.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/lexical_cast
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/lexical_cast
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lexical-cast

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lexical-cast-1.87.0.tar.gz
sha256sum: e90532ad7cc6237923af70997196a47d0cb78a62b14f43c0a85a048d52e74db3
:
name: libboost-local-function
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Program functions locally, within other functions, directly within\
 the scope where they are needed
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/local_function
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/local_function
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-scope-exit == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-local-function

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-local-function-1.83.0.tar.gz
sha256sum: 472d145a5bd316960b1ff992f12a2e38a19120bdde8da4d29a9bf3f04bf3c295
:
name: libboost-local-function
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Program functions locally, within other functions, directly within\
 the scope where they are needed
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/local_function
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/local_function
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-scope-exit == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-local-function

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-local-function-1.85.0.tar.gz
sha256sum: 36a8768f87a5f5c2fe1a062a205a1aaea49b9bf56de8c11674e9791abedf32f8
:
name: libboost-local-function
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Program functions locally, within other functions, directly within\
 the scope where they are needed
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/local_function
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/local_function
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-scope-exit == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-local-function

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-local-function-1.87.0.tar.gz
sha256sum: d2502f0aeafe5ede492f2437849efe919ecfa6afef1e4b510fa668eb0e62f771
:
name: libboost-locale
version: 1.83.0
language: c++
project: boost
summary: Provide localization and Unicode handling tools for C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Locale

Part of the [Boost C++ Libraries](http://github.com/boostorg).

Boost.Locale is a library that provides high quality localization facilities\
 in a C++ way.
It was originally designed a part of [CppCMS](http://cppcms.sourceforge.net/)\
 - a C++ Web Framework project and then contributed to Boost.

Boost.Locale gives powerful tools for development of cross-platform localized\
 software - the software that talks to users in their language.

Provided Features:

- Correct case conversion, case folding and normalization.
- Collation (sorting), including support for 4 Unicode collation levels.
- Date, time, timezone and calendar manipulations, formatting and parsing,\
 including transparent support for calendars other than Gregorian.
- Boundary analysis for characters, words, sentences and line-breaks.
- Number formatting, spelling and parsing.
- Monetary formatting and parsing.
- Powerful message formatting (string translation) including support for\
 plural forms, using GNU catalogs.
- Character set conversion.
- Transparent support for 8-bit character sets like Latin1
- Support for `char` and `wchar_t`
- Experimental support for C++11 `char16_t` and `char32_t` strings and\
 streams.

Boost.Locale enhances and unifies the standard library's API the way it\
 becomes useful and convenient for development of cross-platform and\
 "cross-culture" software.

In order to achieve this goal Boost.Locale uses the-state-of-the-art Unicode\
 and Localization library: ICU - International Components for Unicode.

Boost.Locale creates the natural glue between the C++ locales framework,\
 iostreams, and the powerful ICU library.

Boost.Locale provides non-ICU based localization support as well.
It is based on the operating system native API or on the standard C++ library\
 support.
Sacrificing some less important features, Boost.Locale becomes less powerful\
 but lighter and easier to deploy and use library.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* C++11
* Formatted with clang-format, see [`tools/format_sources.sh`](https://github\
.com/boostorg/locale/blob/develop/tools/format_sources.sh)

### Build Status

Branch          | GH Actions | Appveyor | codecov.io | Deps | Docs | Tests |
:-------------: | ---------- | -------- | ---------- | ---- | ---- | ----- |
[`master`](https://github.com/boostorg/locale/tree/master)   |\
 [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg\
?branch=master)](https://github.com/boostorg/locale/actions/workflows/ci.yml)\
  | [![Build status](https://ci.appveyor.com/api/projects/status/github/boost\
org/locale?branch=master&svg=true)](https://ci.appveyor.com/project/Flamefire\
/locale/branch/master)   | [![codecov](https://codecov.io/gh/boostorg/locale/\
branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/\
master)   | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg\
)](https://pdimov.github.io/boostdep-report/master/locale.html)   |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/locale/doc/html/index.html)   |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/locale.html)
[`develop`](https://github.com/boostorg/locale/tree/develop) |\
 [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg\
?branch=develop)](https://github.com/boostorg/locale/actions/workflows/ci.yml\
) | [![Build status](https://ci.appveyor.com/api/projects/status/github/boost\
org/locale?branch=develop&svg=true)](https://ci.appveyor.com/project/Flamefir\
e/locale/branch/develop) | [![codecov](https://codecov.io/gh/boostorg/locale/\
branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch\
/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.sv\
g)](https://pdimov.github.io/boostdep-report/develop/locale.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](https://www.boost.org/doc/libs/develop/libs/locale/doc/html/index.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/locale.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | Documentation                  |
| `examples`  | Examples                       |
| `include`   | Headers                        |
| `src`       | Source files                   |
| `test`      | Unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-locale)
* [Report bugs](https://github.com/boostorg/locale/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[locale]` tag at the beginning of the subject line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/locale
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/locale
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-predef == 1.83.0
depends: libboost-thread == 1.83.0
depends: libicuuc ^65.1.0
depends: libicui18n ^65.1.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-locale

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-locale-1.83.0.tar.gz
sha256sum: 8d716947fd1a8d6296a7e23848cce8883df952557064a06ddf24893eb61bef8c
:
name: libboost-locale
version: 1.85.0
language: c++
project: boost
summary: Provide localization and Unicode handling tools for C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Locale

Part of the [Boost C++ Libraries](http://github.com/boostorg).

Boost.Locale is a library that provides high quality localization facilities\
 in a C++ way.
It was originally designed a part of [CppCMS](http://cppcms.sourceforge.net/)\
 - a C++ Web Framework project and then contributed to Boost.

Boost.Locale gives powerful tools for development of cross-platform localized\
 software - the software that talks to users in their language.

Provided Features:

- Correct case conversion, case folding and normalization.
- Collation (sorting), including support for 4 Unicode collation levels.
- Date, time, timezone and calendar manipulations, formatting and parsing,\
 including transparent support for calendars other than Gregorian.
- Boundary analysis for characters, words, sentences and line-breaks.
- Number formatting, spelling and parsing.
- Monetary formatting and parsing.
- Powerful message formatting (string translation) including support for\
 plural forms, using GNU catalogs.
- Character set conversion.
- Transparent support for 8-bit character sets like Latin1
- Support for `char` and `wchar_t`
- Experimental support for C++11 `char16_t` and `char32_t` strings and\
 streams.

Boost.Locale enhances and unifies the standard library's API the way it\
 becomes useful and convenient for development of cross-platform and\
 "cross-culture" software.

In order to achieve this goal Boost.Locale uses the-state-of-the-art Unicode\
 and Localization library: ICU - International Components for Unicode.

Boost.Locale creates the natural glue between the C++ locales framework,\
 iostreams, and the powerful ICU library.

Boost.Locale provides non-ICU based localization support as well.
It is based on the operating system native API or on the standard C++ library\
 support.
Sacrificing some less important features, Boost.Locale becomes less powerful\
 but lighter and easier to deploy and use library.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* C++11
* Formatted with clang-format, see [`tools/format_sources.sh`](https://github\
.com/boostorg/locale/blob/develop/tools/format_sources.sh)

### Build Status

Branch          | GH Actions | Appveyor | Drone | codecov.io | Deps | Docs |\
 Tests |
:-------------: | ---------- | -------- | ----- | ---------- | ---- | ---- |\
 ----- |
[`master`](https://github.com/boostorg/locale/tree/master)   |\
 [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg\
?branch=master)](https://github.com/boostorg/locale/actions/workflows/ci.yml)\
  | [![Build status](https://ci.appveyor.com/api/projects/status/github/boost\
org/locale?branch=master&svg=true)](https://ci.appveyor.com/project/Flamefire\
/locale/branch/master)   | [![Build Status](https://drone.cpp.al/api/badges/b\
oostorg/locale/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boosto\
rg/locale)  | [![codecov](https://codecov.io/gh/boostorg/locale/branch/master\
/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/master)   |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/locale.html)   | [![Documentation](ht\
tps://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.or\
g/doc/libs/master/libs/locale/doc/html/index.html)   | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://\
www.boost.org/development/tests/master/developer/locale.html)
[`develop`](https://github.com/boostorg/locale/tree/develop) |\
 [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg\
?branch=develop)](https://github.com/boostorg/locale/actions/workflows/ci.yml\
) | [![Build status](https://ci.appveyor.com/api/projects/status/github/boost\
org/locale?branch=develop&svg=true)](https://ci.appveyor.com/project/Flamefir\
e/locale/branch/develop) | [![Build Status](https://drone.cpp.al/api/badges/b\
oostorg/locale/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/boost\
org/locale) | [![codecov](https://codecov.io/gh/boostorg/locale/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/locale.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.o\
rg/doc/libs/develop/libs/locale/doc/html/index.html) | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http:/\
/www.boost.org/development/tests/develop/developer/locale.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | Documentation                  |
| `examples`  | Examples                       |
| `include`   | Headers                        |
| `src`       | Source files                   |
| `test`      | Unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-locale)
* [Report bugs](https://github.com/boostorg/locale/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[locale]` tag at the beginning of the subject line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/locale
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/locale
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-predef == 1.85.0
depends: libboost-thread == 1.85.0
depends: libicuuc ^65.1.0
depends: libicui18n ^65.1.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-locale

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-locale-1.85.0.tar.gz
sha256sum: b631557796b36bb72fdfff8b55f1209cd6c8a4f1ad2bc20fcea29f160cdc00b5
:
name: libboost-locale
version: 1.87.0
language: c++
project: boost
summary: Provide localization and Unicode handling tools for C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Locale

Part of the [Boost C++ Libraries](http://github.com/boostorg).

Boost.Locale is a library that provides high quality localization facilities\
 in a C++ way.
It was originally designed a part of [CppCMS](http://cppcms.sourceforge.net/)\
 - a C++ Web Framework project and then contributed to Boost.

Boost.Locale gives powerful tools for development of cross-platform localized\
 software - the software that talks to users in their language.

Provided Features:

- Correct case conversion, case folding and normalization.
- Collation (sorting), including support for 4 Unicode collation levels.
- Date, time, timezone and calendar manipulations, formatting and parsing,\
 including transparent support for calendars other than Gregorian.
- Boundary analysis for characters, words, sentences and line-breaks.
- Number formatting, spelling and parsing.
- Monetary formatting and parsing.
- Powerful message formatting (string translation) including support for\
 plural forms, using GNU catalogs.
- Character set conversion.
- Transparent support for 8-bit character sets like Latin1
- Support for `char` and `wchar_t`
- Experimental support for C++11 `char16_t` and `char32_t` strings and\
 streams.

Boost.Locale enhances and unifies the standard library's API the way it\
 becomes useful and convenient for development of cross-platform and\
 "cross-culture" software.

In order to achieve this goal Boost.Locale uses the-state-of-the-art Unicode\
 and Localization library: ICU - International Components for Unicode.

Boost.Locale creates the natural glue between the C++ locales framework,\
 iostreams, and the powerful ICU library.

Boost.Locale provides non-ICU based localization support as well.
It is based on the operating system native API or on the standard C++ library\
 support.
Sacrificing some less important features, Boost.Locale becomes less powerful\
 but lighter and easier to deploy and use library.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* C++11
* Formatted with clang-format, see [`tools/format_sources.sh`](https://github\
.com/boostorg/locale/blob/develop/tools/format_sources.sh)

### Build Status

Branch          | GH Actions | Appveyor | Drone | codecov.io | Deps | Docs |\
 Tests |
:-------------: | ---------- | -------- | ----- | ---------- | ---- | ---- |\
 ----- |
[`master`](https://github.com/boostorg/locale/tree/master)   |\
 [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg\
?branch=master)](https://github.com/boostorg/locale/actions/workflows/ci.yml)\
  | [![Build status](https://ci.appveyor.com/api/projects/status/github/boost\
org/locale?branch=master&svg=true)](https://ci.appveyor.com/project/Flamefire\
/locale/branch/master)   | [![Build Status](https://drone.cpp.al/api/badges/b\
oostorg/locale/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boosto\
rg/locale)  | [![codecov](https://codecov.io/gh/boostorg/locale/branch/master\
/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/master)   |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/locale.html)   | [![Documentation](ht\
tps://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.or\
g/doc/libs/master/libs/locale/doc/html/index.html)   | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://\
www.boost.org/development/tests/master/developer/locale.html)
[`develop`](https://github.com/boostorg/locale/tree/develop) |\
 [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg\
?branch=develop)](https://github.com/boostorg/locale/actions/workflows/ci.yml\
) | [![Build status](https://ci.appveyor.com/api/projects/status/github/boost\
org/locale?branch=develop&svg=true)](https://ci.appveyor.com/project/Flamefir\
e/locale/branch/develop) | [![Build Status](https://drone.cpp.al/api/badges/b\
oostorg/locale/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/boost\
org/locale) | [![codecov](https://codecov.io/gh/boostorg/locale/branch/develo\
p/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/locale.html) | [![Documentation](ht\
tps://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.o\
rg/doc/libs/develop/libs/locale/doc/html/index.html) | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http:/\
/www.boost.org/development/tests/develop/developer/locale.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | Documentation                  |
| `examples`  | Examples                       |
| `include`   | Headers                        |
| `src`       | Source files                   |
| `test`      | Unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-locale)
* [Report bugs](https://github.com/boostorg/locale/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[locale]` tag at the beginning of the subject line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/locale
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/locale
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-predef == 1.87.0
depends: libboost-thread == 1.87.0
depends: libicuuc ^65.1.0
depends: libicui18n ^65.1.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-locale

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-locale-1.87.0.tar.gz
sha256sum: 4ab422970f8349085fd179c3368fd75b5eb9050b2ad6ab08fb2a88ea584619c7
:
name: libboost-lockfree
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Lockfree data structures
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/lockfree
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/lockfree
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.83.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-atomic == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lockfree

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lockfree-1.83.0.tar.gz
sha256sum: b97ac4ecf397bdf11f99979ad099da8618151a022dd1561e23d4a965fc8f2075
:
name: libboost-lockfree
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Lockfree data structures
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/lockfree
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/lockfree
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.85.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-atomic == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lockfree

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lockfree-1.85.0.tar.gz
sha256sum: 44825c61b5855e01d044c2212afb97862ac9ca9d1c422111667d0e5034b70545
:
name: libboost-lockfree
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Lockfree data structures
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/lockfree
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/lockfree
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-align == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-atomic == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-lockfree

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-lockfree-1.87.0.tar.gz
sha256sum: 7db7aac26d9618f1a0bf844d9b556a73db1e2dba176206b91e7334376d3f2f1d
:
name: libboost-log
version: 1.83.0
language: c++
project: boost
summary: Logging library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Log](doc/logo.png)

Boost.Log, part of collection of the [Boost C++ Libraries](https://github.com\
/boostorg), provides tools for adding logging to libraries and applications.

### Directories

* **build** - Boost.Log build scripts
* **config** - Boost.Log build configuration code and scripts
* **doc** - QuickBook documentation sources
* **example** - Boost.Log examples
* **include** - Interface headers of Boost.Log
* **src** - Compilable source code of Boost.Log
* **test** - Boost.Log unit tests

### More information

* [Documentation](https://www.boost.org/libs/log)
* [Ask questions](https://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,\
boost-log)
* [Report bugs](https://github.com/boostorg/log/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/log/comp\
are) against **develop** branch. Note that by submitting patches you agree to\
 license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](https://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](https://www.boost.org/community/policy.html) before\
 posting and add the `[log]` tag at the beginning of the subject line.

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/log/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/log/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/log/actions?query=branch%3Amaster\
) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w7x67cnm82xihei5\
/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/log/branch\
/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.s\
vg)](http://www.boost.org/development/tests/master/developer/log.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/log.html)
[`develop`](https://github.com/boostorg/log/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/log/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/log/actions?query=branch%3Adevel\
op) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w7x67cnm82xihe\
i5/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/log/bra\
nch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/log.html)\
 | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg\
)](https://pdimov.github.io/boostdep-report/develop/log.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/log
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/log
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.83.0
depends: libboost-asio == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-interprocess == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-random == 1.83.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-atomic == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-date-time == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-filesystem == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-intrusive == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-phoenix == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-property-tree == 1.83.0
depends: libboost-proto == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-regex == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends:
\
libboost-spirit == 1.83.0
{
  require
  {
    config.libboost_spirit.classic = true
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-static-assert == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-thread == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-index == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-winapi == 1.83.0
depends: libboost-xpressive == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-log

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-log-1.83.0.tar.gz
sha256sum: 302b6081740a03eb7c1124b321cbdb2a364ec73c40f20e70750fd51d5f2770a0
:
name: libboost-log
version: 1.85.0
language: c++
project: boost
summary: Logging library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Log](doc/logo.png)

Boost.Log, part of collection of the [Boost C++ Libraries](https://github.com\
/boostorg), provides tools for adding logging to libraries and applications.

### Directories

* **build** - Boost.Log build scripts
* **config** - Boost.Log build configuration code and scripts
* **doc** - QuickBook documentation sources
* **example** - Boost.Log examples
* **include** - Interface headers of Boost.Log
* **src** - Compilable source code of Boost.Log
* **test** - Boost.Log unit tests

### More information

* [Documentation](https://www.boost.org/libs/log)
* [Ask questions](https://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,\
boost-log)
* [Report bugs](https://github.com/boostorg/log/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/log/comp\
are) against **develop** branch. Note that by submitting patches you agree to\
 license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](https://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](https://www.boost.org/community/policy.html) before\
 posting and add the `[log]` tag at the beginning of the subject line.

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/log/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/log/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/log/actions?query=branch%3Amaster\
) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w7x67cnm82xihei5\
/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/log/branch\
/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.s\
vg)](http://www.boost.org/development/tests/master/developer/log.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/log.html)
[`develop`](https://github.com/boostorg/log/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/log/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/log/actions?query=branch%3Adevel\
op) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w7x67cnm82xihe\
i5/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/log/bra\
nch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/log.html)\
 | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg\
)](https://pdimov.github.io/boostdep-report/develop/log.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/log
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/log
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-align == 1.85.0
depends: libboost-asio == 1.85.0
depends: libboost-interprocess == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-random == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-atomic == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-date-time == 1.85.0
depends: libboost-exception == 1.85.0
depends: libboost-filesystem == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-phoenix == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-property-tree == 1.85.0
depends: libboost-proto == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-regex == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends:
\
libboost-spirit == 1.85.0
{
  require
  {
    config.libboost_spirit.classic = true
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-system == 1.85.0
depends: libboost-thread == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-index == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-winapi == 1.85.0
depends: libboost-xpressive == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-log

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-log-1.85.0.tar.gz
sha256sum: b5b03efcd1a8e08ff3ddf28587372ce7f19b316ff870aefbd2213680fe0ee0f9
:
name: libboost-log
version: 1.87.0
language: c++
project: boost
summary: Logging library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Log](doc/logo.png)

Boost.Log, part of collection of the [Boost C++ Libraries](https://github.com\
/boostorg), provides tools for adding logging to libraries and applications.

### Directories

* **build** - Boost.Log build scripts
* **config** - Boost.Log build configuration code and scripts
* **doc** - QuickBook documentation sources
* **example** - Boost.Log examples
* **include** - Interface headers of Boost.Log
* **src** - Compilable source code of Boost.Log
* **test** - Boost.Log unit tests

### More information

* [Documentation](https://www.boost.org/libs/log)
* [Ask questions](https://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,\
boost-log)
* [Report bugs](https://github.com/boostorg/log/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/log/comp\
are) against **develop** branch. Note that by submitting patches you agree to\
 license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](https://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](https://www.boost.org/community/policy.html) before\
 posting and add the `[log]` tag at the beginning of the subject line.

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/log/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/log/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/log/actions?query=branch%3Amaster\
) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w7x67cnm82xihei5\
/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/log/branch\
/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.s\
vg)](http://www.boost.org/development/tests/master/developer/log.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/log.html)
[`develop`](https://github.com/boostorg/log/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/log/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/log/actions?query=branch%3Adevel\
op) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/w7x67cnm82xihe\
i5/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/log/bra\
nch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/log.html)\
 | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg\
)](https://pdimov.github.io/boostdep-report/develop/log.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/log
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/log
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-align == 1.87.0
depends: libboost-asio == 1.87.0
depends: libboost-interprocess == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-random == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-atomic == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-date-time == 1.87.0
depends: libboost-exception == 1.87.0
depends: libboost-filesystem == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-phoenix == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-property-tree == 1.87.0
depends: libboost-proto == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-regex == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends:
\
libboost-spirit == 1.87.0
{
  require
  {
    config.libboost_spirit.classic = true
    config.libboost_spirit.x2 = true
  }
}
\
depends: libboost-system == 1.87.0
depends: libboost-thread == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-index == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-winapi == 1.87.0
depends: libboost-xpressive == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-log

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-log-1.87.0.tar.gz
sha256sum: 00c439ba4112ffa69de8866d8690358297278120bc3b8c4171c2860609ab02eb
:
name: libboost-logic
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: 3-state boolean type library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Logic, part of collection of the [Boost C++ Libraries](http://github.com/boos\
torg), provides `boost::logic::tribool` for 3-state boolean logic.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/logic/tree/master) | [![Build\
 Status](https://github.com/boostorg/logic/actions/workflows/ci.yml/badge.svg\
?branch=master)](https://github.com/boostorg/logic/actions?query=branch:maste\
r) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8spmo\
2t3x9/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/logic-\
vv3ct/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.c\
om/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg-log\
ic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/master/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/logic/branch/master)|\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/logic.html) | [![Documentation](https\
://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/do\
c/libs/master/doc/html/tribool.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/logic.html)
[`develop`](https://github.com/boostorg/logic/tree/develop) | [![Build\
 Status](https://github.com/boostorg/logic/actions/workflows/ci.yml/badge.svg\
?branch=develop)](https://github.com/boostorg/logic/actions?query=branch:deve\
lop) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8sp\
mo2t3x9/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/log\
ic-vv3ct/branch/develop) | [![Coverity Scan Build Status](https://scan.coveri\
ty.com/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg\
-logic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/develop/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/logic/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/logic.html) | [![Documentation](htt\
ps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org\
/doc/libs/develop/doc/html/tribool.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/logic.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-logic)
* [Report bugs](https://github.com/boostorg/logic/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[logic]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/logic
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/logic
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-logic

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-logic-1.83.0.tar.gz
sha256sum: 70cf9cd63f6a4157c7a00a9238068ac921d3f972dacdbbc9e74e493cb905a6ac
:
name: libboost-logic
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: 3-state boolean type library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Logic, part of collection of the [Boost C++ Libraries](http://github.com/boos\
torg), provides `boost::logic::tribool` for 3-state boolean logic.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/logic/tree/master) | [![Build\
 Status](https://github.com/boostorg/logic/actions/workflows/ci.yml/badge.svg\
?branch=master)](https://github.com/boostorg/logic/actions?query=branch:maste\
r) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8spmo\
2t3x9/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/logic-\
vv3ct/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.c\
om/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg-log\
ic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/master/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/logic/branch/master)|\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/logic.html) | [![Documentation](https\
://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/do\
c/libs/master/doc/html/tribool.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/logic.html)
[`develop`](https://github.com/boostorg/logic/tree/develop) | [![Build\
 Status](https://github.com/boostorg/logic/actions/workflows/ci.yml/badge.svg\
?branch=develop)](https://github.com/boostorg/logic/actions?query=branch:deve\
lop) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8sp\
mo2t3x9/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/log\
ic-vv3ct/branch/develop) | [![Coverity Scan Build Status](https://scan.coveri\
ty.com/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg\
-logic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/develop/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/logic/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/logic.html) | [![Documentation](htt\
ps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org\
/doc/libs/develop/doc/html/tribool.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/logic.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-logic)
* [Report bugs](https://github.com/boostorg/logic/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[logic]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/logic
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/logic
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-logic

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-logic-1.85.0.tar.gz
sha256sum: cff96002430c3f9fd21e2f5bcc38a9adeebab3c149d5441c153637992a7b03fa
:
name: libboost-logic
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: 3-state boolean type library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Logic, part of collection of the [Boost C++ Libraries](http://github.com/boos\
torg), provides `boost::logic::tribool` for 3-state boolean logic.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/logic/tree/master) | [![Build\
 Status](https://github.com/boostorg/logic/actions/workflows/ci.yml/badge.svg\
?branch=master)](https://github.com/boostorg/logic/actions?query=branch:maste\
r) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8spmo\
2t3x9/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/logic-\
vv3ct/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.c\
om/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg-log\
ic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/master/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/logic/branch/master)|\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/logic.html) | [![Documentation](https\
://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/do\
c/libs/master/doc/html/tribool.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/\
tests/master/developer/logic.html)
[`develop`](https://github.com/boostorg/logic/tree/develop) | [![Build\
 Status](https://github.com/boostorg/logic/actions/workflows/ci.yml/badge.svg\
?branch=develop)](https://github.com/boostorg/logic/actions?query=branch:deve\
lop) | [![Build status](https://ci.appveyor.com/api/projects/status/a898pj8sp\
mo2t3x9/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/log\
ic-vv3ct/branch/develop) | [![Coverity Scan Build Status](https://scan.coveri\
ty.com/projects/16173/badge.svg)](https://scan.coverity.com/projects/boostorg\
-logic) | [![codecov](https://codecov.io/gh/boostorg/logic/branch/develop/gra\
ph/badge.svg)](https://codecov.io/gh/boostorg/logic/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/logic.html) | [![Documentation](htt\
ps://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org\
/doc/libs/develop/doc/html/tribool.html) | [![Enter the Matrix](https://img.s\
hields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develop\
ment/tests/develop/developer/logic.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-logic)
* [Report bugs](https://github.com/boostorg/logic/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[logic]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/logic
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/logic
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-logic

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-logic-1.87.0.tar.gz
sha256sum: ed9ac3701175e40fe54921252f693a2d05f0dabb31199f686132e4bff702552d
:
name: libboost-math
version: 1.83.0
language: c++
project: boost
summary: Boost.Math includes several contributions in the domain of\
 mathematics: Floating Point Utilities, Specific Width Floating Point Types,\
 Mathematical Constants, Statistical Distributions, Special Functions, Root\
 Finding and Function Minimization, Polynomials and Rational Functions,\
 Interpolation, and Numerical Integration and Differentiation. Many of these\
 features are templated to support both built-in, and extended width types\
 (e.g. Boost.Multiprecision)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Math Library 
[![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.svg)](h\
ttps://drone.cpp.al/boostorg/math)[![Build Status](https://github.com/boostor\
g/math/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/ma\
th/actions)
==================

>ANNOUNCEMENT: This library now requires a compliant C++14 compiler.

This library is divided into several interconnected parts:

### Floating Point Utilities

Utility functions for dealing with floating point arithmetic, includes\
 functions for floating point classification (fpclassify, isnan, isinf etc),\
 sign manipulation, rounding, comparison, and computing the distance between\
 floating point numbers.

### Specific Width Floating Point Types

A set of typedefs similar to those provided by `<cstdint>` but for floating\
 point types.

### Mathematical Constants

A wide range of constants ranging from various multiples of π, fractions,\
 Euler's constant, etc.

These are of course usable from template code, or as non-templates with a\
 simplified interface if that is more appropriate.

### Statistical Distributions

Provides a reasonably comprehensive set of statistical distributions, upon\
 which higher level statistical tests can be built.

The initial focus is on the central univariate distributions. Both continuous\
 (like normal & Fisher) and discrete (like binomial & Poisson) distributions\
 are provided.

A comprehensive tutorial is provided, along with a series of worked examples\
 illustrating how the library is used to conduct statistical tests.

### Special Functions

Provides a small number of high quality special functions; initially these\
 were concentrated on functions used in statistical applications along with\
 those in the Technical Report on C++ Library Extensions.

The function families currently implemented are the gamma, beta & error\
 functions along with the incomplete gamma and beta functions (four variants\
 of each) and all the possible inverses of these, plus the digamma, various\
 factorial functions, Bessel functions, elliptic integrals, hypergeometrics,\
 sinus cardinals (along with their hyperbolic variants), inverse hyperbolic\
 functions, Legrendre/Laguerre/Hermite/Chebyshev polynomials and various\
 special power and logarithmic functions.

All the implementations are fully generic and support the use of arbitrary\
 "real-number" types, including Boost.Multiprecision, although they are\
 optimised for use with types with known significand (or mantissa) sizes:\
 typically float, double or long double.

These functions also provide the basis of support for the TR1 special\
 functions.

### Root Finding and Function Minimisation

A comprehensive set of root-finding algorithms over the real line, both with\
 derivatives and derivative free.

Also function minimisation via Brent's Method.

### Polynomials and Rational Functions

Tools for manipulating polynomials and for efficient evaluation of rationals\
 or polynomials.

### Interpolation

Function interpolation via barycentric rational interpolation, compactly\
 supported quadratic, cubic, and quintic B-splines, the Chebyshev transform,\
 trigonometric polynomials, Makima, pchip, cubic Hermite splines, and\
 bilinear interpolation.

### Numerical Integration and Differentiation

A reasonably comprehensive set of routines for integration (trapezoidal,\
 Gauss-Legendre, Gauss-Kronrod, Gauss-Chebyshev, double-exponential, and\
 Monte-Carlo) and differentiation (Chebyshev transform, finite difference,\
 the complex step derivative, and forward-mode automatic differentiation).

The integration routines are usable for functions returning complex results -\
 and hence can be used for computation of  contour integrals.

### Quaternions and Octonions

Quaternion and Octonion are class templates similar to std::complex.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/math).

### Standalone Mode

Defining BOOST_MATH_STANDALONE allows Boost.Math to be used without any Boost\
 dependencies. Some functionality is reduced in this mode. A static_assert\
 message will alert you if a particular feature has been disabled by\
 standalone mode.

## Supported Compilers ##

The following compilers are tested with the CI system, and are known to work.\
 Starting with Boost 1.76 (April 2021 Release) a compiler that is fully\
 compliant with C++11 is required to use Boost.Math.

* g++ 5 or later
* clang++ 5 or later
* Visual Studio 2015 (14.0) or later

## Build Status ##

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Github Actions | [![Build Status](https://github.com/boostorg/math/workflow\
s/CI/badge.svg?branch=master)](https://github.com/boostorg/math/actions) |\
 [![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg?bra\
nch=develop)](https://github.com/boostorg/math/actions) |
|Drone | [![Build Status](https://drone.cpp.al/api/badges/boostorg/math/statu\
s.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/math) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/math/status.svg)](https://d\
rone.cpp.al/boostorg/math) |



## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [GitHub issue\
 tracker](https://github.com/boostorg/math/issues)
(see [open issues](https://github.com/boostorg/math/issues) and
[closed issues](https://github.com/boostorg/math/issues?utf8=%E2%9C%93&q=is%3\
Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/math/pulls).

There is no mailing-list specific to Boost Math, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [math].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)):

    $ git clone https://github.com/boostorg/boost
    $ cd boost
    $ git submodule update --init

The Boost Math Library is located in `libs/math/`.

### Running tests ###
First, make sure you are in `libs/math/test`.
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    test$ ../../../b2                        <- run all tests
    test$ ../../../b2 static_assert_test     <- single test
    test$ # A more advanced syntax, demoing various options for building the\
 tests:
    test$ ../../../b2 -a -j2 -q --reconfigure toolset=clang\
 cxxflags="--std=c++14 -fsanitize=address -fsanitize=undefined"\
 linkflags="-fsanitize=undefined -fsanitize=address"

### Continuous Integration ###
The default action for a PR or commit to a PR is for CI to run the full\
 complement of tests. The following can be appended to the end of a commit\
 message to modify behavior:

    * [ci skip] to skip all tests
    * [linux] to test using GCC Versions 5-12 and Clang Versions 5-14 on\
 Ubuntu LTS versions 18.04-22.04.
    * [apple] to test Apple Clang on the latest version of MacOS.
    * [windows] to test MSVC-14.0, MSVC-14.2, MSVC-14.3, CYGWIN, and mingw on\
 the latest version of Windows.
    * [standalone] to run standalone mode compile tests
     
### Building documentation ###

Full instructions can be found [here](https://svn.boost.org/trac10/wiki/Boost\
Docs/GettingStarted), but to reiterate slightly:

```bash
libs/math/doc$ brew install docbook-xsl # on mac
libs/math/doc$ touch ~/user-config.jam
libs/math/doc$ # now edit so that:
libs/math/doc$ cat ~/user-config.jam
using darwin ;

using xsltproc ;

using boostbook
    : /usr/local/opt/docbook-xsl/docbook-xsl
    ;

using doxygen ;
using quickbook ;
libs/math/doc$ ../../../b2
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/math
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/math
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-random == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-math

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-math-1.83.0.tar.gz
sha256sum: 8093ce5e2eb2b3cb508f5c5f247043dc49d93cf33a01174403a2f598fc177b9a
:
name: libboost-math
version: 1.85.0
language: c++
project: boost
summary: Boost.Math includes several contributions in the domain of\
 mathematics: Floating Point Utilities, Specific Width Floating Point Types,\
 Mathematical Constants, Statistical Distributions, Special Functions, Root\
 Finding and Function Minimization, Polynomials and Rational Functions,\
 Interpolation, and Numerical Integration and Differentiation. Many of these\
 features are templated to support both built-in, and extended width types\
 (e.g. Boost.Multiprecision)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Math Library
============================

>ANNOUNCEMENT: This library requires a compliant C++14 compiler.

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            | [![Build Status](https://drone.cpp.al/api/badges/boostor\
g/math/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/math)\
   | [![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.sv\
g)](https://drone.cpp.al/boostorg/math) |
| Github Actions   | [![Build Status](https://github.com/boostorg/math/workfl\
ows/CI/badge.svg?branch=master)](https://github.com/boostorg/math/actions)   \
   | [![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg\
?branch=develop)](https://github.com/boostorg/math/actions) |
| Codecov          | [![codecov](https://codecov.io/gh/boostorg/math/branch/m\
aster/graph/badge.svg)](https://codecov.io/gh/boostorg/math/branch/master)   \
   | [![codecov](https://codecov.io/gh/boostorg/math/branch/develop/graph/bad\
ge.svg)](https://codecov.io/gh/boostorg/math/branch/develop) |


The Math library provides numerous advanced mathematical functions
implemented in modern C++. The library strives to deliver the utmost
in numerical and syntactical correctness while still
maintaining high-performance.

All code is header-only, facilitating easy client setup
and use throughout the entire diverse collection of functions.

The library is divided into several interconnected parts:

### Floating Point Utilities

Utility functions for dealing with floating point arithmetic, includes\
 functions for floating point classification (fpclassify, isnan, isinf etc),\
 sign manipulation, rounding, comparison, and computing the distance between\
 floating point numbers.

### Specific Width Floating Point Types

A set of typedefs similar to those provided by `<cstdint>` but for floating\
 point types.

### Mathematical Constants

A wide range of constants ranging from various multiples of π, fractions,\
 Euler's constant, etc.

These are of course usable from template code, or as non-templates with a\
 simplified interface if that is more appropriate.

### Statistical Distributions

Provides a reasonably comprehensive set of statistical distributions, upon\
 which higher level statistical tests can be built.

The initial focus is on the central univariate distributions. Both continuous\
 (like normal & Fisher) and discrete (like binomial & Poisson) distributions\
 are provided.

A comprehensive tutorial is provided, along with a series of worked examples\
 illustrating how the library is used to conduct statistical tests.

### Special Functions

Provides a wide range of high quality special functions; initially these were\
 concentrated
on functions used in statistical applications along with those in the\
 Technical Report
on C++ Library Extensions.

The function families currently implemented are the gamma, beta and error\
 functions
along with the incomplete gamma and beta functions (four variants of each)
and all the possible inverses of these, plus the digamma, various factorial
functions, Bessel functions, elliptic integrals, hypergeometrics, sinus\
 cardinals
(along with their hyperbolic variants), inverse hyperbolic functions,
Legrendre/Laguerre/Hermite/Chebyshev polynomials
and various special power and logarithmic functions.

All the implementations are fully generic and support the use of arbitrary\
 "real-number" types,
including those in [Boost.Multiprecision](https://github.com/boostorg/multipr\
ecision).
Most functions are, however, optimized for use with types with known\
 significand (or mantissa) sizes:
typically built-in `float`, `double` or `long double`.

These functions also provide the basis of support for the TR1 special\
 functions,
many of which became standardized in [C++17](https://en.cppreference.com/w/cp\
p/numeric/special_functions).

### Root Finding

A comprehensive set of root-finding algorithms over the real line, both with\
 derivatives and derivative free.

### Optimization

Minimization of cost functions via Brent's method and differential evolution.

### Polynomials and Rational Functions

Tools for manipulating polynomials and for efficient evaluation of rationals\
 or polynomials.

### Interpolation

Function interpolation via barycentric rational interpolation,
compactly supported quadratic, cubic, and quintic B-splines,
the Chebyshev transform, trigonometric polynomials, Makima,
pchip, cubic Hermite splines, and bilinear interpolation.

### Numerical Integration and Differentiation

A reasonably comprehensive set of routines for integration
(trapezoidal, Gauss-Legendre, Gauss-Kronrod, Gauss-Chebyshev,\
 double-exponential, and Monte-Carlo)
and differentiation (Chebyshev transform, finite difference, the complex step\
 derivative,
and forward-mode automatic differentiation).

The integration routines are usable for functions returning complex results -\
 and hence can be used for computation of  contour integrals.

### Quaternions and Octonions

Quaternion and Octonion are class templates similar to std::complex.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/math).

### Standalone Mode

Defining BOOST_MATH_STANDALONE allows Boost.Math to be used without any Boost\
 dependencies.
Some functionality is reduced in this mode. A static_assert message will\
 alert you
if a particular feature has been disabled by standalone mode. Standalone mode\
 is not designed to 
be used with the rest of boost, and may result in compiler errors.

## Supported Compilers ##

The following compilers are tested with the CI system, and are known to work.
Currently a compiler that is fully compliant with C++14 is required to use\
 Boost.Math.

* g++ 5 or later
* clang++ 5 or later
* Visual Studio 2015 (14.0) or later

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [GitHub issue\
 tracker](https://github.com/boostorg/math/issues)
(see [open issues](https://github.com/boostorg/math/issues) and
[closed issues](https://github.com/boostorg/math/issues?utf8=%E2%9C%93&q=is%3\
Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/math/pulls).

There is no mailing-list specific to Boost Math, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [math].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)):

    $ git clone https://github.com/boostorg/boost
    $ cd boost
    $ git submodule update --init

The Boost Math Library is located in `libs/math/`.

### Running tests ###
First, make sure you are in `libs/math/test`.
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    test$ ../../../b2                        <- run all tests
    test$ ../../../b2 static_assert_test     <- single test
    test$ # A more advanced syntax, demoing various options for building the\
 tests:
    test$ ../../../b2 -a -j2 -q --reconfigure toolset=clang\
 cxxflags="--std=c++14 -fsanitize=address -fsanitize=undefined"\
 linkflags="-fsanitize=undefined -fsanitize=address"

### Continuous Integration ###
The default action for a PR or commit to a PR is for CI to run the full\
 complement of tests. The following can be appended to the end of a commit\
 message to modify behavior:

    * [ci skip] to skip all tests
    * [linux] to test using GCC Versions 5-12 and Clang Versions 5-14 on\
 Ubuntu LTS versions 18.04-22.04.
    * [apple] to test Apple Clang on the latest version of MacOS.
    * [windows] to test MSVC-14.0, MSVC-14.2, MSVC-14.3, CYGWIN, and mingw on\
 the latest version of Windows.
    * [standalone] to run standalone mode compile tests
     
### Building documentation ###

Full instructions can be found [here](https://svn.boost.org/trac10/wiki/Boost\
Docs/GettingStarted), but to reiterate slightly:

```bash
libs/math/doc$ brew install docbook-xsl # on mac
libs/math/doc$ touch ~/user-config.jam
libs/math/doc$ # now edit so that:
libs/math/doc$ cat ~/user-config.jam
using darwin ;

using xsltproc ;

using boostbook
    : /usr/local/opt/docbook-xsl/docbook-xsl
    ;

using doxygen ;
using quickbook ;
libs/math/doc$ ../../../b2
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/math
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/math
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-random == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-math

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-math-1.85.0.tar.gz
sha256sum: 07eb710a7a4970fdb64850096db7e1ce52f924054b0334ede16138574fedc8f5
:
name: libboost-math
version: 1.87.0
language: c++
project: boost
summary: Boost.Math includes several contributions in the domain of\
 mathematics: Floating Point Utilities, Specific Width Floating Point Types,\
 Mathematical Constants, Statistical Distributions, Special Functions, Root\
 Finding and Function Minimization, Polynomials and Rational Functions,\
 Interpolation, and Numerical Integration and Differentiation. Many of these\
 features are templated to support both built-in, and extended width types\
 (e.g. Boost.Multiprecision)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Math Library
============================

>ANNOUNCEMENT: This library requires a compliant C++14 compiler.

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            | [![Build Status](https://drone.cpp.al/api/badges/boostor\
g/math/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/math)\
   | [![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.sv\
g)](https://drone.cpp.al/boostorg/math) |
| Github Actions   | [![Build Status](https://github.com/boostorg/math/workfl\
ows/CI/badge.svg?branch=master)](https://github.com/boostorg/math/actions)   \
   | [![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg\
?branch=develop)](https://github.com/boostorg/math/actions) |
| Codecov          | [![codecov](https://codecov.io/gh/boostorg/math/branch/m\
aster/graph/badge.svg)](https://codecov.io/gh/boostorg/math/branch/master)   \
   | [![codecov](https://codecov.io/gh/boostorg/math/branch/develop/graph/bad\
ge.svg)](https://codecov.io/gh/boostorg/math/branch/develop) |


The Math library provides numerous advanced mathematical functions
implemented in modern C++. The library strives to deliver the utmost
in numerical and syntactical correctness while still
maintaining high-performance.

All code is header-only, facilitating easy client setup
and use throughout the entire diverse collection of functions.

The library is divided into several interconnected parts:

### Floating Point Utilities

Utility functions for dealing with floating point arithmetic, includes\
 functions for floating point classification (fpclassify, isnan, isinf etc),\
 sign manipulation, rounding, comparison, and computing the distance between\
 floating point numbers.

### Specific Width Floating Point Types

A set of typedefs similar to those provided by `<cstdint>` but for floating\
 point types.

### Mathematical Constants

A wide range of constants ranging from various multiples of π, fractions,\
 Euler's constant, etc.

These are of course usable from template code, or as non-templates with a\
 simplified interface if that is more appropriate.

### Statistical Distributions

Provides a reasonably comprehensive set of statistical distributions, upon\
 which higher level statistical tests can be built.

The initial focus is on the central univariate distributions. Both continuous\
 (like normal & Fisher) and discrete (like binomial & Poisson) distributions\
 are provided.

A comprehensive tutorial is provided, along with a series of worked examples\
 illustrating how the library is used to conduct statistical tests.

### Special Functions

Provides a wide range of high quality special functions; initially these were\
 concentrated
on functions used in statistical applications along with those in the\
 Technical Report
on C++ Library Extensions.

The function families currently implemented are the gamma, beta and error\
 functions
along with the incomplete gamma and beta functions (four variants of each)
and all the possible inverses of these, plus the digamma, various factorial
functions, Bessel functions, elliptic integrals, hypergeometrics, sinus\
 cardinals
(along with their hyperbolic variants), inverse hyperbolic functions,
Legrendre/Laguerre/Hermite/Chebyshev polynomials
and various special power and logarithmic functions.

All the implementations are fully generic and support the use of arbitrary\
 "real-number" types,
including those in [Boost.Multiprecision](https://github.com/boostorg/multipr\
ecision).
Most functions are, however, optimized for use with types with known\
 significand (or mantissa) sizes:
typically built-in `float`, `double` or `long double`.

These functions also provide the basis of support for the TR1 special\
 functions,
many of which became standardized in [C++17](https://en.cppreference.com/w/cp\
p/numeric/special_functions).

### Root Finding

A comprehensive set of root-finding algorithms over the real line, both with\
 derivatives and derivative free.

### Optimization

Minimization of cost functions via Brent's method and differential evolution.

### Polynomials and Rational Functions

Tools for manipulating polynomials and for efficient evaluation of rationals\
 or polynomials.

### Interpolation

Function interpolation via barycentric rational interpolation,
compactly supported quadratic, cubic, and quintic B-splines,
the Chebyshev transform, trigonometric polynomials, Makima,
pchip, cubic Hermite splines, and bilinear interpolation.

### Numerical Integration and Differentiation

A reasonably comprehensive set of routines for integration
(trapezoidal, Gauss-Legendre, Gauss-Kronrod, Gauss-Chebyshev,\
 double-exponential, and Monte-Carlo)
and differentiation (Chebyshev transform, finite difference, the complex step\
 derivative,
and forward-mode automatic differentiation).

The integration routines are usable for functions returning complex results -\
 and hence can be used for computation of  contour integrals.

### Quaternions and Octonions

Quaternion and Octonion are class templates similar to std::complex.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/math).

### Standalone Mode

Defining BOOST_MATH_STANDALONE allows Boost.Math to be used without any Boost\
 dependencies.
Some functionality is reduced in this mode. A static_assert message will\
 alert you
if a particular feature has been disabled by standalone mode. Standalone mode\
 is not designed to 
be used with the rest of boost, and may result in compiler errors.

## Supported Compilers ##

The following compilers are tested with the CI system, and are known to work.
Currently a compiler that is fully compliant with C++14 is required to use\
 Boost.Math.

* g++ 5 or later
* clang++ 5 or later
* Visual Studio 2015 (14.0) or later

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [GitHub issue\
 tracker](https://github.com/boostorg/math/issues)
(see [open issues](https://github.com/boostorg/math/issues) and
[closed issues](https://github.com/boostorg/math/issues?utf8=%E2%9C%93&q=is%3\
Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/math/pulls).

There is no mailing-list specific to Boost Math, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [math].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)):

    $ git clone https://github.com/boostorg/boost
    $ cd boost
    $ git submodule update --init

The Boost Math Library is located in `libs/math/`.

### Running tests ###
First, make sure you are in `libs/math/test`.
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    test$ ../../../b2                        <- run all tests
    test$ ../../../b2 static_assert_test     <- single test
    test$ # A more advanced syntax, demoing various options for building the\
 tests:
    test$ ../../../b2 -a -j2 -q --reconfigure toolset=clang\
 cxxflags="--std=c++14 -fsanitize=address -fsanitize=undefined"\
 linkflags="-fsanitize=undefined -fsanitize=address"

### Continuous Integration ###
The default action for a PR or commit to a PR is for CI to run the full\
 complement of tests. The following can be appended to the end of a commit\
 message to modify behavior:

    * [ci skip] to skip all tests
    * [linux] to test using GCC Versions 5-12 and Clang Versions 5-14 on\
 Ubuntu LTS versions 18.04-22.04.
    * [apple] to test Apple Clang on the latest version of MacOS.
    * [windows] to test MSVC-14.0, MSVC-14.2, MSVC-14.3, CYGWIN, and mingw on\
 the latest version of Windows.
    * [standalone] to run standalone mode compile tests
     
### Building documentation ###

Full instructions can be found [here](https://svn.boost.org/trac10/wiki/Boost\
Docs/GettingStarted), but to reiterate slightly:

```bash
libs/math/doc$ brew install docbook-xsl # on mac
libs/math/doc$ touch ~/user-config.jam
libs/math/doc$ # now edit so that:
libs/math/doc$ cat ~/user-config.jam
using darwin ;

using xsltproc ;

using boostbook
    : /usr/local/opt/docbook-xsl/docbook-xsl
    ;

using doxygen ;
using quickbook ;
libs/math/doc$ ../../../b2
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/math
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/math
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-random == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-math

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-math-1.87.0.tar.gz
sha256sum: c6ad6fc631eff59774ab56a78a0bce24dc72578a57de706aa521571e60f70100
:
name: libboost-metaparse
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A library for generating compile time parsers parsing embedded DSL\
 code as part of the C++ compilation process
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Metaparse

[![Build Status](https://secure.travis-ci.org/boostorg/metaparse.svg?branch=m\
aster "Build Status")](http://travis-ci.org/boostorg/metaparse)
[![Windows build status](https://ci.appveyor.com/api/projects/status/u7ysxkss\
mrgr7vau/branch/master?svg=true)](https://ci.appveyor.com/project/sabel83/met\
aparse-04v04/branch/master)

Metaparse is parser generator library for template metaprograms. The purpose\
 of
this library is to support the creation of parsers that parse at compile time.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/metaparse
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/metaparse
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-metaparse

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-metaparse-1.83.0.tar.gz
sha256sum: 0e3e764471f80349a5a170714aca0449366ebdd48a5986f8e8bae48121a5aae1
:
name: libboost-metaparse
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A library for generating compile time parsers parsing embedded DSL\
 code as part of the C++ compilation process
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Metaparse

[![Build Status](https://secure.travis-ci.org/boostorg/metaparse.svg?branch=m\
aster "Build Status")](http://travis-ci.org/boostorg/metaparse)
[![Windows build status](https://ci.appveyor.com/api/projects/status/u7ysxkss\
mrgr7vau/branch/master?svg=true)](https://ci.appveyor.com/project/sabel83/met\
aparse-04v04/branch/master)

Metaparse is parser generator library for template metaprograms. The purpose\
 of
this library is to support the creation of parsers that parse at compile time.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/metaparse
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/metaparse
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-metaparse

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-metaparse-1.85.0.tar.gz
sha256sum: 1233de792cad6d1113a09fab805ffd8cb312c2f0bcb0ab720ec6eefaa23ca81a
:
name: libboost-metaparse
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A library for generating compile time parsers parsing embedded DSL\
 code as part of the C++ compilation process
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Metaparse

[![Build Status](https://secure.travis-ci.org/boostorg/metaparse.svg?branch=m\
aster "Build Status")](http://travis-ci.org/boostorg/metaparse)
[![Windows build status](https://ci.appveyor.com/api/projects/status/u7ysxkss\
mrgr7vau/branch/master?svg=true)](https://ci.appveyor.com/project/sabel83/met\
aparse-04v04/branch/master)

Metaparse is parser generator library for template metaprograms. The purpose\
 of
this library is to support the creation of parsers that parse at compile time.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/metaparse
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/metaparse
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-metaparse

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-metaparse-1.87.0.tar.gz
sha256sum: 731602d43907dea3d1fff4c2a43f2a2c8a6e7d0d7542de08ecde76fd4d924f92
:
name: libboost-move
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Portable move semantics for C++03 and C++11 compilers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Move, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides C++0x move semantics in C++03 compilers and allows writing\
 portable code that works optimally in C++03 and C++0x compilers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Deps | Docs | Tests |
:-------------: | ---- | ---- | ----- |
[`master`](https://github.com/boostorg/move/tree/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/move.html) | [![Documentation](https:\
//img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc\
/libs/master/doc/html/move.html) | [![Enter the Matrix](https://img.shields.i\
o/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/test\
s/master/developer/move.html)
[`develop`](https://github.com/boostorg/move/tree/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/move.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/move.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/move.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-move)
* [Report bugs](https://github.com/boostorg/move/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[move]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/move
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/move
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-move

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-move-1.83.0.tar.gz
sha256sum: bd279f78113160584fef3f29634a9f8af527a695d1e45b1f0604e8d28d11be9f
:
name: libboost-move
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Portable move semantics for C++03 and C++11 compilers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Move, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides C++0x move semantics in C++03 compilers and allows writing\
 portable code that works optimally in C++03 and C++0x compilers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Deps | Docs | Tests |
:-------------: | ---- | ---- | ----- |
[`master`](https://github.com/boostorg/move/tree/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/move.html) | [![Documentation](https:\
//img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc\
/libs/master/doc/html/move.html) | [![Enter the Matrix](https://img.shields.i\
o/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/test\
s/master/developer/move.html)
[`develop`](https://github.com/boostorg/move/tree/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/move.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/move.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/move.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-move)
* [Report bugs](https://github.com/boostorg/move/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[move]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/move
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/move
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-move

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-move-1.85.0.tar.gz
sha256sum: 26e5f2dd36ff78788787473b7b8689195cc11170c0fb8259e14ed28c5a4eea17
:
name: libboost-move
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Portable move semantics for C++03 and C++11 compilers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Move, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides C++0x move semantics in C++03 compilers and allows writing\
 portable code that works optimally in C++03 and C++0x compilers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Deps | Docs | Tests |
:-------------: | ---- | ---- | ----- |
[`master`](https://github.com/boostorg/move/tree/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/move.html) | [![Documentation](https:\
//img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc\
/libs/master/doc/html/move.html) | [![Enter the Matrix](https://img.shields.i\
o/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/test\
s/master/developer/move.html)
[`develop`](https://github.com/boostorg/move/tree/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/move.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/move.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/move.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `proj`      | ide projects                   |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-move)
* [Report bugs](https://github.com/boostorg/move/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[move]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/move
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/move
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-move

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-move-1.87.0.tar.gz
sha256sum: 39461cddebfea0c5d25b869bc51b76b0aa767f39f0f5fb6023ccb4938321199a
:
name: libboost-mp11
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A C++11 metaprogramming library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Mp11, a C++11 metaprogramming library

Mp11 is a C++11 metaprogramming library based on template aliases and\
 variadic templates.
It implements the approach outlined in the article
["Simple C++11 metaprogramming"](https://www.boost.org/libs/mp11/doc/html/sim\
ple_cxx11_metaprogramming.html)
and [its sequel](https://www.boost.org/libs/mp11/doc/html/simple_cxx11_metapr\
ogramming_2.html).

Mp11 is part of [Boost](http://boost.org/libs/mp11), starting with release\
 1.66.0. It
however has no Boost dependencies and can be used standalone, as a Git\
 submodule, for
instance. For CMake users, `add_subdirectory` is supported, as is\
 installation and
`find_package(boost_mp11)`.

## Supported compilers

* g++ 4.8 or later
* clang++ 3.9 or later
* Visual Studio 2013 or later

Tested on [Github Actions](https://github.com/boostorg/mp11/actions) and\
 [Appveyor](https://ci.appveyor.com/project/pdimov/mp11/).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mp11
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/mp11
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mp11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mp11-1.83.0.tar.gz
sha256sum: c38af638be8233fde85114eff00380dd8b0e1f989c43584058cc0acdceec54dc
:
name: libboost-mp11
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A C++11 metaprogramming library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Mp11, a C++11 metaprogramming library

Mp11 is a C++11 metaprogramming library based on template aliases and\
 variadic templates.
It implements the approach outlined in the article
["Simple C++11 metaprogramming"](https://www.boost.org/libs/mp11/doc/html/sim\
ple_cxx11_metaprogramming.html)
and [its sequel](https://www.boost.org/libs/mp11/doc/html/simple_cxx11_metapr\
ogramming_2.html).

Mp11 is part of [Boost](http://boost.org/libs/mp11), starting with release\
 1.66.0. It
however has no Boost dependencies and can be used standalone, as a Git\
 submodule, for
instance. For CMake users, `add_subdirectory` is supported, as is\
 installation and
`find_package(boost_mp11)`.

## Supported compilers

* g++ 4.8 or later
* clang++ 3.9 or later
* Visual Studio 2013 or later

Tested on [Github Actions](https://github.com/boostorg/mp11/actions) and\
 [Appveyor](https://ci.appveyor.com/project/pdimov/mp11/).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mp11
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/mp11
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mp11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mp11-1.85.0.tar.gz
sha256sum: 49001700eeb034213237b87ff711f6ce63642c196735f44aa252bf9c8856fe60
:
name: libboost-mp11
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A C++11 metaprogramming library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Mp11, a C++11 metaprogramming library

Mp11 is a C++11 metaprogramming library based on template aliases and\
 variadic templates.
It implements the approach outlined in the article
["Simple C++11 metaprogramming"](https://www.boost.org/libs/mp11/doc/html/sim\
ple_cxx11_metaprogramming.html)
and [its sequel](https://www.boost.org/libs/mp11/doc/html/simple_cxx11_metapr\
ogramming_2.html).

Mp11 is part of [Boost](http://boost.org/libs/mp11), starting with release\
 1.66.0. It
however has no Boost dependencies and can be used standalone, as a Git\
 submodule, for
instance. For CMake users, `add_subdirectory` is supported, as is\
 installation and
`find_package(boost_mp11)`.

## Supported compilers

* g++ 4.8 or later
* clang++ 3.9 or later
* Visual Studio 2013 or later

Tested on [Github Actions](https://github.com/boostorg/mp11/actions) and\
 [Appveyor](https://ci.appveyor.com/project/pdimov/mp11/).

## License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mp11
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/mp11
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mp11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mp11-1.87.0.tar.gz
sha256sum: 70631e88120061c88f31aec9b626b1573c60f93173f1b544f8da534c17f95a83
:
name: libboost-mpl
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The Boost.MPL library is a general-purpose, high-level C++ template\
 metaprogramming framework of compile-time algorithms, sequences and\
 metafunctions. It provides a conceptual foundation and an extensive set of\
 powerful and coherent tools that make doing explict metaprogramming in C++\
 as easy and enjoyable as possible within the current language
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
MPL, part of collection of the [Boost C++ Libraries](http://github.com/boosto\
rg), provides a general-purpose, high-level C++ template metaprogramming\
 framework of compile-time algorithms, sequences and metafunctions.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/mpl/tree/master) | [![Build\
 Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?b\
ranch=master)](https://github.com/boostorg/mpl/actions?query=branch:master) |\
 [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6fl\
b/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrhfm/\
branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/pro\
jects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl) |\
 [![codecov](https://codecov.io/gh/boostorg/mpl/branch/master/graph/badge.svg\
)](https://codecov.io/gh/boostorg/mpl/branch/master)| [![Deps](https://img.sh\
ields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostde\
p-report/master/mpl.html) | [![Documentation](https://img.shields.io/badge/do\
cs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/mpl/do\
c/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-mast\
er-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/\
mpl.html)
[`develop`](https://github.com/boostorg/mpl/tree/develop) | [![Build\
 Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?b\
ranch=develop)](https://github.com/boostorg/mpl/actions?query=branch:develop)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6\
flb/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrh\
fm/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com\
/projects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl)\
 | [![codecov](https://codecov.io/gh/boostorg/mpl/branch/develop/graph/badge.\
svg)](https://codecov.io/gh/boostorg/mpl/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/mpl.html) | [![Documentation](https\
://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/\
doc/libs/develop/libs/mpl/doc/index.html) | [![Enter the Matrix](https://img.\
shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develo\
pment/tests/develop/developer/mpl.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-mpl)
* [Report bugs](https://github.com/boostorg/mpl/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[mpl]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mpl
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/mpl
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mpl

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mpl-1.83.0.tar.gz
sha256sum: 31299dc286ef2a4876aee300ca4eaf163bdd94e8fad80dfde2a1d81bca2b02c9
:
name: libboost-mpl
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The Boost.MPL library is a general-purpose, high-level C++ template\
 metaprogramming framework of compile-time algorithms, sequences and\
 metafunctions. It provides a conceptual foundation and an extensive set of\
 powerful and coherent tools that make doing explict metaprogramming in C++\
 as easy and enjoyable as possible within the current language
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
MPL, part of collection of the [Boost C++ Libraries](http://github.com/boosto\
rg), provides a general-purpose, high-level C++ template metaprogramming\
 framework of compile-time algorithms, sequences and metafunctions.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/mpl/tree/master) | [![Build\
 Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?b\
ranch=master)](https://github.com/boostorg/mpl/actions?query=branch:master) |\
 [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6fl\
b/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrhfm/\
branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/pro\
jects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl) |\
 [![codecov](https://codecov.io/gh/boostorg/mpl/branch/master/graph/badge.svg\
)](https://codecov.io/gh/boostorg/mpl/branch/master)| [![Deps](https://img.sh\
ields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostde\
p-report/master/mpl.html) | [![Documentation](https://img.shields.io/badge/do\
cs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/mpl/do\
c/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-mast\
er-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/\
mpl.html)
[`develop`](https://github.com/boostorg/mpl/tree/develop) | [![Build\
 Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?b\
ranch=develop)](https://github.com/boostorg/mpl/actions?query=branch:develop)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6\
flb/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrh\
fm/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com\
/projects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl)\
 | [![codecov](https://codecov.io/gh/boostorg/mpl/branch/develop/graph/badge.\
svg)](https://codecov.io/gh/boostorg/mpl/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/mpl.html) | [![Documentation](https\
://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/\
doc/libs/develop/libs/mpl/doc/index.html) | [![Enter the Matrix](https://img.\
shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develo\
pment/tests/develop/developer/mpl.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-mpl)
* [Report bugs](https://github.com/boostorg/mpl/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[mpl]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mpl
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/mpl
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mpl

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mpl-1.85.0.tar.gz
sha256sum: 65052b2d33e3edc4bbc053e184f34c65c710a09e0766b14e30b181457ac744b3
:
name: libboost-mpl
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The Boost.MPL library is a general-purpose, high-level C++ template\
 metaprogramming framework of compile-time algorithms, sequences and\
 metafunctions. It provides a conceptual foundation and an extensive set of\
 powerful and coherent tools that make doing explict metaprogramming in C++\
 as easy and enjoyable as possible within the current language
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
MPL, part of collection of the [Boost C++ Libraries](http://github.com/boosto\
rg), provides a general-purpose, high-level C++ template metaprogramming\
 framework of compile-time algorithms, sequences and metafunctions.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/mpl/tree/master) | [![Build\
 Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?b\
ranch=master)](https://github.com/boostorg/mpl/actions?query=branch:master) |\
 [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6fl\
b/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrhfm/\
branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/pro\
jects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl) |\
 [![codecov](https://codecov.io/gh/boostorg/mpl/branch/master/graph/badge.svg\
)](https://codecov.io/gh/boostorg/mpl/branch/master)| [![Deps](https://img.sh\
ields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostde\
p-report/master/mpl.html) | [![Documentation](https://img.shields.io/badge/do\
cs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/mpl/do\
c/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-mast\
er-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/\
mpl.html)
[`develop`](https://github.com/boostorg/mpl/tree/develop) | [![Build\
 Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?b\
ranch=develop)](https://github.com/boostorg/mpl/actions?query=branch:develop)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6\
flb/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrh\
fm/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com\
/projects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl)\
 | [![codecov](https://codecov.io/gh/boostorg/mpl/branch/develop/graph/badge.\
svg)](https://codecov.io/gh/boostorg/mpl/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/mpl.html) | [![Documentation](https\
://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/\
doc/libs/develop/libs/mpl/doc/index.html) | [![Enter the Matrix](https://img.\
shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/develo\
pment/tests/develop/developer/mpl.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-mpl)
* [Report bugs](https://github.com/boostorg/mpl/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[mpl]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mpl
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/mpl
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mpl

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mpl-1.87.0.tar.gz
sha256sum: 3ab762be754710600ea8749f011ddf2bb7c7f3a18b0fb790e32d09a9bf9e2d2b
:
name: libboost-msm
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A very high-performance library for expressive UML2 finite state\
 machines
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# msm
Boost.org msm module
[Please look at the generated documentation](http://htmlpreview.github.com/?h\
ttps://github.com/boostorg/msm/blob/master/doc/HTML/index.html)
You might need to force browser reloading (F5)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/msm
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/msm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-circular-buffer == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-phoenix == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-proto == 1.83.0
depends: libboost-serialization == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-msm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-msm-1.83.0.tar.gz
sha256sum: 7f04e3dc5f911dbd741cbaa4dc0fc2e3a8b8fb53a6353801cb5ad5b3023d21b2
:
name: libboost-msm
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A very high-performance library for expressive UML2 finite state\
 machines
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# msm
Boost.org msm module
[Please look at the generated documentation](http://htmlpreview.github.com/?h\
ttps://github.com/boostorg/msm/blob/master/doc/HTML/index.html)
You might need to force browser reloading (F5)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/msm
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/msm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-circular-buffer == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-phoenix == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-proto == 1.85.0
depends: libboost-serialization == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-index == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-msm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-msm-1.85.0.tar.gz
sha256sum: 76733b370aeadbf91fb4c4b286e53c2b4b8995932d85f616420f3e97e364adfb
:
name: libboost-msm
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A very high-performance library for expressive UML2 finite state\
 machines
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# msm
Boost.org msm module
[Please look at the generated documentation](http://htmlpreview.github.com/?h\
ttps://github.com/boostorg/msm/blob/master/doc/HTML/index.html)
You might need to force browser reloading (F5)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/msm
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/msm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-any == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-circular-buffer == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-phoenix == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-proto == 1.87.0
depends: libboost-serialization == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-index == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-msm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-msm-1.87.0.tar.gz
sha256sum: 39a507d103f247b0d8f7dbbf0db922686f29c1b96d0c1d4a701a467bd99b6d7b
:
name: libboost-multi-array
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Boost.MultiArray provides a generic N-dimensional array concept\
 definition and common implementations of that interface
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/multi_array
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/multi_array
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-functional == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multi-array

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multi-array-1.83.0.tar.gz
sha256sum: e2e71b04e82c0042e0a883b80e97c498cecd6ac95048c1de9f54479f9ea217d5
:
name: libboost-multi-array
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Boost.MultiArray provides a generic N-dimensional array concept\
 definition and common implementations of that interface
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/multi_array
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/multi_array
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-functional == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multi-array

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multi-array-1.85.0.tar.gz
sha256sum: 2eeca0f05fc5e6075c625e692592515ad34509dcc7df81e602fa50cd7d97e5a9
:
name: libboost-multi-array
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Boost.MultiArray provides a generic N-dimensional array concept\
 definition and common implementations of that interface
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/multi_array
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/multi_array
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-functional == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multi-array

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multi-array-1.87.0.tar.gz
sha256sum: 27e580a40f96324115a4b2b6eb80857df4c7db82b3a9732f9df1e200ee82e266
:
name: libboost-multi-index
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: The Boost Multi-index Containers Library provides a class template\
 named multi_index_container which enables the construction of containers\
 maintaining one or more indices with different sorting and access semantics
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost Multi-index Containers Library

Branch   | Travis | Drone | GitHub Actions | AppVeyor | Regression tests
---------|--------|-------|----------------|----------|-----------------
develop  | [![Build Status](https://travis-ci.com/boostorg/multi_index.svg?br\
anch=develop)](https://travis-ci.com/boostorg/multi_index) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/multi_index/status.svg?ref=\
refs/heads/develop)](https://drone.cpp.al/boostorg/multi_index) | [![Build\
 Status](https://github.com/boostorg/multi_index/actions/workflows/ci.yml/bad\
ge.svg?branch=develop)](https://github.com/boostorg/multi_index/actions/workf\
lows/ci.yml?query=branch:develop) | [![Build Status](https://ci.appveyor.com/\
api/projects/status/github/boostorg/multi_index?branch=develop&svg=true)](htt\
ps://ci.appveyor.com/project/joaquintides/multi-index) | [![Test\
 Results](./test_results.svg)](https://www.boost.org/development/tests/develo\
p/developer/multi_index.html)
master   | [![Build Status](https://travis-ci.com/boostorg/multi_index.svg?br\
anch=master)](https://travis-ci.com/boostorg/multi_index) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/multi_index/status.svg?ref=\
refs/heads/master)](https://drone.cpp.al/boostorg/multi_index) | [![Build\
 Status](https://github.com/boostorg/multi_index/actions/workflows/ci.yml/bad\
ge.svg?branch=master)](https://github.com/boostorg/multi_index/actions/workfl\
ows/ci.yml?query=branch:master) | [![Build Status](https://ci.appveyor.com/ap\
i/projects/status/github/boostorg/multi_index?branch=master&svg=true)](https:\
//ci.appveyor.com/project/joaquintides/multi-index) | [![Test\
 Results](./test_results.svg)](https://www.boost.org/development/tests/master\
/developer/multi_index.html)

[Boost.MultiIndex](http://boost.org/libs/multi_index) provides a class\
 template
named `multi_index_container` which enables the construction of containers
maintaining one or more indices with different sorting and access semantics.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/multi_index
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/multi_index
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multi-index

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multi-index-1.83.0.tar.gz
sha256sum: a2d0d0cd2693bd9bd5f409fc8c2f9a75291efc9683ee7fbb59b7c4ef7e1cffe7
:
name: libboost-multi-index
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: The Boost Multi-index Containers Library provides a class template\
 named multi_index_container which enables the construction of containers\
 maintaining one or more indices with different sorting and access semantics
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost Multi-index Containers Library

Branch   | Travis | Drone | GitHub Actions | AppVeyor | Regression tests
---------|--------|-------|----------------|----------|-----------------
develop  | [![Build Status](https://travis-ci.com/boostorg/multi_index.svg?br\
anch=develop)](https://travis-ci.com/boostorg/multi_index) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/multi_index/status.svg?ref=\
refs/heads/develop)](https://drone.cpp.al/boostorg/multi_index) | [![Build\
 Status](https://github.com/boostorg/multi_index/actions/workflows/ci.yml/bad\
ge.svg?branch=develop)](https://github.com/boostorg/multi_index/actions/workf\
lows/ci.yml?query=branch:develop) | [![Build Status](https://ci.appveyor.com/\
api/projects/status/github/boostorg/multi_index?branch=develop&svg=true)](htt\
ps://ci.appveyor.com/project/joaquintides/multi-index) | [![Test\
 Results](./test_results.svg)](https://www.boost.org/development/tests/develo\
p/developer/multi_index.html)
master   | [![Build Status](https://travis-ci.com/boostorg/multi_index.svg?br\
anch=master)](https://travis-ci.com/boostorg/multi_index) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/multi_index/status.svg?ref=\
refs/heads/master)](https://drone.cpp.al/boostorg/multi_index) | [![Build\
 Status](https://github.com/boostorg/multi_index/actions/workflows/ci.yml/bad\
ge.svg?branch=master)](https://github.com/boostorg/multi_index/actions/workfl\
ows/ci.yml?query=branch:master) | [![Build Status](https://ci.appveyor.com/ap\
i/projects/status/github/boostorg/multi_index?branch=master&svg=true)](https:\
//ci.appveyor.com/project/joaquintides/multi-index) | [![Test\
 Results](./test_results.svg)](https://www.boost.org/development/tests/master\
/developer/multi_index.html)

[Boost.MultiIndex](http://boost.org/libs/multi_index) provides a class\
 template
named `multi_index_container` which enables the construction of containers
maintaining one or more indices with different sorting and access semantics.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/multi_index
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/multi_index
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multi-index

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multi-index-1.85.0.tar.gz
sha256sum: 70d4e45af8bd1b18d2f271ddeada403476f66eb7de6d3a8a363821ece2425f7b
:
name: libboost-multi-index
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: The Boost Multi-index Containers Library provides a class template\
 named multi_index_container which enables the construction of containers\
 maintaining one or more indices with different sorting and access semantics
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost Multi-index Containers Library

[![Branch](https://img.shields.io/badge/branch-master-brightgreen.svg)](https\
://github.com/boostorg/multi_index/tree/master) [![CI](https://github.com/boo\
storg/multi_index/actions/workflows/ci.yml/badge.svg?branch=master)](https://\
github.com/boostorg/multi_index/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/multi_index/master?serve\
r=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https:\
//drone.cpp.al/boostorg/multi_index)  [![Deps](https://img.shields.io/badge/d\
eps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/\
multi_index.html)  [![Documentation](https://img.shields.io/badge/docs-master\
-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/multi_index) \
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/multi_index.htm\
l)<br/>
[![Branch](https://img.shields.io/badge/branch-develop-brightgreen.svg)](http\
s://github.com/boostorg/multi_index/tree/develop) [![CI](https://github.com/b\
oostorg/multi_index/actions/workflows/ci.yml/badge.svg?branch=develop)](https\
://github.com/boostorg/multi_index/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/multi_index/develop?serv\
er=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https\
://drone.cpp.al/boostorg/multi_index)  [![Deps](https://img.shields.io/badge/\
deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/devel\
op/multi_index.html) [![Documentation](https://img.shields.io/badge/docs-deve\
lop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/multi_index\
) [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgree\
n.svg)](http://www.boost.org/development/tests/develop/developer/multi_index.\
html)<br/>
[![BSL 1.0](https://img.shields.io/badge/license-BSL_1.0-blue.svg)](https://w\
ww.boost.org/users/license.html) <img alt="Header-only library"\
 src="https://img.shields.io/badge/build-header--only-blue.svg">

[Boost.MultiIndex](http://boost.org/libs/multi_index) provides a class\
 template
named `multi_index_container` which enables the construction of containers
maintaining one or more indices with different sorting and access semantics.

## Learn about Boost.MultiIndex

* [Online documentation](https://boost.org/libs/multi_index)

## Install Boost.MultiIndex

* [Download Boost](https://www.boost.org/users/download/) and you're ready to\
 go (this is a header-only library requiring no building).
* Using Conan 2: In case you don't have it yet, add an entry for Boost in\
 your `conanfile.txt` (the example requires at least Boost 1.86):
```
[requires]
boost/[>=1.86.0]
```
<ul>If you're not using any compiled Boost library, the following will skip\
 building altogether:</ul>

```
[options]
boost:header_only=True
```
* Using vcpkg: Execute the command
```
vcpkg install boost-multi-index
```
* Using CMake: [Boost CMake support infrastructure](https://github.com/boosto\
rg/cmake)
allows you to use CMake directly to download, build and consume all of Boost\
 or
some specific libraries.

## Support

* Join the **#boost** discussion group at [cpplang.slack.com](https://cpplang\
.slack.com/)
([ask for an invite](https://cppalliance.org/slack/) if you’re not a member\
 of this workspace yet)
* Ask in the [Boost Users mailing list](https://lists.boost.org/mailman/listi\
nfo.cgi/boost-users)
(add the `[multi_index]` tag at the beginning of the subject line)
* [File an issue](https://github.com/boostorg/multi_index/issues)

## Contribute

* [Pull requests](https://github.com/boostorg/multi_index/pulls) against\
 **develop** branch are most welcome.
Note that by submitting patches you agree to license your modifications under\
 the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.t\
xt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/multi_index
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/multi_index
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multi-index

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multi-index-1.87.0.tar.gz
sha256sum: a43ee9505618052a2972a36e1ec24ff037ab37848813425561bdb545c4c9c5f8
:
name: libboost-multiprecision
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Extended precision arithmetic types for floating point, integer, and\
 rational arithmetic
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Multiprecision Library
============================

>ANNOUNCEMENT: This library now requires a compliant C++14 compiler.

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            |  [![Build Status](https://drone.cpp.al/api/badges/boosto\
rg/multiprecision/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boo\
storg/multiprecision) | [![Build Status](https://drone.cpp.al/api/badges/boos\
torg/multiprecision/status.svg)](https://drone.cpp.al/boostorg/multiprecision\
) |
| Github Actions | [![Build Status](https://github.com/boostorg/multiprecisio\
n/workflows/multiprecision/badge.svg?branch=master)](https://github.com/boost\
org/multiprecision/actions) | [![Build Status](https://github.com/boostorg/mu\
ltiprecision/workflows/multiprecision/badge.svg?branch=develop)](https://gith\
ub.com/boostorg/multiprecision/actions) |

 The Multiprecision Library provides integer, rational, floating-point,\
 complex and interval number types in C++ that have more range and 
 precision than C++'s ordinary built-in types. The big number types in\
 Multiprecision can be used with a wide selection of basic 
 mathematical operations, elementary transcendental functions as well as the\
 functions in Boost.Math. The Multiprecision types can 
 also interoperate with the built-in types in C++ using clearly defined\
 conversion rules. This allows Boost.Multiprecision to be 
 used for all kinds of mathematical calculations involving integer, rational\
 and floating-point types requiring extended range and precision.

Multiprecision consists of a generic interface to the mathematics of large\
 numbers as well as a selection of big number back ends, with 
support for integer, rational and floating-point types. Boost.Multiprecision\
 provides a selection of back ends provided off-the-rack in 
including interfaces to GMP, MPFR, MPIR, TomMath as well as its own\
 collection of Boost-licensed, header-only back ends for integers, 
rationals, floats and complex. In addition, user-defined back ends can be\
 created and used with the interface of Multiprecision, provided the class\
 implementation adheres to the necessary concepts.

Depending upon the number type, precision may be arbitrarily large (limited\
 only by available memory), fixed at compile time 
(for example 50 or 100 decimal digits), or a variable controlled at run-time\
 by member functions. The types are expression-template-enabled 
for better performance than naive user-defined types. 

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/multiprecision/index.html).

## Standalone ##

Defining BOOST_MP_STANDALONE allows Boost.Multiprecision to be used with the\
 only dependency being [Boost.Config](https://github.com/boostorg/config).\
 Our [package on this page](https://github.com/boostorg/multiprecision/releas\
es)
already includes a copy of Boost.Config so no other donwloads are required.\
 Some functionality is reduced in this mode. A static_assert message will\
 alert you if a particular feature has been disabled by standalone mode.
[Boost.Math](https://github.com/boostorg/math) standalone mode is\
 compatiable, and recommended if special functions are required for the\
 floating point types.

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/multiprecision/issues)
(see [open issues](https://github.com/boostorg/multiprecision/issues) and
[closed issues](https://github.com/boostorg/multiprecision/issues?utf8=%E2%9C\
%93&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/multiprecision/pulls).

There is no mailing-list specific to Boost Multiprecision, although you can\
 use the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/\
listinfo.cgi/boost-users) using the tag [multiprecision].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Multiprecision Library is located in `libs/multiprecision/`. 

### Running tests ###
First, build the B2 engine by running `bootstrap.sh` in the root of the boost\
 directory. This will generate B2 configuration in `project-config.jam`.
     
    ./bootstrap.sh

Now make sure you are in `libs/multiprecision/test`. You can either run all\
 the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 test_complex           <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/multiprecision
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/multiprecision
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.3.8
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-math == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-random == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multiprecision

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multiprecision-1.83.0.tar.gz
sha256sum: 4f7c10c7f09898078656eac11cf1b53271d5c993bc8b38df38248eeccde8cb80
:
name: libboost-multiprecision
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Extended precision arithmetic types for floating point, integer, and\
 rational arithmetic
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Multiprecision Library
============================

>ANNOUNCEMENT: This library requires a compliant C++14 compiler.

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            | [![Build Status](https://drone.cpp.al/api/badges/boostor\
g/multiprecision/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boos\
torg/multiprecision)          | [![Build Status](https://drone.cpp.al/api/bad\
ges/boostorg/multiprecision/status.svg)](https://drone.cpp.al/boostorg/multip\
recision) |
| Github Actions   | [![Build Status](https://github.com/boostorg/multiprecis\
ion/workflows/multiprecision/badge.svg?branch=master)](https://github.com/boo\
storg/multiprecision/actions) | [![Build Status](https://github.com/boostorg/\
multiprecision/workflows/multiprecision/badge.svg?branch=develop)](https://gi\
thub.com/boostorg/multiprecision/actions) |
| Codecov          | [![codecov](https://codecov.io/gh/boostorg/multiprecisio\
n/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/multiprecisi\
on/branch/master)             | [![codecov](https://codecov.io/gh/boostorg/mu\
ltiprecision/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/\
multiprecision/branch/develop) |


The Multiprecision Library provides integer, rational, floating-point,\
 complex and interval number types in C++ that have more range and 
precision than C++'s ordinary built-in types. The big number types in\
 Multiprecision can be used with a wide selection of basic 
mathematical operations, elementary transcendental functions as well as the\
 functions in Boost.Math. The Multiprecision types can 
also interoperate with the built-in types in C++ using clearly defined\
 conversion rules. This allows Boost.Multiprecision to be 
used for all kinds of mathematical calculations involving integer, rational\
 and floating-point types requiring extended range and precision.

Multiprecision consists of a generic interface to the mathematics of large\
 numbers as well as a selection of big number back ends, with 
support for integer, rational and floating-point types. Boost.Multiprecision\
 provides a selection of back ends provided off-the-rack in 
including interfaces to GMP, MPFR, MPIR, TomMath as well as its own\
 collection of Boost-licensed, header-only back ends for integers, 
rationals, floats and complex. In addition, user-defined back ends can be\
 created and used with the interface of Multiprecision, provided the class\
 implementation adheres to the necessary concepts.

Depending upon the number type, precision may be arbitrarily large (limited\
 only by available memory), fixed at compile time 
(for example 50 or 100 decimal digits), or a variable controlled at run-time\
 by member functions. The types are expression-template-enabled 
for better performance than naive user-defined types. 

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/multiprecision/index.html).

## Using Multiprecision ##

<p align="center">
  <a href="https://godbolt.org/z/546vnEjvh" alt="godbolt">
    <img src="https://img.shields.io/badge/try%20it%20on-godbolt-green" /></a>
</p>

In the following example, we use Multiprecision's Boost-licensed binary
floating-point backend type `cpp_bin_float` to compute ${\sim}100$ decimal\
 digits of

$$\sqrt{\pi} = \Gamma \left( \frac{1}{2} \right)~{\approx}~1.7724538509055160\
27298{\ldots}\text{,}$$

where we also observe that Multiprecision can seemlesly interoperate with
[Boost.Math](https://github.com/boostorg/math).

```
#include <iomanip>
#include <iostream>

#include <boost/multiprecision/cpp_bin_float.hpp>
#include <boost/math/special_functions/gamma.hpp>

auto main() -> int
{
  using big_float_type = boost::multiprecision::cpp_bin_float_100;

  const big_float_type sqrt_pi { sqrt(boost::math::constants::pi<big_float_ty\
pe>()) };

  const big_float_type one_half { big_float_type(1) / 2 };

  const big_float_type gamma_half { boost::math::tgamma(one_half) }; 

  std::cout << std::setprecision(std::numeric_limits<big_float_type>::digits1\
0) << "sqrt_pi   : " << sqrt_pi    << std::endl;
  std::cout << std::setprecision(std::numeric_limits<big_float_type>::digits1\
0) << "gamma_half: " << gamma_half << std::endl;
}
```

## Standalone ##

Defining BOOST_MP_STANDALONE allows Boost.Multiprecision to be used with the\
 only dependency being [Boost.Config](https://github.com/boostorg/config).\
 Our [package on this page](https://github.com/boostorg/multiprecision/releas\
es)
already includes a copy of Boost.Config so no other downloads are required.\
 Some functionality is reduced in this mode. A static_assert message will\
 alert you if a particular feature has been disabled by standalone mode.
[Boost.Math](https://github.com/boostorg/math) standalone mode is\
 compatiable, and recommended if special functions are required for the\
 floating point types.

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/multiprecision/issues)
(see [open issues](https://github.com/boostorg/multiprecision/issues) and
[closed issues](https://github.com/boostorg/multiprecision/issues?utf8=%E2%9C\
%93&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/multiprecision/pulls).

There is no mailing-list specific to Boost Multiprecision, although you can\
 use the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/\
listinfo.cgi/boost-users) using the tag [multiprecision].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Multiprecision Library is located in `libs/multiprecision/`. 

### Running tests ###
First, build the B2 engine by running `bootstrap.sh` in the root of the boost\
 directory. This will generate B2 configuration in `project-config.jam`.
     
    ./bootstrap.sh

Now make sure you are in `libs/multiprecision/test`. You can either run all\
 the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 test_complex           <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/multiprecision
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/multiprecision
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.3.8
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-math == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-random == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multiprecision

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multiprecision-1.85.0.tar.gz
sha256sum: 9f9b9b54408f89e17b266c1f42b8e9b689877e3271148ef4247794093a7c8324
:
name: libboost-multiprecision
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Extended precision arithmetic types for floating point, integer, and\
 rational arithmetic
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Multiprecision Library
============================

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Drone            | [![Build Status](https://drone.cpp.al/api/badges/boostor\
g/multiprecision/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boos\
torg/multiprecision)          | [![Build Status](https://drone.cpp.al/api/bad\
ges/boostorg/multiprecision/status.svg)](https://drone.cpp.al/boostorg/multip\
recision) |
| Github Actions   | [![Build Status](https://github.com/boostorg/multiprecis\
ion/workflows/multiprecision/badge.svg?branch=master)](https://github.com/boo\
storg/multiprecision/actions) | [![Build Status](https://github.com/boostorg/\
multiprecision/workflows/multiprecision/badge.svg?branch=develop)](https://gi\
thub.com/boostorg/multiprecision/actions) |
| Codecov          | [![codecov](https://codecov.io/gh/boostorg/multiprecisio\
n/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/multiprecisi\
on/branch/master)             | [![codecov](https://codecov.io/gh/boostorg/mu\
ltiprecision/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/\
multiprecision/branch/develop) |


`Boost.Multiprecision` is a C++ library that provides integer, rational,\
 floating-point, complex and interval number types
having more range and precision than the language's ordinary built-in types.

Language adherence:
  - `Boost.Multiprecision` requires a compliant C++14 compiler.
  - It is compatible with C++14, 17, 20, 23 and beyond.

The big number types in `Boost.Multiprecision` can be used with a wide\
 selection of basic
mathematical operations, elementary transcendental functions as well as the\
 functions in Boost.Math. The Multiprecision types can
also interoperate with the built-in types in C++ using clearly defined\
 conversion rules. This allows `Boost.Multiprecision` to be
used for all kinds of mathematical calculations involving integer, rational\
 and floating-point types requiring extended range and precision.

Multiprecision consists of a generic interface to the mathematics of large\
 numbers as well as a selection of big number back ends, with
support for integer, rational and floating-point types. `Boost.Multiprecision\
` provides a selection of back ends provided off-the-rack in
including interfaces to GMP, MPFR, MPIR, TomMath as well as its own\
 collection of Boost-licensed, header-only back ends for integers,
rationals, floats and complex. In addition, user-defined back ends can be\
 created and used with the interface of Multiprecision,
provided the class implementation adheres to the necessary concepts.

Depending upon the number type, precision may be arbitrarily large (limited\
 only by available memory), fixed at compile time
(for example $50$ or $100$ decimal digits), or a variable controlled at\
 run-time by member functions.
The types are expression-template-enabled by default. This usually provides\
 better performance than naive user-defined types.
If not needed, expression templates can be disabled when configuring the\
 `number` type with its backend.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/multiprecision/index.html).

## Using Multiprecision ##

<p align="center">
  <a href="https://godbolt.org/z/hj75jEqcz" alt="godbolt">
    <img src="https://img.shields.io/badge/try%20it%20on-godbolt-green" /></a>
</p>

In the following example, we use Multiprecision's Boost-licensed binary
floating-point backend type `cpp_bin_float` to compute ${\sim}100$ decimal\
 digits of

$$\sqrt{\pi} = \Gamma \left( \frac{1}{2} \right)~{\approx}~1.7724538509055160\
27298{\ldots}\text{,}$$

where we also observe that Multiprecision can seemlesly interoperate with
[Boost.Math](https://github.com/boostorg/math).

```cpp
#include <iomanip>
#include <iostream>
#include <sstream>

#include <boost/multiprecision/cpp_bin_float.hpp>
#include <boost/math/special_functions/gamma.hpp>

auto main() -> int
{
  using big_float_type = boost::multiprecision::cpp_bin_float_100;

  const big_float_type sqrt_pi { sqrt(boost::math::constants::pi<big_float_ty\
pe>()) };

  const big_float_type half { big_float_type(1) / 2 };

  const big_float_type gamma_half { boost::math::tgamma(half) }; 

  std::stringstream strm { };

  strm << std::setprecision(std::numeric_limits<big_float_type>::digits10) <<\
 "sqrt_pi   : " << sqrt_pi << '\n';
  strm << std::setprecision(std::numeric_limits<big_float_type>::digits10) <<\
 "gamma_half: " << gamma_half;

  std::cout << strm.str() << std::endl;
}
```

## Standalone ##

Defining `BOOST_MP_STANDALONE` allows `Boost.Multiprecision`
to be used with the only dependency being [Boost.Config](https://github.com/b\
oostorg/config).

Our [package on this page](https://github.com/boostorg/multiprecision/release\
s)
already includes a copy of Boost.Config so no other downloads are required.
Some functionality is reduced in this mode.
A static_assert message will alert you if a particular feature has been\
 disabled by standalone mode.
[Boost.Math](https://github.com/boostorg/math) standalone mode is compatiable,
and recommended if special functions are required for the floating point\
 types.

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/multiprecision/issues)
(see [open issues](https://github.com/boostorg/multiprecision/issues) and
[closed issues](https://github.com/boostorg/multiprecision/issues?utf8=%E2%9C\
%93&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/multiprecision/pulls).

There is no mailing-list specific to `Boost Multiprecision`,
although you can use the general-purpose Boost [mailing-list](http://lists.bo\
ost.org/mailman/listinfo.cgi/boost-users)
using the tag [multiprecision].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules
([see boost+git doc](https://github.com/boostorg/boost/wiki/Getting-Started)):

```sh
  git clone https://github.com/boostorg/boost
  cd boost
  git submodule update --init
```

The Boost Multiprecision Library is located in `libs/multiprecision/`.

### Running tests ###
First, build the `b2` engine by running `bootstrap.sh` in the root of the\
 boost directory. This will generate `b2` configuration in\
 `project-config.jam`.

```sh
  ./bootstrap.sh
```

Now make sure you are in `libs/multiprecision/test`. You can either run all\
 the tests listed in `Jamfile.v2` or run a single test:

```sh
  ../../../b2                        <- run all tests
  ../../../b2 test_complex           <- single test
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/multiprecision
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/multiprecision
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: Eigen ^3.3.8
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-math == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-random == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-multiprecision

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-multiprecision-1.87.0.tar.gz
sha256sum: c0b2045945975fb104973a9fd217214e1bc9c897f1424b173117ac55499a4de6
:
name: libboost-mysql
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: MySQL client library built on top of Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.MySQL

Branch | Windows/Linux Build | OSX build | Coverage | Documentation
-------|---------------------|-----------|--------- | -------------
[`master`](https://github.com/boostorg/mysql/tree/master)   | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/mysql/status.svg)](https://\
drone.cpp.al/boostorg/mysql)                        | [![Build\
 Status](https://github.com/boostorg/mysql/actions/workflows/build-code.yml/b\
adge.svg)](https://github.com/boostorg/mysql)                |\
 [![codecov](https://codecov.io/gh/boostorg/mysql/branch/master/graph/badge.s\
vg)](https://codecov.io/gh/boostorg/mysql/branch/master)   | [Docs for\
 master](https://www.boost.org/doc/libs/master/libs/mysql/doc/html/index.html)
[`develop`](https://github.com/boostorg/mysql/tree/develop) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/mysql/status.svg?ref=refs/h\
eads/develop)](https://drone.cpp.al/boostorg/mysql) | [![Build\
 Status](https://github.com/boostorg/mysql/actions/workflows/build-code.yml/b\
adge.svg?branch=develop)](https://github.com/boostorg/mysql) |\
 [![codecov](https://codecov.io/gh/boostorg/mysql/branch/develop/graph/badge.\
svg)](https://codecov.io/gh/boostorg/mysql/branch/develop) | [Docs for\
 develop](https://www.boost.org/doc/libs/develop/libs/mysql/doc/html/index.ht\
ml)

Boost.MySQL is a C++11 client for MySQL and MariaDB database servers, based\
 on Boost.Asio.
Boost.MySQL is part of Boost.

## Feedback

Do you have any suggestion? Would you like to share a bad or good experience\
 while using the library?
Please comment [on this issue](https://github.com/boostorg/mysql/issues/140).

## Why another MySQL C++ client?

- It is fully compatible with Boost.Asio and integrates well with any other
  library in the Boost.Asio ecosystem (like Boost.Beast).
- It supports Boost.Asio's universal asynchronous model, which means you can
  go asynchronous using callbacks, futures or coroutines (including C++20\
 coroutines).
- It is written in C++11 and takes advantage of it.
- It is header only.

## Using the library

To use this library, you need:

- Boost 1.82 or higher (Boost.MySQL doesn't work with standalone Asio).
- A C++11 capable compiler.
- OpenSSL.

The library is header-only, but it depends on other Boost header-only\
 libraries and on OpenSSL.
To use the library, install Boost the way you would normally do (e.g. via `b2\
 install`), and create
a `CMakeLists.txt` like this (replace `main` by your executable name and\
 `main.cpp` by your list of source files):

```cmake
project(boost_mysql_example LANGUAGES CXX)

find_package(Boost REQUIRED COMPONENTS headers)
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main PRIVATE Boost::headers Threads::Threads\
 OpenSSL::Crypto OpenSSL::SSL)
```

## Tested with

Boost.MySQL has been tested with the following compilers:
- gcc 5 to 13.
- clang 3.6 to 16.
- msvc 14.1, 14.2 and 14.3.

And with the following databases:
- MySQL v5.7.41.
- MySQL v8.0.33.
- MariaDB v11.0.

## Features

- Text queries (execution of text SQL queries and data retrieval).
  MySQL refers to this as the "text protocol", as all information is passed\
 using text
  (as opposed to prepared statements, see below).
- Prepared statements. MySQL refers to this as the "binary protocol", as the\
 result
  of executing a prepared statement is sent in binary format rather than in\
 text.
- Stored procedures.
- Authentication methods (authentication plugins): mysql_native_password and
  caching_sha2_password. These are the default methods in MySQL 5 and MySQL 8,
  respectively.
- Encrypted connections (TLS).
- TCP and UNIX socket connections. The implementation is based on Boost.Asio
  SyncStream and AsyncStream concepts, so it is generic and can be used with
  any stream that fulfills these concept's requirements. There are\
 user-friendly
  typedefs and regression tests for TCP and UNIX socket streams.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mysql
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/mysql
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libssl >= 1.1.1
depends: libcrypto >= 1.1.1
depends: libboost-asio == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-describe == 1.83.0
depends: libboost-endian == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-variant2 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mysql

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mysql-1.83.0.tar.gz
sha256sum: 16c05fa539cb7f7c3574a7e9df8e3cd1b8a57c55660e23940bd122a4c24f8c08
:
name: libboost-mysql
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: MySQL client library built on top of Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.MySQL

Branch | Windows/Linux Build | OSX build | Coverage | Documentation
-------|---------------------|-----------|--------- | -------------
[`master`](https://github.com/boostorg/mysql/tree/master)   | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/mysql/status.svg)](https://\
drone.cpp.al/boostorg/mysql)                        | [![Build\
 Status](https://github.com/boostorg/mysql/actions/workflows/build-code.yml/b\
adge.svg)](https://github.com/boostorg/mysql)                |\
 [![codecov](https://codecov.io/gh/boostorg/mysql/branch/master/graph/badge.s\
vg)](https://codecov.io/gh/boostorg/mysql/branch/master)   | [Docs for\
 master](https://www.boost.org/doc/libs/master/libs/mysql/doc/html/index.html)
[`develop`](https://github.com/boostorg/mysql/tree/develop) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/mysql/status.svg?ref=refs/h\
eads/develop)](https://drone.cpp.al/boostorg/mysql) | [![Build\
 Status](https://github.com/boostorg/mysql/actions/workflows/build-code.yml/b\
adge.svg?branch=develop)](https://github.com/boostorg/mysql) |\
 [![codecov](https://codecov.io/gh/boostorg/mysql/branch/develop/graph/badge.\
svg)](https://codecov.io/gh/boostorg/mysql/branch/develop) | [Docs for\
 develop](https://www.boost.org/doc/libs/develop/libs/mysql/doc/html/index.ht\
ml)

Boost.MySQL is a C++11 client for MySQL and MariaDB database servers, based\
 on Boost.Asio.
Boost.MySQL is part of Boost.

## Breaking changes in Boost 1.85

Boost.MySQL now requires linking with Boost.Charconv, which is a compiled\
 library.
If you're getting link errors, link your executable to the `Boost::charconv`\
 CMake target.
No C++ code changes are required.

## Feedback

Do you have any suggestion? Would you like to share a bad or good experience\
 while using the library?
Please comment [on this issue](https://github.com/boostorg/mysql/issues/140).

## Why another MySQL C++ client?

- It is fully compatible with Boost.Asio and integrates well with any other
  library in the Boost.Asio ecosystem (like Boost.Beast).
- It supports Boost.Asio's universal asynchronous model, which means you can
  go asynchronous using callbacks, futures or coroutines (including C++20\
 coroutines).
- It is written in C++11 and takes advantage of it.
- It is header only.

## Using the library

To use this library, you need:

- Boost 1.82 or higher (Boost.MySQL doesn't work with standalone Asio).
- A C++11 capable compiler.
- OpenSSL.

The library is header-only, but it depends on other Boost header-only\
 libraries and on OpenSSL.
To use the library, install Boost the way you would normally do (e.g. via `b2\
 install`), and create
a `CMakeLists.txt` like this (replace `main` by your executable name and\
 `main.cpp` by your list of source files):

```cmake
project(boost_mysql_example LANGUAGES CXX)

find_package(Boost REQUIRED COMPONENTS charconv)
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main PRIVATE Boost::charconv Threads::Threads\
 OpenSSL::Crypto OpenSSL::SSL)
```

## Tested with

Boost.MySQL has been tested with the following compilers:

- gcc 5 to 13.
- clang 3.6 to 16.
- msvc 14.1, 14.2 and 14.3.

And with the following databases:

- MySQL v5.7.41.
- MySQL v8.0.33.
- MariaDB v11.0.

## Features

- Text queries (execution of text SQL queries and data retrieval).
  MySQL refers to this as the "text protocol", as all information is passed\
 using text
  (as opposed to prepared statements, see below).
- Prepared statements. MySQL refers to this as the "binary protocol", as the\
 result
  of executing a prepared statement is sent in binary format rather than in\
 text.
- Stored procedures.
- Authentication methods (authentication plugins): mysql_native_password and
  caching_sha2_password. These are the default methods in MySQL 5 and MySQL 8,
  respectively.
- Encrypted connections (TLS).
- TCP and UNIX socket transports.
- (Experimental) connection pools.
- (Experimental) friendly client-side generated SQL.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mysql
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/mysql
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libssl >= 1.1.1
depends: libcrypto >= 1.1.1
depends: libboost-asio == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-charconv == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-describe == 1.85.0
depends: libboost-endian == 1.85.0
depends: libboost-intrusive == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-variant2 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mysql

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mysql-1.85.0.tar.gz
sha256sum: adfd98e2677da04abfde872e2d10aeb458776fca95f61d073d8a3b0e319d2918
:
name: libboost-mysql
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: MySQL client library built on top of Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.MySQL

Branch | Windows/Linux Build | OSX build | Coverage | Documentation
-------|---------------------|-----------|--------- | -------------
[`master`](https://github.com/boostorg/mysql/tree/master)   | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/mysql/status.svg)](https://\
drone.cpp.al/boostorg/mysql)                        | [![Build\
 Status](https://github.com/boostorg/mysql/actions/workflows/build-code.yml/b\
adge.svg)](https://github.com/boostorg/mysql)                |\
 [![codecov](https://codecov.io/gh/boostorg/mysql/branch/master/graph/badge.s\
vg)](https://codecov.io/gh/boostorg/mysql/branch/master)   | [Docs for\
 master](https://www.boost.org/doc/libs/master/libs/mysql/doc/html/index.html)
[`develop`](https://github.com/boostorg/mysql/tree/develop) | [![Build\
 Status](https://drone.cpp.al/api/badges/boostorg/mysql/status.svg?ref=refs/h\
eads/develop)](https://drone.cpp.al/boostorg/mysql) | [![Build\
 Status](https://github.com/boostorg/mysql/actions/workflows/build-code.yml/b\
adge.svg?branch=develop)](https://github.com/boostorg/mysql) |\
 [![codecov](https://codecov.io/gh/boostorg/mysql/branch/develop/graph/badge.\
svg)](https://codecov.io/gh/boostorg/mysql/branch/develop) | [Docs for\
 develop](https://www.boost.org/doc/libs/develop/libs/mysql/doc/html/index.ht\
ml)

Boost.MySQL is a C++11 client for MySQL and MariaDB database servers, based\
 on Boost.Asio.
Boost.MySQL is part of Boost.

## Breaking changes in Boost 1.85

Boost.MySQL now requires linking with Boost.Charconv, which is a compiled\
 library.
If you're getting link errors, link your executable to the `Boost::charconv`\
 CMake target.
No C++ code changes are required.

## Feedback

Do you have any suggestion? Would you like to share a bad or good experience\
 while using the library?
Please comment [on this issue](https://github.com/boostorg/mysql/issues/140).

## Why another MySQL C++ client?

- It is fully compatible with Boost.Asio and integrates well with any other
  library in the Boost.Asio ecosystem (like Boost.Beast).
- It supports Boost.Asio's universal asynchronous model, which means you can
  go asynchronous using callbacks, futures or coroutines (including C++20\
 coroutines).
- It is written in C++11 and takes advantage of it.
- It is header only.

## Using the library

To use this library, you need:

- Boost 1.82 or higher (Boost.MySQL doesn't work with standalone Asio).
- A C++11 capable compiler.
- OpenSSL.

The library is header-only, but it depends on other Boost header-only\
 libraries and on OpenSSL.
To use the library, install Boost the way you would normally do (e.g. via `b2\
 install`), and create
a `CMakeLists.txt` like this (replace `main` by your executable name and\
 `main.cpp` by your list of source files):

```cmake
project(boost_mysql_example LANGUAGES CXX)

find_package(Boost REQUIRED COMPONENTS charconv)
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main PRIVATE Boost::charconv Threads::Threads\
 OpenSSL::Crypto OpenSSL::SSL)
```

## Tested with

Boost.MySQL has been tested with the following compilers:

- gcc 5 to 14.
- clang 3.6 to 18.
- msvc 14.1, 14.2 and 14.3.

And with the following databases:

- MySQL v5.7.41.
- MySQL v8.4.1.
- MariaDB v11.4.2.

## Features

- Text queries (execution of text SQL queries and data retrieval).
  MySQL refers to this as the "text protocol", as all information is passed\
 using text
  (as opposed to prepared statements, see below).
- Prepared statements. MySQL refers to this as the "binary protocol", as the\
 result
  of executing a prepared statement is sent in binary format rather than in\
 text.
- Stored procedures.
- Authentication methods (authentication plugins): mysql_native_password and
  caching_sha2_password. These are the default methods in MySQL 5 and MySQL 8,
  respectively.
- Encrypted connections (TLS).
- TCP and UNIX socket transports.
- Connection pools.
- Friendly client-side generated SQL.
- (Experimental) pipelines.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/mysql
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/mysql
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libssl >= 1.1.1
depends: libcrypto >= 1.1.1
depends: libboost-asio == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-charconv == 1.87.0
depends: libboost-compat == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-describe == 1.87.0
depends: libboost-endian == 1.87.0
depends: libboost-intrusive == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-pfr == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-variant2 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-mysql

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-mysql-1.87.0.tar.gz
sha256sum: fe9441bb6c0be5c23f2ab793b8874ddb25c14c1ae2353ffe4052957b8b9e6909
:
name: libboost-nowide
version: 1.83.0
language: c++
project: boost
summary: Standard library functions with UTF-8 API on Windows
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Nowide

Branch      | Appveyor | Github | codecov.io | Deps | Docs | Tests |
------------|----------|--------|------------| ---- | ---- | ----- |
[master](https://github.com/boostorg/nowide/tree/master)   | [![Build\
 status](https://ci.appveyor.com/api/projects/status/w5sywrekwd66say4/branch/\
master?svg=true)](https://ci.appveyor.com/project/Flamefire/nowide-fr98b/bran\
ch/master)   | ![](https://github.com/boostorg/nowide/workflows/CI%20Tests/ba\
dge.svg?branch=master) ![](https://github.com/boostorg/nowide/workflows/POSIX\
/badge.svg?branch=master)  | [![codecov](https://codecov.io/gh/boostorg/nowid\
e/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/nowide/branc\
h/master)   | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.s\
vg)](https://pdimov.github.io/boostdep-report/master/nowide.html)   |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/nowide/index.html)   | [![Enter\
 the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](htt\
ps://www.boost.org/development/tests/master/developer/nowide.html)
[develop](https://github.com/boostorg/nowide/tree/develop) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/w5sywrekwd66say4/branch/\
develop?svg=true)](https://ci.appveyor.com/project/Flamefire/nowide-fr98b/bra\
nch/develop) | ![](https://github.com/boostorg/nowide/workflows/CI%20Tests/ba\
dge.svg?branch=develop) ![](https://github.com/boostorg/nowide/workflows/POSI\
X/badge.svg?branch=develop) | [![codecov](https://codecov.io/gh/boostorg/nowi\
de/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/nowide/bra\
nch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen\
.svg)](https://pdimov.github.io/boostdep-report/develop/nowide.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](https://www.boost.org/doc/libs/develop/libs/nowide/index.html) | [![Enter\
 the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](ht\
tps://www.boost.org/development/tests/develop/developer/nowide.html)

Quality checks:
[![Coverity Scan Build Status](https://scan.coverity.com/projects/20464/badge\
.svg)](https://scan.coverity.com/projects/boostorg-nowide)
[![CodeFactor](https://www.codefactor.io/repository/github/boostorg/nowide/ba\
dge)](https://www.codefactor.io/repository/github/boostorg/nowide)

Library for cross-platform, unicode aware programming.

The library provides an implementation of standard C and C++ library\
 functions, such that their inputs are UTF-8 aware on Windows without\
 requiring to use the Wide API.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* optional C++17 (filesystem) support
* Usable outside of Boost via CMake
* Compiled library on every OS

Note on the last point:
Having a compiled library allows cross-platform access to e.g. `setenv` which\
 would not be available when using a `-std=c++nn` flag.
This is different to the version available prior to the inclusion in Boost.

### Requirements (All versions)

* **C++11** (or higher) compatible compiler
    * MSVC 2015 and up work
    * libstdc++ < 5 is unsupported as it is silently lacking C++11 features
    * When building with B2 pass e.g. `cxxstd=11` if your compiler defaults\
 to C++03

### Requirements (Boost version)

* Boost (>= 1.56)
* CMake (when not using as part of Boost) or B2 (otherwise)

### Requirements (Standalone version)

The [standalone branch](https://github.com/boostorg/nowide/tree/standalone)\
 keeps track of the [develop branch](https://github.com/boostorg/nowide/tree/\
develop) and can be used without any other part of Boost.
It is automatically updated so referring to a specific commit is recommended.
You can also use the standalone source archive which is part of every release.

* CMake

# Quickstart

Instead of using the standard library functions use the corresponding member\
 of Boost.Nowide with the same name.
On Linux those are (mostly) aliases for the `std` ones, but on Windows they\
 accept UTF-8 as input and use the wide API for the underlying functionality.

Examples:
- `std::ifstream -> boost::nowide::ifstream`
- `std::fopen -> boost::nowide::fopen`
- `std::fclose -> boost::nowide::fclose`
- `std::getenv -> boost::nowide::getenv`
- `std::putenv -> boost::nowide::putenv`
- `std::cout -> boost::nowide::cout`

To also convert your input arguments to UTF-8 on Windows use:

```
int main(int argc, char **argv)
{
    boost::nowide::args _(argc, argv); // Must use an instance!
    ...
}
```

See the [Documentation](https://www.boost.org/doc/libs/master/libs/nowide/ind\
ex.html) for details.

# Compile

## With Boost

Compile and install the Boost super project the usual way via `./b2`.
The headers and library will then be available together with all other Boost\
 libraries.
From within CMake you can then use `find_package(Boost COMPONENTS nowide)`\
 and link against `Boost::nowide`.
Note that `find_package(boost_nowide)` will find the package too, but the\
 above is the canonical way.

## With CMake

Boost.Nowide fully supports CMake.
So you can use `add_subdirectory("path-to-boost-nowide-repo")` and link your\
 project against the target `Boost::nowide`.

You can also pre-compile and install Boost.Nowide via the usual workflow:
```
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make install
```

A CMake-Config file will be installed alongside Boost.Nowide so\
 `find_package(boost_nowide)` does work out-of the box
(provided it was installed into a "standard" location or its `INSTALL_PREFIX`\
 was added to `CMAKE_PREFIX_PATH`).

# Boost.Filesystem integration

Boost.Nowide integrates with Boost.Filesystem:
- Call `boost::nowide::nowide_filesystem()` to imbue UTF-8 into\
 Boost.Filesystem (for use by `boost::filesystem::path`) such that narrow\
 strings passed into Boost.Filesystem are treated as UTF-8 on Windows

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-nowide)
* [Report bugs](https://github.com/boostorg/nowide/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](https://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](https://www.boost.org/community/policy.html) before\
 posting and add the `[nowide]` tag at the beginning of the subject line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/nowide
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/nowide
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-filesystem == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-nowide

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-nowide-1.83.0.tar.gz
sha256sum: 9814aee3cde73b296242fb55a0bd1ebca87ce68f2363c30fc9e125c2277758b7
:
name: libboost-nowide
version: 1.85.0
language: c++
project: boost
summary: Standard library functions with UTF-8 API on Windows
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Nowide

Branch      | Appveyor | Github | codecov.io | Deps | Docs | Tests |
------------|----------|--------|------------| ---- | ---- | ----- |
[master](https://github.com/boostorg/nowide/tree/master)   | [![Build\
 status](https://ci.appveyor.com/api/projects/status/w5sywrekwd66say4/branch/\
master?svg=true)](https://ci.appveyor.com/project/Flamefire/nowide-fr98b/bran\
ch/master)   | ![](https://github.com/boostorg/nowide/workflows/CI%20Tests/ba\
dge.svg?branch=master) ![](https://github.com/boostorg/nowide/workflows/POSIX\
/badge.svg?branch=master)  | [![codecov](https://codecov.io/gh/boostorg/nowid\
e/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/nowide/branc\
h/master)   | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.s\
vg)](https://pdimov.github.io/boostdep-report/master/nowide.html)   |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/nowide/index.html)   | [![Enter\
 the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](htt\
ps://www.boost.org/development/tests/master/developer/nowide.html)
[develop](https://github.com/boostorg/nowide/tree/develop) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/w5sywrekwd66say4/branch/\
develop?svg=true)](https://ci.appveyor.com/project/Flamefire/nowide-fr98b/bra\
nch/develop) | ![](https://github.com/boostorg/nowide/workflows/CI%20Tests/ba\
dge.svg?branch=develop) ![](https://github.com/boostorg/nowide/workflows/POSI\
X/badge.svg?branch=develop) | [![codecov](https://codecov.io/gh/boostorg/nowi\
de/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/nowide/bra\
nch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen\
.svg)](https://pdimov.github.io/boostdep-report/develop/nowide.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](https://www.boost.org/doc/libs/develop/libs/nowide/index.html) | [![Enter\
 the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](ht\
tps://www.boost.org/development/tests/develop/developer/nowide.html)

Quality checks:
[![Coverity Scan Build Status](https://scan.coverity.com/projects/20464/badge\
.svg)](https://scan.coverity.com/projects/boostorg-nowide)
[![CodeFactor](https://www.codefactor.io/repository/github/boostorg/nowide/ba\
dge)](https://www.codefactor.io/repository/github/boostorg/nowide)

Library for cross-platform, unicode aware programming.

The library provides an implementation of standard C and C++ library\
 functions, such that their inputs are UTF-8 aware on Windows without\
 requiring to use the Wide API.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* optional C++17 (filesystem) support
* Usable outside of Boost via CMake
* Compiled library on every OS

Note on the last point:
Having a compiled library allows cross-platform access to e.g. `setenv` which\
 would not be available when using a `-std=c++nn` flag.
This is different to the version available prior to the inclusion in Boost.

### Requirements (All versions)

* **C++11** (or higher) compatible compiler
    * MSVC 2015 and up work
    * libstdc++ < 5 is unsupported as it is silently lacking C++11 features
    * When building with B2 pass e.g. `cxxstd=11` if your compiler defaults\
 to C++03

### Requirements (Boost version)

* Boost (>= 1.56)
* CMake (when not using as part of Boost) or B2 (otherwise)

### Requirements (Standalone version)

The [standalone branch](https://github.com/boostorg/nowide/tree/standalone)\
 keeps track of the [develop branch](https://github.com/boostorg/nowide/tree/\
develop) and can be used without any other part of Boost.
It is automatically updated so referring to a specific commit is recommended.
You can also use the standalone source archive which is part of every release.

* CMake

# Quickstart

Instead of using the standard library functions use the corresponding member\
 of Boost.Nowide with the same name.
On Linux those are (mostly) aliases for the `std` ones, but on Windows they\
 accept UTF-8 as input and use the wide API for the underlying functionality.

Examples:
- `std::ifstream -> boost::nowide::ifstream`
- `std::fopen -> boost::nowide::fopen`
- `std::fclose -> boost::nowide::fclose`
- `std::getenv -> boost::nowide::getenv`
- `std::putenv -> boost::nowide::putenv`
- `std::cout -> boost::nowide::cout`

To also convert your input arguments to UTF-8 on Windows use:

```
int main(int argc, char **argv)
{
    boost::nowide::args _(argc, argv); // Must use an instance!
    ...
}
```

See the [Documentation](https://www.boost.org/doc/libs/master/libs/nowide/ind\
ex.html) for details.

# Compile

## With Boost

Compile and install the Boost super project the usual way via `./b2`.
The headers and library will then be available together with all other Boost\
 libraries.
From within CMake you can then use `find_package(Boost COMPONENTS nowide)`\
 and link against `Boost::nowide`.
Note that `find_package(boost_nowide)` will find the package too, but the\
 above is the canonical way.

## With CMake

Boost.Nowide fully supports CMake.
So you can use `add_subdirectory("path-to-boost-nowide-repo")` and link your\
 project against the target `Boost::nowide`.

You can also pre-compile and install Boost.Nowide via the usual workflow:
```
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make install
```

A CMake-Config file will be installed alongside Boost.Nowide so\
 `find_package(boost_nowide)` does work out-of the box
(provided it was installed into a "standard" location or its `INSTALL_PREFIX`\
 was added to `CMAKE_PREFIX_PATH`).

# Boost.Filesystem integration

Boost.Nowide integrates with Boost.Filesystem:
- Call `boost::nowide::nowide_filesystem()` to imbue UTF-8 into\
 Boost.Filesystem (for use by `boost::filesystem::path`) such that narrow\
 strings passed into Boost.Filesystem are treated as UTF-8 on Windows

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-nowide)
* [Report bugs](https://github.com/boostorg/nowide/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](https://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](https://www.boost.org/community/policy.html) before\
 posting and add the `[nowide]` tag at the beginning of the subject line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/nowide
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/nowide
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-filesystem == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-nowide

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-nowide-1.85.0.tar.gz
sha256sum: 94cac898e0582cd1a2cd843a1bf4aefffcf591d78e11920c2c6775147a8493b1
:
name: libboost-nowide
version: 1.87.0
language: c++
project: boost
summary: Standard library functions with UTF-8 API on Windows
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Nowide

Branch      | Appveyor | Github | codecov.io | Deps | Docs | Tests |
------------|----------|--------|------------| ---- | ---- | ----- |
[master](https://github.com/boostorg/nowide/tree/master)   | [![Build\
 status](https://ci.appveyor.com/api/projects/status/w5sywrekwd66say4/branch/\
master?svg=true)](https://ci.appveyor.com/project/Flamefire/nowide-fr98b/bran\
ch/master)   | ![](https://github.com/boostorg/nowide/workflows/CI%20Tests/ba\
dge.svg?branch=master) ![](https://github.com/boostorg/nowide/workflows/POSIX\
/badge.svg?branch=master)  | [![codecov](https://codecov.io/gh/boostorg/nowid\
e/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/nowide/branc\
h/master)   | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.s\
vg)](https://pdimov.github.io/boostdep-report/master/nowide.html)   |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/nowide/index.html)   | [![Enter\
 the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](htt\
ps://www.boost.org/development/tests/master/developer/nowide.html)
[develop](https://github.com/boostorg/nowide/tree/develop) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/w5sywrekwd66say4/branch/\
develop?svg=true)](https://ci.appveyor.com/project/Flamefire/nowide-fr98b/bra\
nch/develop) | ![](https://github.com/boostorg/nowide/workflows/CI%20Tests/ba\
dge.svg?branch=develop) ![](https://github.com/boostorg/nowide/workflows/POSI\
X/badge.svg?branch=develop) | [![codecov](https://codecov.io/gh/boostorg/nowi\
de/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/nowide/bra\
nch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen\
.svg)](https://pdimov.github.io/boostdep-report/develop/nowide.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](https://www.boost.org/doc/libs/develop/libs/nowide/index.html) | [![Enter\
 the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](ht\
tps://www.boost.org/development/tests/develop/developer/nowide.html)

Quality checks:
[![Coverity Scan Build Status](https://scan.coverity.com/projects/20464/badge\
.svg)](https://scan.coverity.com/projects/boostorg-nowide)
[![CodeFactor](https://www.codefactor.io/repository/github/boostorg/nowide/ba\
dge)](https://www.codefactor.io/repository/github/boostorg/nowide)

Library for cross-platform, unicode aware programming.

The library provides an implementation of standard C and C++ library\
 functions, such that their inputs are UTF-8 aware on Windows without\
 requiring to use the Wide API.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* optional C++17 (filesystem) support
* Usable outside of Boost via CMake
* Compiled library on every OS

Note on the last point:
Having a compiled library allows cross-platform access to e.g. `setenv` which\
 would not be available when using a `-std=c++nn` flag.
This is different to the version available prior to the inclusion in Boost.

### Requirements (All versions)

* **C++11** (or higher) compatible compiler
    * MSVC 2015 and up work
    * libstdc++ < 5 is unsupported as it is silently lacking C++11 features
    * When building with B2 pass e.g. `cxxstd=11` if your compiler defaults\
 to C++03

### Requirements (Boost version)

* Boost (>= 1.56)
* CMake (when not using as part of Boost) or B2 (otherwise)

### Requirements (Standalone version)

The [standalone branch](https://github.com/boostorg/nowide/tree/standalone)\
 keeps track of the [develop branch](https://github.com/boostorg/nowide/tree/\
develop) and can be used without any other part of Boost.
It is automatically updated so referring to a specific commit is recommended.
You can also use the standalone source archive which is part of every release.

* CMake

# Quickstart

Instead of using the standard library functions use the corresponding member\
 of Boost.Nowide with the same name.
On Linux those are (mostly) aliases for the `std` ones, but on Windows they\
 accept UTF-8 as input and use the wide API for the underlying functionality.

Examples:
- `std::ifstream -> boost::nowide::ifstream`
- `std::fopen -> boost::nowide::fopen`
- `std::fclose -> boost::nowide::fclose`
- `std::getenv -> boost::nowide::getenv`
- `std::putenv -> boost::nowide::putenv`
- `std::cout -> boost::nowide::cout`

To also convert your input arguments to UTF-8 on Windows use:

```
int main(int argc, char **argv)
{
    boost::nowide::args _(argc, argv); // Must use an instance!
    ...
}
```

See the [Documentation](https://www.boost.org/doc/libs/master/libs/nowide/ind\
ex.html) for details.

# Compile

## With Boost

Compile and install the Boost super project the usual way via `./b2`.
The headers and library will then be available together with all other Boost\
 libraries.
From within CMake you can then use `find_package(Boost COMPONENTS nowide)`\
 and link against `Boost::nowide`.
Note that `find_package(boost_nowide)` will find the package too, but the\
 above is the canonical way.

## With CMake

Boost.Nowide fully supports CMake.
So you can use `add_subdirectory("path-to-boost-nowide-repo")` and link your\
 project against the target `Boost::nowide`.

You can also pre-compile and install Boost.Nowide via the usual workflow:
```
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make install
```

A CMake-Config file will be installed alongside Boost.Nowide so\
 `find_package(boost_nowide)` does work out-of the box
(provided it was installed into a "standard" location or its `INSTALL_PREFIX`\
 was added to `CMAKE_PREFIX_PATH`).

# Boost.Filesystem integration

Boost.Nowide integrates with Boost.Filesystem:
- Call `boost::nowide::nowide_filesystem()` to imbue UTF-8 into\
 Boost.Filesystem (for use by `boost::filesystem::path`) such that narrow\
 strings passed into Boost.Filesystem are treated as UTF-8 on Windows

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-nowide)
* [Report bugs](https://github.com/boostorg/nowide/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](https://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](https://www.boost.org/community/policy.html) before\
 posting and add the `[nowide]` tag at the beginning of the subject line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/nowide
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/nowide
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-filesystem == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-nowide

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-nowide-1.87.0.tar.gz
sha256sum: 7c0c098103472d81c494fc71f3fa3e23870da8c37a450db7fefd4703aaeb38c5
:
name: libboost-numeric-conversion
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Optimized Policy-based Numeric Conversions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.NumericConversion

The Boost Numeric Conversion library is a collection of tools to describe and\
 perform conversions between values of different [numeric types][1].

The documentation for the library can be found [here][2]

[1]: http://www.boost.org/doc/libs/release/libs/numeric/conversion/doc/html/b\
oost_numericconversion/definitions.html#boost_numericconversion.definitions.n\
umeric_types
[2]: http://www.boost.org/doc/libs/release/libs/numeric/conversion/doc/html/i\
ndex.html#numeric_conversion.overview

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/numeric_conversion
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/numeric/conversion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-conversion == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-conversion-1.83.0.tar.gz
sha256sum: de8069f8f23f58189cdce9d2a4e7c0d9f68b71d6df091ec1808220017eb2710e
:
name: libboost-numeric-conversion
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Optimized Policy-based Numeric Conversions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.NumericConversion

The Boost Numeric Conversion library is a collection of tools to describe and\
 perform conversions between values of different [numeric types][1].

The documentation for the library can be found [here][2]

[1]: http://www.boost.org/doc/libs/release/libs/numeric/conversion/doc/html/b\
oost_numericconversion/definitions.html#boost_numericconversion.definitions.n\
umeric_types
[2]: http://www.boost.org/doc/libs/release/libs/numeric/conversion/doc/html/i\
ndex.html#numeric_conversion.overview

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/numeric_conversion
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/numeric/conversion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-conversion == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-conversion-1.85.0.tar.gz
sha256sum: 52ebd816eaf656aab276504ac306ac0f65175b72d80035501796f82d545b53a3
:
name: libboost-numeric-conversion
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Optimized Policy-based Numeric Conversions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.NumericConversion

The Boost Numeric Conversion library is a collection of tools to describe and\
 perform conversions between values of different [numeric types][1].

The documentation for the library can be found [here][2]

[1]: http://www.boost.org/doc/libs/release/libs/numeric/conversion/doc/html/b\
oost_numericconversion/definitions.html#boost_numericconversion.definitions.n\
umeric_types
[2]: http://www.boost.org/doc/libs/release/libs/numeric/conversion/doc/html/i\
ndex.html#numeric_conversion.overview

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/numeric_conversion
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/numeric/conversion
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-conversion == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-conversion-1.87.0.tar.gz
sha256sum: 9b2f1029fec570460c042360d3031bafbcb4132d358bd91e5a66fcba9fbe659c
:
name: libboost-numeric-interval
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Extends the usual arithmetic functions to mathematical intervals
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Interval, part of the collection of [Boost C++ Libraries](http://github.com/b\
oostorg), is intended to help manipulating mathematical intervals.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/interval/tree/master) | [![Build\
 Status](https://github.com/boostorg/interval/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/interval/actions?query=branch\
:master) | [![Build status](https://ci.appveyor.com/api/projects/status/wx6gs\
onby36or5m2/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/\
interval-o0u28/branch/master) | [![Coverity Scan Build Status](https://scan.c\
overity.com/projects/17151/badge.svg)](https://scan.coverity.com/projects/boo\
storg-interval) | [![codecov](https://codecov.io/gh/boostorg/interval/branch/\
master/graph/badge.svg)](https://codecov.io/gh/boostorg/interval/branch/maste\
r) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](http\
s://pdimov.github.io/boostdep-report/master/interval.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/numeric/interval/doc/interval.htm\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgre\
en.svg)](http://www.boost.org/development/tests/master/developer/interval.htm\
l)
[`develop`](https://github.com/boostorg/interval/tree/develop) | [![Build\
 Status](https://github.com/boostorg/interval/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/interval/actions?query=branc\
h:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/wx6\
gsonby36or5m2/branch/develop?svg=true)](https://ci.appveyor.com/project/jekin\
g3/interval-o0u28/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/17151/badge.svg)](https://scan.co\
verity.com/projects/boostorg-interval) | [![codecov](https://codecov.io/gh/bo\
ostorg/interval/branch/develop/graph/badge.svg)](https://codecov.io/gh/boosto\
rg/interval/branch/develop) | [![Deps](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/interv\
al.html) | [![Documentation](https://img.shields.io/badge/docs-develop-bright\
green.svg)](https://www.boost.org/doc/libs/develop/libs/numeric/interval/doc/\
interval.htm) | [![Enter the Matrix](https://img.shields.io/badge/matrix-deve\
lop-brightgreen.svg)](http://www.boost.org/development/tests/develop/develope\
r/interval.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `examples`  | use case examples              |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More inintervalion

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-interval): Be sure to read the documentation first as Boost.Interval has\
 specific requirements.
* [Report bugs](https://github.com/boostorg/interval/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/interval/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[interval]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/interval
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/numeric/interval
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-logic == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-interval

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-interval-1.83.0.tar.gz
sha256sum: a1ce0a51800323edac53b0590577dd83f2acbaa156d3452a67d42389af4d472d
:
name: libboost-numeric-interval
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Extends the usual arithmetic functions to mathematical intervals
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Interval, part of the collection of [Boost C++ Libraries](http://github.com/b\
oostorg), is intended to help manipulating mathematical intervals.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/interval/tree/master) | [![Build\
 Status](https://github.com/boostorg/interval/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/interval/actions?query=branch\
:master) | [![Build status](https://ci.appveyor.com/api/projects/status/wx6gs\
onby36or5m2/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/\
interval-o0u28/branch/master) | [![Coverity Scan Build Status](https://scan.c\
overity.com/projects/17151/badge.svg)](https://scan.coverity.com/projects/boo\
storg-interval) | [![codecov](https://codecov.io/gh/boostorg/interval/branch/\
master/graph/badge.svg)](https://codecov.io/gh/boostorg/interval/branch/maste\
r) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](http\
s://pdimov.github.io/boostdep-report/master/interval.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/numeric/interval/doc/interval.htm\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgre\
en.svg)](http://www.boost.org/development/tests/master/developer/interval.htm\
l)
[`develop`](https://github.com/boostorg/interval/tree/develop) | [![Build\
 Status](https://github.com/boostorg/interval/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/interval/actions?query=branc\
h:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/wx6\
gsonby36or5m2/branch/develop?svg=true)](https://ci.appveyor.com/project/jekin\
g3/interval-o0u28/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/17151/badge.svg)](https://scan.co\
verity.com/projects/boostorg-interval) | [![codecov](https://codecov.io/gh/bo\
ostorg/interval/branch/develop/graph/badge.svg)](https://codecov.io/gh/boosto\
rg/interval/branch/develop) | [![Deps](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/interv\
al.html) | [![Documentation](https://img.shields.io/badge/docs-develop-bright\
green.svg)](https://www.boost.org/doc/libs/develop/libs/numeric/interval/doc/\
interval.htm) | [![Enter the Matrix](https://img.shields.io/badge/matrix-deve\
lop-brightgreen.svg)](http://www.boost.org/development/tests/develop/develope\
r/interval.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `examples`  | use case examples              |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More inintervalion

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-interval): Be sure to read the documentation first as Boost.Interval has\
 specific requirements.
* [Report bugs](https://github.com/boostorg/interval/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/interval/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[interval]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/interval
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/numeric/interval
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-logic == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-interval

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-interval-1.85.0.tar.gz
sha256sum: cb1423f461430d05a87cb07ecaa64ded870fe9441064157b6a20f6bef4a71425
:
name: libboost-numeric-interval
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Extends the usual arithmetic functions to mathematical intervals
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Interval, part of the collection of [Boost C++ Libraries](http://github.com/b\
oostorg), is intended to help manipulating mathematical intervals.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/interval/tree/master) | [![Build\
 Status](https://github.com/boostorg/interval/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/interval/actions?query=branch\
:master) | [![Build status](https://ci.appveyor.com/api/projects/status/wx6gs\
onby36or5m2/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/\
interval-o0u28/branch/master) | [![Coverity Scan Build Status](https://scan.c\
overity.com/projects/17151/badge.svg)](https://scan.coverity.com/projects/boo\
storg-interval) | [![codecov](https://codecov.io/gh/boostorg/interval/branch/\
master/graph/badge.svg)](https://codecov.io/gh/boostorg/interval/branch/maste\
r) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](http\
s://pdimov.github.io/boostdep-report/master/interval.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/numeric/interval/doc/interval.htm\
) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgre\
en.svg)](http://www.boost.org/development/tests/master/developer/interval.htm\
l)
[`develop`](https://github.com/boostorg/interval/tree/develop) | [![Build\
 Status](https://github.com/boostorg/interval/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/interval/actions?query=branc\
h:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/wx6\
gsonby36or5m2/branch/develop?svg=true)](https://ci.appveyor.com/project/jekin\
g3/interval-o0u28/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/17151/badge.svg)](https://scan.co\
verity.com/projects/boostorg-interval) | [![codecov](https://codecov.io/gh/bo\
ostorg/interval/branch/develop/graph/badge.svg)](https://codecov.io/gh/boosto\
rg/interval/branch/develop) | [![Deps](https://img.shields.io/badge/deps-deve\
lop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/interv\
al.html) | [![Documentation](https://img.shields.io/badge/docs-develop-bright\
green.svg)](https://www.boost.org/doc/libs/develop/libs/numeric/interval/doc/\
interval.htm) | [![Enter the Matrix](https://img.shields.io/badge/matrix-deve\
lop-brightgreen.svg)](http://www.boost.org/development/tests/develop/develope\
r/interval.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `examples`  | use case examples              |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More inintervalion

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-interval): Be sure to read the documentation first as Boost.Interval has\
 specific requirements.
* [Report bugs](https://github.com/boostorg/interval/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/interval/pulls) against\
 the **develop** branch. Note that by submitting patches you agree to license\
 your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[interval]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/interval
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/numeric/interval
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-logic == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-interval

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-interval-1.87.0.tar.gz
sha256sum: a80043826d6e8b3710598295589aa83c2a59ed7829cbf354b7d325791ec40775
:
name: libboost-numeric-odeint
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Solving ordinary differential equations
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Build Status](https://travis-ci.org/headmyshoulder/odeint-v2.svg?branch=ma\
ster)](https://travis-ci.org/headmyshoulder/odeint-v2)

odeint is a highly flexible library for solving ordinary differential\
 equations.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/odeint
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/numeric/odeint
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-math == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-multi-array == 1.83.0
depends: libboost-numeric-ublas == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-units == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-odeint

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-odeint-1.83.0.tar.gz
sha256sum: 11ac8092f2c3fc39491a172d11dd0d65486ce1734082fc86031a2c8adf32dd45
:
name: libboost-numeric-odeint
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Solving ordinary differential equations
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Build Status](https://travis-ci.org/headmyshoulder/odeint-v2.svg?branch=ma\
ster)](https://travis-ci.org/headmyshoulder/odeint-v2)

odeint is a highly flexible library for solving ordinary differential\
 equations.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/odeint
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/numeric/odeint
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-math == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-multi-array == 1.85.0
depends: libboost-numeric-ublas == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-units == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-odeint

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-odeint-1.85.0.tar.gz
sha256sum: d7ba2cc903998081952ce9cd1232bb8bce99580a8ca87c50c6f8dfddbb02ac9b
:
name: libboost-numeric-odeint
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Solving ordinary differential equations
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Build Status](https://travis-ci.org/headmyshoulder/odeint-v2.svg?branch=ma\
ster)](https://travis-ci.org/headmyshoulder/odeint-v2)

odeint is a highly flexible library for solving ordinary differential\
 equations.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/odeint
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/numeric/odeint
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-math == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-multi-array == 1.87.0
depends: libboost-numeric-ublas == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-units == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-odeint

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-odeint-1.87.0.tar.gz
sha256sum: 99fd41f6a455caf55de7d10c932d197807a6dc490ea226229ebbfaae8b4f658e
:
name: libboost-numeric-ublas
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: uBLAS provides tensor, matrix, and vector classes as well as basic\
 linear algebra routines. Several dense, packed and sparse storage schemes\
 are supported
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.uBLAS Linear Algebra Library 
=====
Boost.uBLAS is part of the [Boost C++ Libraries](http://github.com/boostorg).\
 It is directed towards scientific computing on the level of basic linear\
 algebra constructions with matrices and vectors and their corresponding\
 abstract operations. 


## Documentation 
uBLAS is documented at [boost.org](https://www.boost.org/doc/libs/1_69_0/libs\
/numeric/ublas/doc/index.html).
The development has a [wiki page](https://github.com/uBLAS/ublas/wiki).
The tensor extension has a separate [wiki page](https://github.com/BoostGSoC1\
8/tensor/wiki).

## License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

## Properties
* Header-only
* Tensor extension requires C++17 compatible compiler, compiles with
  * gcc 7.3.0
  * clang 6.0
  * msvc 14.1
* Unit-tests require Boost.Test

## Build Status

Branch          | Travis | Appveyor | codecov.io | Docs |
:-------------: | ------ | -------- | ---------- | ---- |
[`master`](https://github.com/boostorg/ublas/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/ublas.svg?branch=master)](https://tra\
vis-ci.org/boostorg/ublas) | [![Build status](https://ci.appveyor.com/api/pro\
jects/status/ctu3wnfowa627ful/branch/master?svg=true)](https://ci.appveyor.co\
m/project/stefanseefeld/ublas/branch/master) | [![codecov](https://codecov.io\
/gh/boostorg/ublas/branch/master/graph/badge.svg)](https://codecov.io/gh/boos\
torg/ublas/branch/master) | [![Documentation](https://img.shields.io/badge/do\
cs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/release/libs/numer\
ic)
[`develop`](https://github.com/boostorg/ublas/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/ublas.svg?branch=develop)](https://tr\
avis-ci.org/boostorg/ublas) | [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/ctu3wnfowa627ful/branch/develop?svg=true)](https://ci.appveyor.\
com/project/stefanseefeld/ublas/branch/develop) | [![codecov](https://codecov\
.io/gh/boostorg/ublas/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/ublas/branch/develop) | [![Documentation](https://img.shields.io/bad\
ge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/release/libs/\
numeric)


## Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `examples`  | example files                  |
| `include`   | headers                        |
| `test`      | unit tests                     |
| `benchmarks`| timing and benchmarking        |

## More information

* Ask questions in [stackoverflow](http://stackoverflow.com/questions/ask?tag\
s=c%2B%2B,boost,boost-ublas) with `boost-ublas` or `ublas` tags.
* Report [bugs](https://github.com/boostorg/ublas/issues) and be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Developer discussions about the library are held on the [Boost developers\
 mailing list](https://lists.boost.org/mailman/listinfo.cgi/ublas). Be sure\
 to read the [discussion policy](http://www.boost.org/community/policy.html)\
 before posting and add the `[ublas]` tag at the beginning of the subject line
* For any other questions, you can contact David, Stefan or Cem:\
 david.bellot-AT-gmail-DOT-com, cem.bassoy-AT-gmail-DOT-com\
 stefan-AT-seefeld-DOT-name

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ublas
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/numeric/ublas
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-numeric-interval == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-serialization == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-ublas

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-ublas-1.83.0.tar.gz
sha256sum: fb3c9cf1d665c2ef23cd26f3bfab0eb1460f902e7da058bbedd5ccc0823215c7
:
name: libboost-numeric-ublas
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: uBLAS provides tensor, matrix, and vector classes as well as basic\
 linear algebra routines. Several dense, packed and sparse storage schemes\
 are supported
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.uBLAS Linear Algebra Library 
=====
Boost.uBLAS is part of the [Boost C++ Libraries](http://github.com/boostorg).\
 It is directed towards scientific computing on the level of basic linear\
 algebra constructions with matrices and vectors and their corresponding\
 abstract operations. 


## Documentation 
uBLAS is documented at [boost.org](https://www.boost.org/doc/libs/1_69_0/libs\
/numeric/ublas/doc/index.html).
The development has a [wiki page](https://github.com/uBLAS/ublas/wiki).
The tensor extension has a separate [wiki page](https://github.com/BoostGSoC1\
8/tensor/wiki).

## License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

## Properties
* Header-only
* Tensor extension requires C++17 compatible compiler, compiles with
  * gcc 7.3.0
  * clang 6.0
  * msvc 14.1
* Unit-tests require Boost.Test

## Build Status

Branch          | Travis | Appveyor | codecov.io | Docs |
:-------------: | ------ | -------- | ---------- | ---- |
[`master`](https://github.com/boostorg/ublas/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/ublas.svg?branch=master)](https://tra\
vis-ci.org/boostorg/ublas) | [![Build status](https://ci.appveyor.com/api/pro\
jects/status/ctu3wnfowa627ful/branch/master?svg=true)](https://ci.appveyor.co\
m/project/stefanseefeld/ublas/branch/master) | [![codecov](https://codecov.io\
/gh/boostorg/ublas/branch/master/graph/badge.svg)](https://codecov.io/gh/boos\
torg/ublas/branch/master) | [![Documentation](https://img.shields.io/badge/do\
cs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/release/libs/numer\
ic)
[`develop`](https://github.com/boostorg/ublas/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/ublas.svg?branch=develop)](https://tr\
avis-ci.org/boostorg/ublas) | [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/ctu3wnfowa627ful/branch/develop?svg=true)](https://ci.appveyor.\
com/project/stefanseefeld/ublas/branch/develop) | [![codecov](https://codecov\
.io/gh/boostorg/ublas/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/ublas/branch/develop) | [![Documentation](https://img.shields.io/bad\
ge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/release/libs/\
numeric)


## Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `examples`  | example files                  |
| `include`   | headers                        |
| `test`      | unit tests                     |
| `benchmarks`| timing and benchmarking        |

## More information

* Ask questions in [stackoverflow](http://stackoverflow.com/questions/ask?tag\
s=c%2B%2B,boost,boost-ublas) with `boost-ublas` or `ublas` tags.
* Report [bugs](https://github.com/boostorg/ublas/issues) and be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Developer discussions about the library are held on the [Boost developers\
 mailing list](https://lists.boost.org/mailman/listinfo.cgi/ublas). Be sure\
 to read the [discussion policy](http://www.boost.org/community/policy.html)\
 before posting and add the `[ublas]` tag at the beginning of the subject line
* For any other questions, you can contact David, Stefan or Cem:\
 david.bellot-AT-gmail-DOT-com, cem.bassoy-AT-gmail-DOT-com\
 stefan-AT-seefeld-DOT-name

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ublas
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/numeric/ublas
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-numeric-interval == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-serialization == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-ublas

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-ublas-1.85.0.tar.gz
sha256sum: b30e6f4bb78cd53c79522f1c39d7b809e7dd84ec2e27daae9535859fa70d632f
:
name: libboost-numeric-ublas
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: uBLAS provides tensor, matrix, and vector classes as well as basic\
 linear algebra routines. Several dense, packed and sparse storage schemes\
 are supported
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.uBLAS Linear Algebra Library 
=====
Boost.uBLAS is part of the [Boost C++ Libraries](http://github.com/boostorg).\
 It is directed towards scientific computing on the level of basic linear\
 algebra constructions with matrices and vectors and their corresponding\
 abstract operations. 


## Documentation 
uBLAS is documented at [boost.org](https://www.boost.org/doc/libs/1_69_0/libs\
/numeric/ublas/doc/index.html).
The development has a [wiki page](https://github.com/uBLAS/ublas/wiki).
The tensor extension has a separate [wiki page](https://github.com/BoostGSoC1\
8/tensor/wiki).

## License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

## Properties
* Header-only
* Tensor extension requires C++17 compatible compiler, compiles with
  * gcc 7.3.0
  * clang 6.0
  * msvc 14.1
* Unit-tests require Boost.Test

## Build Status

Branch          | Travis | Appveyor | codecov.io | Docs |
:-------------: | ------ | -------- | ---------- | ---- |
[`master`](https://github.com/boostorg/ublas/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/ublas.svg?branch=master)](https://tra\
vis-ci.org/boostorg/ublas) | [![Build status](https://ci.appveyor.com/api/pro\
jects/status/ctu3wnfowa627ful/branch/master?svg=true)](https://ci.appveyor.co\
m/project/stefanseefeld/ublas/branch/master) | [![codecov](https://codecov.io\
/gh/boostorg/ublas/branch/master/graph/badge.svg)](https://codecov.io/gh/boos\
torg/ublas/branch/master) | [![Documentation](https://img.shields.io/badge/do\
cs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/release/libs/numer\
ic)
[`develop`](https://github.com/boostorg/ublas/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/ublas.svg?branch=develop)](https://tr\
avis-ci.org/boostorg/ublas) | [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/ctu3wnfowa627ful/branch/develop?svg=true)](https://ci.appveyor.\
com/project/stefanseefeld/ublas/branch/develop) | [![codecov](https://codecov\
.io/gh/boostorg/ublas/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/ublas/branch/develop) | [![Documentation](https://img.shields.io/bad\
ge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/release/libs/\
numeric)


## Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `examples`  | example files                  |
| `include`   | headers                        |
| `test`      | unit tests                     |
| `benchmarks`| timing and benchmarking        |

## More information

* Ask questions in [stackoverflow](http://stackoverflow.com/questions/ask?tag\
s=c%2B%2B,boost,boost-ublas) with `boost-ublas` or `ublas` tags.
* Report [bugs](https://github.com/boostorg/ublas/issues) and be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Developer discussions about the library are held on the [Boost developers\
 mailing list](https://lists.boost.org/mailman/listinfo.cgi/ublas). Be sure\
 to read the [discussion policy](http://www.boost.org/community/policy.html)\
 before posting and add the `[ublas]` tag at the beginning of the subject line
* For any other questions, you can contact David, Stefan or Cem:\
 david.bellot-AT-gmail-DOT-com, cem.bassoy-AT-gmail-DOT-com\
 stefan-AT-seefeld-DOT-name

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ublas
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/numeric/ublas
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-numeric-interval == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-serialization == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-numeric-ublas

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-numeric-ublas-1.87.0.tar.gz
sha256sum: 8cdc85f85d527ca79647aa3882cd9aa4824393467ee7afb5f082b27ae5da8add
:
name: libboost-optional
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A value-semantic, type-safe wrapper for representing 'optional' (or\
 'nullable') objects of a given type. An optional object may or may not\
 contain a value of the underlying type
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
optional
========

A library for representing optional (nullable) objects in C++.

```cpp
optional<int> readInt(); // this function may return either an int or a\
 not-an-int

if (optional<int> oi = readInt()) // did I get a real int
  cout << "my int is: " << *oi;   // use my int
else
  cout << "I have no int";
```

For more information refer to the documentation provided with this library.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/optional
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/optional
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-optional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-optional-1.83.0.tar.gz
sha256sum: bcb3bf3870d4fe61f4008e65a72edebac40ddbb2faf67a792d18457d457b1c7e
:
name: libboost-optional
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A value-semantic, type-safe wrapper for representing 'optional' (or\
 'nullable') objects of a given type. An optional object may or may not\
 contain a value of the underlying type
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
optional
========

A library for representing optional (nullable) objects in C++.

```cpp
optional<int> readInt(); // this function may return either an int or a\
 not-an-int

if (optional<int> oi = readInt()) // did I get a real int
  cout << "my int is: " << *oi;   // use my int
else
  cout << "I have no int";
```

For more information refer to the documentation provided with this library.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/optional
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/optional
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-optional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-optional-1.85.0.tar.gz
sha256sum: eb36e00d6801769c3932943eebac95fb78f448db7bd5bab2548e2e10846b97a2
:
name: libboost-optional
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A value-semantic, type-safe wrapper for representing 'optional' (or\
 'nullable') objects of a given type. An optional object may or may not\
 contain a value of the underlying type
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
optional
========

A library for representing optional (nullable) objects in C++.

```cpp
optional<int> readInt(); // this function may return either an int or a\
 not-an-int

if (optional<int> oi = readInt()) // did I get a real int
  cout << "my int is: " << *oi;   // use my int
else
  cout << "I have no int";
```

For more information refer to the documentation provided with this library.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/optional
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/optional
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-optional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-optional-1.87.0.tar.gz
sha256sum: 4ef906407ebb30e17f1b70dbace45fe7cb36b95a91d73a62d540028d918c59cd
:
name: libboost-outcome
version: 1.83.0
type: lib,binless
language: c++
language: c
project: boost
summary: A deterministic failure handling library partially simulating\
 lightweight exceptions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/outcome
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/outcome
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-outcome

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-outcome-1.83.0.tar.gz
sha256sum: 5a941b5e1ed0d5897f9cf760d60db26c489813ebb74cf2ec864ed46f5a193e50
:
name: libboost-outcome
version: 1.85.0
type: lib,binless
language: c++
language: c
project: boost
summary: A deterministic failure handling library partially simulating\
 lightweight exceptions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/outcome
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/outcome
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-exception == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-outcome

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-outcome-1.85.0.tar.gz
sha256sum: 55a84a4cefbe1b18f87d10b737d533c0c8f10bc55e0b76cf2dd93a05b1d62ed5
:
name: libboost-outcome
version: 1.87.0
type: lib,binless
language: c++
language: c
project: boost
summary: A deterministic failure handling library partially simulating\
 lightweight exceptions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/outcome
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/outcome
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-exception == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-outcome

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-outcome-1.87.0.tar.gz
sha256sum: b46646d687ab17dfb58f6e1a04a5b0ba5ddc3f8d10ec5f356bb91c6cb68293fe
:
name: libboost-parameter
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Boost.Parameter Library - Write functions that accept arguments by\
 name
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Parameter

Boost.Parameter, part of collection of the [Boost C++ Libraries](https://gith\
ub.com/boostorg), is a header-only library that implements named parameters\
 for functions and templates in C++.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Parameter
* **test** - Boost.Parameter unit tests

### More information

* [Documentation](https://www.boost.org/libs/parameter)
* [Report bugs](https://github.com/boostorg/parameter/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/paramete\
r/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/parameter/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/parameter/actions/workflows/ci.yml/badg\
e.svg?branch=master)](https://github.com/boostorg/parameter/actions?query=bra\
nch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/e9ip\
tg55otiv040a/branch/master?svg=true)](https://ci.appveyor.com/project/Lastiqu\
e/parameter/branch/master) | [![Tests](https://img.shields.io/badge/matrix-ma\
ster-brightgreen.svg)](http://www.boost.org/development/tests/master/develope\
r/parameter.html) | [![Dependencies](https://img.shields.io/badge/deps-master\
-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/parameter.\
html)
[`develop`](https://github.com/boostorg/parameter/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/parameter/actions/workflows/ci.yml/badg\
e.svg?branch=develop)](https://github.com/boostorg/parameter/actions?query=br\
anch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/e9\
iptg55otiv040a/branch/develop?svg=true)](https://ci.appveyor.com/project/Last\
ique/parameter/branch/develop) | [![Tests](https://img.shields.io/badge/matri\
x-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/de\
veloper/parameter.html) | [![Dependencies](https://img.shields.io/badge/deps-\
develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/pa\
rameter.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/parameter
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/parameter
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-parameter

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-parameter-1.83.0.tar.gz
sha256sum: 401476e6ee6f56776f018ecdd555d27483c5defcbfe7bc929b0d3d2d1bdb7ad8
:
name: libboost-parameter
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Boost.Parameter Library - Write functions that accept arguments by\
 name
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Parameter

Boost.Parameter, part of collection of the [Boost C++ Libraries](https://gith\
ub.com/boostorg), is a header-only library that implements named parameters\
 for functions and templates in C++.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Parameter
* **test** - Boost.Parameter unit tests

### More information

* [Documentation](https://www.boost.org/libs/parameter)
* [Report bugs](https://github.com/boostorg/parameter/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/paramete\
r/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/parameter/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/parameter/actions/workflows/ci.yml/badg\
e.svg?branch=master)](https://github.com/boostorg/parameter/actions?query=bra\
nch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/e9ip\
tg55otiv040a/branch/master?svg=true)](https://ci.appveyor.com/project/Lastiqu\
e/parameter/branch/master) | [![Tests](https://img.shields.io/badge/matrix-ma\
ster-brightgreen.svg)](http://www.boost.org/development/tests/master/develope\
r/parameter.html) | [![Dependencies](https://img.shields.io/badge/deps-master\
-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/parameter.\
html)
[`develop`](https://github.com/boostorg/parameter/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/parameter/actions/workflows/ci.yml/badg\
e.svg?branch=develop)](https://github.com/boostorg/parameter/actions?query=br\
anch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/e9\
iptg55otiv040a/branch/develop?svg=true)](https://ci.appveyor.com/project/Last\
ique/parameter/branch/develop) | [![Tests](https://img.shields.io/badge/matri\
x-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/de\
veloper/parameter.html) | [![Dependencies](https://img.shields.io/badge/deps-\
develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/pa\
rameter.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/parameter
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/parameter
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-parameter

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-parameter-1.85.0.tar.gz
sha256sum: e034d0ceaaffbf3d80f5117e05b56fe63ba9239aed3fa41359941e94ce752ace
:
name: libboost-parameter
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Boost.Parameter Library - Write functions that accept arguments by\
 name
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Parameter

Boost.Parameter, part of collection of the [Boost C++ Libraries](https://gith\
ub.com/boostorg), is a header-only library that implements named parameters\
 for functions and templates in C++.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Parameter
* **test** - Boost.Parameter unit tests

### More information

* [Documentation](https://www.boost.org/libs/parameter)
* [Report bugs](https://github.com/boostorg/parameter/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/paramete\
r/compare) against **develop** branch. Note that by submitting patches you\
 agree to license your modifications under the [Boost Software License,\
 Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/parameter/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/parameter/actions/workflows/ci.yml/badg\
e.svg?branch=master)](https://github.com/boostorg/parameter/actions?query=bra\
nch%3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/e9ip\
tg55otiv040a/branch/master?svg=true)](https://ci.appveyor.com/project/Lastiqu\
e/parameter/branch/master) | [![Tests](https://img.shields.io/badge/matrix-ma\
ster-brightgreen.svg)](http://www.boost.org/development/tests/master/develope\
r/parameter.html) | [![Dependencies](https://img.shields.io/badge/deps-master\
-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/parameter.\
html)
[`develop`](https://github.com/boostorg/parameter/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/parameter/actions/workflows/ci.yml/badg\
e.svg?branch=develop)](https://github.com/boostorg/parameter/actions?query=br\
anch%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/e9\
iptg55otiv040a/branch/develop?svg=true)](https://ci.appveyor.com/project/Last\
ique/parameter/branch/develop) | [![Tests](https://img.shields.io/badge/matri\
x-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/de\
veloper/parameter.html) | [![Dependencies](https://img.shields.io/badge/deps-\
develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/pa\
rameter.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/parameter
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/parameter
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-parameter

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-parameter-1.87.0.tar.gz
sha256sum: 31ffa2c6d023e17a3ed3c2f9cf912ccf6b677244662da5d547be413ca7a198fc
:
name: libboost-parser
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A parser combinator library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# parser

This is a parser combinator library for C++.  As a quick example of use, here
is a complete program that parses one or more `double`s separated by commas,
ignoring whitespace:

```c++
#include <boost/parser/parser.hpp>

#include <iostream>
#include <string>


namespace bp = boost::parser;

int main()
{
    std::cout << "Enter a list of doubles, separated by commas.  No pressure.\
 ";
    std::string input;
    std::getline(std::cin, input);

    auto const result = bp::parse(
        input, bp::double_ >> *(',' >> bp::double_), bp::ws);

    if (result) {
        std::cout << "Great! It looks like you entered:\n";
        for (double x : *result) {
            std::cout << x << "\n";
        }
    } else {
        std::cout
            << "Good job!  Please proceed to the recovery annex for cake.\n";
    }
}
```

This library is header-only, and has no Boost dependencies by default.

Features:

- Parsers that parse a variety of things.
- Combining operations that make complex parsers out of simpler ones.
- Multiple ways of getting data out of the parse, including via callbacks.
- Sentinel- and range-friendly.
- Very Unicode friendliness.
- Excellent error reporting, via diagnostics like those produced by GCC and\
 Clang.
- Trace support for debugging your parsers.
- Clever hacks to make compile time errors easier to deal with.  (These are\
 totally optional.)

This library first appeared in Boost 1.87.0

Master status:

[![Ubuntu](https://github.com/tzlaine/parser/actions/workflows/ubuntu.yml/bad\
ge.svg?branch=master)](https://github.com/tzlaine/parser/actions/workflows/ub\
untu.yml)

[![Fedora](https://github.com/tzlaine/parser/actions/workflows/fedora.yml/bad\
ge.svg?branch=master)](https://github.com/tzlaine/parser/actions/workflows/fe\
dora.yml)

[![Windows MSVC](https://github.com/tzlaine/parser/actions/workflows/windows.\
yml/badge.svg?branch=master)](https://github.com/tzlaine/parser/actions/workf\
lows/windows.yml)

[![macos-12 - Clang 14](https://github.com/tzlaine/parser/actions/workflows/m\
acos-12.yml/badge.svg?branch=master)](https://github.com/tzlaine/parser/actio\
ns/workflows/macos-12.yml)

Develop status:

[![Ubuntu](https://github.com/tzlaine/parser/actions/workflows/ubuntu.yml/bad\
ge.svg?branch=develop)](https://github.com/tzlaine/parser/actions/workflows/u\
buntu.yml)

[![Fedora](https://github.com/tzlaine/parser/actions/workflows/fedora.yml/bad\
ge.svg?branch=develop)](https://github.com/tzlaine/parser/actions/workflows/f\
edora.yml)

[![Windows MSVC](https://github.com/tzlaine/parser/actions/workflows/windows.\
yml/badge.svg?branch=develop)](https://github.com/tzlaine/parser/actions/work\
flows/windows.yml)

[![macos-12 - Clang 14](https://github.com/tzlaine/parser/actions/workflows/m\
acos-12.yml/badge.svg?branch=develop)](https://github.com/tzlaine/parser/acti\
ons/workflows/macos-12.yml)

[![License](https://img.shields.io/badge/license-boost-brightgreen.svg)](LICE\
NSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/parser
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/parser
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-charconv == 1.87.0
depends: libboost-hana == 1.87.0
depends: libboost-type-index == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-parser

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-parser-1.87.0.tar.gz
sha256sum: 6cd2d23feedf8e3f5b57b9675cf75104ed9a94f3db76d79b9b20a31e4e63e6ef
:
name: libboost-pfr
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Basic reflection  for user defined types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.PFR](https://boost.org/libs/pfr)

This is a C++14 library for very basic reflection that gives you access to\
 structure elements by index and provides other `std::tuple` like methods for\
 user defined types without any macro or boilerplate code.

[Boost.PFR](https://boost.org/libs/pfr) is a part of the [Boost C++\
 Libraries](https://github.com/boostorg). However, Boost.PFR is a header only\
 library that does not depend on Boost. You can just copy the content of the\
 "include" folder from the github into your project, and the library will\
 work fine.

For a version of the library without `boost::` namespace see\
 [PFR](https://github.com/apolukhin/pfr_non_boost).

### Test results

Branches        | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop:        | [![CI](https://github.com/boostorg/pfr/actions/workflows/ci\
.yml/badge.svg?branch=develop)](https://github.com/boostorg/pfr/actions/workf\
lows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/0ma\
vmnkdmltcdmqa/branch/develop?svg=true)](https://ci.appveyor.com/project/apolu\
khin/pfr/branch/develop) | [![Coverage Status](https://coveralls.io/repos/git\
hub/apolukhin/magic_get/badge.png?branch=develop)](https://coveralls.io/githu\
b/apolukhin/magic_get?branch=develop) | [details...](https://www.boost.org/de\
velopment/tests/develop/developer/pfr.html)
Master:         | [![CI](https://github.com/boostorg/pfr/actions/workflows/ci\
.yml/badge.svg?branch=master)](https://github.com/boostorg/pfr/actions/workfl\
ows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/0mav\
mnkdmltcdmqa/branch/master?svg=true)](https://ci.appveyor.com/project/apolukh\
in/pfr/branch/master) | [![Coverage Status](https://coveralls.io/repos/github\
/apolukhin/magic_get/badge.png?branch=master)](https://coveralls.io/github/ap\
olukhin/magic_get?branch=master) | [details...](https://www.boost.org/develop\
ment/tests/master/developer/pfr.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_pfr.html)

### Motivating Example #0
```c++
#include <iostream>
#include <fstream>
#include <string>

#include "boost/pfr.hpp"

struct some_person {
  std::string name;
  unsigned birth_year;
};

int main(int argc, const char* argv[]) {
  some_person val{"Edgar Allan Poe", 1809};

  std::cout << boost::pfr::get<0>(val)                // No macro!
      << " was born in " << boost::pfr::get<1>(val);  // Works with any\
 aggregate initializables!

  if (argc > 1) {
    std::ofstream ofs(argv[1]);
    ofs << boost::pfr::io(val);                       // File now contains:\
 {"Edgar Allan Poe", 1809}
  }
}
```
Outputs:
```
Edgar Allan Poe was born in 1809
```

[Run the above sample](https://godbolt.org/z/PfYsWKb7v)


### Motivating Example #1
```c++
#include <iostream>
#include "boost/pfr.hpp"

struct my_struct { // no ostream operator defined!
    int i;
    char c;
    double d;
};

int main() {
    my_struct s{100, 'H', 3.141593};
    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
        << " fields: " << boost::pfr::io(s) << "\n";
}

```

Outputs:
```
my_struct has 3 fields: {100, H, 3.14159}
```

### Motivating Example #2

```c++
#include <iostream>
#include "boost/pfr.hpp"

struct my_struct { // no ostream operator defined!
    std::string s;
    int i;
};

int main() {
    my_struct s{{"Das ist fantastisch!"}, 100};
    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
        << " fields: " << boost::pfr::io(s) << "\n";
}

```

Outputs:
```
my_struct has 2 fields: {"Das ist fantastisch!", 100}
```

### Motivating Example #3

```c++
#include <iostream>
#include <string>

#include <boost/config/warning_disable.hpp>
#include <boost/spirit/home/x3.hpp>
#include <boost/fusion/include/adapt_boost_pfr.hpp>

#include "boost/pfr/io.hpp"

namespace x3 = boost::spirit::x3;

struct ast_employee { // No BOOST_FUSION_ADAPT_STRUCT defined
    int age;
    std::string forename;
    std::string surname;
    double salary;
};

auto const quoted_string = x3::lexeme['"' >> +(x3::ascii::char_ - '"') >>\
 '"'];

x3::rule<class employee, ast_employee> const employee = "employee";
auto const employee_def =
    x3::lit("employee")
    >> '{'
    >>  x3::int_ >> ','
    >>  quoted_string >> ','
    >>  quoted_string >> ','
    >>  x3::double_
    >>  '}'
    ;
BOOST_SPIRIT_DEFINE(employee);

int main() {
    std::string str = R"(employee{34, "Chip", "Douglas", 2500.00})";
    ast_employee emp;
    x3::phrase_parse(str.begin(),
                     str.end(),
                     employee,
                     x3::ascii::space,
                     emp);
    std::cout << boost::pfr::io(emp) << std::endl;
}

```
Outputs:
```
(34 Chip Douglas 2500)
```


### Requirements and Limitations

[See docs](https://www.boost.org/doc/libs/develop/doc/html/boost_pfr.html).

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/pfr
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/pfr
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-pfr

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-pfr-1.83.0.tar.gz
sha256sum: 40e40921dc110b02cb4a47a9ef38432ffd313c7de0a6f0ce76f53a50fcf5aafd
:
name: libboost-pfr
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Basic reflection  for user defined types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.PFR](https://boost.org/libs/pfr)

This is a C++14 library for very basic reflection that gives you access to\
 structure elements by index and provides other `std::tuple` like methods for\
 user defined types without any macro or boilerplate code.

[Boost.PFR](https://boost.org/libs/pfr) is a part of the [Boost C++\
 Libraries](https://github.com/boostorg). However, Boost.PFR is a header only\
 library that does not depend on Boost. You can just copy the content of the\
 "include" folder from the github into your project, and the library will\
 work fine.

For a version of the library without `boost::` namespace see\
 [PFR](https://github.com/apolukhin/pfr_non_boost).

### Test results

Branches        | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop:        | [![CI](https://github.com/boostorg/pfr/actions/workflows/ci\
.yml/badge.svg?branch=develop)](https://github.com/boostorg/pfr/actions/workf\
lows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/0ma\
vmnkdmltcdmqa/branch/develop?svg=true)](https://ci.appveyor.com/project/apolu\
khin/pfr/branch/develop) | [![Coverage Status](https://coveralls.io/repos/git\
hub/apolukhin/magic_get/badge.png?branch=develop)](https://coveralls.io/githu\
b/apolukhin/magic_get?branch=develop) | [details...](https://www.boost.org/de\
velopment/tests/develop/developer/pfr.html)
Master:         | [![CI](https://github.com/boostorg/pfr/actions/workflows/ci\
.yml/badge.svg?branch=master)](https://github.com/boostorg/pfr/actions/workfl\
ows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/0mav\
mnkdmltcdmqa/branch/master?svg=true)](https://ci.appveyor.com/project/apolukh\
in/pfr/branch/master) | [![Coverage Status](https://coveralls.io/repos/github\
/apolukhin/magic_get/badge.png?branch=master)](https://coveralls.io/github/ap\
olukhin/magic_get?branch=master) | [details...](https://www.boost.org/develop\
ment/tests/master/developer/pfr.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_pfr.html)

### Motivating Example #0
```c++
#include <iostream>
#include <fstream>
#include <string>

#include "boost/pfr.hpp"

struct some_person {
  std::string name;
  unsigned birth_year;
};

int main(int argc, const char* argv[]) {
  some_person val{"Edgar Allan Poe", 1809};

  std::cout << boost::pfr::get<0>(val)                // No macro!
      << " was born in " << boost::pfr::get<1>(val);  // Works with any\
 aggregate initializables!

  if (argc > 1) {
    std::ofstream ofs(argv[1]);
    ofs << boost::pfr::io(val);                       // File now contains:\
 {"Edgar Allan Poe", 1809}
  }
}
```
Outputs:
```
Edgar Allan Poe was born in 1809
```

[Run the above sample](https://godbolt.org/z/PfYsWKb7v)


### Motivating Example #1
```c++
#include <iostream>
#include "boost/pfr.hpp"

struct my_struct { // no ostream operator defined!
    int i;
    char c;
    double d;
};

int main() {
    my_struct s{100, 'H', 3.141593};
    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
        << " fields: " << boost::pfr::io(s) << "\n";
}

```

Outputs:
```
my_struct has 3 fields: {100, H, 3.14159}
```

### Motivating Example #2

```c++
#include <iostream>
#include "boost/pfr.hpp"

struct my_struct { // no ostream operator defined!
    std::string s;
    int i;
};

int main() {
    my_struct s{{"Das ist fantastisch!"}, 100};
    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
        << " fields: " << boost::pfr::io(s) << "\n";
}

```

Outputs:
```
my_struct has 2 fields: {"Das ist fantastisch!", 100}
```

### Motivating Example #3

```c++
#include <iostream>
#include <string>

#include <boost/config/warning_disable.hpp>
#include <boost/spirit/home/x3.hpp>
#include <boost/fusion/include/adapt_boost_pfr.hpp>

#include "boost/pfr/io.hpp"

namespace x3 = boost::spirit::x3;

struct ast_employee { // No BOOST_FUSION_ADAPT_STRUCT defined
    int age;
    std::string forename;
    std::string surname;
    double salary;
};

auto const quoted_string = x3::lexeme['"' >> +(x3::ascii::char_ - '"') >>\
 '"'];

x3::rule<class employee, ast_employee> const employee = "employee";
auto const employee_def =
    x3::lit("employee")
    >> '{'
    >>  x3::int_ >> ','
    >>  quoted_string >> ','
    >>  quoted_string >> ','
    >>  x3::double_
    >>  '}'
    ;
BOOST_SPIRIT_DEFINE(employee);

int main() {
    std::string str = R"(employee{34, "Chip", "Douglas", 2500.00})";
    ast_employee emp;
    x3::phrase_parse(str.begin(),
                     str.end(),
                     employee,
                     x3::ascii::space,
                     emp);
    std::cout << boost::pfr::io(emp) << std::endl;
}

```
Outputs:
```
(34 Chip Douglas 2500)
```


### Requirements and Limitations

[See docs](https://www.boost.org/doc/libs/develop/doc/html/boost_pfr.html).

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/pfr
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/pfr
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-pfr

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-pfr-1.85.0.tar.gz
sha256sum: 8ad6b2bafbdfb6f523cd4b848d2b3b7f59053aca6b18ea5f34bf2be773bc7c63
:
name: libboost-pfr
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Basic reflection  for user defined types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.PFR](https://boost.org/libs/pfr)

This is a C++14 library for very basic reflection that gives you access to\
 structure elements by index and provides other `std::tuple` like methods for\
 user defined types without any macro or boilerplate code.

[Boost.PFR](https://boost.org/libs/pfr) is a part of the [Boost C++\
 Libraries](https://github.com/boostorg). However, Boost.PFR is a header only\
 library that does not depend on Boost. You can just copy the content of the\
 "include" folder from the github into your project, and the library will\
 work fine.

For a version of the library without `boost::` namespace see\
 [PFR](https://github.com/apolukhin/pfr_non_boost).

### Test results

Branches        | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop:        | [![CI](https://github.com/boostorg/pfr/actions/workflows/ci\
.yml/badge.svg?branch=develop)](https://github.com/boostorg/pfr/actions/workf\
lows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/0ma\
vmnkdmltcdmqa/branch/develop?svg=true)](https://ci.appveyor.com/project/apolu\
khin/pfr/branch/develop) | [![Coverage Status](https://coveralls.io/repos/git\
hub/apolukhin/magic_get/badge.png?branch=develop)](https://coveralls.io/githu\
b/apolukhin/magic_get?branch=develop) | [details...](https://www.boost.org/de\
velopment/tests/develop/developer/pfr.html)
Master:         | [![CI](https://github.com/boostorg/pfr/actions/workflows/ci\
.yml/badge.svg?branch=master)](https://github.com/boostorg/pfr/actions/workfl\
ows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/0mav\
mnkdmltcdmqa/branch/master?svg=true)](https://ci.appveyor.com/project/apolukh\
in/pfr/branch/master) | [![Coverage Status](https://coveralls.io/repos/github\
/apolukhin/magic_get/badge.png?branch=master)](https://coveralls.io/github/ap\
olukhin/magic_get?branch=master) | [details...](https://www.boost.org/develop\
ment/tests/master/developer/pfr.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_pfr.html)

### Motivating Example #0
```c++
#include <iostream>
#include <fstream>
#include <string>

#include "boost/pfr.hpp"

struct some_person {
  std::string name;
  unsigned birth_year;
};

int main(int argc, const char* argv[]) {
  some_person val{"Edgar Allan Poe", 1809};

  std::cout << boost::pfr::get<0>(val)                // No macro!
      << " was born in " << boost::pfr::get<1>(val);  // Works with any\
 aggregate initializables!

  if (argc > 1) {
    std::ofstream ofs(argv[1]);
    ofs << boost::pfr::io(val);                       // File now contains:\
 {"Edgar Allan Poe", 1809}
  }
}
```
Outputs:
```
Edgar Allan Poe was born in 1809
```

[Run the above sample](https://godbolt.org/z/PfYsWKb7v)


### Motivating Example #1
```c++
#include <iostream>
#include "boost/pfr.hpp"

struct my_struct { // no ostream operator defined!
    int i;
    char c;
    double d;
};

int main() {
    my_struct s{100, 'H', 3.141593};
    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
        << " fields: " << boost::pfr::io(s) << "\n";
}

```

Outputs:
```
my_struct has 3 fields: {100, H, 3.14159}
```

### Motivating Example #2

```c++
#include <iostream>
#include "boost/pfr.hpp"

struct my_struct { // no ostream operator defined!
    std::string s;
    int i;
};

int main() {
    my_struct s{{"Das ist fantastisch!"}, 100};
    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
        << " fields: " << boost::pfr::io(s) << "\n";
}

```

Outputs:
```
my_struct has 2 fields: {"Das ist fantastisch!", 100}
```

### Motivating Example #3

```c++
#include <iostream>
#include <string>

#include <boost/config/warning_disable.hpp>
#include <boost/spirit/home/x3.hpp>
#include <boost/fusion/include/adapt_boost_pfr.hpp>

#include "boost/pfr/io.hpp"

namespace x3 = boost::spirit::x3;

struct ast_employee { // No BOOST_FUSION_ADAPT_STRUCT defined
    int age;
    std::string forename;
    std::string surname;
    double salary;
};

auto const quoted_string = x3::lexeme['"' >> +(x3::ascii::char_ - '"') >>\
 '"'];

x3::rule<class employee, ast_employee> const employee = "employee";
auto const employee_def =
    x3::lit("employee")
    >> '{'
    >>  x3::int_ >> ','
    >>  quoted_string >> ','
    >>  quoted_string >> ','
    >>  x3::double_
    >>  '}'
    ;
BOOST_SPIRIT_DEFINE(employee);

int main() {
    std::string str = R"(employee{34, "Chip", "Douglas", 2500.00})";
    ast_employee emp;
    x3::phrase_parse(str.begin(),
                     str.end(),
                     employee,
                     x3::ascii::space,
                     emp);
    std::cout << boost::pfr::io(emp) << std::endl;
}

```
Outputs:
```
(34 Chip Douglas 2500)
```


### Requirements and Limitations

[See docs](https://www.boost.org/doc/libs/develop/doc/html/boost_pfr.html).

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/pfr
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/pfr
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-pfr

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-pfr-1.87.0.tar.gz
sha256sum: 319846fceb225f358da9dc7105f7ab16d4627c99959b762157e73b971fb54e69
:
name: libboost-phoenix
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Define small unnamed function objects at the actual call site, and\
 more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/phoenix
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/phoenix
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-proto == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-phoenix

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-phoenix-1.83.0.tar.gz
sha256sum: d8cca8aba81aaba6590f04200c8b0bc7e10f0f0d52d7ae99fcb848679f44a91f
:
name: libboost-phoenix
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Define small unnamed function objects at the actual call site, and\
 more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/phoenix
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/phoenix
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-proto == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-phoenix

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-phoenix-1.85.0.tar.gz
sha256sum: 6a17d9421b1012aee70bf54dd95442b357cf90fb42271ed741885e2c6e266e6b
:
name: libboost-phoenix
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Define small unnamed function objects at the actual call site, and\
 more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/phoenix
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/phoenix
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-proto == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-phoenix

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-phoenix-1.87.0.tar.gz
sha256sum: eb330097202762e4b120f6c4a02ad3cbcd9fdb66035349f7a67479d8cf12706d
:
name: libboost-poly-collection
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Fast containers of polymorphic objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost PolyCollection library

Branch   | Travis | AppVeyor | Regression tests
---------|--------|----------|-----------------
develop  | [![Build Status](https://travis-ci.org/boostorg/poly_collection.sv\
g?branch=develop)](https://travis-ci.org/boostorg/poly_collection) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/poly_col\
lection?branch=develop&svg=true)](https://ci.appveyor.com/project/joaquintide\
s/poly-collection) | [![Test Results](./test_results.svg)](https://www.boost.\
org/development/tests/develop/developer/poly_collection.html)
master   | [![Build Status](https://travis-ci.org/boostorg/poly_collection.sv\
g?branch=master)](https://travis-ci.org/boostorg/poly_collection) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/poly_col\
lection?branch=master&svg=true)](https://ci.appveyor.com/project/joaquintides\
/poly-collection) | [![Test Results](./test_results.svg)](https://www.boost.o\
rg/development/tests/master/developer/poly_collection.html)

**Boost.PolyCollection**: fast containers of polymorphic objects.

[Online docs](http://boost.org/libs/poly_collection)  
[Seminal article at bannalia.blogspot.com](http://bannalia.blogspot.com/2014/\
05/fast-polymorphic-collections.html)

Typically, polymorphic objects cannot be stored *directly* in regular\
 containers
and need be accessed through an indirection pointer, which introduces\
 performance
problems related to CPU caching and branch prediction. Boost.PolyCollection
implements a
[novel data structure](http://www.boost.org/doc/html/poly_collection/an_effic\
ient_polymorphic_data_st.html)
that is able to contiguously store polymorphic objects without such\
 indirection,
thus providing a value-semantics user interface and better performance.
Three *polymorphic collections* are provided:

* [`boost::base_collection`](http://www.boost.org/doc/html/poly_collection/tu\
torial.html#poly_collection.tutorial.basics.boost_base_collection) 
* [`boost::function_collection`](http://www.boost.org/doc/html/poly_collectio\
n/tutorial.html#poly_collection.tutorial.basics.boost_function_collection)
* [`boost::any_collection`](http://www.boost.org/doc/html/poly_collection/tut\
orial.html#poly_collection.tutorial.basics.boost_any_collection)

dealing respectively with classic base/derived or OOP polymorphism, function\
 wrapping
in the spirit of `std::function` and so-called
[*duck typing*](https://en.wikipedia.org/wiki/Duck_typing) as implemented by
[Boost.TypeErasure](http://www.boost.org/libs/type_erasure).

## Requirements

Boost.PolyCollection is a header-only library. C++11 support is required. The\
 library has been verified to work with Visual Studio 2015, GCC 4.8 and Clang\
 3.3.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/poly_collection
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/poly_collection
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-type-erasure == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-poly-collection

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-poly-collection-1.83.0.tar.gz
sha256sum: 1d4a12566ccabaf728893a2329c85e46325b5ea256a472244320f4d0274f7fd1
:
name: libboost-poly-collection
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Fast containers of polymorphic objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost PolyCollection library

Branch   | Travis | AppVeyor | Regression tests
---------|--------|----------|-----------------
develop  | [![Build Status](https://travis-ci.org/boostorg/poly_collection.sv\
g?branch=develop)](https://travis-ci.org/boostorg/poly_collection) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/poly_col\
lection?branch=develop&svg=true)](https://ci.appveyor.com/project/joaquintide\
s/poly-collection) | [![Test Results](./test_results.svg)](https://www.boost.\
org/development/tests/develop/developer/poly_collection.html)
master   | [![Build Status](https://travis-ci.org/boostorg/poly_collection.sv\
g?branch=master)](https://travis-ci.org/boostorg/poly_collection) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/poly_col\
lection?branch=master&svg=true)](https://ci.appveyor.com/project/joaquintides\
/poly-collection) | [![Test Results](./test_results.svg)](https://www.boost.o\
rg/development/tests/master/developer/poly_collection.html)

**Boost.PolyCollection**: fast containers of polymorphic objects.

[Online docs](http://boost.org/libs/poly_collection)  
[Seminal article at bannalia.blogspot.com](http://bannalia.blogspot.com/2014/\
05/fast-polymorphic-collections.html)

Typically, polymorphic objects cannot be stored *directly* in regular\
 containers
and need be accessed through an indirection pointer, which introduces\
 performance
problems related to CPU caching and branch prediction. Boost.PolyCollection
implements a
[novel data structure](http://www.boost.org/doc/html/poly_collection/an_effic\
ient_polymorphic_data_st.html)
that is able to contiguously store polymorphic objects without such\
 indirection,
thus providing a value-semantics user interface and better performance.
Three *polymorphic collections* are provided:

* [`boost::base_collection`](http://www.boost.org/doc/html/poly_collection/tu\
torial.html#poly_collection.tutorial.basics.boost_base_collection) 
* [`boost::function_collection`](http://www.boost.org/doc/html/poly_collectio\
n/tutorial.html#poly_collection.tutorial.basics.boost_function_collection)
* [`boost::any_collection`](http://www.boost.org/doc/html/poly_collection/tut\
orial.html#poly_collection.tutorial.basics.boost_any_collection)

dealing respectively with classic base/derived or OOP polymorphism, function\
 wrapping
in the spirit of `std::function` and so-called
[*duck typing*](https://en.wikipedia.org/wiki/Duck_typing) as implemented by
[Boost.TypeErasure](http://www.boost.org/libs/type_erasure).

## Requirements

Boost.PolyCollection is a header-only library. C++11 support is required. The\
 library has been verified to work with Visual Studio 2015, GCC 4.8 and Clang\
 3.3.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/poly_collection
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/poly_collection
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-type-erasure == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-poly-collection

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-poly-collection-1.85.0.tar.gz
sha256sum: 8415688b156ca103efade671795db634eb063203aa5a326432e0b5b62a036f5e
:
name: libboost-poly-collection
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Fast containers of polymorphic objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost PolyCollection library

[![Branch](https://img.shields.io/badge/branch-master-brightgreen.svg)](https\
://github.com/boostorg/poly_collection/tree/master) [![CI](https://github.com\
/boostorg/poly_collection/actions/workflows/ci.yml/badge.svg?branch=master)](\
https://github.com/boostorg/poly_collection/actions/workflows/ci.yml)\
 [![Drone status](https://img.shields.io/drone/build/boostorg/poly_collection\
/master?server=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&labe\
l=CI)](https://drone.cpp.al/boostorg/poly_collection) [![Build\
 status](https://img.shields.io/appveyor/build/joaquintides/poly-collection/m\
aster?logo=appveyor&label=CI)](https://ci.appveyor.com/project/joaquintides/p\
oly-collection/branch/master) [![Deps](https://img.shields.io/badge/deps-mast\
er-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/poly_col\
lection.html)  [![Documentation](https://img.shields.io/badge/docs-master-bri\
ghtgreen.svg)](https://www.boost.org/doc/libs/master/doc/html/poly_collection\
.html)  [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brigh\
tgreen.svg)](http://www.boost.org/development/tests/master/developer/poly_col\
lection.html)<br/>
[![Branch](https://img.shields.io/badge/branch-develop-brightgreen.svg)](http\
s://github.com/boostorg/poly_collection/tree/develop) [![CI](https://github.c\
om/boostorg/poly_collection/actions/workflows/ci.yml/badge.svg?branch=develop\
)](https://github.com/boostorg/poly_collection/actions/workflows/ci.yml)\
 [![Drone status](https://img.shields.io/drone/build/boostorg/poly_collection\
/develop?server=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&lab\
el=CI)](https://drone.cpp.al/boostorg/poly_collection) [![Build\
 status](https://img.shields.io/appveyor/build/joaquintides/poly-collection/d\
evelop?logo=appveyor&label=CI)](https://ci.appveyor.com/project/joaquintides/\
poly-collection/branch/develop) [![Deps](https://img.shields.io/badge/deps-de\
velop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/poly\
_collection.html) [![Documentation](https://img.shields.io/badge/docs-develop\
-brightgreen.svg)](https://www.boost.org/doc/libs/develop/doc/html/poly_colle\
ction.html) [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-\
brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/po\
ly_collection.html)<br/>
[![BSL 1.0](https://img.shields.io/badge/license-BSL_1.0-blue.svg)](https://w\
ww.boost.org/users/license.html) <img alt="C++11 required"\
 src="https://img.shields.io/badge/standard-C%2b%2b11-blue.svg"> <img\
 alt="Header-only library" src="https://img.shields.io/badge/build-header--on\
ly-blue.svg">

**Boost.PolyCollection**: fast containers of polymorphic objects.

Typically, polymorphic objects cannot be stored *directly* in regular\
 containers
and need be accessed through an indirection pointer, which introduces\
 performance
problems related to CPU caching and branch prediction. Boost.PolyCollection
implements a
[novel data structure](http://www.boost.org/doc/html/poly_collection/an_effic\
ient_polymorphic_data_st.html)
that is able to contiguously store polymorphic objects without such\
 indirection,
thus providing a value-semantics user interface and better performance.
Three *polymorphic collections* are provided:

* [`boost::base_collection`](http://www.boost.org/doc/html/poly_collection/tu\
torial.html#poly_collection.tutorial.basics.boost_base_collection) 
* [`boost::function_collection`](http://www.boost.org/doc/html/poly_collectio\
n/tutorial.html#poly_collection.tutorial.basics.boost_function_collection)
* [`boost::any_collection`](http://www.boost.org/doc/html/poly_collection/tut\
orial.html#poly_collection.tutorial.basics.boost_any_collection)

dealing respectively with classic base/derived or OOP polymorphism, function\
 wrapping
in the spirit of `std::function` and so-called
[*duck typing*](https://en.wikipedia.org/wiki/Duck_typing) as implemented by
[Boost.TypeErasure](http://www.boost.org/libs/type_erasure).

## Learn about Boost.PolyCollection

 * [Online docs](http://boost.org/libs/poly_collection)  
 * [Seminal article at bannalia.blogspot.com](http://bannalia.blogspot.com/20\
14/05/fast-polymorphic-collections.html)

## Install Boost.PolyCollection

* [Download Boost](https://www.boost.org/users/download/) and you're ready to\
 go (this is a header-only library requiring no building).
* Using Conan 2: In case you don't have it yet, add an entry for Boost in\
 your `conanfile.txt` (the example requires at least Boost 1.86):
```
[requires]
boost/[>=1.86.0]
```
<ul>If you're not using any compiled Boost library, the following will skip\
 building altogether:</ul>

```
[options]
boost:header_only=True
```
* Using vcpkg: Execute the command
```
vcpkg install boost-poly-collection
```
* Using CMake: [Boost CMake support infrastructure](https://github.com/boosto\
rg/cmake)
allows you to use CMake directly to download, build and consume all of Boost\
 or
some specific libraries.

## Support

* Join the **#boost** discussion group at [cpplang.slack.com](https://cpplang\
.slack.com/)
([ask for an invite](https://cppalliance.org/slack/) if you’re not a member\
 of this workspace yet)
* Ask in the [Boost Users mailing list](https://lists.boost.org/mailman/listi\
nfo.cgi/boost-users)
(add the `[poly_collection]` tag at the beginning of the subject line)
* [File an issue](https://github.com/boostorg/poly_collection/issues)

## Contribute

* [Pull requests](https://github.com/boostorg/poly_collection/pulls) against\
 **develop** branch are most welcome.
Note that by submitting patches you agree to license your modifications under\
 the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.t\
xt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/poly_collection
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/poly_collection
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-type-erasure == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-poly-collection

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-poly-collection-1.87.0.tar.gz
sha256sum: e1ca5967c73d772266e0c7ed0173dd3167eef8b335efca3eba5d3e779e1c3686
:
name: libboost-polygon
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Voronoi diagram construction and booleans/clipping,\
 resizing/offsetting and more for planar polygons with integral coordinates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/polygon
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/polygon
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-polygon

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-polygon-1.83.0.tar.gz
sha256sum: 96b91cb60a97f4b9a01c5346604b5489c1cf6c8f86aae922f62994d0da574bd0
:
name: libboost-polygon
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Voronoi diagram construction and booleans/clipping,\
 resizing/offsetting and more for planar polygons with integral coordinates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/polygon
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/polygon
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-polygon

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-polygon-1.85.0.tar.gz
sha256sum: 2a0e533436ac3e1f235687d486cf5b389eec8d60892d2c921c7e83b5eb1ff024
:
name: libboost-polygon
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Voronoi diagram construction and booleans/clipping,\
 resizing/offsetting and more for planar polygons with integral coordinates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/polygon
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/polygon
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-polygon

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-polygon-1.87.0.tar.gz
sha256sum: 9f8639827f1b4c69bad3738849ba66275aff1521c7dc9f9c0e9cb1d900676e74
:
name: libboost-pool
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Memory pool management
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Pool, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides an efficient way to handle memory suballocation for fixed-size\
 items.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/pool/tree/master) | [![Build\
 Status](https://github.com/boostorg/pool/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/pool/actions?query=branch:master)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/ci0aakleyrgnw\
7ji/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/pool-6s5\
a4/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/\
projects/15800/badge.svg)](https://scan.coverity.com/projects/boostorg-pool)\
 | [![codecov](https://codecov.io/gh/boostorg/pool/branch/master/graph/badge.\
svg)](https://codecov.io/gh/boostorg/pool/branch/master)| [![Deps](https://im\
g.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boo\
stdep-report/master/pool.html) | [![Documentation](https://img.shields.io/bad\
ge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/htm\
l/pool.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/p\
ool.html)
[`develop`](https://github.com/boostorg/pool/tree/develop) | [![Build\
 Status](https://github.com/boostorg/pool/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/pool/actions?query=branch:develo\
p) | [![Build status](https://ci.appveyor.com/api/projects/status/ci0aakleyrg\
nw7ji/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/pool-\
6s5a4/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.\
com/projects/15800/badge.svg)](https://scan.coverity.com/projects/boostorg-po\
ol) | [![codecov](https://codecov.io/gh/boostorg/pool/branch/develop/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/pool/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/pool.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/pool.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/pool.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-pool)
* [Report bugs](https://github.com/boostorg/pool/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[pool]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/pool
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/pool
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-pool

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-pool-1.83.0.tar.gz
sha256sum: 5b15db81e5f2097d3e22872e27e2742f5b42b6bbe9565697cf441bd442fee495
:
name: libboost-pool
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Memory pool management
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Pool, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides an efficient way to handle memory suballocation for fixed-size\
 items.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/pool/tree/master) | [![Build\
 Status](https://github.com/boostorg/pool/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/pool/actions?query=branch:master)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/ci0aakleyrgnw\
7ji/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/pool-6s5\
a4/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/\
projects/15800/badge.svg)](https://scan.coverity.com/projects/boostorg-pool)\
 | [![codecov](https://codecov.io/gh/boostorg/pool/branch/master/graph/badge.\
svg)](https://codecov.io/gh/boostorg/pool/branch/master)| [![Deps](https://im\
g.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boo\
stdep-report/master/pool.html) | [![Documentation](https://img.shields.io/bad\
ge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/htm\
l/pool.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/p\
ool.html)
[`develop`](https://github.com/boostorg/pool/tree/develop) | [![Build\
 Status](https://github.com/boostorg/pool/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/pool/actions?query=branch:develo\
p) | [![Build status](https://ci.appveyor.com/api/projects/status/ci0aakleyrg\
nw7ji/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/pool-\
6s5a4/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.\
com/projects/15800/badge.svg)](https://scan.coverity.com/projects/boostorg-po\
ol) | [![codecov](https://codecov.io/gh/boostorg/pool/branch/develop/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/pool/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/pool.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/pool.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/pool.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-pool)
* [Report bugs](https://github.com/boostorg/pool/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[pool]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/pool
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/pool
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-pool

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-pool-1.85.0.tar.gz
sha256sum: db8afb05a44d4ad22f549fb5aaf31023d6c0fbce5c6ea242418a0f484fd95a76
:
name: libboost-pool
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Memory pool management
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Pool, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides an efficient way to handle memory suballocation for fixed-size\
 items.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/pool/tree/master) | [![Build\
 Status](https://github.com/boostorg/pool/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/pool/actions?query=branch:master)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/ci0aakleyrgnw\
7ji/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/pool-6s5\
a4/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/\
projects/15800/badge.svg)](https://scan.coverity.com/projects/boostorg-pool)\
 | [![codecov](https://codecov.io/gh/boostorg/pool/branch/master/graph/badge.\
svg)](https://codecov.io/gh/boostorg/pool/branch/master)| [![Deps](https://im\
g.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boo\
stdep-report/master/pool.html) | [![Documentation](https://img.shields.io/bad\
ge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/htm\
l/pool.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/p\
ool.html)
[`develop`](https://github.com/boostorg/pool/tree/develop) | [![Build\
 Status](https://github.com/boostorg/pool/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/pool/actions?query=branch:develo\
p) | [![Build status](https://ci.appveyor.com/api/projects/status/ci0aakleyrg\
nw7ji/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/pool-\
6s5a4/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.\
com/projects/15800/badge.svg)](https://scan.coverity.com/projects/boostorg-po\
ol) | [![codecov](https://codecov.io/gh/boostorg/pool/branch/develop/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/pool/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/pool.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/pool.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/pool.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-pool)
* [Report bugs](https://github.com/boostorg/pool/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[pool]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/pool
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/pool
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-pool

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-pool-1.87.0.tar.gz
sha256sum: b654b5c155943fb116d195edb083fe299c0f49ca32103dc88a65465146398a54
:
name: libboost-predef
version: 1.83.0
type: lib,binless
language: c
project: boost
summary: This library defines a set of compiler, architecture, operating\
 system, library, and other version numbers from the information it can\
 gather of C, C++, Objective C, and Objective C++ predefined macros or those\
 defined in generally available headers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/predef
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/predef
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-predef

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#c.internal.scope = current

using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: boost/libboost-predef-1.83.0.tar.gz
sha256sum: a108e3bc67a49447e2d96bfa03c343cdfcc432672dcc7cb7591ba21de6734f3c
:
name: libboost-predef
version: 1.85.0
type: lib,binless
language: c
project: boost
summary: This library defines a set of compiler, architecture, operating\
 system, library, and other version numbers from the information it can\
 gather of C, C++, Objective C, and Objective C++ predefined macros or those\
 defined in generally available headers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/predef
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/predef
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-predef

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#c.internal.scope = current

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: boost/libboost-predef-1.85.0.tar.gz
sha256sum: 884f85b8ea84f2d0e59d2486bfdd4c67519012d325a8e52658d7b410373e5d9e
:
name: libboost-predef
version: 1.87.0
type: lib,binless
language: c
project: boost
summary: This library defines a set of compiler, architecture, operating\
 system, library, and other version numbers from the information it can\
 gather of C, C++, Objective C, and Objective C++ predefined macros or those\
 defined in generally available headers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/predef
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/predef
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-predef

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#c.internal.scope = current

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: boost/libboost-predef-1.87.0.tar.gz
sha256sum: afaaef4cd8780132a57b3e5c259dc9b6827439f68ab46c25b617eaadc40fb845
:
name: libboost-preprocessor
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Preprocessor metaprogramming tools including repetition and recursion
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/preprocessor
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/preprocessor
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-preprocessor

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-preprocessor-1.83.0.tar.gz
sha256sum: 2ba21eed2db6aed3a13956a888d794fe1dc8b75555cb8c22ae17cf474a53d706
:
name: libboost-preprocessor
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Preprocessor metaprogramming tools including repetition and recursion
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/preprocessor
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/preprocessor
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-preprocessor

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-preprocessor-1.85.0.tar.gz
sha256sum: 49a9cd3c6b03895114c63349eaf297ede2d501db348163ee67d09b37abe072b2
:
name: libboost-preprocessor
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Preprocessor metaprogramming tools including repetition and recursion
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/preprocessor
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/preprocessor
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-preprocessor

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-preprocessor-1.87.0.tar.gz
sha256sum: d76d32a333e1dbe2fb861969d3173c9ba489e7e1ee7dc38f0f313dcf6d85c8d2
:
name: libboost-process
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Library to create processes in a portable way
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost Process (Boost.Process)](https://github.com/boostorg/process)

Boost.process is a library for comfortable management of processes, released\
 with boost 1.64.0.

### Test results

| Branches | Linux / Windows                                                 \
                                                                            \
 | Code coverage                                                             \
                                                                   | Matrix  \
                                                                             \
                                                         | 
|----------|-----------------------------------------------------------------\
-----------------------------------------------------------------------------\
|----------------------------------------------------------------------------\
------------------------------------------------------------------|----------\
-----------------------------------------------------------------------------\
--------------------------------------------------------|
| Develop: | [![Build Status](https://drone.cpp.al/api/badges/boostorg/proces\
s/status.svg)](https://drone.cpp.al/boostorg/process)                       \
 | [![codecov](https://codecov.io/gh/boostorg/process/branch/develop/graph/ba\
dge.svg?token=AhunMqTSpA)](https://codecov.io/gh/boostorg/process) |\
 [![Matrix](https://img.shields.io/badge/matrix-develop-lightgray.svg)](http:\
//www.boost.org/development/tests/develop/developer/process.html) |
| Master:  | [![Build Status](https://drone.cpp.al/api/badges/boostorg/proces\
s/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/process)\
 | [![codecov](https://codecov.io/gh/boostorg/process/branch/master/graph/bad\
ge.svg?token=AhunMqTSpA)](https://codecov.io/gh/boostorg/process)  |\
 [![Matrix](https://img.shields.io/badge/matrix-master-lightgray.svg)](http:/\
/www.boost.org/development/tests/master/developer/process.html)   |





[Open Issues](https://github.com/boostorg/process/issues)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/process.html)

### About
This C++11 library is the current result of a long attempt to get a\
 boost.process library, which is going on since 2006.

### License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Dependency

This library requires boost 1.64 with which it is released.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/process
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/process
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.83.0
depends: libboost-asio == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-filesystem == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tokenizer == 1.83.0
depends: libboost-type-index == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-process

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-process-1.83.0.tar.gz
sha256sum: fdf1ed975fb073a6f639847c16eaafcffd777e4e6a65b52895766c9843fdb7f1
:
name: libboost-process
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Library to create processes in a portable way
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost Process (Boost.Process)](https://github.com/boostorg/process)

Boost.process is a library for comfortable management of processes, released\
 with boost 1.64.0.

### Test results

| Branches | Linux / Windows                                                 \
                                                                            \
 | Code coverage                                                             \
                                                                   | Matrix  \
                                                                             \
                                                         | 
|----------|-----------------------------------------------------------------\
-----------------------------------------------------------------------------\
|----------------------------------------------------------------------------\
------------------------------------------------------------------|----------\
-----------------------------------------------------------------------------\
--------------------------------------------------------|
| Develop: | [![Build Status](https://drone.cpp.al/api/badges/boostorg/proces\
s/status.svg)](https://drone.cpp.al/boostorg/process)                       \
 | [![codecov](https://codecov.io/gh/boostorg/process/branch/develop/graph/ba\
dge.svg?token=AhunMqTSpA)](https://codecov.io/gh/boostorg/process) |\
 [![Matrix](https://img.shields.io/badge/matrix-develop-lightgray.svg)](http:\
//www.boost.org/development/tests/develop/developer/process.html) |
| Master:  | [![Build Status](https://drone.cpp.al/api/badges/boostorg/proces\
s/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/process)\
 | [![codecov](https://codecov.io/gh/boostorg/process/branch/master/graph/bad\
ge.svg?token=AhunMqTSpA)](https://codecov.io/gh/boostorg/process)  |\
 [![Matrix](https://img.shields.io/badge/matrix-master-lightgray.svg)](http:/\
/www.boost.org/development/tests/master/developer/process.html)   |





[Open Issues](https://github.com/boostorg/process/issues)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/process.html)

### About
This C++11 library is the current result of a long attempt to get a\
 boost.process library, which is going on since 2006.

### License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Dependency

This library requires boost 1.64 with which it is released.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/process
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/process
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.85.0
depends: libboost-asio == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-filesystem == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tokenizer == 1.85.0
depends: libboost-type-index == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-process

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-process-1.85.0.tar.gz
sha256sum: 75453bb297f96e4aa6f8e6666fd6bffd132b576c8f3e4008ba5430d3cc07eb92
:
name: libboost-process
version: 1.87.0
language: c++
project: boost
summary: Library to create processes in a portable way
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost Process (Boost.Process)](https://github.com/boostorg/process)

Boost.process is a library for comfortable management of processes, released\
 with boost 1.64.0.

### Test results

| Branches | Linux / Windows                                                 \
                                                                            \
 | Code coverage                                                             \
                                                                   | Matrix  \
                                                                             \
                                                         | 
|----------|-----------------------------------------------------------------\
-----------------------------------------------------------------------------\
|----------------------------------------------------------------------------\
------------------------------------------------------------------|----------\
-----------------------------------------------------------------------------\
--------------------------------------------------------|
| Develop: | [![Build Status](https://drone.cpp.al/api/badges/boostorg/proces\
s/status.svg)](https://drone.cpp.al/boostorg/process)                       \
 | [![codecov](https://codecov.io/gh/boostorg/process/branch/develop/graph/ba\
dge.svg?token=AhunMqTSpA)](https://codecov.io/gh/boostorg/process) |\
 [![Matrix](https://img.shields.io/badge/matrix-develop-lightgray.svg)](http:\
//www.boost.org/development/tests/develop/developer/process.html) |
| Master:  | [![Build Status](https://drone.cpp.al/api/badges/boostorg/proces\
s/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/process)\
 | [![codecov](https://codecov.io/gh/boostorg/process/branch/master/graph/bad\
ge.svg?token=AhunMqTSpA)](https://codecov.io/gh/boostorg/process)  |\
 [![Matrix](https://img.shields.io/badge/matrix-master-lightgray.svg)](http:/\
/www.boost.org/development/tests/master/developer/process.html)   |





[Open Issues](https://github.com/boostorg/process/issues)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/process.html)

### About
This C++11 library is the current result of a long attempt to get a\
 boost.process library, which is going on since 2006.

### License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Dependency

This library requires boost 1.64 with which it is released.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-process

The `build2` package of `libboost-process` provides the following libraries:

- `lib{boost_process}`: Boost.Process V2
- `lib{boost_process_v1}`: Boost.Process V1

Note: Boost.Process V1 is scheduled to be deprecated in Boost version 1.88.0
and new projects are advised to use Boost.Process V2.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/process
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/process
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-algorithm == 1.87.0
depends: libboost-asio == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-filesystem == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tokenizer == 1.87.0
depends: libboost-type-index == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-process

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-process-1.87.0.tar.gz
sha256sum: e4e3917eb162e08eca6edd0c64cab4d908f734451920f768a99f1fad0e7c28dd
:
name: libboost-program-options
version: 1.83.0
language: c++
project: boost
summary: The program_options library allows program developers to obtain\
 program options, that is (name, value) pairs from the user, via conventional\
 methods such as command line and config file
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Program Options, part of the collection of [Boost C++ Libraries](http://githu\
b.com/boostorg), allows for definition and acquisition of (name, value) pairs\
 from the user via conventional methods such as command line and config file.\
  It is roughly analogous to getopt_long, but for use with C++.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Requires Linking

### Build Status
(in progress...)

|Branch          | Travis | Appveyor | codecov.io | Deps | Docs | Tests |
|:-------------: | ------ | -------- | ---------- | ---- | ---- | ----- |
|[`master`](https://github.com/boostorg/program_options/tree/master) |\
 [![Build Status](https://travis-ci.org/boostorg/program_options.svg?branch=m\
aster)](https://travis-ci.org/boostorg/program_options) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/e0quisadwh1v7ok5/branch/\
master?svg=true)](https://ci.appveyor.com/project/vprus/program-options/branc\
h/master) | [![codecov](https://codecov.io/gh/boostorg/program_options/branch\
/master/graph/badge.svg)](https://codecov.io/gh/boostorg/program_options/bran\
ch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.sv\
g)](https://pdimov.github.io/boostdep-report/master/program_options.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/master/doc/html/program_options.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/program_options\
.html) 
|[`develop`](https://github.com/boostorg/program_options/tree/develop) |\
 [![Build Status](https://travis-ci.org/boostorg/program_options.svg?branch=d\
evelop)](https://travis-ci.org/boostorg/program_options) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/e0quisadwh1v7ok5/branch/\
develop?svg=true)](https://ci.appveyor.com/project/vprus/program-options/bran\
ch/develop) | [![codecov](https://codecov.io/gh/boostorg/program_options/bran\
ch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/program_options/b\
ranch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgre\
en.svg)](https://pdimov.github.io/boostdep-report/develop/program_options.htm\
l) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.\
svg)](http://www.boost.org/doc/libs/develop/doc/html/program_options.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/program_optio\
ns.html)
 
### Directories

| Name      | Purpose                        |
| --------- | ------------------------------ |
| `build`   | build script for link library  |
| `ci`      | continuous integration scripts |
| `doc`     | documentation                  |
| `example` | use case examples              |
| `include` | headers                        |
| `src`     | source code for link library   |
| `test`    | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-program_options): Be sure to read the documentation first to see if it\
 answers your question.
* [Report bugs](https://github.com/boostorg/program_options/issues): Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/program_options/pulls)\
 against the **develop** branch. Note that by submitting patches you agree to\
 license your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[program_options]` tag at the beginning of the subject\
 line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/program_options
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/program_options
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-bind == 1.83.0
depends: libboost-tokenizer == 1.83.0
depends: libboost-any == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-program-options

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-program-options-1.83.0.tar.gz
sha256sum: 707024c35f89f3662d099655579c82660f1ec211e48bc339c13075fdc3f82121
:
name: libboost-program-options
version: 1.85.0
language: c++
project: boost
summary: The program_options library allows program developers to obtain\
 program options, that is (name, value) pairs from the user, via conventional\
 methods such as command line and config file
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Program Options, part of the collection of [Boost C++ Libraries](http://githu\
b.com/boostorg), allows for definition and acquisition of (name, value) pairs\
 from the user via conventional methods such as command line and config file.\
  It is roughly analogous to getopt_long, but for use with C++.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Requires Linking

### Build Status
(in progress...)

|Branch          | Travis | Appveyor | codecov.io | Deps | Docs | Tests |
|:-------------: | ------ | -------- | ---------- | ---- | ---- | ----- |
|[`master`](https://github.com/boostorg/program_options/tree/master) |\
 [![Build Status](https://travis-ci.org/boostorg/program_options.svg?branch=m\
aster)](https://travis-ci.org/boostorg/program_options) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/e0quisadwh1v7ok5/branch/\
master?svg=true)](https://ci.appveyor.com/project/vprus/program-options/branc\
h/master) | [![codecov](https://codecov.io/gh/boostorg/program_options/branch\
/master/graph/badge.svg)](https://codecov.io/gh/boostorg/program_options/bran\
ch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.sv\
g)](https://pdimov.github.io/boostdep-report/master/program_options.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/master/doc/html/program_options.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/program_options\
.html) 
|[`develop`](https://github.com/boostorg/program_options/tree/develop) |\
 [![Build Status](https://travis-ci.org/boostorg/program_options.svg?branch=d\
evelop)](https://travis-ci.org/boostorg/program_options) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/e0quisadwh1v7ok5/branch/\
develop?svg=true)](https://ci.appveyor.com/project/vprus/program-options/bran\
ch/develop) | [![codecov](https://codecov.io/gh/boostorg/program_options/bran\
ch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/program_options/b\
ranch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgre\
en.svg)](https://pdimov.github.io/boostdep-report/develop/program_options.htm\
l) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.\
svg)](http://www.boost.org/doc/libs/develop/doc/html/program_options.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/program_optio\
ns.html)
 
### Directories

| Name      | Purpose                        |
| --------- | ------------------------------ |
| `build`   | build script for link library  |
| `ci`      | continuous integration scripts |
| `doc`     | documentation                  |
| `example` | use case examples              |
| `include` | headers                        |
| `src`     | source code for link library   |
| `test`    | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-program_options): Be sure to read the documentation first to see if it\
 answers your question.
* [Report bugs](https://github.com/boostorg/program_options/issues): Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/program_options/pulls)\
 against the **develop** branch. Note that by submitting patches you agree to\
 license your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[program_options]` tag at the beginning of the subject\
 line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/program_options
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/program_options
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-bind == 1.85.0
depends: libboost-tokenizer == 1.85.0
depends: libboost-any == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-program-options

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-program-options-1.85.0.tar.gz
sha256sum: 80808be087d904bbbd37e0900fd8c2ed29c2fdfe971be80cc692a1ec4da00d80
:
name: libboost-program-options
version: 1.87.0
language: c++
project: boost
summary: The program_options library allows program developers to obtain\
 program options, that is (name, value) pairs from the user, via conventional\
 methods such as command line and config file
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Program Options, part of the collection of [Boost C++ Libraries](http://githu\
b.com/boostorg), allows for definition and acquisition of (name, value) pairs\
 from the user via conventional methods such as command line and config file.\
  It is roughly analogous to getopt_long, but for use with C++.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Requires Linking

### Build Status
(in progress...)

|Branch          | Travis | Appveyor | codecov.io | Deps | Docs | Tests |
|:-------------: | ------ | -------- | ---------- | ---- | ---- | ----- |
|[`master`](https://github.com/boostorg/program_options/tree/master) |\
 [![Build Status](https://travis-ci.org/boostorg/program_options.svg?branch=m\
aster)](https://travis-ci.org/boostorg/program_options) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/e0quisadwh1v7ok5/branch/\
master?svg=true)](https://ci.appveyor.com/project/vprus/program-options/branc\
h/master) | [![codecov](https://codecov.io/gh/boostorg/program_options/branch\
/master/graph/badge.svg)](https://codecov.io/gh/boostorg/program_options/bran\
ch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.sv\
g)](https://pdimov.github.io/boostdep-report/master/program_options.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/master/doc/html/program_options.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/program_options\
.html) 
|[`develop`](https://github.com/boostorg/program_options/tree/develop) |\
 [![Build Status](https://travis-ci.org/boostorg/program_options.svg?branch=d\
evelop)](https://travis-ci.org/boostorg/program_options) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/e0quisadwh1v7ok5/branch/\
develop?svg=true)](https://ci.appveyor.com/project/vprus/program-options/bran\
ch/develop) | [![codecov](https://codecov.io/gh/boostorg/program_options/bran\
ch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/program_options/b\
ranch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgre\
en.svg)](https://pdimov.github.io/boostdep-report/develop/program_options.htm\
l) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.\
svg)](http://www.boost.org/doc/libs/develop/doc/html/program_options.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen\
.svg)](http://www.boost.org/development/tests/develop/developer/program_optio\
ns.html)
 
### Directories

| Name      | Purpose                        |
| --------- | ------------------------------ |
| `build`   | build script for link library  |
| `ci`      | continuous integration scripts |
| `doc`     | documentation                  |
| `example` | use case examples              |
| `include` | headers                        |
| `src`     | source code for link library   |
| `test`    | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-program_options): Be sure to read the documentation first to see if it\
 answers your question.
* [Report bugs](https://github.com/boostorg/program_options/issues): Be sure\
 to mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/program_options/pulls)\
 against the **develop** branch. Note that by submitting patches you agree to\
 license your modifications under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).  Be sure to include tests\
 proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[program_options]` tag at the beginning of the subject\
 line.

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/program_options
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/program_options
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-bind == 1.87.0
depends: libboost-tokenizer == 1.87.0
depends: libboost-any == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-program-options

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-program-options-1.87.0.tar.gz
sha256sum: 776ec220290802856f7f4349c7ff68c17a30edf30339b27814a8a012b12c53cd
:
name: libboost-property-map
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Concepts defining interfaces which map key objects to value objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
PropertyMap, part of collection of the [Boost C++ Libraries](http://github.co\
m/boostorg), 
defines a general purpose interface for mapping key objects to corresponding\
 value objects, thereby hiding the details of how the mapping is implemented\
 from algorithms.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/property_map/tree/master) | [![Build\
 Status](https://github.com/boostorg/property_map/actions/workflows/ci.yml/ba\
dge.svg?branch=master)](https://github.com/boostorg/property_map/actions?quer\
y=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/stat\
us/jo7n29t5w499dodk/branch/master?svg=true)](https://ci.appveyor.com/project/\
jeking3/property-map-06329/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15841/badge.svg)](https://scan.co\
verity.com/projects/boostorg-property_map) | [![codecov](https://codecov.io/g\
h/boostorg/property_map/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/property_map/branch/master)| [![Deps](https://img.shields.io/badge/\
deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master\
/property_map.html) | [![Documentation](https://img.shields.io/badge/docs-mas\
ter-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/property_map\
/doc/property_map.html) | [![Enter the Matrix](https://img.shields.io/badge/m\
atrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/\
developer/property_map.html)
[`develop`](https://github.com/boostorg/property_map/tree/develop) | [![Build\
 Status](https://github.com/boostorg/property_map/actions/workflows/ci.yml/ba\
dge.svg?branch=develop)](https://github.com/boostorg/property_map/actions?que\
ry=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/jo7n29t5w499dodk/branch/develop?svg=true)](https://ci.appveyor.com/proje\
ct/jeking3/property-map-06329/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15841/badge.svg)](https://scan.co\
verity.com/projects/boostorg-property_map) | [![codecov](https://codecov.io/g\
h/boostorg/property_map/branch/develop/graph/badge.svg)](https://codecov.io/g\
h/boostorg/property_map/branch/develop) | [![Deps](https://img.shields.io/bad\
ge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/de\
velop/property_map.html) | [![Documentation](https://img.shields.io/badge/doc\
s-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/prope\
rty_map/doc/property_map.html) | [![Enter the Matrix](https://img.shields.io/\
badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests\
/develop/developer/property_map.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-property_map)
* [Report bugs](https://github.com/boostorg/property_map/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[property_map]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/property_map
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/property_map
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-index == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-property-map

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-property-map-1.83.0.tar.gz
sha256sum: 2aaf9b1e7a052a640ee0191b2d653110a81403b6090d92ea334cb35363533c87
:
name: libboost-property-map
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Concepts defining interfaces which map key objects to value objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
PropertyMap, part of collection of the [Boost C++ Libraries](http://github.co\
m/boostorg), 
defines a general purpose interface for mapping key objects to corresponding\
 value objects, thereby hiding the details of how the mapping is implemented\
 from algorithms.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/property_map/tree/master) | [![Build\
 Status](https://github.com/boostorg/property_map/actions/workflows/ci.yml/ba\
dge.svg?branch=master)](https://github.com/boostorg/property_map/actions?quer\
y=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/stat\
us/jo7n29t5w499dodk/branch/master?svg=true)](https://ci.appveyor.com/project/\
jeking3/property-map-06329/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15841/badge.svg)](https://scan.co\
verity.com/projects/boostorg-property_map) | [![codecov](https://codecov.io/g\
h/boostorg/property_map/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/property_map/branch/master)| [![Deps](https://img.shields.io/badge/\
deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master\
/property_map.html) | [![Documentation](https://img.shields.io/badge/docs-mas\
ter-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/property_map\
/doc/property_map.html) | [![Enter the Matrix](https://img.shields.io/badge/m\
atrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/\
developer/property_map.html)
[`develop`](https://github.com/boostorg/property_map/tree/develop) | [![Build\
 Status](https://github.com/boostorg/property_map/actions/workflows/ci.yml/ba\
dge.svg?branch=develop)](https://github.com/boostorg/property_map/actions?que\
ry=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/jo7n29t5w499dodk/branch/develop?svg=true)](https://ci.appveyor.com/proje\
ct/jeking3/property-map-06329/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15841/badge.svg)](https://scan.co\
verity.com/projects/boostorg-property_map) | [![codecov](https://codecov.io/g\
h/boostorg/property_map/branch/develop/graph/badge.svg)](https://codecov.io/g\
h/boostorg/property_map/branch/develop) | [![Deps](https://img.shields.io/bad\
ge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/de\
velop/property_map.html) | [![Documentation](https://img.shields.io/badge/doc\
s-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/prope\
rty_map/doc/property_map.html) | [![Enter the Matrix](https://img.shields.io/\
badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests\
/develop/developer/property_map.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-property_map)
* [Report bugs](https://github.com/boostorg/property_map/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[property_map]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/property_map
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/property_map
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-index == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-property-map

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-property-map-1.85.0.tar.gz
sha256sum: c5fec9d3de63ade95208c25532c8d222b339156ba9d2990d247140443cc2b5c5
:
name: libboost-property-map
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Concepts defining interfaces which map key objects to value objects
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
PropertyMap, part of collection of the [Boost C++ Libraries](http://github.co\
m/boostorg), 
defines a general purpose interface for mapping key objects to corresponding\
 value objects, thereby hiding the details of how the mapping is implemented\
 from algorithms.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/property_map/tree/master) | [![Build\
 Status](https://github.com/boostorg/property_map/actions/workflows/ci.yml/ba\
dge.svg?branch=master)](https://github.com/boostorg/property_map/actions?quer\
y=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/stat\
us/jo7n29t5w499dodk/branch/master?svg=true)](https://ci.appveyor.com/project/\
jeking3/property-map-06329/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15841/badge.svg)](https://scan.co\
verity.com/projects/boostorg-property_map) | [![codecov](https://codecov.io/g\
h/boostorg/property_map/branch/master/graph/badge.svg)](https://codecov.io/gh\
/boostorg/property_map/branch/master)| [![Deps](https://img.shields.io/badge/\
deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master\
/property_map.html) | [![Documentation](https://img.shields.io/badge/docs-mas\
ter-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/property_map\
/doc/property_map.html) | [![Enter the Matrix](https://img.shields.io/badge/m\
atrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/\
developer/property_map.html)
[`develop`](https://github.com/boostorg/property_map/tree/develop) | [![Build\
 Status](https://github.com/boostorg/property_map/actions/workflows/ci.yml/ba\
dge.svg?branch=develop)](https://github.com/boostorg/property_map/actions?que\
ry=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/jo7n29t5w499dodk/branch/develop?svg=true)](https://ci.appveyor.com/proje\
ct/jeking3/property-map-06329/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15841/badge.svg)](https://scan.co\
verity.com/projects/boostorg-property_map) | [![codecov](https://codecov.io/g\
h/boostorg/property_map/branch/develop/graph/badge.svg)](https://codecov.io/g\
h/boostorg/property_map/branch/develop) | [![Deps](https://img.shields.io/bad\
ge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/de\
velop/property_map.html) | [![Documentation](https://img.shields.io/badge/doc\
s-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/prope\
rty_map/doc/property_map.html) | [![Enter the Matrix](https://img.shields.io/\
badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests\
/develop/developer/property_map.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-property_map)
* [Report bugs](https://github.com/boostorg/property_map/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[property_map]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/property_map
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/property_map
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-any == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-index == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-property-map

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-property-map-1.87.0.tar.gz
sha256sum: 349db0ec61c1de2134cf1e2d3c121f663575e7119c3d6dc65fa0de5b397f1ee6
:
name: libboost-property-tree
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A tree data structure especially suited to storing configuration data
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Maintainer

This library is currently maintained by [Richard Hodges](mailto:hodges.r@gmai\
l.com) with generous support 
from the C++ Alliance.

# Build Status

Branch  | Status
--------|-------
develop | [![CI](https://github.com/boostorg/property_tree/actions/workflows/\
ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/property_tree/a\
ctions/workflows/ci.yml)
master  | [![CI](https://github.com/boostorg/property_tree/actions/workflows/\
ci.yml/badge.svg?branch=master)](https://github.com/boostorg/property_tree/ac\
tions/workflows/ci.yml)

# Licence

This software is distributed under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).

# Original Work

This library is the work of Marcin Kalicinski and Sebastian Redl<br/> 

Copyright (C) 2002-2006 Marcin Kalicinski<br/>
Copyright (C) 2009 Sebastian Redl

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/property_tree
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/property_tree
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-format == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-multi-index == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-serialization == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-property-tree

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-property-tree-1.83.0.tar.gz
sha256sum: b92da8b69f78fbc41a8df4bb16c18815d0a162f9c7f6a0acf9d2c3809e2deeaf
:
name: libboost-property-tree
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A tree data structure especially suited to storing configuration data
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Maintainer

This library is currently maintained by [Richard Hodges](mailto:hodges.r@gmai\
l.com) with generous support 
from the C++ Alliance.

# Build Status

Branch  | Status
--------|-------
develop | [![CI](https://github.com/boostorg/property_tree/actions/workflows/\
ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/property_tree/a\
ctions/workflows/ci.yml)
master  | [![CI](https://github.com/boostorg/property_tree/actions/workflows/\
ci.yml/badge.svg?branch=master)](https://github.com/boostorg/property_tree/ac\
tions/workflows/ci.yml)

# Licence

This software is distributed under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).

# Original Work

This library is the work of Marcin Kalicinski and Sebastian Redl<br/> 

Copyright (C) 2002-2006 Marcin Kalicinski<br/>
Copyright (C) 2009 Sebastian Redl

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/property_tree
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/property_tree
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-any == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-multi-index == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-serialization == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-property-tree

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-property-tree-1.85.0.tar.gz
sha256sum: 40e521c07abf7d8aef3422d595b66b3001579421855092f52fa7224a9b6c7541
:
name: libboost-property-tree
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A tree data structure especially suited to storing configuration data
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Maintainer

This library is currently maintained by [Richard Hodges](mailto:hodges.r@gmai\
l.com) with generous support 
from the C++ Alliance.

# Build Status

Branch  | Status
--------|-------
develop | [![CI](https://github.com/boostorg/property_tree/actions/workflows/\
ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/property_tree/a\
ctions/workflows/ci.yml)
master  | [![CI](https://github.com/boostorg/property_tree/actions/workflows/\
ci.yml/badge.svg?branch=master)](https://github.com/boostorg/property_tree/ac\
tions/workflows/ci.yml)

# Licence

This software is distributed under the [Boost Software License, Version\
 1.0](http://www.boost.org/LICENSE_1_0.txt).

# Original Work

This library is the work of Marcin Kalicinski and Sebastian Redl<br/> 

Copyright (C) 2002-2006 Marcin Kalicinski<br/>
Copyright (C) 2009 Sebastian Redl

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/property_tree
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/property_tree
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-any == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-multi-index == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-serialization == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-property-tree

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-property-tree-1.87.0.tar.gz
sha256sum: 0d281208b7cafa902a7232d6647b56adea19ce3612d9c4ea232aee7b0c033cb2
:
name: libboost-proto
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Expression template library and compiler construction toolkit for\
 domain-specific embedded languages
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/proto
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/proto
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-proto

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-proto-1.83.0.tar.gz
sha256sum: 1762366180a12476d0014e79db5cf862be75c728523bb6a09e639c1d72410944
:
name: libboost-proto
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Expression template library and compiler construction toolkit for\
 domain-specific embedded languages
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/proto
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/proto
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-proto

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-proto-1.85.0.tar.gz
sha256sum: f2d090eec39592024d14bb2b3dc2ad0cf3a51827b06b4bd5055868eee4ddc287
:
name: libboost-proto
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Expression template library and compiler construction toolkit for\
 domain-specific embedded languages
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/proto
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/proto
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-proto

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-proto-1.87.0.tar.gz
sha256sum: e6202089dad54b3cc3ca6cc38270884153b43052c849f3103d62c2c9167c1123
:
name: libboost-ptr-container
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Containers for storing heap-allocated polymorphic objects to ease\
 OO-programming
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
PtrContainer, part of collection of the [Boost C++ Libraries](http://github.c\
om/boostorg), provides containers for holding heap-allocated objects in an\
 exception-safe manner and with minimal overhead.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/ptr_container/tree/master) | [![Build\
 Status](https://github.com/boostorg/ptr_container/actions/workflows/ci.yml/b\
adge.svg?branch=master)](https://github.com/boostorg/ptr_container/actions?qu\
ery=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/xsoiss46xfe6ilig/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jeking3/ptr-container-lviqw/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15842/badge.svg)](https://scan.co\
verity.com/projects/boostorg-ptr_container) | [![codecov](https://codecov.io/\
gh/boostorg/ptr_container/branch/master/graph/badge.svg)](https://codecov.io/\
gh/boostorg/ptr_container/branch/master)| [![Deps](https://img.shields.io/bad\
ge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mas\
ter/ptr_container.html) | [![Documentation](https://img.shields.io/badge/docs\
-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/ptr_cont\
ainer/doc/ptr_container.html) | [![Enter the Matrix](https://img.shields.io/b\
adge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/m\
aster/developer/ptr_container.html)
[`develop`](https://github.com/boostorg/ptr_container/tree/develop) |\
 [![Build Status](https://github.com/boostorg/ptr_container/actions/workflows\
/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/ptr_container/\
actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/\
projects/status/xsoiss46xfe6ilig/branch/develop?svg=true)](https://ci.appveyo\
r.com/project/jeking3/ptr-container-lviqw/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15842/badge.svg)](https://s\
can.coverity.com/projects/boostorg-ptr_container) | [![codecov](https://codec\
ov.io/gh/boostorg/ptr_container/branch/develop/graph/badge.svg)](https://code\
cov.io/gh/boostorg/ptr_container/branch/develop) | [![Deps](https://img.shiel\
ds.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-\
report/develop/ptr_container.html) | [![Documentation](https://img.shields.io\
/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/\
libs/ptr_container/doc/ptr_container.html) | [![Enter the Matrix](https://img\
.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/devel\
opment/tests/develop/developer/ptr_container.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-ptr_container)
* [Report bugs](https://github.com/boostorg/ptr_container/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[ptr_container]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ptr_container
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/ptr_container
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-circular-buffer == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-unordered == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-ptr-container

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-ptr-container-1.83.0.tar.gz
sha256sum: be0a9304c396077269bd7173352bec3aa23b1478e9a579995279738246c09957
:
name: libboost-ptr-container
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Containers for storing heap-allocated polymorphic objects to ease\
 OO-programming
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
PtrContainer, part of collection of the [Boost C++ Libraries](http://github.c\
om/boostorg), provides containers for holding heap-allocated objects in an\
 exception-safe manner and with minimal overhead.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/ptr_container/tree/master) | [![Build\
 Status](https://github.com/boostorg/ptr_container/actions/workflows/ci.yml/b\
adge.svg?branch=master)](https://github.com/boostorg/ptr_container/actions?qu\
ery=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/xsoiss46xfe6ilig/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jeking3/ptr-container-lviqw/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15842/badge.svg)](https://scan.co\
verity.com/projects/boostorg-ptr_container) | [![codecov](https://codecov.io/\
gh/boostorg/ptr_container/branch/master/graph/badge.svg)](https://codecov.io/\
gh/boostorg/ptr_container/branch/master)| [![Deps](https://img.shields.io/bad\
ge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mas\
ter/ptr_container.html) | [![Documentation](https://img.shields.io/badge/docs\
-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/ptr_cont\
ainer/doc/ptr_container.html) | [![Enter the Matrix](https://img.shields.io/b\
adge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/m\
aster/developer/ptr_container.html)
[`develop`](https://github.com/boostorg/ptr_container/tree/develop) |\
 [![Build Status](https://github.com/boostorg/ptr_container/actions/workflows\
/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/ptr_container/\
actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/\
projects/status/xsoiss46xfe6ilig/branch/develop?svg=true)](https://ci.appveyo\
r.com/project/jeking3/ptr-container-lviqw/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15842/badge.svg)](https://s\
can.coverity.com/projects/boostorg-ptr_container) | [![codecov](https://codec\
ov.io/gh/boostorg/ptr_container/branch/develop/graph/badge.svg)](https://code\
cov.io/gh/boostorg/ptr_container/branch/develop) | [![Deps](https://img.shiel\
ds.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-\
report/develop/ptr_container.html) | [![Documentation](https://img.shields.io\
/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/\
libs/ptr_container/doc/ptr_container.html) | [![Enter the Matrix](https://img\
.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/devel\
opment/tests/develop/developer/ptr_container.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-ptr_container)
* [Report bugs](https://github.com/boostorg/ptr_container/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[ptr_container]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ptr_container
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/ptr_container
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-circular-buffer == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-unordered == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-ptr-container

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-ptr-container-1.85.0.tar.gz
sha256sum: 8817e26bcaaea7c599d050b3011802f95df50d39e80a5a8358de9eeea50efef0
:
name: libboost-ptr-container
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Containers for storing heap-allocated polymorphic objects to ease\
 OO-programming
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
PtrContainer, part of collection of the [Boost C++ Libraries](http://github.c\
om/boostorg), provides containers for holding heap-allocated objects in an\
 exception-safe manner and with minimal overhead.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header Only

### Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/ptr_container/tree/master) | [![Build\
 Status](https://github.com/boostorg/ptr_container/actions/workflows/ci.yml/b\
adge.svg?branch=master)](https://github.com/boostorg/ptr_container/actions?qu\
ery=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/xsoiss46xfe6ilig/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jeking3/ptr-container-lviqw/branch/master) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15842/badge.svg)](https://scan.co\
verity.com/projects/boostorg-ptr_container) | [![codecov](https://codecov.io/\
gh/boostorg/ptr_container/branch/master/graph/badge.svg)](https://codecov.io/\
gh/boostorg/ptr_container/branch/master)| [![Deps](https://img.shields.io/bad\
ge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/mas\
ter/ptr_container.html) | [![Documentation](https://img.shields.io/badge/docs\
-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/ptr_cont\
ainer/doc/ptr_container.html) | [![Enter the Matrix](https://img.shields.io/b\
adge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/m\
aster/developer/ptr_container.html)
[`develop`](https://github.com/boostorg/ptr_container/tree/develop) |\
 [![Build Status](https://github.com/boostorg/ptr_container/actions/workflows\
/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/ptr_container/\
actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/\
projects/status/xsoiss46xfe6ilig/branch/develop?svg=true)](https://ci.appveyo\
r.com/project/jeking3/ptr-container-lviqw/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15842/badge.svg)](https://s\
can.coverity.com/projects/boostorg-ptr_container) | [![codecov](https://codec\
ov.io/gh/boostorg/ptr_container/branch/develop/graph/badge.svg)](https://code\
cov.io/gh/boostorg/ptr_container/branch/develop) | [![Deps](https://img.shiel\
ds.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-\
report/develop/ptr_container.html) | [![Documentation](https://img.shields.io\
/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/\
libs/ptr_container/doc/ptr_container.html) | [![Enter the Matrix](https://img\
.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/devel\
opment/tests/develop/developer/ptr_container.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-ptr_container)
* [Report bugs](https://github.com/boostorg/ptr_container/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[ptr_container]` tag at the beginning of the subject\
 line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ptr_container
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/ptr_container
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-circular-buffer == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-unordered == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-ptr-container

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-ptr-container-1.87.0.tar.gz
sha256sum: 4ca17a4a9e2d0ae188495dcf8f2cd7e844021dccbfaf78d73ed2ae515193f09d
:
name: libboost-qvm
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Generic C++ library for working with Quaternions Vectors and Matrices
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# QVM

> A generic C++ library for working with `Q`uaternions, `V`ectors and\
 `M`atrices.

## Documentation

https://boostorg.github.io/qvm/

## Features

* Emphasis on 2, 3 and 4-dimensional operations needed in graphics, video\
 games and simulation applications.
* Free function templates operate on any compatible user-defined Quaternion,\
 Vector or Matrix type.
* Enables Quaternion, Vector and Matrix types from different libraries to be\
 safely mixed in the same expression.
* Type-safe mapping between compatible lvalue types with no temporary\
 objects; f.ex. transpose remaps the access to the elements, rather than\
 transforming the matrix.
* Requires only {CPP}03.
* Zero dependencies.

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Besides GitHub, there are two other distribution channels:

* QVM is included in official [Boost](https://www.boost.org/) releases.
* For maximum portability, the library is also available in single-header\
 format, in two variants (direct download links):
	* [qvm.hpp](https://boostorg.github.io/qvm/qvm.hpp): single header\
 containing the complete QVM source, including the complete set of swizzling\
 overloads.
	* [qvm_lite.hpp](https://boostorg.github.io/qvm/qvm_lite.hpp): single header\
 containing everything except for the swizzling overloads.

Copyright 2008-2023 Emil Dotchevski and Reverge Studios, Inc. Distributed\
 under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE\
_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/qvm
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/qvm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-qvm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-qvm-1.83.0.tar.gz
sha256sum: 7d723e1f670362df8632bb46668afea6a13869605fc873ff4b6f8eb53c156b52
:
name: libboost-qvm
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Generic C++ library for working with Quaternions Vectors and Matrices
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# QVM

> A generic C++ library for working with `Q`uaternions, `V`ectors and\
 `M`atrices.

## Documentation

https://boostorg.github.io/qvm/

## Features

* Emphasis on 2, 3 and 4-dimensional operations needed in graphics, video\
 games and simulation applications.
* Free function templates operate on any compatible user-defined Quaternion,\
 Vector or Matrix type.
* Enables Quaternion, Vector and Matrix types from different libraries to be\
 safely mixed in the same expression.
* Type-safe mapping between compatible lvalue types with no temporary\
 objects; f.ex. transpose remaps the access to the elements, rather than\
 transforming the matrix.
* Requires only {CPP}03.
* Zero dependencies.

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Besides GitHub, there are two other distribution channels:

* QVM is included in official [Boost](https://www.boost.org/) releases.
* For maximum portability, the library is also available in single-header\
 format, in two variants (direct download links):
	* [qvm.hpp](https://boostorg.github.io/qvm/qvm.hpp): single header\
 containing the complete QVM source, including the complete set of swizzling\
 overloads.
	* [qvm_lite.hpp](https://boostorg.github.io/qvm/qvm_lite.hpp): single header\
 containing everything except for the swizzling overloads.

Copyright 2008-2023 Emil Dotchevski and Reverge Studios, Inc. Distributed\
 under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE\
_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/qvm
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/qvm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-qvm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-qvm-1.85.0.tar.gz
sha256sum: d3ad409ba853abc049608a80d1c1e97b78f4590bb82bd44daa209c79881c011d
:
name: libboost-qvm
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Generic C++ library for working with Quaternions Vectors and Matrices
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# QVM

> A generic C++ library for working with `Q`uaternions, `V`ectors and\
 `M`atrices.

## Documentation

https://boostorg.github.io/qvm/

## Features

* Emphasis on 2, 3 and 4-dimensional operations needed in graphics, video\
 games and simulation applications.
* Free function templates operate on any compatible user-defined Quaternion,\
 Vector or Matrix type.
* Enables Quaternion, Vector and Matrix types from different libraries to be\
 safely mixed in the same expression.
* Type-safe mapping between compatible lvalue types with no temporary\
 objects; f.ex. transpose remaps the access to the elements, rather than\
 transforming the matrix.
* Requires only {CPP}03.
* Zero dependencies.

## Support

* [cpplang on Slack](https://Cpplang.slack.com) (use the `#boost` channel)
* [Boost Users Mailing List](https://lists.boost.org/mailman/listinfo.cgi/boo\
st-users)
* [Boost Developers Mailing List](https://lists.boost.org/mailman/listinfo.cg\
i/boost)

## Distribution

Besides GitHub, there are two other distribution channels:

* QVM is included in official [Boost](https://www.boost.org/) releases.
* For maximum portability, the library is also available in single-header\
 format, in two variants (direct download links):
	* [qvm.hpp](https://boostorg.github.io/qvm/qvm.hpp): single header\
 containing the complete QVM source, including the complete set of swizzling\
 overloads.
	* [qvm_lite.hpp](https://boostorg.github.io/qvm/qvm_lite.hpp): single header\
 containing everything except for the swizzling overloads.

Copyright 2008-2023 Emil Dotchevski and Reverge Studios, Inc. Distributed\
 under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE\
_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/qvm
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/qvm
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-qvm

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-qvm-1.87.0.tar.gz
sha256sum: 832d51638c391ade20b929e815e5aea1ce73d82a0a0966d37d64e01baf711a3b
:
name: libboost-random
version: 1.83.0
language: c++
project: boost
summary: A complete system for random number generation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/random
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/random
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-dynamic-bitset == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-random

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-random-1.83.0.tar.gz
sha256sum: 3b83d522317f19e6ede1659f48baff38169fa375d02f8ee2fbf737be950cd354
:
name: libboost-random
version: 1.85.0
language: c++
project: boost
summary: A complete system for random number generation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/random
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/random
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-dynamic-bitset == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-random

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-random-1.85.0.tar.gz
sha256sum: 0d5d779f1b28a15cc20ecef4f50095dfd8faa65e2522c7eb63d6b72787bb6e33
:
name: libboost-random
version: 1.87.0
language: c++
project: boost
summary: A complete system for random number generation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/random
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/random
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-dynamic-bitset == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-random

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-random-1.87.0.tar.gz
sha256sum: d5124e4a5a07156db57d407d75a276cf8d42ad921b45b130ae9a16e0d767724e
:
name: libboost-range
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A new infrastructure for generic algorithms that builds on top of\
 the new iterator concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
package-description:
\
# libboost-range

The `build2` package of `libboost-range` supports the following
configuration variables:


### `config.libboost_range.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/range
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/range
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-conversion == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-regex == 1.83.0 ? ($config.libboost_range.regex)
depends: libboost-static-assert == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-range

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_range.regex ?= false

\
location: boost/libboost-range-1.83.0.tar.gz
sha256sum: fa3015a2b1ba4d42c3f0d28261ad5aa1b6017171090624fc3f69efa2a9260c22
:
name: libboost-range
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A new infrastructure for generic algorithms that builds on top of\
 the new iterator concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
package-description:
\
# libboost-range

The `build2` package of `libboost-range` supports the following
configuration variables:


### `config.libboost_range.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/range
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/range
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-conversion == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-regex == 1.85.0 ? ($config.libboost_range.regex)
depends: libboost-static-assert == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-range

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_range.regex ?= false

\
location: boost/libboost-range-1.85.0.tar.gz
sha256sum: a0d8e60bf91c379843e4133f7c7e84399ca20c51fc3eaa9629221359e7b027d5
:
name: libboost-range
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A new infrastructure for generic algorithms that builds on top of\
 the new iterator concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
package-description:
\
# libboost-range

The `build2` package of `libboost-range` supports the following
configuration variables:


### `config.libboost_range.regex`

Enable regex support. Default is `false`. Note that enabling this support will
cause the package to depend on `libboost-regex`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/range
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/range
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-conversion == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-regex == 1.87.0 ? ($config.libboost_range.regex)
depends: libboost-static-assert == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-range

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_range.regex ?= false

\
location: boost/libboost-range-1.87.0.tar.gz
sha256sum: 8072960e327e40088b53f213fdf4876e91e6b4cda17609ef91c41727c899b0ef
:
name: libboost-ratio
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Compile time rational arithmetic. C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
ratio
======

Compile time rational arithmetic. C++11.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ratio
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/ratio
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-rational == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-ratio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-ratio-1.83.0.tar.gz
sha256sum: cb16450c877994205599f02c2aa224d3b9ff13e1720cb03e1976ff9fd8d61731
:
name: libboost-ratio
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Compile time rational arithmetic. C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
ratio
======

Compile time rational arithmetic. C++11.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ratio
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/ratio
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-ratio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-ratio-1.85.0.tar.gz
sha256sum: 4131bae25b1e0f68b5ff0106bf0ce80eac509baaabe70f8b8ae934fd741ba0f7
:
name: libboost-ratio
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Compile time rational arithmetic. C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
ratio
======

Compile time rational arithmetic. C++11.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/ratio
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/ratio
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-ratio

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-ratio-1.87.0.tar.gz
sha256sum: 3a0e0cf56b766325f490cb12f16fb04673218054bdcafbedce27c5799a245ca3
:
name: libboost-rational
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A rational number class
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Rational, part of collection of the [Boost C++ Libraries](http://github.com/b\
oostorg), provides an implementation of rational numbers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/rational/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/rational.svg?branch=master)](https://\
travis-ci.org/boostorg/rational) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/8a2on7yb2xck80fa/branch/master?svg=true)](https://ci.appve\
yor.com/project/jeking3/rational-lqu73/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16002/badge.svg)](https://s\
can.coverity.com/projects/boostorg-rational) | [![codecov](https://codecov.io\
/gh/boostorg/rational/branch/master/graph/badge.svg)](https://codecov.io/gh/b\
oostorg/rational/branch/master)| [![Deps](https://img.shields.io/badge/deps-m\
aster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/ratio\
nal.html) | [![Documentation](https://img.shields.io/badge/docs-master-bright\
green.svg)](http://www.boost.org/doc/libs/master/doc/html/rational.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/rational.html)
[`develop`](https://github.com/boostorg/rational/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/rational.svg?branch=develop)](https:/\
/travis-ci.org/boostorg/rational) | [![Build status](https://ci.appveyor.com/\
api/projects/status/8a2on7yb2xck80fa/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jeking3/rational-lqu73/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16002/badge.svg)](https://s\
can.coverity.com/projects/boostorg-rational) | [![codecov](https://codecov.io\
/gh/boostorg/rational/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/rational/branch/develop) | [![Deps](https://img.shields.io/badge/dep\
s-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/\
rational.html) | [![Documentation](https://img.shields.io/badge/docs-develop-\
brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/rational.htm\
l) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightg\
reen.svg)](http://www.boost.org/development/tests/develop/developer/rational.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `include`   | header                         |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-rational)
* [Report bugs](https://github.com/boostorg/rational/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[rational]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/rational
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/rational
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-rational

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-rational-1.83.0.tar.gz
sha256sum: 04cbed796b73c9e5788cd7f3c79558c1bb4792864a66a205b036bcff8d484b38
:
name: libboost-rational
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A rational number class
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Rational, part of collection of the [Boost C++ Libraries](http://github.com/b\
oostorg), provides an implementation of rational numbers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/rational/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/rational.svg?branch=master)](https://\
travis-ci.org/boostorg/rational) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/8a2on7yb2xck80fa/branch/master?svg=true)](https://ci.appve\
yor.com/project/jeking3/rational-lqu73/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16002/badge.svg)](https://s\
can.coverity.com/projects/boostorg-rational) | [![codecov](https://codecov.io\
/gh/boostorg/rational/branch/master/graph/badge.svg)](https://codecov.io/gh/b\
oostorg/rational/branch/master)| [![Deps](https://img.shields.io/badge/deps-m\
aster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/ratio\
nal.html) | [![Documentation](https://img.shields.io/badge/docs-master-bright\
green.svg)](http://www.boost.org/doc/libs/master/doc/html/rational.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/rational.html)
[`develop`](https://github.com/boostorg/rational/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/rational.svg?branch=develop)](https:/\
/travis-ci.org/boostorg/rational) | [![Build status](https://ci.appveyor.com/\
api/projects/status/8a2on7yb2xck80fa/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jeking3/rational-lqu73/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16002/badge.svg)](https://s\
can.coverity.com/projects/boostorg-rational) | [![codecov](https://codecov.io\
/gh/boostorg/rational/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/rational/branch/develop) | [![Deps](https://img.shields.io/badge/dep\
s-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/\
rational.html) | [![Documentation](https://img.shields.io/badge/docs-develop-\
brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/rational.htm\
l) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightg\
reen.svg)](http://www.boost.org/development/tests/develop/developer/rational.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `include`   | header                         |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-rational)
* [Report bugs](https://github.com/boostorg/rational/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[rational]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/rational
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/rational
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-rational

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-rational-1.85.0.tar.gz
sha256sum: 7edc6755b1684b9e4ff2d168ed80dda5aebe5fb1cbcdd5c0aba8074ecbef2f57
:
name: libboost-rational
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A rational number class
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Rational, part of collection of the [Boost C++ Libraries](http://github.com/b\
oostorg), provides an implementation of rational numbers.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/rational/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/rational.svg?branch=master)](https://\
travis-ci.org/boostorg/rational) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/8a2on7yb2xck80fa/branch/master?svg=true)](https://ci.appve\
yor.com/project/jeking3/rational-lqu73/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16002/badge.svg)](https://s\
can.coverity.com/projects/boostorg-rational) | [![codecov](https://codecov.io\
/gh/boostorg/rational/branch/master/graph/badge.svg)](https://codecov.io/gh/b\
oostorg/rational/branch/master)| [![Deps](https://img.shields.io/badge/deps-m\
aster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/ratio\
nal.html) | [![Documentation](https://img.shields.io/badge/docs-master-bright\
green.svg)](http://www.boost.org/doc/libs/master/doc/html/rational.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/rational.html)
[`develop`](https://github.com/boostorg/rational/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/rational.svg?branch=develop)](https:/\
/travis-ci.org/boostorg/rational) | [![Build status](https://ci.appveyor.com/\
api/projects/status/8a2on7yb2xck80fa/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jeking3/rational-lqu73/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/16002/badge.svg)](https://s\
can.coverity.com/projects/boostorg-rational) | [![codecov](https://codecov.io\
/gh/boostorg/rational/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/rational/branch/develop) | [![Deps](https://img.shields.io/badge/dep\
s-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/\
rational.html) | [![Documentation](https://img.shields.io/badge/docs-develop-\
brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/rational.htm\
l) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightg\
reen.svg)](http://www.boost.org/development/tests/develop/developer/rational.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `include`   | header                         |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-rational)
* [Report bugs](https://github.com/boostorg/rational/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[rational]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/rational
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/rational
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-rational

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-rational-1.87.0.tar.gz
sha256sum: 9dcc1365d05da617d39cbce141630c81babadf89f50a435e8981a2c9f329696d
:
name: libboost-redis
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Redis async client library built on top of Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Redis

Boost.Redis is a high-level [Redis](https://redis.io/) client library built\
 on top of
[Boost.Asio](https://www.boost.org/doc/libs/release/doc/html/boost_asio.html)
that implements the Redis protocol
[RESP3](https://github.com/redis/redis-specifications/blob/master/protocol/RE\
SP3.md).
The requirements for using Boost.Redis are:

* Boost. The library is included in Boost distributions starting with 1.84.
* C++17 or higher.
* Redis 6 or higher (must support RESP3).
* Gcc (10, 11, 12), Clang (11, 13, 14) and Visual Studio (16 2019, 17 2022).
* Have basic-level knowledge about [Redis](https://redis.io/docs/)
  and [Boost.Asio](https://www.boost.org/doc/libs/1_82_0/doc/html/boost_asio/\
overview.html).

The latest release can be downloaded on
https://github.com/boostorg/redis/releases. The library headers can be
found in the `include` subdirectory and a compilation of the source

```cpp
#include <boost/redis/src.hpp>
```

is required. The simplest way to do it is to included this header in
no more than one source file in your applications. To build the
examples and tests cmake is supported, for example

```cpp
# Linux
$ BOOST_ROOT=/opt/boost_1_84_0 cmake --preset g++-11

# Windows 
$ cmake -G "Visual Studio 17 2022" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=C:/\
vcpkg/scripts/buildsystems/vcpkg.cmake
```

<a name="connection"></a>
## Connection

Let us start with a simple application that uses a short-lived
connection to send a [ping](https://redis.io/commands/ping/) command
to Redis

```cpp
auto co_main(config const& cfg) -> net::awaitable<void>
{
   auto conn = std::make_shared<connection>(co_await net::this_coro::executor\
);
   conn->async_run(cfg, {}, net::consign(net::detached, conn));

   // A request containing only a ping command.
   request req;
   req.push("PING", "Hello world");

   // Response where the PONG response will be stored.
   response<std::string> resp;

   // Executes the request.
   co_await conn->async_exec(req, resp, net::deferred);
   conn->cancel();

   std::cout << "PING: " << std::get<0>(resp).value() << std::endl;
}
```

The roles played by the `async_run` and `async_exec` functions are

* `async_exec`: Execute the commands contained in the
  request and store the individual responses in the `resp` object. Can
  be called from multiple places in your code concurrently.
* `async_run`: Resolve, connect, ssl-handshake,
  resp3-handshake, health-checks, reconnection and coordinate low-level
  read and write operations (among other things).

### Server pushes

Redis servers can also send a variety of pushes to the client, some of
them are

* [Pubsub](https://redis.io/docs/manual/pubsub/)
* [Keyspace notification](https://redis.io/docs/manual/keyspace-notifications\
/)
* [Client-side caching](https://redis.io/docs/manual/client-side-caching/)

The connection class supports server pushes by means of the
`boost::redis::connection::async_receive` function, which can be
called in the same connection that is being used to execute commands.
The coroutine below shows how to used it

```cpp
auto
receiver(std::shared_ptr<connection> conn) -> net::awaitable<void>
{
   request req;
   req.push("SUBSCRIBE", "channel");

   generic_response resp;
   conn->set_receive_response(resp);

   // Loop while reconnection is enabled
   while (conn->will_reconnect()) {

      // Reconnect to channels.
      co_await conn->async_exec(req, ignore, net::deferred);

      // Loop reading Redis pushes.
      for (;;) {
         error_code ec;
         co_await conn->async_receive(resp, net::redirect_error(net::use_awai\
table, ec));
         if (ec)
            break; // Connection lost, break so we can reconnect to channels.

         // Use the response resp in some way and then clear it.
         ...

         consume_one(resp);
      }
   }
}

```

<a name="requests"></a>
## Requests

Redis requests are composed of one or more commands (in the
Redis documentation they are called
[pipelines](https://redis.io/topics/pipelining)). For example

```cpp
// Some example containers.
std::list<std::string> list {...};
std::map<std::string, mystruct> map { ...};

// The request can contain multiple commands.
request req;

// Command with variable length of arguments.
req.push("SET", "key", "some value", "EX", "2");

// Pushes a list.
req.push_range("SUBSCRIBE", list);

// Same as above but as an iterator range.
req.push_range("SUBSCRIBE", std::cbegin(list), std::cend(list));

// Pushes a map.
req.push_range("HSET", "key", map);
```

Sending a request to Redis is performed with `boost::redis::connection::async\
_exec` as already stated.

### Config flags

The `boost::redis::request::config` object inside the request dictates how the
`boost::redis::connection` should handle the request in some important\
 situations. The
reader is advised to read it carefully.

<a name="responses"></a>
## Responses

Boost.Redis uses the following strategy to support Redis responses

* `boost::redis::request` is used for requests whose number of commands are\
 not dynamic.
* **Dynamic**: Otherwise use `boost::redis::generic_response`.

For example, the request below has three commands

```cpp
request req;
req.push("PING");
req.push("INCR", "key");
req.push("QUIT");
```

and its response also has three comamnds and can be read in the
following response object

```cpp
response<std::string, int, std::string>
```

The response behaves as a tuple and must
have as many elements as the request has commands (exceptions below).
It is also necessary that each tuple element is capable of storing the
response to the command it refers to, otherwise an error will occur.
To ignore responses to individual commands in the request use the tag
`boost::redis::ignore_t`, for example

```cpp
// Ignore the second and last responses.
response<std::string, boost::redis::ignore_t, std::string,\
 boost::redis::ignore_t>
```

The following table provides the resp3-types returned by some Redis
commands

Command  | RESP3 type                          | Documentation
---------|-------------------------------------|--------------
lpush    | Number                              | https://redis.io/commands/lp\
ush
lrange   | Array                               | https://redis.io/commands/lr\
ange
set      | Simple-string, null or blob-string  | https://redis.io/commands/set
get      | Blob-string                         | https://redis.io/commands/get
smembers | Set                                 | https://redis.io/commands/sm\
embers
hgetall  | Map                                 | https://redis.io/commands/hg\
etall

To map these RESP3 types into a C++ data structure use the table below

RESP3 type     | Possible C++ type                                           \
 | Type
---------------|-------------------------------------------------------------\
-|------------------
Simple-string  | `std::string`                                              |\
 Simple
Simple-error   | `std::string`                                              |\
 Simple
Blob-string    | `std::string`, `std::vector`                               |\
 Simple
Blob-error     | `std::string`, `std::vector`                               |\
 Simple
Number         | `long long`, `int`, `std::size_t`, `std::string`           |\
 Simple
Double         | `double`, `std::string`                                    |\
 Simple
Null           | `std::optional<T>`                                         |\
 Simple
Array          | `std::vector`, `std::list`, `std::array`, `std::deque`     |\
 Aggregate
Map            | `std::vector`, `std::map`, `std::unordered_map`            |\
 Aggregate
Set            | `std::vector`, `std::set`, `std::unordered_set`            |\
 Aggregate
Push           | `std::vector`, `std::map`, `std::unordered_map`            |\
 Aggregate

For example, the response to the request

```cpp
request req;
req.push("HELLO", 3);
req.push_range("RPUSH", "key1", vec);
req.push_range("HSET", "key2", map);
req.push("LRANGE", "key3", 0, -1);
req.push("HGETALL", "key4");
req.push("QUIT");

```

can be read in the tuple below

```cpp
response<
   redis::ignore_t,  // hello
   int,              // rpush
   int,              // hset
   std::vector<T>,   // lrange
   std::map<U, V>,   // hgetall
   std::string       // quit
> resp;
```

Where both are passed to `async_exec` as showed elsewhere

```cpp
co_await conn->async_exec(req, resp, net::deferred);
```

If the intention is to ignore responses altogether use `ignore`

```cpp
// Ignores the response
co_await conn->async_exec(req, ignore, net::deferred);
```

Responses that contain nested aggregates or heterogeneous data
types will be given special treatment later in [The general\
 case](#the-general-case).  As
of this writing, not all RESP3 types are used by the Redis server,
which means in practice users will be concerned with a reduced
subset of the RESP3 specification.

### Pushes

Commands that have no response like

* `"SUBSCRIBE"`
* `"PSUBSCRIBE"`
* `"UNSUBSCRIBE"`

must **NOT** be included in the response tuple. For example, the request below

```cpp
request req;
req.push("PING");
req.push("SUBSCRIBE", "channel");
req.push("QUIT");
```

must be read in this tuple `response<std::string, std::string>`,
that has static size two.

### Null

It is not uncommon for apps to access keys that do not exist or
that have already expired in the Redis server, to deal with these
cases Boost.Redis provides support for `std::optional`. To use it,
wrap your type around `std::optional` like this

```cpp
response<
   std::optional<A>,
   std::optional<B>,
   ...
   > resp;

co_await conn->async_exec(req, resp, net::deferred);
```

Everything else stays pretty much the same.

### Transactions

To read responses to transactions we must first observe that Redis
will queue the transaction commands and send their individual
responses as elements of an array, the array is itself the response to
the `EXEC` command.  For example, to read the response to this request

```cpp
req.push("MULTI");
req.push("GET", "key1");
req.push("LRANGE", "key2", 0, -1);
req.push("HGETALL", "key3");
req.push("EXEC");
```

use the following response type

```cpp
using boost::redis::ignore;

using exec_resp_type = 
   response<
      std::optional<std::string>, // get
      std::optional<std::vector<std::string>>, // lrange
      std::optional<std::map<std::string, std::string>> // hgetall
   >;

response<
   boost::redis::ignore_t,  // multi
   boost::redis::ignore_t,  // get
   boost::redis::ignore_t,  // lrange
   boost::redis::ignore_t,  // hgetall
   exec_resp_type,        // exec
> resp;

co_await conn->async_exec(req, resp, net::deferred);
```

For a complete example see cpp20_containers.cpp.

<a name="the-general-case"></a>

### The general case

There are cases where responses to Redis
commands won't fit in the model presented above, some examples are

* Commands (like `set`) whose responses don't have a fixed
  RESP3 type. Expecting an `int` and receiving a blob-string
  will result in error.
* RESP3 aggregates that contain nested aggregates can't be read in STL\
 containers.
* Transactions with a dynamic number of commands can't be read in a\
 `response`.

To deal with these cases Boost.Redis provides the `boost::redis::resp3::node`\
 type
abstraction, that is the most general form of an element in a
response, be it a simple RESP3 type or the element of an aggregate. It
is defined like this

```cpp
template <class String>
struct basic_node {
   // The RESP3 type of the data in this node.
   type data_type;

   // The number of elements of an aggregate (or 1 for simple data).
   std::size_t aggregate_size;

   // The depth of this node in the response tree.
   std::size_t depth;

   // The actual data. For aggregate types this is always empty.
   String value;
};
```

Any response to a Redis command can be received in a
`boost::redis::generic_response`.  The vector can be seen as a
pre-order view of the response tree.  Using it is not different than
using other types

```cpp
// Receives any RESP3 simple or aggregate data type.
boost::redis::generic_response resp;
co_await conn->async_exec(req, resp, net::deferred);
```

For example, suppose we want to retrieve a hash data structure
from Redis with `HGETALL`, some of the options are

* `boost::redis::generic_response`: Works always.
* `std::vector<std::string>`: Efficient and flat, all elements as string.
* `std::map<std::string, std::string>`: Efficient if you need the data as a\
 `std::map`.
* `std::map<U, V>`: Efficient if you are storing serialized data. Avoids\
 temporaries and requires `boost_redis_from_bulk` for `U` and `V`.

In addition to the above users can also use unordered versions of the
containers. The same reasoning applies to sets e.g. `SMEMBERS`
and other data structures in general.

<a name="serialization"></a>
## Serialization

Boost.Redis supports serialization of user defined types by means of
the following customization points

```cpp

// Serialize.
void boost_redis_to_bulk(std::string& to, mystruct const& obj);

// Deserialize
void boost_redis_from_bulk(mystruct& obj, char const* p, std::size_t size,\
 boost::system::error_code& ec)
```

These functions are accessed over ADL and therefore they must be
imported in the global namespace by the user.  In the
[Examples](#examples) section the reader can find examples showing how
to serialize using json and [protobuf](https://protobuf.dev/).

<a name="examples"></a>
## Examples

The examples below show how to use the features discussed so far

* cpp20_intro.cpp: Does not use awaitable operators.
* cpp20_intro_tls.cpp: Communicates over TLS.
* cpp20_containers.cpp: Shows how to send and receive STL containers and how\
 to use transactions.
* cpp20_json.cpp: Shows how to serialize types using Boost.Json.
* cpp20_protobuf.cpp: Shows how to serialize types using protobuf.
* cpp20_resolve_with_sentinel.cpp: Shows how to resolve a master address\
 using sentinels.
* cpp20_subscriber.cpp: Shows how to implement pubsub with reconnection\
 re-subscription.
* cpp20_echo_server.cpp: A simple TCP echo server.
* cpp20_chat_room.cpp: A command line chat built on Redis pubsub.
* cpp17_intro.cpp: Uses callbacks and requires C++17.
* cpp17_intro_sync.cpp: Runs `async_run` in a separate thread and performs\
 synchronous calls to `async_exec`.

The main function used in some async examples has been factored out in
the main.cpp file.

## Echo server benchmark

This document benchmarks the performance of TCP echo servers I
implemented in different languages using different Redis clients.  The
main motivations for choosing an echo server are

   * Simple to implement and does not require expertise level in most\
 languages.
   * I/O bound: Echo servers have very low CPU consumption in general
     and  therefore are excelent to  measure how a program handles concurrent\
 requests.
   * It simulates very well a typical backend in regard to concurrency.

I also imposed some constraints on the implementations

   * It should be simple enough and not require writing too much code.
   * Favor the use standard idioms and avoid optimizations that require\
 expert level.
   * Avoid the use of complex things like connection and thread pool.

To reproduce these results run one of the echo-server programs in one
terminal and the
[echo-server-client](https://github.com/boostorg/redis/blob/42880e788bec6020d\
d018194075a211ad9f339e8/benchmarks/cpp/asio/echo_server_client.cpp)
in another.

### Without Redis

First I tested a pure TCP echo server, i.e. one that sends the messages
directly to the client without interacting with Redis. The result can
be seen below

![](https://boostorg.github.io/redis/tcp-echo-direct.png)

The tests were performed with a 1000 concurrent TCP connections on the
localhost where latency is 0.07ms on average on my machine. On higher
latency networks the difference among libraries is expected to
decrease. 

   * I expected Libuv to have similar performance to Asio and Tokio.
   * I did expect nodejs to come a little behind given it is is
     javascript code. Otherwise I did expect it to have similar
     performance to libuv since it is the framework behind it.
   * Go did surprise me: faster than nodejs and libuv!

The code used in the benchmarks can be found at

   * [Asio](https://github.com/boostorg/redis/blob/3fb018ccc6138d310ac8b73540\
391cdd8f2fdad6/benchmarks/cpp/asio/echo_server_direct.cpp): A variation of\
 [this](https://github.com/chriskohlhoff/asio/blob/4915cfd8a1653c157a1480162a\
e5601318553eb8/asio/src/examples/cpp20/coroutines/echo_server.cpp) Asio\
 example.
   * [Libuv](https://github.com/boostorg/redis/tree/835a1decf477b09317f391edd\
d0727213cdbe12b/benchmarks/c/libuv): Taken from [here](https://github.com/lib\
uv/libuv/blob/06948c6ee502862524f233af4e2c3e4ca876f5f6/docs/code/tcp-echo-ser\
ver/main.c) Libuv example .
   * [Tokio](https://github.com/boostorg/redis/tree/3fb018ccc6138d310ac8b7354\
0391cdd8f2fdad6/benchmarks/rust/echo_server_direct): Taken from\
 [here](https://docs.rs/tokio/latest/tokio/).
   * [Nodejs](https://github.com/boostorg/redis/tree/3fb018ccc6138d310ac8b735\
40391cdd8f2fdad6/benchmarks/nodejs/echo_server_direct)
   * [Go](https://github.com/boostorg/redis/blob/3fb018ccc6138d310ac8b7354039\
1cdd8f2fdad6/benchmarks/go/echo_server_direct.go)

### With Redis

This is similar to the echo server described above but messages are
echoed by Redis and not by the echo-server itself, which acts
as a proxy between the client and the Redis server. The results
can be seen below

![](https://boostorg.github.io/redis/tcp-echo-over-redis.png)

The tests were performed on a network where latency is 35ms on
average, otherwise it uses the same number of TCP connections
as the previous example.

As the reader can see, the Libuv and the Rust test are not depicted
in the graph, the reasons are

   * [redis-rs](https://github.com/redis-rs/redis-rs): This client
     comes so far behind that it can't even be represented together
     with the other benchmarks without making them look insignificant.
     I don't know for sure why it is so slow, I suppose it has
     something to do with its lack of automatic
     [pipelining](https://redis.io/docs/manual/pipelining/) support.
     In fact, the more TCP connections I lauch the worse its
     performance gets.

   * Libuv: I left it out because it would require me writing to much
     c code. More specifically, I would have to use hiredis and
     implement support for pipelines manually.

The code used in the benchmarks can be found at

   * [Boost.Redis](https://github.com/boostorg/redis): [code](https://github.\
com/boostorg/redis/blob/3fb018ccc6138d310ac8b73540391cdd8f2fdad6/examples/ech\
o_server.cpp)
   * [node-redis](https://github.com/redis/node-redis): [code](https://github\
.com/boostorg/redis/tree/3fb018ccc6138d310ac8b73540391cdd8f2fdad6/benchmarks/\
nodejs/echo_server_over_redis)
   * [go-redis](https://github.com/go-redis/redis): [code](https://github.com\
/boostorg/redis/blob/3fb018ccc6138d310ac8b73540391cdd8f2fdad6/benchmarks/go/e\
cho_server_over_redis.go)

### Conclusion

Redis clients have to support automatic pipelining to have competitive\
 performance. For updates to this document follow https://github.com/boostorg\
/redis.

## Comparison

The main reason for why I started writing Boost.Redis was to have a client
compatible with the Asio asynchronous model. As I made progresses I could
also address what I considered weaknesses in other libraries.  Due to
time constraints I won't be able to give a detailed comparison with
each client listed in the
[official](https://redis.io/docs/clients/#cpp) list,
instead I will focus on the most popular C++ client on github in number of
stars, namely

* https://github.com/sewenew/redis-plus-plus

### Boost.Redis vs Redis-plus-plus

Before we start it is important to mention some of the things
redis-plus-plus does not support

* The latest version of the communication protocol RESP3. Without that it is\
 impossible to support some important Redis features like client side\
 caching, among other things.
* Coroutines.
* Reading responses directly in user data structures to avoid creating\
 temporaries.
* Error handling with support for error-code.
* Cancellation.

The remaining points will be addressed individually.  Let us first
have a look at what sending a command a pipeline and a transaction
look like

```cpp
auto redis = Redis("tcp://127.0.0.1:6379");

// Send commands
redis.set("key", "val");
auto val = redis.get("key"); // val is of type OptionalString.
if (val)
    std::cout << *val << std::endl;

// Sending pipelines
auto pipe = redis.pipeline();
auto pipe_replies = pipe.set("key", "value")
                        .get("key")
                        .rename("key", "new-key")
                        .rpush("list", {"a", "b", "c"})
                        .lrange("list", 0, -1)
                        .exec();

// Parse reply with reply type and index.
auto set_cmd_result = pipe_replies.get<bool>(0);
// ...

// Sending a transaction
auto tx = redis.transaction();
auto tx_replies = tx.incr("num0")
                    .incr("num1")
                    .mget({"num0", "num1"})
                    .exec();

auto incr_result0 = tx_replies.get<long long>(0);
// ...
```

Some of the problems with this API are

* Heterogeneous treatment of commands, pipelines and transaction. This makes\
 auto-pipelining impossible.
* Any Api that sends individual commands has a very restricted scope of\
 usability and should be avoided for performance reasons.
* The API imposes exceptions on users, no error-code overload is provided.
* No way to reuse the buffer for new calls to e.g. redis.get in order to\
 avoid further dynamic memory allocations.
* Error handling of resolve and connection not clear.

According to the documentation, pipelines in redis-plus-plus have
the following characteristics

> NOTE: By default, creating a Pipeline object is NOT cheap, since
> it creates a new connection.

This is clearly a downside in the API as pipelines should be the
default way of communicating and not an exception, paying such a
high price for each pipeline imposes a severe cost in performance.
Transactions also suffer from the very same problem.

> NOTE: Creating a Transaction object is NOT cheap, since it
> creates a new connection.

In Boost.Redis there is no difference between sending one command, a
pipeline or a transaction because requests are decoupled
from the IO objects.

> redis-plus-plus also supports async interface, however, async
> support for Transaction and Subscriber is still on the way.
> 
> The async interface depends on third-party event library, and so
> far, only libuv is supported.

Async code in redis-plus-plus looks like the following

```cpp
auto async_redis = AsyncRedis(opts, pool_opts);

Future<string> ping_res = async_redis.ping();

cout << ping_res.get() << endl;
```
As the reader can see, the async interface is based on futures
which is also known to have a bad performance.  The biggest
problem however with this async design is that it makes it
impossible to write asynchronous programs correctly since it
starts an async operation on every command sent instead of
enqueueing a message and triggering a write when it can be sent.
It is also not clear how are pipelines realised with this design
(if at all).

<a name="api-reference"></a>
## Reference

The [High-Level](#high-level-api) page documents all public types.

## Acknowledgement

Acknowledgement to people that helped shape Boost.Redis

* Richard Hodges ([madmongo1](https://github.com/madmongo1)): For very\
 helpful support with Asio, the design of asynchronous programs, etc.
* Vinícius dos Santos Oliveira ([vinipsmaker](https://github.com/vinipsmaker)\
): For useful discussion about how Boost.Redis consumes buffers in the read\
 operation.
* Petr Dannhofer ([Eddie-cz](https://github.com/Eddie-cz)): For helping me\
 understand how the `AUTH` and `HELLO` command can influence each other.
* Mohammad Nejati ([ashtum](https://github.com/ashtum)): For pointing out\
 scenarios where calls to `async_exec` should fail when the connection is\
 lost.
* Klemens Morgenstern ([klemens-morgenstern](https://github.com/klemens-morge\
nstern)): For useful discussion about timeouts, cancellation, synchronous\
 interfaces and general help with Asio.
* Vinnie Falco ([vinniefalco](https://github.com/vinniefalco)): For general\
 suggestions about how to improve the code and the documentation.
* Bram Veldhoen ([bveldhoen](https://github.com/bveldhoen)): For contributing\
 a Redis-streams example.

Also many thanks to all individuals that participated in the Boost
review

* Zach Laine: https://lists.boost.org/Archives/boost/2023/01/253883.php
* Vinnie Falco: https://lists.boost.org/Archives/boost/2023/01/253886.php
* Christian Mazakas: https://lists.boost.org/Archives/boost/2023/01/253900.php
* Ruben Perez: https://lists.boost.org/Archives/boost/2023/01/253915.php
* Dmitry Arkhipov: https://lists.boost.org/Archives/boost/2023/01/253925.php
* Alan de Freitas: https://lists.boost.org/Archives/boost/2023/01/253927.php
* Mohammad Nejati: https://lists.boost.org/Archives/boost/2023/01/253929.php
* Sam Hartsfield: https://lists.boost.org/Archives/boost/2023/01/253931.php
* Miguel Portilla: https://lists.boost.org/Archives/boost/2023/01/253935.php
* Robert A.H. Leahy: https://lists.boost.org/Archives/boost/2023/01/253928.php

The Reviews can be found at:
https://lists.boost.org/Archives/boost/2023/01/date.php. The thread
with the ACCEPT from the review manager can be found here:
https://lists.boost.org/Archives/boost/2023/01/253944.php.

## Changelog

### Boost 1.85

* ([Issue 170](https://github.com/boostorg/redis/issues/170))
  Under load and on low-latency networks it is possible to start
  receiving responses before the write operation completed and while
  the request is still marked as staged and not written. This messes
  up with the heuristics that classifies responses as unsolicied or
  not.

* ([Issue 168](https://github.com/boostorg/redis/issues/168)).
  Provides a way of passing a custom SSL context to the connection.
  The design here differs from that of Boost.Beast and Boost.MySql
  since in Boost.Redis the connection owns the context instead of only
  storing a reference to a user provided one. This is ok so because
  apps need only one connection for their entire application, which
  makes the overhead of one ssl-context per connection negligible.

* ([Issue 181](https://github.com/boostorg/redis/issues/181)).
  See a detailed description of this bug in
  [this](https://github.com/boostorg/redis/issues/181#issuecomment-1913346983)
  comment.

* ([Issue 182](https://github.com/boostorg/redis/issues/182)).
  Sets `"default"` as the default value of `config::username`. This
  makes it simpler to use the `requirepass` configuration in Redis.

* ([Issue 189](https://github.com/boostorg/redis/issues/189)).
  Fixes narrowing convertion by using `std::size_t` instead of
  `std::uint64_t` for the sizes of bulks and aggregates. The code
  relies now on `std::from_chars` returning an error if a value
  greater than 32 is received on platforms on which the size
  of`std::size_t` is 32.


### Boost 1.84 (First release in Boost)

* Deprecates the `async_receive` overload that takes a response. Users
  should now first call `set_receive_response` to avoid constantly and
  unnecessarily setting the same response.

* Uses `std::function` to type erase the response adapter. This change
  should not influence users in any way but allowed important
  simplification in the connections internals. This resulted in
  massive performance improvement.

* The connection has a new member `get_usage()` that returns the
  connection usage information, such as number of bytes written,
  received etc.

* There are massive performance improvements in the consuming of
  server pushes which are now communicated with an `asio::channel` and
  therefore can be buffered which avoids blocking the socket read-loop.
  Batch reads are also supported by means of `channel.try_send` and
  buffered messages can be consumed synchronously with
  `connection::receive`. The function `boost::redis::cancel_one` has
  been added to simplify processing multiple server pushes contained
  in the same `generic_response`.  *IMPORTANT*: These changes may
  result in more than one push in the response when
  `connection::async_receive` resumes. The user must therefore be
  careful when calling `resp.clear()`: either ensure that all message
  have been processed or just use `consume_one`.

### v1.4.2 (incorporates changes to conform the boost review and more)

* Adds `boost::redis::config::database_index` to make it possible to
  choose a database before starting running commands e.g. after an
  automatic reconnection.

* Massive performance improvement. One of my tests went from
  140k req/s to 390k/s. This was possible after a parser
  simplification that reduced the number of reschedules and buffer
  rotations.

* Adds Redis stream example.

* Renames the project to Boost.Redis and moves the code into namespace
  `boost::redis`.

* As pointed out in the reviews the `to_bulk` and `from_bulk` names were too
  generic for ADL customization points. They gained the prefix `boost_redis_`.

* Moves `boost::redis::resp3::request` to `boost::redis::request`.

* Adds new typedef `boost::redis::response` that should be used instead of
  `std::tuple`.

* Adds new typedef `boost::redis::generic_response` that should be used\
 instead
  of `std::vector<resp3::node<std::string>>`.

* Renames `redis::ignore` to `redis::ignore_t`.

* Changes `async_exec` to receive a `redis::response` instead of an adapter,
  namely, instead of passing `adapt(resp)` users should pass `resp` directly.

* Introduces `boost::redis::adapter::result` to store responses to commands
  including possible resp3 errors without losing the error diagnostic part. To
  access values now use `std::get<N>(resp).value()` instead of
  `std::get<N>(resp)`.

* Implements full-duplex communication. Before these changes the connection
  would wait for a response to arrive before sending the next one. Now\
 requests
  are continuously coalesced and written to the socket. `request::coalesce`
  became unnecessary and was removed. I could measure significative\
 performance
  gains with theses changes.

* Improves serialization examples using Boost.Describe to serialize to JSON\
 and protobuf. See
  cpp20_json.cpp and cpp20_protobuf.cpp for more details.

* Upgrades to Boost 1.81.0.

* Fixes build with libc++.

* Adds high-level functionality to the connection classes. For
  example, `boost::redis::connection::async_run` will automatically
  resolve, connect, reconnect and perform health checks.

### v1.4.0-1

* Renames `retry_on_connection_lost` to `cancel_if_unresponded`.  (v1.4.1)
* Removes dependency on Boost.Hana, `boost::string_view`, Boost.Variant2 and\
 Boost.Spirit.
* Fixes build and setup CI on windows.

### v1.3.0-1

* Upgrades to Boost 1.80.0

* Removes automatic sending of the `HELLO` command. This can't be
  implemented properly without bloating the connection class. It is
  now a user responsibility to send HELLO. Requests that contain it have
  priority over other requests and will be moved to the front of the
  queue, see `aedis::request::config` 

* Automatic name resolving and connecting have been removed from
  `aedis::connection::async_run`. Users have to do this step manually
  now. The reason for this change is that having them built-in doesn't
  offer enough flexibility that is need for boost users.

* Removes healthy checks and idle timeout. This functionality must now
  be implemented by users, see the examples. This is
  part of making Aedis useful to a larger audience and suitable for
  the Boost review process.

* The `aedis::connection` is now using a typeddef to a
  `net::ip::tcp::socket` and  `aedis::ssl::connection` to
  `net::ssl::stream<net::ip::tcp::socket>`.  Users that need to use
  other stream type must now specialize `aedis::basic_connection`.

* Adds a low level example of async code.

### v1.2.0

* `aedis::adapt` supports now tuples created with `std::tie`.
  `aedis::ignore` is now an alias to the type of `std::ignore`.

* Provides allocator support for the internal queue used in the
  `aedis::connection` class.

* Changes the behaviour of `async_run` to complete with success if
  asio::error::eof is received. This makes it easier to  write
  composed operations with awaitable operators.

* Adds allocator support in the `aedis::request` (a
  contribution from Klemens Morgenstern).

* Renames `aedis::request::push_range2` to `push_range`. The
  suffix 2 was used for disambiguation. Klemens fixed it with SFINAE.

* Renames `fail_on_connection_lost` to
  `aedis::request::config::cancel_on_connection_lost`. Now, it will
  only cause connections to be canceled when `async_run` completes.

* Introduces `aedis::request::config::cancel_if_not_connected` which will
  cause a request to be canceled if `async_exec` is called before a
  connection has been established.

* Introduces new request flag `aedis::request::config::retry` that if
  set to true will cause the request to not be canceled when it was
  sent to Redis but remained unresponded after `async_run` completed.
  It provides a way to avoid executing commands twice.

* Removes the `aedis::connection::async_run` overload that takes
  request and adapter as parameters.

* Changes the way `aedis::adapt()` behaves with
  `std::vector<aedis::resp3::node<T>>`. Receiving RESP3 simple errors,
  blob errors or null won't causes an error but will be treated as
  normal response.  It is the user responsibility to check the content
  in the vector.

* Fixes a bug in `connection::cancel(operation::exec)`. Now this
  call will only cancel non-written requests.

* Implements per-operation implicit cancellation support for
  `aedis::connection::async_exec`. The following call will `co_await\
 (conn.async_exec(...) || timer.async_wait(...))`
  will cancel the request as long as it has not been written.

* Changes `aedis::connection::async_run` completion signature to
  `f(error_code)`. This is how is was in the past, the second
  parameter was not helpful.

* Renames `operation::receive_push` to `aedis::operation::receive`.

### v1.1.0-1

* Removes `coalesce_requests` from the `aedis::connection::config`, it
  became a request property now, see `aedis::request::config::coalesce`.

* Removes `max_read_size` from the `aedis::connection::config`. The maximum
  read size can be specified now as a parameter of the
  `aedis::adapt()` function.

* Removes `aedis::sync` class, see intro_sync.cpp for how to perform
  synchronous and thread safe calls. This is possible in Boost. 1.80
  only as it requires `boost::asio::deferred`. 

* Moves from `boost::optional` to `std::optional`. This is part of
  moving to C++17.

* Changes the behaviour of the second `aedis::connection::async_run` overload
  so that it always returns an error when the connection is lost.

* Adds TLS support, see intro_tls.cpp.

* Adds an example that shows how to resolve addresses over sentinels,
  see subscriber_sentinel.cpp.

* Adds a `aedis::connection::timeouts::resp3_handshake_timeout`. This is
  timeout used to send the `HELLO` command.

* Adds `aedis::endpoint` where in addition to host and port, users can
  optionally provide username, password and the expected server role
  (see `aedis::error::unexpected_server_role`).

* `aedis::connection::async_run` checks whether the server role received in
  the hello command is equal to the expected server role specified in
  `aedis::endpoint`. To skip this check let the role variable empty.

* Removes reconnect functionality from `aedis::connection`. It
  is possible in simple reconnection strategies but bloats the class
  in more complex scenarios, for example, with sentinel,
  authentication and TLS. This is trivial to implement in a separate
  coroutine. As a result the `enum event` and `async_receive_event`
  have been removed from the class too.

* Fixes a bug in `connection::async_receive_push` that prevented
  passing any response adapter other that `adapt(std::vector<node>)`.

* Changes the behaviour of `aedis::adapt()` that caused RESP3 errors
  to be ignored. One consequence of it is that `connection::async_run`
  would not exit with failure in servers that required authentication.

* Changes the behaviour of `connection::async_run` that would cause it
  to complete with success when an error in the
  `connection::async_exec` occurred.

* Ports the buildsystem from autotools to CMake.

### v1.0.0

* Adds experimental cmake support for windows users.

* Adds new class `aedis::sync` that wraps an `aedis::connection` in
  a thread-safe and synchronous API.  All free functions from the
  `sync.hpp` are now member functions of `aedis::sync`.

* Split `aedis::connection::async_receive_event` in two functions, one
  to receive events and another for server side pushes, see
  `aedis::connection::async_receive_push`.

* Removes collision between `aedis::adapter::adapt` and
  `aedis::adapt`.

* Adds `connection::operation` enum to replace `cancel_*` member
  functions with a single cancel function that gets the operations
  that should be cancelled as argument.

* Bugfix: a bug on reconnect from a state where the `connection` object
  had unsent commands. It could cause `async_exec` to never
  complete under certain conditions.

* Bugfix: Documentation of `adapt()` functions were missing from
  Doxygen.

### v0.3.0

* Adds `experimental::exec` and `receive_event` functions to offer a
  thread safe and synchronous way of executing requests across
  threads. See `intro_sync.cpp` and `subscriber_sync.cpp` for
  examples.

* `connection::async_read_push` was renamed to `async_receive_event`.

* `connection::async_receive_event` is now being used to communicate
  internal events to the user, such as resolve, connect, push etc. For
  examples see cpp20_subscriber.cpp and `connection::event`.

* The `aedis` directory has been moved to `include` to look more
  similar to Boost libraries. Users should now replace `-I/aedis-path`
  with `-I/aedis-path/include` in the compiler flags.

* The `AUTH` and `HELLO` commands are now sent automatically. This change was
  necessary to implement reconnection. The username and password
  used in `AUTH` should be provided by the user on
  `connection::config`.

* Adds support for reconnection. See `connection::enable_reconnect`.

* Fixes a bug in the `connection::async_run(host, port)` overload
  that was causing crashes on reconnection.

* Fixes the executor usage in the connection class. Before theses
  changes it was imposing `any_io_executor` on users.

* `connection::async_receiver_event` is not cancelled anymore when
  `connection::async_run` exits. This change makes user code simpler.

* `connection::async_exec` with host and port overload has been
  removed. Use the other `connection::async_run` overload.

* The host and port parameters from `connection::async_run` have been
  move to `connection::config` to better support authentication and
  failover.

* Many simplifications in the `chat_room` example.

* Fixes build in clang the compilers and makes some improvements in
  the documentation.

### v0.2.0-1

* Fixes a bug that happens on very high load. (v0.2.1) 
* Major rewrite of the high-level API. There is no more need to use the\
 low-level API anymore.
* No more callbacks: Sending requests follows the ASIO asynchronous model.
* Support for reconnection: Pending requests are not canceled when a\
 connection is lost and are re-sent when a new one is established.
* The library is not sending HELLO-3 on user behalf anymore. This is\
 important to support AUTH properly.

### v0.1.0-2

* Adds reconnect coroutine in the `echo_server` example. (v0.1.2)
* Corrects `client::async_wait_for_data` with `make_parallel_group` to launch\
 operation. (v0.1.2)
* Improvements in the documentation. (v0.1.2)
* Avoids dynamic memory allocation in the client class after reconnection.\
 (v0.1.2)
* Improves the documentation and adds some features to the high-level client.\
 (v.0.1.1)
* Improvements in the design and documentation.

### v0.0.1

* First release to collect design feedback.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/redis
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/redis
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libssl >= 1.1.1
depends: libcrypto >= 1.1.1
depends: libboost-asio == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-redis

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-redis-1.85.0.tar.gz
sha256sum: 755df09a9b41daade1114cc27baa1af5df653be62fab82713661d44cebd3f083
:
name: libboost-redis
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Redis async client library built on top of Boost.Asio
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Redis

Boost.Redis is a high-level [Redis](https://redis.io/) client library built\
 on top of
[Boost.Asio](https://www.boost.org/doc/libs/release/doc/html/boost_asio.html)
that implements the Redis protocol
[RESP3](https://github.com/redis/redis-specifications/blob/master/protocol/RE\
SP3.md).
The requirements for using Boost.Redis are:

* Boost. The library is included in Boost distributions starting with 1.84.
* C++17 or higher.
* Redis 6 or higher (must support RESP3).
* Gcc (11, 12), Clang (11, 13, 14) and Visual Studio (16 2019, 17 2022).
* Have basic-level knowledge about [Redis](https://redis.io/docs/)
  and [Boost.Asio](https://www.boost.org/doc/libs/1_82_0/doc/html/boost_asio/\
overview.html).

The latest release can be downloaded on
https://github.com/boostorg/redis/releases. The library headers can be
found in the `include` subdirectory and a compilation of the source

```cpp
#include <boost/redis/src.hpp>
```

is required. The simplest way to do it is to included this header in
no more than one source file in your applications. To build the
examples and tests cmake is supported, for example

```cpp
# Linux
$ BOOST_ROOT=/opt/boost_1_84_0 cmake --preset g++-11

# Windows 
$ cmake -G "Visual Studio 17 2022" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=C:/\
vcpkg/scripts/buildsystems/vcpkg.cmake
```

<a name="connection"></a>
## Connection

Let us start with a simple application that uses a short-lived
connection to send a [ping](https://redis.io/commands/ping/) command
to Redis

```cpp
auto co_main(config const& cfg) -> net::awaitable<void>
{
   auto conn = std::make_shared<connection>(co_await net::this_coro::executor\
);
   conn->async_run(cfg, {}, net::consign(net::detached, conn));

   // A request containing only a ping command.
   request req;
   req.push("PING", "Hello world");

   // Response where the PONG response will be stored.
   response<std::string> resp;

   // Executes the request.
   co_await conn->async_exec(req, resp, net::deferred);
   conn->cancel();

   std::cout << "PING: " << std::get<0>(resp).value() << std::endl;
}
```

The roles played by the `async_run` and `async_exec` functions are

* `async_exec`: Execute the commands contained in the
  request and store the individual responses in the `resp` object. Can
  be called from multiple places in your code concurrently.
* `async_run`: Resolve, connect, ssl-handshake,
  resp3-handshake, health-checks, reconnection and coordinate low-level
  read and write operations (among other things).

### Server pushes

Redis servers can also send a variety of pushes to the client, some of
them are

* [Pubsub](https://redis.io/docs/manual/pubsub/)
* [Keyspace notification](https://redis.io/docs/manual/keyspace-notifications\
/)
* [Client-side caching](https://redis.io/docs/manual/client-side-caching/)

The connection class supports server pushes by means of the
`boost::redis::connection::async_receive` function, which can be
called in the same connection that is being used to execute commands.
The coroutine below shows how to used it

```cpp
auto
receiver(std::shared_ptr<connection> conn) -> net::awaitable<void>
{
   request req;
   req.push("SUBSCRIBE", "channel");

   generic_response resp;
   conn->set_receive_response(resp);

   // Loop while reconnection is enabled
   while (conn->will_reconnect()) {

      // Reconnect to channels.
      co_await conn->async_exec(req, ignore, net::deferred);

      // Loop reading Redis pushes.
      for (;;) {
         error_code ec;
         co_await conn->async_receive(resp, net::redirect_error(net::use_awai\
table, ec));
         if (ec)
            break; // Connection lost, break so we can reconnect to channels.

         // Use the response resp in some way and then clear it.
         ...

         consume_one(resp);
      }
   }
}

```

<a name="requests"></a>
## Requests

Redis requests are composed of one or more commands (in the
Redis documentation they are called
[pipelines](https://redis.io/topics/pipelining)). For example

```cpp
// Some example containers.
std::list<std::string> list {...};
std::map<std::string, mystruct> map { ...};

// The request can contain multiple commands.
request req;

// Command with variable length of arguments.
req.push("SET", "key", "some value", "EX", "2");

// Pushes a list.
req.push_range("SUBSCRIBE", list);

// Same as above but as an iterator range.
req.push_range("SUBSCRIBE", std::cbegin(list), std::cend(list));

// Pushes a map.
req.push_range("HSET", "key", map);
```

Sending a request to Redis is performed with `boost::redis::connection::async\
_exec` as already stated.

### Config flags

The `boost::redis::request::config` object inside the request dictates how the
`boost::redis::connection` should handle the request in some important\
 situations. The
reader is advised to read it carefully.

<a name="responses"></a>
## Responses

Boost.Redis uses the following strategy to support Redis responses

* `boost::redis::request` is used for requests whose number of commands are\
 not dynamic.
* **Dynamic**: Otherwise use `boost::redis::generic_response`.

For example, the request below has three commands

```cpp
request req;
req.push("PING");
req.push("INCR", "key");
req.push("QUIT");
```

and its response also has three comamnds and can be read in the
following response object

```cpp
response<std::string, int, std::string>
```

The response behaves as a tuple and must
have as many elements as the request has commands (exceptions below).
It is also necessary that each tuple element is capable of storing the
response to the command it refers to, otherwise an error will occur.
To ignore responses to individual commands in the request use the tag
`boost::redis::ignore_t`, for example

```cpp
// Ignore the second and last responses.
response<std::string, boost::redis::ignore_t, std::string,\
 boost::redis::ignore_t>
```

The following table provides the resp3-types returned by some Redis
commands

Command  | RESP3 type                          | Documentation
---------|-------------------------------------|--------------
lpush    | Number                              | https://redis.io/commands/lp\
ush
lrange   | Array                               | https://redis.io/commands/lr\
ange
set      | Simple-string, null or blob-string  | https://redis.io/commands/set
get      | Blob-string                         | https://redis.io/commands/get
smembers | Set                                 | https://redis.io/commands/sm\
embers
hgetall  | Map                                 | https://redis.io/commands/hg\
etall

To map these RESP3 types into a C++ data structure use the table below

RESP3 type     | Possible C++ type                                           \
 | Type
---------------|-------------------------------------------------------------\
-|------------------
Simple-string  | `std::string`                                              |\
 Simple
Simple-error   | `std::string`                                              |\
 Simple
Blob-string    | `std::string`, `std::vector`                               |\
 Simple
Blob-error     | `std::string`, `std::vector`                               |\
 Simple
Number         | `long long`, `int`, `std::size_t`, `std::string`           |\
 Simple
Double         | `double`, `std::string`                                    |\
 Simple
Null           | `std::optional<T>`                                         |\
 Simple
Array          | `std::vector`, `std::list`, `std::array`, `std::deque`     |\
 Aggregate
Map            | `std::vector`, `std::map`, `std::unordered_map`            |\
 Aggregate
Set            | `std::vector`, `std::set`, `std::unordered_set`            |\
 Aggregate
Push           | `std::vector`, `std::map`, `std::unordered_map`            |\
 Aggregate

For example, the response to the request

```cpp
request req;
req.push("HELLO", 3);
req.push_range("RPUSH", "key1", vec);
req.push_range("HSET", "key2", map);
req.push("LRANGE", "key3", 0, -1);
req.push("HGETALL", "key4");
req.push("QUIT");

```

can be read in the tuple below

```cpp
response<
   redis::ignore_t,  // hello
   int,              // rpush
   int,              // hset
   std::vector<T>,   // lrange
   std::map<U, V>,   // hgetall
   std::string       // quit
> resp;
```

Where both are passed to `async_exec` as showed elsewhere

```cpp
co_await conn->async_exec(req, resp, net::deferred);
```

If the intention is to ignore responses altogether use `ignore`

```cpp
// Ignores the response
co_await conn->async_exec(req, ignore, net::deferred);
```

Responses that contain nested aggregates or heterogeneous data
types will be given special treatment later in [The general\
 case](#the-general-case).  As
of this writing, not all RESP3 types are used by the Redis server,
which means in practice users will be concerned with a reduced
subset of the RESP3 specification.

### Pushes

Commands that have no response like

* `"SUBSCRIBE"`
* `"PSUBSCRIBE"`
* `"UNSUBSCRIBE"`

must **NOT** be included in the response tuple. For example, the request below

```cpp
request req;
req.push("PING");
req.push("SUBSCRIBE", "channel");
req.push("QUIT");
```

must be read in this tuple `response<std::string, std::string>`,
that has static size two.

### Null

It is not uncommon for apps to access keys that do not exist or
that have already expired in the Redis server, to deal with these
cases Boost.Redis provides support for `std::optional`. To use it,
wrap your type around `std::optional` like this

```cpp
response<
   std::optional<A>,
   std::optional<B>,
   ...
   > resp;

co_await conn->async_exec(req, resp, net::deferred);
```

Everything else stays pretty much the same.

### Transactions

To read responses to transactions we must first observe that Redis
will queue the transaction commands and send their individual
responses as elements of an array, the array is itself the response to
the `EXEC` command.  For example, to read the response to this request

```cpp
req.push("MULTI");
req.push("GET", "key1");
req.push("LRANGE", "key2", 0, -1);
req.push("HGETALL", "key3");
req.push("EXEC");
```

use the following response type

```cpp
using boost::redis::ignore;

using exec_resp_type = 
   response<
      std::optional<std::string>, // get
      std::optional<std::vector<std::string>>, // lrange
      std::optional<std::map<std::string, std::string>> // hgetall
   >;

response<
   boost::redis::ignore_t,  // multi
   boost::redis::ignore_t,  // get
   boost::redis::ignore_t,  // lrange
   boost::redis::ignore_t,  // hgetall
   exec_resp_type,        // exec
> resp;

co_await conn->async_exec(req, resp, net::deferred);
```

For a complete example see cpp20_containers.cpp.

<a name="the-general-case"></a>

### The general case

There are cases where responses to Redis
commands won't fit in the model presented above, some examples are

* Commands (like `set`) whose responses don't have a fixed
  RESP3 type. Expecting an `int` and receiving a blob-string
  will result in error.
* RESP3 aggregates that contain nested aggregates can't be read in STL\
 containers.
* Transactions with a dynamic number of commands can't be read in a\
 `response`.

To deal with these cases Boost.Redis provides the `boost::redis::resp3::node`\
 type
abstraction, that is the most general form of an element in a
response, be it a simple RESP3 type or the element of an aggregate. It
is defined like this

```cpp
template <class String>
struct basic_node {
   // The RESP3 type of the data in this node.
   type data_type;

   // The number of elements of an aggregate (or 1 for simple data).
   std::size_t aggregate_size;

   // The depth of this node in the response tree.
   std::size_t depth;

   // The actual data. For aggregate types this is always empty.
   String value;
};
```

Any response to a Redis command can be received in a
`boost::redis::generic_response`.  The vector can be seen as a
pre-order view of the response tree.  Using it is not different than
using other types

```cpp
// Receives any RESP3 simple or aggregate data type.
boost::redis::generic_response resp;
co_await conn->async_exec(req, resp, net::deferred);
```

For example, suppose we want to retrieve a hash data structure
from Redis with `HGETALL`, some of the options are

* `boost::redis::generic_response`: Works always.
* `std::vector<std::string>`: Efficient and flat, all elements as string.
* `std::map<std::string, std::string>`: Efficient if you need the data as a\
 `std::map`.
* `std::map<U, V>`: Efficient if you are storing serialized data. Avoids\
 temporaries and requires `boost_redis_from_bulk` for `U` and `V`.

In addition to the above users can also use unordered versions of the
containers. The same reasoning applies to sets e.g. `SMEMBERS`
and other data structures in general.

<a name="serialization"></a>
## Serialization

Boost.Redis supports serialization of user defined types by means of
the following customization points

```cpp

// Serialize.
void boost_redis_to_bulk(std::string& to, mystruct const& obj);

// Deserialize
void boost_redis_from_bulk(mystruct& obj, char const* p, std::size_t size,\
 boost::system::error_code& ec)
```

These functions are accessed over ADL and therefore they must be
imported in the global namespace by the user.  In the
[Examples](#examples) section the reader can find examples showing how
to serialize using json and [protobuf](https://protobuf.dev/).

<a name="examples"></a>
## Examples

The examples below show how to use the features discussed so far

* cpp20_intro.cpp: Does not use awaitable operators.
* cpp20_intro_tls.cpp: Communicates over TLS.
* cpp20_containers.cpp: Shows how to send and receive STL containers and how\
 to use transactions.
* cpp20_json.cpp: Shows how to serialize types using Boost.Json.
* cpp20_protobuf.cpp: Shows how to serialize types using protobuf.
* cpp20_resolve_with_sentinel.cpp: Shows how to resolve a master address\
 using sentinels.
* cpp20_subscriber.cpp: Shows how to implement pubsub with reconnection\
 re-subscription.
* cpp20_echo_server.cpp: A simple TCP echo server.
* cpp20_chat_room.cpp: A command line chat built on Redis pubsub.
* cpp17_intro.cpp: Uses callbacks and requires C++17.
* cpp17_intro_sync.cpp: Runs `async_run` in a separate thread and performs\
 synchronous calls to `async_exec`.

The main function used in some async examples has been factored out in
the main.cpp file.

## Echo server benchmark

This document benchmarks the performance of TCP echo servers I
implemented in different languages using different Redis clients.  The
main motivations for choosing an echo server are

   * Simple to implement and does not require expertise level in most\
 languages.
   * I/O bound: Echo servers have very low CPU consumption in general
     and  therefore are excelent to  measure how a program handles concurrent\
 requests.
   * It simulates very well a typical backend in regard to concurrency.

I also imposed some constraints on the implementations

   * It should be simple enough and not require writing too much code.
   * Favor the use standard idioms and avoid optimizations that require\
 expert level.
   * Avoid the use of complex things like connection and thread pool.

To reproduce these results run one of the echo-server programs in one
terminal and the
[echo-server-client](https://github.com/boostorg/redis/blob/42880e788bec6020d\
d018194075a211ad9f339e8/benchmarks/cpp/asio/echo_server_client.cpp)
in another.

### Without Redis

First I tested a pure TCP echo server, i.e. one that sends the messages
directly to the client without interacting with Redis. The result can
be seen below

![](https://boostorg.github.io/redis/tcp-echo-direct.png)

The tests were performed with a 1000 concurrent TCP connections on the
localhost where latency is 0.07ms on average on my machine. On higher
latency networks the difference among libraries is expected to
decrease. 

   * I expected Libuv to have similar performance to Asio and Tokio.
   * I did expect nodejs to come a little behind given it is is
     javascript code. Otherwise I did expect it to have similar
     performance to libuv since it is the framework behind it.
   * Go did surprise me: faster than nodejs and libuv!

The code used in the benchmarks can be found at

   * [Asio](https://github.com/boostorg/redis/blob/3fb018ccc6138d310ac8b73540\
391cdd8f2fdad6/benchmarks/cpp/asio/echo_server_direct.cpp): A variation of\
 [this](https://github.com/chriskohlhoff/asio/blob/4915cfd8a1653c157a1480162a\
e5601318553eb8/asio/src/examples/cpp20/coroutines/echo_server.cpp) Asio\
 example.
   * [Libuv](https://github.com/boostorg/redis/tree/835a1decf477b09317f391edd\
d0727213cdbe12b/benchmarks/c/libuv): Taken from [here](https://github.com/lib\
uv/libuv/blob/06948c6ee502862524f233af4e2c3e4ca876f5f6/docs/code/tcp-echo-ser\
ver/main.c) Libuv example .
   * [Tokio](https://github.com/boostorg/redis/tree/3fb018ccc6138d310ac8b7354\
0391cdd8f2fdad6/benchmarks/rust/echo_server_direct): Taken from\
 [here](https://docs.rs/tokio/latest/tokio/).
   * [Nodejs](https://github.com/boostorg/redis/tree/3fb018ccc6138d310ac8b735\
40391cdd8f2fdad6/benchmarks/nodejs/echo_server_direct)
   * [Go](https://github.com/boostorg/redis/blob/3fb018ccc6138d310ac8b7354039\
1cdd8f2fdad6/benchmarks/go/echo_server_direct.go)

### With Redis

This is similar to the echo server described above but messages are
echoed by Redis and not by the echo-server itself, which acts
as a proxy between the client and the Redis server. The results
can be seen below

![](https://boostorg.github.io/redis/tcp-echo-over-redis.png)

The tests were performed on a network where latency is 35ms on
average, otherwise it uses the same number of TCP connections
as the previous example.

As the reader can see, the Libuv and the Rust test are not depicted
in the graph, the reasons are

   * [redis-rs](https://github.com/redis-rs/redis-rs): This client
     comes so far behind that it can't even be represented together
     with the other benchmarks without making them look insignificant.
     I don't know for sure why it is so slow, I suppose it has
     something to do with its lack of automatic
     [pipelining](https://redis.io/docs/manual/pipelining/) support.
     In fact, the more TCP connections I lauch the worse its
     performance gets.

   * Libuv: I left it out because it would require me writing to much
     c code. More specifically, I would have to use hiredis and
     implement support for pipelines manually.

The code used in the benchmarks can be found at

   * [Boost.Redis](https://github.com/boostorg/redis): [code](https://github.\
com/boostorg/redis/blob/3fb018ccc6138d310ac8b73540391cdd8f2fdad6/examples/ech\
o_server.cpp)
   * [node-redis](https://github.com/redis/node-redis): [code](https://github\
.com/boostorg/redis/tree/3fb018ccc6138d310ac8b73540391cdd8f2fdad6/benchmarks/\
nodejs/echo_server_over_redis)
   * [go-redis](https://github.com/go-redis/redis): [code](https://github.com\
/boostorg/redis/blob/3fb018ccc6138d310ac8b73540391cdd8f2fdad6/benchmarks/go/e\
cho_server_over_redis.go)

### Conclusion

Redis clients have to support automatic pipelining to have competitive\
 performance. For updates to this document follow https://github.com/boostorg\
/redis.

## Comparison

The main reason for why I started writing Boost.Redis was to have a client
compatible with the Asio asynchronous model. As I made progresses I could
also address what I considered weaknesses in other libraries.  Due to
time constraints I won't be able to give a detailed comparison with
each client listed in the
[official](https://redis.io/docs/clients/#cpp) list,
instead I will focus on the most popular C++ client on github in number of
stars, namely

* https://github.com/sewenew/redis-plus-plus

### Boost.Redis vs Redis-plus-plus

Before we start it is important to mention some of the things
redis-plus-plus does not support

* The latest version of the communication protocol RESP3. Without that it is\
 impossible to support some important Redis features like client side\
 caching, among other things.
* Coroutines.
* Reading responses directly in user data structures to avoid creating\
 temporaries.
* Error handling with support for error-code.
* Cancellation.

The remaining points will be addressed individually.  Let us first
have a look at what sending a command a pipeline and a transaction
look like

```cpp
auto redis = Redis("tcp://127.0.0.1:6379");

// Send commands
redis.set("key", "val");
auto val = redis.get("key"); // val is of type OptionalString.
if (val)
    std::cout << *val << std::endl;

// Sending pipelines
auto pipe = redis.pipeline();
auto pipe_replies = pipe.set("key", "value")
                        .get("key")
                        .rename("key", "new-key")
                        .rpush("list", {"a", "b", "c"})
                        .lrange("list", 0, -1)
                        .exec();

// Parse reply with reply type and index.
auto set_cmd_result = pipe_replies.get<bool>(0);
// ...

// Sending a transaction
auto tx = redis.transaction();
auto tx_replies = tx.incr("num0")
                    .incr("num1")
                    .mget({"num0", "num1"})
                    .exec();

auto incr_result0 = tx_replies.get<long long>(0);
// ...
```

Some of the problems with this API are

* Heterogeneous treatment of commands, pipelines and transaction. This makes\
 auto-pipelining impossible.
* Any Api that sends individual commands has a very restricted scope of\
 usability and should be avoided for performance reasons.
* The API imposes exceptions on users, no error-code overload is provided.
* No way to reuse the buffer for new calls to e.g. redis.get in order to\
 avoid further dynamic memory allocations.
* Error handling of resolve and connection not clear.

According to the documentation, pipelines in redis-plus-plus have
the following characteristics

> NOTE: By default, creating a Pipeline object is NOT cheap, since
> it creates a new connection.

This is clearly a downside in the API as pipelines should be the
default way of communicating and not an exception, paying such a
high price for each pipeline imposes a severe cost in performance.
Transactions also suffer from the very same problem.

> NOTE: Creating a Transaction object is NOT cheap, since it
> creates a new connection.

In Boost.Redis there is no difference between sending one command, a
pipeline or a transaction because requests are decoupled
from the IO objects.

> redis-plus-plus also supports async interface, however, async
> support for Transaction and Subscriber is still on the way.
> 
> The async interface depends on third-party event library, and so
> far, only libuv is supported.

Async code in redis-plus-plus looks like the following

```cpp
auto async_redis = AsyncRedis(opts, pool_opts);

Future<string> ping_res = async_redis.ping();

cout << ping_res.get() << endl;
```
As the reader can see, the async interface is based on futures
which is also known to have a bad performance.  The biggest
problem however with this async design is that it makes it
impossible to write asynchronous programs correctly since it
starts an async operation on every command sent instead of
enqueueing a message and triggering a write when it can be sent.
It is also not clear how are pipelines realised with this design
(if at all).

<a name="api-reference"></a>
## Reference

The [High-Level](#high-level-api) page documents all public types.

## Acknowledgement

Acknowledgement to people that helped shape Boost.Redis

* Richard Hodges ([madmongo1](https://github.com/madmongo1)): For very\
 helpful support with Asio, the design of asynchronous programs, etc.
* Vinícius dos Santos Oliveira ([vinipsmaker](https://github.com/vinipsmaker)\
): For useful discussion about how Boost.Redis consumes buffers in the read\
 operation.
* Petr Dannhofer ([Eddie-cz](https://github.com/Eddie-cz)): For helping me\
 understand how the `AUTH` and `HELLO` command can influence each other.
* Mohammad Nejati ([ashtum](https://github.com/ashtum)): For pointing out\
 scenarios where calls to `async_exec` should fail when the connection is\
 lost.
* Klemens Morgenstern ([klemens-morgenstern](https://github.com/klemens-morge\
nstern)): For useful discussion about timeouts, cancellation, synchronous\
 interfaces and general help with Asio.
* Vinnie Falco ([vinniefalco](https://github.com/vinniefalco)): For general\
 suggestions about how to improve the code and the documentation.
* Bram Veldhoen ([bveldhoen](https://github.com/bveldhoen)): For contributing\
 a Redis-streams example.

Also many thanks to all individuals that participated in the Boost
review

* Zach Laine: https://lists.boost.org/Archives/boost/2023/01/253883.php
* Vinnie Falco: https://lists.boost.org/Archives/boost/2023/01/253886.php
* Christian Mazakas: https://lists.boost.org/Archives/boost/2023/01/253900.php
* Ruben Perez: https://lists.boost.org/Archives/boost/2023/01/253915.php
* Dmitry Arkhipov: https://lists.boost.org/Archives/boost/2023/01/253925.php
* Alan de Freitas: https://lists.boost.org/Archives/boost/2023/01/253927.php
* Mohammad Nejati: https://lists.boost.org/Archives/boost/2023/01/253929.php
* Sam Hartsfield: https://lists.boost.org/Archives/boost/2023/01/253931.php
* Miguel Portilla: https://lists.boost.org/Archives/boost/2023/01/253935.php
* Robert A.H. Leahy: https://lists.boost.org/Archives/boost/2023/01/253928.php

The Reviews can be found at:
https://lists.boost.org/Archives/boost/2023/01/date.php. The thread
with the ACCEPT from the review manager can be found here:
https://lists.boost.org/Archives/boost/2023/01/253944.php.

## Changelog

### Boost 1.87

* (Issue [205](https://github.com/boostorg/redis/issues/205))
  Improves reaction time to disconnection by using `wait_for_one_error`
  instead of `wait_for_all`. The function `connection::async_run` was
  also changed to return EOF to the user when that error is received
  from the server. That is a breaking change.

* (Issue [210](https://github.com/boostorg/redis/issues/210))
  Fixes the adapter of empty nested reposponses.

* (Issues [211](https://github.com/boostorg/redis/issues/211) and\
 [212](https://github.com/boostorg/redis/issues/212))
  Fixes the reconnect loop that would hang under certain conditions,
  see the linked issues for more details.

* (Issue [219](https://github.com/boostorg/redis/issues/219))
  Changes the default log level from `disabled` to `debug`.

### Boost 1.85

* (Issue [170](https://github.com/boostorg/redis/issues/170))
  Under load and on low-latency networks it is possible to start
  receiving responses before the write operation completed and while
  the request is still marked as staged and not written. This messes
  up with the heuristics that classifies responses as unsolicied or
  not.

* (Issue [168](https://github.com/boostorg/redis/issues/168)).
  Provides a way of passing a custom SSL context to the connection.
  The design here differs from that of Boost.Beast and Boost.MySql
  since in Boost.Redis the connection owns the context instead of only
  storing a reference to a user provided one. This is ok so because
  apps need only one connection for their entire application, which
  makes the overhead of one ssl-context per connection negligible.

* (Issue [181](https://github.com/boostorg/redis/issues/181)).
  See a detailed description of this bug in
  [this](https://github.com/boostorg/redis/issues/181#issuecomment-1913346983)
  comment.

* (Issue [182](https://github.com/boostorg/redis/issues/182)).
  Sets `"default"` as the default value of `config::username`. This
  makes it simpler to use the `requirepass` configuration in Redis.

* (Issue [189](https://github.com/boostorg/redis/issues/189)).
  Fixes narrowing convertion by using `std::size_t` instead of
  `std::uint64_t` for the sizes of bulks and aggregates. The code
  relies now on `std::from_chars` returning an error if a value
  greater than 32 is received on platforms on which the size
  of`std::size_t` is 32.


### Boost 1.84 (First release in Boost)

* Deprecates the `async_receive` overload that takes a response. Users
  should now first call `set_receive_response` to avoid constantly and
  unnecessarily setting the same response.

* Uses `std::function` to type erase the response adapter. This change
  should not influence users in any way but allowed important
  simplification in the connections internals. This resulted in
  massive performance improvement.

* The connection has a new member `get_usage()` that returns the
  connection usage information, such as number of bytes written,
  received etc.

* There are massive performance improvements in the consuming of
  server pushes which are now communicated with an `asio::channel` and
  therefore can be buffered which avoids blocking the socket read-loop.
  Batch reads are also supported by means of `channel.try_send` and
  buffered messages can be consumed synchronously with
  `connection::receive`. The function `boost::redis::cancel_one` has
  been added to simplify processing multiple server pushes contained
  in the same `generic_response`.  *IMPORTANT*: These changes may
  result in more than one push in the response when
  `connection::async_receive` resumes. The user must therefore be
  careful when calling `resp.clear()`: either ensure that all message
  have been processed or just use `consume_one`.

### v1.4.2 (incorporates changes to conform the boost review and more)

* Adds `boost::redis::config::database_index` to make it possible to
  choose a database before starting running commands e.g. after an
  automatic reconnection.

* Massive performance improvement. One of my tests went from
  140k req/s to 390k/s. This was possible after a parser
  simplification that reduced the number of reschedules and buffer
  rotations.

* Adds Redis stream example.

* Renames the project to Boost.Redis and moves the code into namespace
  `boost::redis`.

* As pointed out in the reviews the `to_bulk` and `from_bulk` names were too
  generic for ADL customization points. They gained the prefix `boost_redis_`.

* Moves `boost::redis::resp3::request` to `boost::redis::request`.

* Adds new typedef `boost::redis::response` that should be used instead of
  `std::tuple`.

* Adds new typedef `boost::redis::generic_response` that should be used\
 instead
  of `std::vector<resp3::node<std::string>>`.

* Renames `redis::ignore` to `redis::ignore_t`.

* Changes `async_exec` to receive a `redis::response` instead of an adapter,
  namely, instead of passing `adapt(resp)` users should pass `resp` directly.

* Introduces `boost::redis::adapter::result` to store responses to commands
  including possible resp3 errors without losing the error diagnostic part. To
  access values now use `std::get<N>(resp).value()` instead of
  `std::get<N>(resp)`.

* Implements full-duplex communication. Before these changes the connection
  would wait for a response to arrive before sending the next one. Now\
 requests
  are continuously coalesced and written to the socket. `request::coalesce`
  became unnecessary and was removed. I could measure significative\
 performance
  gains with theses changes.

* Improves serialization examples using Boost.Describe to serialize to JSON\
 and protobuf. See
  cpp20_json.cpp and cpp20_protobuf.cpp for more details.

* Upgrades to Boost 1.81.0.

* Fixes build with libc++.

* Adds high-level functionality to the connection classes. For
  example, `boost::redis::connection::async_run` will automatically
  resolve, connect, reconnect and perform health checks.

### v1.4.0-1

* Renames `retry_on_connection_lost` to `cancel_if_unresponded`.  (v1.4.1)
* Removes dependency on Boost.Hana, `boost::string_view`, Boost.Variant2 and\
 Boost.Spirit.
* Fixes build and setup CI on windows.

### v1.3.0-1

* Upgrades to Boost 1.80.0

* Removes automatic sending of the `HELLO` command. This can't be
  implemented properly without bloating the connection class. It is
  now a user responsibility to send HELLO. Requests that contain it have
  priority over other requests and will be moved to the front of the
  queue, see `aedis::request::config` 

* Automatic name resolving and connecting have been removed from
  `aedis::connection::async_run`. Users have to do this step manually
  now. The reason for this change is that having them built-in doesn't
  offer enough flexibility that is need for boost users.

* Removes healthy checks and idle timeout. This functionality must now
  be implemented by users, see the examples. This is
  part of making Aedis useful to a larger audience and suitable for
  the Boost review process.

* The `aedis::connection` is now using a typeddef to a
  `net::ip::tcp::socket` and  `aedis::ssl::connection` to
  `net::ssl::stream<net::ip::tcp::socket>`.  Users that need to use
  other stream type must now specialize `aedis::basic_connection`.

* Adds a low level example of async code.

### v1.2.0

* `aedis::adapt` supports now tuples created with `std::tie`.
  `aedis::ignore` is now an alias to the type of `std::ignore`.

* Provides allocator support for the internal queue used in the
  `aedis::connection` class.

* Changes the behaviour of `async_run` to complete with success if
  asio::error::eof is received. This makes it easier to  write
  composed operations with awaitable operators.

* Adds allocator support in the `aedis::request` (a
  contribution from Klemens Morgenstern).

* Renames `aedis::request::push_range2` to `push_range`. The
  suffix 2 was used for disambiguation. Klemens fixed it with SFINAE.

* Renames `fail_on_connection_lost` to
  `aedis::request::config::cancel_on_connection_lost`. Now, it will
  only cause connections to be canceled when `async_run` completes.

* Introduces `aedis::request::config::cancel_if_not_connected` which will
  cause a request to be canceled if `async_exec` is called before a
  connection has been established.

* Introduces new request flag `aedis::request::config::retry` that if
  set to true will cause the request to not be canceled when it was
  sent to Redis but remained unresponded after `async_run` completed.
  It provides a way to avoid executing commands twice.

* Removes the `aedis::connection::async_run` overload that takes
  request and adapter as parameters.

* Changes the way `aedis::adapt()` behaves with
  `std::vector<aedis::resp3::node<T>>`. Receiving RESP3 simple errors,
  blob errors or null won't causes an error but will be treated as
  normal response.  It is the user responsibility to check the content
  in the vector.

* Fixes a bug in `connection::cancel(operation::exec)`. Now this
  call will only cancel non-written requests.

* Implements per-operation implicit cancellation support for
  `aedis::connection::async_exec`. The following call will `co_await\
 (conn.async_exec(...) || timer.async_wait(...))`
  will cancel the request as long as it has not been written.

* Changes `aedis::connection::async_run` completion signature to
  `f(error_code)`. This is how is was in the past, the second
  parameter was not helpful.

* Renames `operation::receive_push` to `aedis::operation::receive`.

### v1.1.0-1

* Removes `coalesce_requests` from the `aedis::connection::config`, it
  became a request property now, see `aedis::request::config::coalesce`.

* Removes `max_read_size` from the `aedis::connection::config`. The maximum
  read size can be specified now as a parameter of the
  `aedis::adapt()` function.

* Removes `aedis::sync` class, see intro_sync.cpp for how to perform
  synchronous and thread safe calls. This is possible in Boost. 1.80
  only as it requires `boost::asio::deferred`. 

* Moves from `boost::optional` to `std::optional`. This is part of
  moving to C++17.

* Changes the behaviour of the second `aedis::connection::async_run` overload
  so that it always returns an error when the connection is lost.

* Adds TLS support, see intro_tls.cpp.

* Adds an example that shows how to resolve addresses over sentinels,
  see subscriber_sentinel.cpp.

* Adds a `aedis::connection::timeouts::resp3_handshake_timeout`. This is
  timeout used to send the `HELLO` command.

* Adds `aedis::endpoint` where in addition to host and port, users can
  optionally provide username, password and the expected server role
  (see `aedis::error::unexpected_server_role`).

* `aedis::connection::async_run` checks whether the server role received in
  the hello command is equal to the expected server role specified in
  `aedis::endpoint`. To skip this check let the role variable empty.

* Removes reconnect functionality from `aedis::connection`. It
  is possible in simple reconnection strategies but bloats the class
  in more complex scenarios, for example, with sentinel,
  authentication and TLS. This is trivial to implement in a separate
  coroutine. As a result the `enum event` and `async_receive_event`
  have been removed from the class too.

* Fixes a bug in `connection::async_receive_push` that prevented
  passing any response adapter other that `adapt(std::vector<node>)`.

* Changes the behaviour of `aedis::adapt()` that caused RESP3 errors
  to be ignored. One consequence of it is that `connection::async_run`
  would not exit with failure in servers that required authentication.

* Changes the behaviour of `connection::async_run` that would cause it
  to complete with success when an error in the
  `connection::async_exec` occurred.

* Ports the buildsystem from autotools to CMake.

### v1.0.0

* Adds experimental cmake support for windows users.

* Adds new class `aedis::sync` that wraps an `aedis::connection` in
  a thread-safe and synchronous API.  All free functions from the
  `sync.hpp` are now member functions of `aedis::sync`.

* Split `aedis::connection::async_receive_event` in two functions, one
  to receive events and another for server side pushes, see
  `aedis::connection::async_receive_push`.

* Removes collision between `aedis::adapter::adapt` and
  `aedis::adapt`.

* Adds `connection::operation` enum to replace `cancel_*` member
  functions with a single cancel function that gets the operations
  that should be cancelled as argument.

* Bugfix: a bug on reconnect from a state where the `connection` object
  had unsent commands. It could cause `async_exec` to never
  complete under certain conditions.

* Bugfix: Documentation of `adapt()` functions were missing from
  Doxygen.

### v0.3.0

* Adds `experimental::exec` and `receive_event` functions to offer a
  thread safe and synchronous way of executing requests across
  threads. See `intro_sync.cpp` and `subscriber_sync.cpp` for
  examples.

* `connection::async_read_push` was renamed to `async_receive_event`.

* `connection::async_receive_event` is now being used to communicate
  internal events to the user, such as resolve, connect, push etc. For
  examples see cpp20_subscriber.cpp and `connection::event`.

* The `aedis` directory has been moved to `include` to look more
  similar to Boost libraries. Users should now replace `-I/aedis-path`
  with `-I/aedis-path/include` in the compiler flags.

* The `AUTH` and `HELLO` commands are now sent automatically. This change was
  necessary to implement reconnection. The username and password
  used in `AUTH` should be provided by the user on
  `connection::config`.

* Adds support for reconnection. See `connection::enable_reconnect`.

* Fixes a bug in the `connection::async_run(host, port)` overload
  that was causing crashes on reconnection.

* Fixes the executor usage in the connection class. Before theses
  changes it was imposing `any_io_executor` on users.

* `connection::async_receiver_event` is not cancelled anymore when
  `connection::async_run` exits. This change makes user code simpler.

* `connection::async_exec` with host and port overload has been
  removed. Use the other `connection::async_run` overload.

* The host and port parameters from `connection::async_run` have been
  move to `connection::config` to better support authentication and
  failover.

* Many simplifications in the `chat_room` example.

* Fixes build in clang the compilers and makes some improvements in
  the documentation.

### v0.2.0-1

* Fixes a bug that happens on very high load. (v0.2.1) 
* Major rewrite of the high-level API. There is no more need to use the\
 low-level API anymore.
* No more callbacks: Sending requests follows the ASIO asynchronous model.
* Support for reconnection: Pending requests are not canceled when a\
 connection is lost and are re-sent when a new one is established.
* The library is not sending HELLO-3 on user behalf anymore. This is\
 important to support AUTH properly.

### v0.1.0-2

* Adds reconnect coroutine in the `echo_server` example. (v0.1.2)
* Corrects `client::async_wait_for_data` with `make_parallel_group` to launch\
 operation. (v0.1.2)
* Improvements in the documentation. (v0.1.2)
* Avoids dynamic memory allocation in the client class after reconnection.\
 (v0.1.2)
* Improves the documentation and adds some features to the high-level client.\
 (v.0.1.1)
* Improvements in the design and documentation.

### v0.0.1

* First release to collect design feedback.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/redis
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/redis
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libssl >= 1.1.1
depends: libcrypto >= 1.1.1
depends: libboost-asio == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-redis

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-redis-1.87.0.tar.gz
sha256sum: 7565ab989f1f68267df646e8f7087a1c386b090d17267717d905d7ef8ad3e696
:
name: libboost-regex
version: 1.83.0
type: lib,binless
language: c++
language: c
project: boost
summary: Regular expression library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Regex Library
============================

The Boost Regex library provides regular expression support for C++, this\
 library is the ancestor to std::regex and still goes beyond
and offers some advantages to, the standard version.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/regex/index.html).

## Standalone Mode ##

 This library may now be used in "standalone" mode without the rest of the\
 Boost C++ libraries, in order to do this you must either:

* Have a C++17 compiler that supports __has_include, in this case if\
 <boost/config.hpp> is not present then the library will automoatically enter\
 standalone mode. Or:
* Define BOOST_REGEX_STANDALONE when building.

The main difference between the 2 modes, is that when Boost.Config is present\
 the library will automatically configure itself around various compiler\
 defects. In particular in order to use the library with exception support\
 turned off, you will either need a copy of Boost.Config in your include\
 path, or else manually define BOOST_NO_EXCEPTIONS when building.

In any event, to obtain a standalone version of this library, simply download\
 a .zip of the "master" branch of this repository.

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/regex/issues)
(see [open issues](https://github.com/boostorg/regex/issues) and
[closed issues](https://github.com/boostorg/regex/issues?utf8=%E2%9C%93&q=is%\
3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/regex/pulls).

There is no mailing-list specific to Boost Regex, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [regex].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Regex Library is located in `libs/regex/`. 

### Running tests ###
First, make sure you are in `libs/regex/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 regex_regress          <- single test


\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-regex

The `build2` package of `libboost-regex` supports the following configuration
variables:


### `config.libboost_regex.icu`

Enable ICU support. Default is `false`. Note that enabling this support will
cause the package to depend on `libicuuc` and `libicui18n`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/regex
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/regex
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libicuuc ^65.1.0 ? ($config.libboost_regex.icu)
depends: libicui18n ^65.1.0 ? ($config.libboost_regex.icu)
depends: libboost-assert == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
icu-build-config: config.libboost_regex.icu=true
bootstrap-build:
\
project = libboost-regex

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_regex.icu ?= false

\
location: boost/libboost-regex-1.83.0.tar.gz
sha256sum: ef08cd0b06923a78cd980be1b16be4b5645b6f5bd3c17895f72b16f89be5f676
:
name: libboost-regex
version: 1.85.0
type: lib,binless
language: c++
language: c
project: boost
summary: Regular expression library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Regex Library
============================

The Boost Regex library provides regular expression support for C++, this\
 library is the ancestor to std::regex and still goes beyond
and offers some advantages to, the standard version.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/regex/index.html).

## Standalone Mode ##

 This library may now be used in "standalone" mode without the rest of the\
 Boost C++ libraries, in order to do this you must either:

* Have a C++17 compiler that supports __has_include, in this case if\
 <boost/config.hpp> is not present then the library will automoatically enter\
 standalone mode. Or:
* Define BOOST_REGEX_STANDALONE when building.

The main difference between the 2 modes, is that when Boost.Config is present\
 the library will automatically configure itself around various compiler\
 defects. In particular in order to use the library with exception support\
 turned off, you will either need a copy of Boost.Config in your include\
 path, or else manually define BOOST_NO_EXCEPTIONS when building.

In any event, to obtain a standalone version of this library, simply download\
 a .zip of the "master" branch of this repository.

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/regex/issues)
(see [open issues](https://github.com/boostorg/regex/issues) and
[closed issues](https://github.com/boostorg/regex/issues?utf8=%E2%9C%93&q=is%\
3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/regex/pulls).

There is no mailing-list specific to Boost Regex, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [regex].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Regex Library is located in `libs/regex/`. 

### Running tests ###
First, make sure you are in `libs/regex/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 regex_regress          <- single test


\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-regex

The `build2` package of `libboost-regex` supports the following configuration
variables:


### `config.libboost_regex.icu`

Enable ICU support. Default is `false`. Note that enabling this support will
cause the package to depend on `libicuuc` and `libicui18n`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/regex
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/regex
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libicuuc ^65.1.0 ? ($config.libboost_regex.icu)
depends: libicui18n ^65.1.0 ? ($config.libboost_regex.icu)
depends: libboost-assert == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
icu-build-config: config.libboost_regex.icu=true
bootstrap-build:
\
project = libboost-regex

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_regex.icu ?= false

\
location: boost/libboost-regex-1.85.0.tar.gz
sha256sum: 6c6d2c8d278b1f7b5e5a1f92eebfbb31cb5e49b129dfbb6b89214124592cbbd7
:
name: libboost-regex
version: 1.87.0
type: lib,binless
language: c++
language: c
project: boost
summary: Regular expression library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost Regex Library
============================

The Boost Regex library provides regular expression support for C++, this\
 library is the ancestor to std::regex and still goes beyond
and offers some advantages to, the standard version.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/regex/index.html).

## Standalone Mode ##

 This library may now be used in "standalone" mode without the rest of the\
 Boost C++ libraries, in order to do this you must either:

* Have a C++17 compiler that supports __has_include, in this case if\
 <boost/config.hpp> is not present then the library will automoatically enter\
 standalone mode. Or:
* Define BOOST_REGEX_STANDALONE when building.

The main difference between the 2 modes, is that when Boost.Config is present\
 the library will automatically configure itself around various compiler\
 defects. In particular in order to use the library with exception support\
 turned off, you will either need a copy of Boost.Config in your include\
 path, or else manually define BOOST_NO_EXCEPTIONS when building.

In any event, to obtain a standalone version of this library, simply download\
 a .zip of the "master" branch of this repository.

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/regex/issues)
(see [open issues](https://github.com/boostorg/regex/issues) and
[closed issues](https://github.com/boostorg/regex/issues?utf8=%E2%9C%93&q=is%\
3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/regex/pulls).

There is no mailing-list specific to Boost Regex, although you can use the\
 general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo\
.cgi/boost-users) using the tag [regex].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost Regex Library is located in `libs/regex/`. 

### Running tests ###
First, make sure you are in `libs/regex/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 regex_regress          <- single test


\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-regex

The `build2` package of `libboost-regex` supports the following configuration
variables:


### `config.libboost_regex.icu`

Enable ICU support. Default is `false`. Note that enabling this support will
cause the package to depend on `libicuuc` and `libicui18n`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/regex
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/regex
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libicuuc ^65.1.0 ? ($config.libboost_regex.icu)
depends: libicui18n ^65.1.0 ? ($config.libboost_regex.icu)
depends: libboost-assert == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
icu-build-config: config.libboost_regex.icu=true
bootstrap-build:
\
project = libboost-regex

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cc.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_regex.icu ?= false

\
location: boost/libboost-regex-1.87.0.tar.gz
sha256sum: 9d500f7a34d78301ca4457904d9958a7c20fd3a7db07c0c2720d0062905e7f7f
:
name: libboost-safe-numerics
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Guaranteed Correct Integer Arithmetic
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
safe_numerics
=============

Arithmetic operations in C++ are NOT guaranteed to yield a correct\
 mathematical result. This feature is inherited from the early days of C. The\
 behavior of int, unsigned int and others were designed to map closely to the\
 underlying hardware. Computer hardware implements these types as a fixed\
 number of bits. When the result of arithmetic operations exceeds this number\
 of bits, the result is undefined and usually not what the programmer\
 intended. It is incumbent upon the C++ programmer to guarantee that this\
 behavior does not result in incorrect behavior of the program. This library\
 implements special versions of these data types which behave exactly like\
 the original ones EXCEPT that the results of these operations are checked to\
 be sure that an exception will be thrown anytime an attempt is made to store\
 the result of an undefined operation.

Note: This is the subject of a various presentations at CPPCon.  

The first one is a short version which gives the main motivation for the\
 library with a rowsing sales pitch.  Fun and suitable for upper management.\
 https://www.youtube.com/watch?v=cw_8QkFXZjI&t=1s

The second is more extensive in that it addresses a real world case study\
 which touches on most of the important aspects of the libary. \
 https://www.youtube.com/watch?v=93Cjg42bGEw .

Finally, for those who still enjoy the written word there is the\
 documentation in which significant effort has been invested.\
 http://htmlpreview.github.io/?https://github.com/robertramey/safe_numerics/m\
aster/doc/html/index.html

If you use this libary and find it useful, please add a star.  I need\
 motivation!!!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/safe_numerics
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/safe_numerics
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-logic == 1.83.0
depends: libboost-mp11 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-safe-numerics

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-safe-numerics-1.83.0.tar.gz
sha256sum: f018cd34d0d1c2025dded4b7ac847205d46e95241eef501172e4be6e0846a6c7
:
name: libboost-safe-numerics
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Guaranteed Correct Integer Arithmetic
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
safe_numerics
=============

Arithmetic operations in C++ are NOT guaranteed to yield a correct\
 mathematical result. This feature is inherited from the early days of C. The\
 behavior of int, unsigned int and others were designed to map closely to the\
 underlying hardware. Computer hardware implements these types as a fixed\
 number of bits. When the result of arithmetic operations exceeds this number\
 of bits, the result is undefined and usually not what the programmer\
 intended. It is incumbent upon the C++ programmer to guarantee that this\
 behavior does not result in incorrect behavior of the program. This library\
 implements special versions of these data types which behave exactly like\
 the original ones EXCEPT that the results of these operations are checked to\
 be sure that an exception will be thrown anytime an attempt is made to store\
 the result of an undefined operation.

Note: This is the subject of a various presentations at CPPCon.  

The first one is a short version which gives the main motivation for the\
 library with a rowsing sales pitch.  Fun and suitable for upper management.\
 https://www.youtube.com/watch?v=cw_8QkFXZjI&t=1s

The second is more extensive in that it addresses a real world case study\
 which touches on most of the important aspects of the libary. \
 https://www.youtube.com/watch?v=93Cjg42bGEw .

Finally, for those who still enjoy the written word there is the\
 documentation in which significant effort has been invested.\
 http://htmlpreview.github.io/?https://github.com/robertramey/safe_numerics/m\
aster/doc/html/index.html

If you use this libary and find it useful, please add a star.  I need\
 motivation!!!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/safe_numerics
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/safe_numerics
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-logic == 1.85.0
depends: libboost-mp11 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-safe-numerics

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-safe-numerics-1.85.0.tar.gz
sha256sum: 7462d34f46eb606f4f7d54b0dc1feb37db216f9f71931b898c343573bf5552e3
:
name: libboost-safe-numerics
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Guaranteed Correct Integer Arithmetic
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
safe_numerics
=============

Arithmetic operations in C++ are NOT guaranteed to yield a correct\
 mathematical result. This feature is inherited from the early days of C. The\
 behavior of int, unsigned int and others were designed to map closely to the\
 underlying hardware. Computer hardware implements these types as a fixed\
 number of bits. When the result of arithmetic operations exceeds this number\
 of bits, the result is undefined and usually not what the programmer\
 intended. It is incumbent upon the C++ programmer to guarantee that this\
 behavior does not result in incorrect behavior of the program. This library\
 implements special versions of these data types which behave exactly like\
 the original ones EXCEPT that the results of these operations are checked to\
 be sure that an exception will be thrown anytime an attempt is made to store\
 the result of an undefined operation.

Note: This is the subject of a various presentations at CPPCon.  

The first one is a short version which gives the main motivation for the\
 library with a rowsing sales pitch.  Fun and suitable for upper management.\
 https://www.youtube.com/watch?v=cw_8QkFXZjI&t=1s

The second is more extensive in that it addresses a real world case study\
 which touches on most of the important aspects of the libary. \
 https://www.youtube.com/watch?v=93Cjg42bGEw .

Finally, for those who still enjoy the written word there is the\
 documentation in which significant effort has been invested.\
 http://htmlpreview.github.io/?https://github.com/robertramey/safe_numerics/m\
aster/doc/html/index.html

If you use this libary and find it useful, please add a star.  I need\
 motivation!!!

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/safe_numerics
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/safe_numerics
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-logic == 1.87.0
depends: libboost-mp11 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-safe-numerics

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-safe-numerics-1.87.0.tar.gz
sha256sum: 94c2872abdfee2171ecf6778e9e0ceb0caa026e50a030299af3f03c0bb59f82e
:
name: libboost-scope
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A collection of scope guards and a unique_resource wrapper
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Scope

Boost.Scope provides a number of scope guard utilities and a\
 `unique_resource` wrapper, similar to those described in
[C++ Extensions for Library Fundamentals, Version 3](https://github.com/cplus\
plus/fundamentals-ts/releases/tag/n4908),
Section 3.3 Scope guard support \[scopeguard\]. The implementation also\
 provides a few non-standard extensions.

### Directories

* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Scope
* **test** - Boost.Scope unit tests

### More information

* Read the [documentation](https://boostorg.github.io/scope/libs/scope/doc/ht\
ml/index.html).
* [Report bugs](https://github.com/boostorg/scope/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/scope/co\
mpare) against **develop** branch. Note that by submitting patches you agree\
 to license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/scope
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/scope
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-scope

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-scope-1.85.0.tar.gz
sha256sum: 32bcb60f00aef030dd31d1db056af25ece6b36451b37530046d6e03d0c3d2a35
:
name: libboost-scope
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A collection of scope guards and a unique_resource wrapper
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Scope

Boost.Scope provides a number of scope guard utilities and a\
 `unique_resource` wrapper, similar to those described in
[C++ Extensions for Library Fundamentals, Version 3](https://github.com/cplus\
plus/fundamentals-ts/releases/tag/n4908),
Section 3.3 Scope guard support \[scopeguard\]. The implementation also\
 provides a few non-standard extensions.

### Directories

* **doc** - QuickBook documentation sources
* **include** - Interface headers of Boost.Scope
* **test** - Boost.Scope unit tests

### More information

* Read the [documentation](https://www.boost.org/libs/scope/).
* [Report bugs](https://github.com/boostorg/scope/issues/new). Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as [pull requests](https://github.com/boostorg/scope/co\
mpare) against **develop** branch. Note that by submitting patches you agree\
 to license your modifications under the [Boost Software License, Version\
 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions| Test Matrix | Dependencies |
:-------------: | --------------| ----------- | ------------ |
[`master`](https://github.com/boostorg/scope/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/scope/actions/workflows/ci.yml/badge.sv\
g?branch=master)](https://github.com/boostorg/scope/actions?query=branch%3Ama\
ster) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.svg)\
](https://www.boost.org/development/tests/master/developer/scope.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/scope.html)
[`develop`](https://github.com/boostorg/scope/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/scope/actions/workflows/ci.yml/badge.sv\
g?branch=develop)](https://github.com/boostorg/scope/actions?query=branch%3Ad\
evelop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgreen.s\
vg)](https://www.boost.org/development/tests/develop/developer/scope.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg)]\
(https://pdimov.github.io/boostdep-report/develop/scope.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/scope
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/scope
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-scope

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-scope-1.87.0.tar.gz
sha256sum: 13e24fe8821d7a03a2f3deb9ad45a164e9c1a4686b283a12b095036bab52477a
:
name: libboost-scope-exit
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Execute arbitrary code at scope exit
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/scope_exit
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/scope_exit
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-scope-exit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-scope-exit-1.83.0.tar.gz
sha256sum: 6a1c52b379de4bec90009918d7cc44d278efc1cb1b4df18722a31ad4880004e1
:
name: libboost-scope-exit
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Execute arbitrary code at scope exit
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/scope_exit
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/scope_exit
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-scope-exit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-scope-exit-1.85.0.tar.gz
sha256sum: 840e8308f0367bd5e0be77b9342a7e08814690d14361e9bf5b07a4a927976a4c
:
name: libboost-scope-exit
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Execute arbitrary code at scope exit
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/scope_exit
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/scope_exit
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-scope-exit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-scope-exit-1.87.0.tar.gz
sha256sum: 7bc14176d8d21f4a56ad14910a4a06e81c449b7a83b2ebc4cabf13eeca41b62c
:
name: libboost-serialization
version: 1.83.0
language: c++
project: boost
summary: Serialization for persistence and marshalling
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/serialization
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/serialization
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-function == 1.83.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends:
\
libboost-spirit == 1.83.0
{
  require
  {
    config.libboost_spirit.classic = true
  }
}
\
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-unordered == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-variant == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-serialization

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-serialization-1.83.0.tar.gz
sha256sum: 019b05b359914f87003b50d14ae9cc46b11d0c02b0eac9d75a2cc805e4759ee1
:
name: libboost-serialization
version: 1.85.0
language: c++
project: boost
summary: Serialization for persistence and marshalling
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/serialization
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/serialization
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-function == 1.85.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends:
\
libboost-spirit == 1.85.0
{
  require
  {
    config.libboost_spirit.classic = true
  }
}
\
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-variant == 1.85.0
depends: libboost-variant2 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-serialization

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-serialization-1.85.0.tar.gz
sha256sum: 610edeaaa7bf4fc1b3f0632cd1537fc2655a4ee8d41ae52c40d62225da4b9d6d
:
name: libboost-serialization
version: 1.87.0
language: c++
project: boost
summary: Serialization for persistence and marshalling
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/serialization
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/serialization
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-function == 1.87.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends:
\
libboost-spirit == 1.87.0
{
  require
  {
    config.libboost_spirit.classic = true
  }
}
\
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-variant == 1.87.0
depends: libboost-variant2 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-serialization

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-serialization-1.87.0.tar.gz
sha256sum: 187ea0802aca6a01e4391ae7ad44af8f22d804e00bc80ab7cc2cf261862fcd7e
:
name: libboost-signals2
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Managed signals summary: boost-signals2 C++ library slots callback\
 implementation (thread-safe version 2)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Signals2, part of collection of the [Boost C++ Libraries](http://github.com/b\
oostorg), is an implementation of a managed signals and slots system.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/signals2/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/signals2.svg?branch=master)](https://\
travis-ci.org/boostorg/signals2) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/vjbstowu1s13x4l5/branch/master?svg=true)](https://ci.appve\
yor.com/project/jeking3/signals2-db91c/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15884/badge.svg)](https://s\
can.coverity.com/projects/boostorg-signals2) | [![codecov](https://codecov.io\
/gh/boostorg/signals2/branch/master/graph/badge.svg)](https://codecov.io/gh/b\
oostorg/signals2/branch/master)| [![Deps](https://img.shields.io/badge/deps-m\
aster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/signa\
ls2.html) | [![Documentation](https://img.shields.io/badge/docs-master-bright\
green.svg)](http://www.boost.org/doc/libs/master/doc/html/signals2.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/signals2.html)
[`develop`](https://github.com/boostorg/signals2/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/signals2.svg?branch=develop)](https:/\
/travis-ci.org/boostorg/signals2) | [![Build status](https://ci.appveyor.com/\
api/projects/status/vjbstowu1s13x4l5/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jeking3/signals2-db91c/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15884/badge.svg)](https://s\
can.coverity.com/projects/boostorg-signals2) | [![codecov](https://codecov.io\
/gh/boostorg/signals2/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/signals2/branch/develop) | [![Deps](https://img.shields.io/badge/dep\
s-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/\
signals2.html) | [![Documentation](https://img.shields.io/badge/docs-develop-\
brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/signals2.htm\
l) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightg\
reen.svg)](http://www.boost.org/development/tests/develop/developer/signals2.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `ci`        | continuous integration scripts |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-signals2)
* [Report bugs](https://github.com/boostorg/signals2/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[signals2]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/signals2
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/signals2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-parameter == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-variant == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-signals2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-signals2-1.83.0.tar.gz
sha256sum: 86086bbc350e8f9916870dbef51a9822a5ed4fdd2e7a29a74474fb0e19ac74f4
:
name: libboost-signals2
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Managed signals summary: boost-signals2 C++ library slots callback\
 implementation (thread-safe version 2)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Signals2, part of collection of the [Boost C++ Libraries](http://github.com/b\
oostorg), is an implementation of a managed signals and slots system.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/signals2/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/signals2.svg?branch=master)](https://\
travis-ci.org/boostorg/signals2) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/vjbstowu1s13x4l5/branch/master?svg=true)](https://ci.appve\
yor.com/project/jeking3/signals2-db91c/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15884/badge.svg)](https://s\
can.coverity.com/projects/boostorg-signals2) | [![codecov](https://codecov.io\
/gh/boostorg/signals2/branch/master/graph/badge.svg)](https://codecov.io/gh/b\
oostorg/signals2/branch/master)| [![Deps](https://img.shields.io/badge/deps-m\
aster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/signa\
ls2.html) | [![Documentation](https://img.shields.io/badge/docs-master-bright\
green.svg)](http://www.boost.org/doc/libs/master/doc/html/signals2.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/signals2.html)
[`develop`](https://github.com/boostorg/signals2/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/signals2.svg?branch=develop)](https:/\
/travis-ci.org/boostorg/signals2) | [![Build status](https://ci.appveyor.com/\
api/projects/status/vjbstowu1s13x4l5/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jeking3/signals2-db91c/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15884/badge.svg)](https://s\
can.coverity.com/projects/boostorg-signals2) | [![codecov](https://codecov.io\
/gh/boostorg/signals2/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/signals2/branch/develop) | [![Deps](https://img.shields.io/badge/dep\
s-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/\
signals2.html) | [![Documentation](https://img.shields.io/badge/docs-develop-\
brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/signals2.htm\
l) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightg\
reen.svg)](http://www.boost.org/development/tests/develop/developer/signals2.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `ci`        | continuous integration scripts |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-signals2)
* [Report bugs](https://github.com/boostorg/signals2/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[signals2]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/signals2
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/signals2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-parameter == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-variant == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-signals2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-signals2-1.85.0.tar.gz
sha256sum: f9fde9d507aa5a9b052c85f1f49f4ea37f12bcd59df21722cadb7a85e5b75cb9
:
name: libboost-signals2
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Managed signals summary: boost-signals2 C++ library slots callback\
 implementation (thread-safe version 2)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Signals2, part of collection of the [Boost C++ Libraries](http://github.com/b\
oostorg), is an implementation of a managed signals and slots system.

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | Travis | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/signals2/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/signals2.svg?branch=master)](https://\
travis-ci.org/boostorg/signals2) | [![Build status](https://ci.appveyor.com/a\
pi/projects/status/vjbstowu1s13x4l5/branch/master?svg=true)](https://ci.appve\
yor.com/project/jeking3/signals2-db91c/branch/master) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15884/badge.svg)](https://s\
can.coverity.com/projects/boostorg-signals2) | [![codecov](https://codecov.io\
/gh/boostorg/signals2/branch/master/graph/badge.svg)](https://codecov.io/gh/b\
oostorg/signals2/branch/master)| [![Deps](https://img.shields.io/badge/deps-m\
aster-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/signa\
ls2.html) | [![Documentation](https://img.shields.io/badge/docs-master-bright\
green.svg)](http://www.boost.org/doc/libs/master/doc/html/signals2.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/signals2.html)
[`develop`](https://github.com/boostorg/signals2/tree/develop) | [![Build\
 Status](https://travis-ci.org/boostorg/signals2.svg?branch=develop)](https:/\
/travis-ci.org/boostorg/signals2) | [![Build status](https://ci.appveyor.com/\
api/projects/status/vjbstowu1s13x4l5/branch/develop?svg=true)](https://ci.app\
veyor.com/project/jeking3/signals2-db91c/branch/develop) | [![Coverity Scan\
 Build Status](https://scan.coverity.com/projects/15884/badge.svg)](https://s\
can.coverity.com/projects/boostorg-signals2) | [![codecov](https://codecov.io\
/gh/boostorg/signals2/branch/develop/graph/badge.svg)](https://codecov.io/gh/\
boostorg/signals2/branch/develop) | [![Deps](https://img.shields.io/badge/dep\
s-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/\
signals2.html) | [![Documentation](https://img.shields.io/badge/docs-develop-\
brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/signals2.htm\
l) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightg\
reen.svg)](http://www.boost.org/development/tests/develop/developer/signals2.\
html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `ci`        | continuous integration scripts |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-signals2)
* [Report bugs](https://github.com/boostorg/signals2/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[signals2]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/signals2
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/signals2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-parameter == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-variant == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-signals2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-signals2-1.87.0.tar.gz
sha256sum: 4386f25c9f8e202c225a3e6b8705e1e2d9c1714d46e852d208281bad1f65287d
:
name: libboost-smart-ptr
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Smart pointer class templates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.SmartPtr

Branch   | Travis | Appveyor
---------|--------|---------
Develop  | [![Build Status](https://travis-ci.org/boostorg/smart_ptr.svg?bran\
ch=develop)](https://travis-ci.org/boostorg/smart_ptr) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/smart_pt\
r?branch=develop&svg=true)](https://ci.appveyor.com/project/pdimov/smart-ptr)
Master   | [![Build Status](https://travis-ci.org/boostorg/smart_ptr.svg?bran\
ch=master)](https://travis-ci.org/boostorg/smart_ptr) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/smart_pt\
r?branch=master&svg=true)](https://ci.appveyor.com/project/pdimov/smart-ptr)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/smart_ptr
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/smart_ptr
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-smart-ptr

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-smart-ptr-1.83.0.tar.gz
sha256sum: f2a6676738c27cb03345fd3a2b2b3528eda2b9b1996d0f2e1322f04a21c80e95
:
name: libboost-smart-ptr
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Smart pointer class templates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.SmartPtr

Branch   | Travis | Appveyor
---------|--------|---------
Develop  | [![Build Status](https://travis-ci.org/boostorg/smart_ptr.svg?bran\
ch=develop)](https://travis-ci.org/boostorg/smart_ptr) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/smart_pt\
r?branch=develop&svg=true)](https://ci.appveyor.com/project/pdimov/smart-ptr)
Master   | [![Build Status](https://travis-ci.org/boostorg/smart_ptr.svg?bran\
ch=master)](https://travis-ci.org/boostorg/smart_ptr) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/smart_pt\
r?branch=master&svg=true)](https://ci.appveyor.com/project/pdimov/smart-ptr)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/smart_ptr
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/smart_ptr
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-smart-ptr

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-smart-ptr-1.85.0.tar.gz
sha256sum: a36dc696e9b9faf06118fa16cfa8332909317222bfa76bce204800cb40d1d83c
:
name: libboost-smart-ptr
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Smart pointer class templates
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.SmartPtr

Branch   | Travis | Appveyor
---------|--------|---------
Develop  | [![Build Status](https://travis-ci.org/boostorg/smart_ptr.svg?bran\
ch=develop)](https://travis-ci.org/boostorg/smart_ptr) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/smart_pt\
r?branch=develop&svg=true)](https://ci.appveyor.com/project/pdimov/smart-ptr)
Master   | [![Build Status](https://travis-ci.org/boostorg/smart_ptr.svg?bran\
ch=master)](https://travis-ci.org/boostorg/smart_ptr) | [![Build\
 Status](https://ci.appveyor.com/api/projects/status/github/boostorg/smart_pt\
r?branch=master&svg=true)](https://ci.appveyor.com/project/pdimov/smart-ptr)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/smart_ptr
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/smart_ptr
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-smart-ptr

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-smart-ptr-1.87.0.tar.gz
sha256sum: 513fc853d1bec3233728541bc008c4800c3de65517123da9d93fca83b8387cb4
:
name: libboost-sort
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: High-performance templated sort functions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
<h1>BOOST SORT</H1>

<H2>Introduction</h2>

The goal of the Boost Sort Library is provide to the users, the most modern\
 and fast sorting algorithms.

This library provides stable and not stable sorting algorithms, in single\
 thread and parallel versions.

These algorithms do not use any other library or utility. The parallel\
 algorithms need a C++11 compliant compiler.

<h2>Single Thread Algorithms</h2>


                      |       |                            |                 \
              |                     |
    Algorithm         |Stable |   Additional memory        |Best, average,\
 and worst case  | Comparison method   |
    ------------------|-------|----------------------------|-----------------\
--------------|---------------------|
    spreadsort        |  no   |      key_length            | N, N sqrt(LogN),\
              | Hybrid radix sort   |
                      |       |                            | min(N logN, N\
 key_length)     |                     |
    pdqsort           |  no   |      Log N                 | N, N LogN, N\
 LogN             | Comparison operator |
    spinsort          |  yes  |      N / 2                 | N, N LogN, N\
 LogN             | Comparison operator |
    flat_stable_sort  |  yes  |size of the data / 256 + 8K | N, N LogN, N\
 LogN             | Comparison operator |
                      |       |                            |                 \
              |                     |


- **spreadsort** is a novel hybrid radix sort algorithm, extremely fast,\
 designed and developed by Steven Ross.

- **pdqsort** is a improvement of the quick sort algorithm, designed and\
 developed by Orson Peters.

- **spinsort** is a stable sort, fast with random and with near sorted data,\
 designed and developed by Francisco Tapia.

- **flat_stable_sort** stable sort with a small additional memory (around 1%\
 of the size of the data), provide the 80% - 90% of the speed of spinsort,\
 being fast with random and with near sorted data, designed and developed by\
 Francisco Tapia.


<h2>Parallel Algorithms</h2>


                          |       |                        |                 \
             |
    Algorithm             |Stable |   Additional memory    |Best, average,\
 and worst case |
    ----------------------|-------|------------------------|-----------------\
-------------|
    block_indirect_sort   |  no   |block_size * num_threads| N, N LogN , N\
 LogN           |
    sample_sort           |  yes  |        N               | N, N LogN , N\
 LogN           |
    parallel_stable_sort  |  yes  |      N / 2             | N, N LogN , N\
 LogN           |
                          |       |                        |                 \
             |


- **Sample_sort** is a implementation of the [Samplesort algorithm](https://e\
n.wikipedia.org/wiki/Samplesort)  done by Francisco Tapia.

- **Parallel_stable_sort** is based on the samplesort algorithm, but using a\
 half of the memory used by sample_sort, conceived and implemented by\
 Francisco Tapia.

- **Block_indirect_sort** is a novel parallel sort algorithm, very fast, with\
 low additional memory consumption, conceived and implemented by Francisco\
 Tapia.

The **block_size** is an internal parameter of the algorithm, which in order\
 to achieve the
highest speed, changes according to the size of the objects to sort according\
 to the next table. The strings use a block_size of 128.


                                    |        |         |         |         | \
        |         |          |
    object size (bytes)             | 1 - 15 | 16 - 31 | 32 - 63 | 64 -\
 127|128 - 255|256 - 511| 512 -    |
    --------------------------------|--------|---------|---------|---------|-\
--------|---------|----------|
    block_size (number of elements) |  4096  |  2048   |   1024  |   768   | \
  512   |   256   |  128     |
                                    |        |         |         |         | \
        |         |          |


<h2>Installation </h2>
- This library is **include only**.
- Don't need to link with any static or dynamic library. Only need a C++11\
 compiler
- Only need to include the file boost/sort/sort.hpp


<h2>Author and Copyright</h2>
This library is integrated in the [Boost Library](https://boost.org) .


Copyright 2017

- [Steven Ross *(spreadsort@gmail.com)* ](mail:spreadsort@gmail.com)
- [Francisco Tapia *(fjtapia@gmail.com)* ](mail:fjtapia@gmail.com)
- [Orson Peters *(orsonpeters@gmail.com)* ](mail:orsonpeters@gmail.com)

Distributed under the [Boost Software License, Version 1.0.\
 ](http://www.boost.org/LICENSE_1_0.txt)  (See http://www.boost.org/LICENSE_1\
_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/sort
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/sort
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-sort

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-sort-1.83.0.tar.gz
sha256sum: ca3cfd926ccedfd229477b10b13932b55e32ccc4bb5ebdde43d9661f54a1390b
:
name: libboost-sort
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: High-performance templated sort functions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# BOOST SORT

## Introduction

The goal of the Boost Sort Library is provide to the users, the most modern\
 and fast sorting algorithms.

This library provides stable and not stable sorting algorithms, in single\
 thread and parallel versions.

These algorithms do not use any other library or utility. The parallel\
 algorithms need a C++11 compliant compiler.

Detailed [boost API documentation](https://www.boost.org/doc/libs/release/lib\
s/sort/) also available.

## Single Thread Algorithms


  | Algorithm         |Stable |   Additional memory        |Best, average,\
 and worst case  | Comparison method   |
  |-------------------|-------|----------------------------|-----------------\
--------------|---------------------|
  | spreadsort        |  no   |      key_length            | N, N sqrt(LogN),\
              | Hybrid radix sort   |
  |                   |       |                            | min(N logN, N\
 key_length)     |                     |
  | pdqsort           |  no   |      Log N                 | N, N LogN, N\
 LogN             | Comparison operator |
  | spinsort          |  yes  |      N / 2                 | N, N LogN, N\
 LogN             | Comparison operator |
  | flat_stable_sort  |  yes  |size of the data / 256 + 8K | N, N LogN, N\
 LogN             | Comparison operator |


- **spreadsort** is a [novel hybrid radix sort algorithm](https://en.wikipedi\
a.org/wiki/Spreadsort), extremely fast, designed and developed by Steven Ross.
  [(paper)](doc/papers/original_spreadsort06_2002.pdf)

- **pdqsort** is a [improvement of the quick sort algorithm](https://en.wikip\
edia.org/wiki/Introsort#pdqsort), designed and developed by Orson Peters.
  [(paper)](https://arxiv.org/pdf/2106.05123.pdf)

- **spinsort** is a stable sort, fast with random and with near sorted data,\
 designed and developed by Francisco Tapia.

- **flat_stable_sort** stable sort with a small additional memory (around 1%\
 of the size of the data), provide the 80% - 90% of the speed of spinsort,\
 being fast with random and with near sorted data, designed and developed by\
 Francisco Tapia.
  [(paper)](doc/papers/flat_stable_sort_eng.pdf)


## Parallel Algorithms


  | Algorithm             |Stable |   Additional memory    |Best, average,\
 and worst case |
  |-----------------------|-------|------------------------|-----------------\
-------------|
  | block_indirect_sort   |  no   |block_size * num_threads| N, N LogN , N\
 LogN           |
  | sample_sort           |  yes  |        N               | N, N LogN , N\
 LogN           |
  | parallel_stable_sort  |  yes  |      N / 2             | N, N LogN , N\
 LogN           |


- **Sample_sort** is a implementation of the [Samplesort algorithm](https://e\
n.wikipedia.org/wiki/Samplesort) done by Francisco Tapia.

- **Parallel_stable_sort** is based on the samplesort algorithm, but using a\
 half of the memory used by sample_sort, conceived and implemented by\
 Francisco Tapia.

- **Block_indirect_sort** is a novel parallel sort algorithm, very fast, with\
 low additional memory consumption, conceived and implemented by Francisco\
 Tapia.
  [(paper)](doc/papers/block_indirect_sort_en.pdf)

The **block_size** is an internal parameter of the algorithm, which in order\
 to achieve the
highest speed, changes according to the size of the objects to sort according\
 to the next table. The strings use a block_size of 128.


  | object size (bytes)             | 1 - 15 | 16 - 31 | 32 - 63 | 64 -\
 127|128 - 255|256 - 511| 512 -    |
  |---------------------------------|--------|---------|---------|---------|-\
--------|---------|----------|
  | block_size (number of elements) |  4096  |  2048   |   1024  |   768   | \
  512   |   256   |  128     |


## Installation

- This library is **include only**.
- Don't need to link with any static or dynamic library. Only need a C++11\
 compiler
- Only need to include the file boost/sort/sort.hpp


## Author and Copyright

This library is integrated in the [Boost Library](https://boost.org).


Copyright 2017

- [Steven Ross](mailto:spreadsort@gmail.com)
- [Francisco Tapia](mailto:fjtapia@gmail.com)
- [Orson Peters](mailto:orsonpeters@gmail.com)

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/sort
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/sort
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-sort

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-sort-1.85.0.tar.gz
sha256sum: 083447da602262f556766d977c4207457784ea8fca07cce050b545c14830f7cc
:
name: libboost-sort
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: High-performance templated sort functions
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# BOOST SORT

## Introduction

The goal of the Boost Sort Library is provide to the users, the most modern\
 and fast sorting algorithms.

This library provides stable and not stable sorting algorithms, in single\
 thread and parallel versions.

These algorithms do not use any other library or utility. The parallel\
 algorithms need a C++11 compliant compiler.

Detailed [boost API documentation](https://www.boost.org/doc/libs/release/lib\
s/sort/) also available.

## Single Thread Algorithms


  | Algorithm         |Stable |   Additional memory        |Best, average,\
 and worst case  | Comparison method   |
  |-------------------|-------|----------------------------|-----------------\
--------------|---------------------|
  | spreadsort        |  no   |      key_length            | N, N sqrt(LogN),\
              | Hybrid radix sort   |
  |                   |       |                            | min(N logN, N\
 key_length)     |                     |
  | pdqsort           |  no   |      Log N                 | N, N LogN, N\
 LogN             | Comparison operator |
  | spinsort          |  yes  |      N / 2                 | N, N LogN, N\
 LogN             | Comparison operator |
  | flat_stable_sort  |  yes  |size of the data / 256 + 8K | N, N LogN, N\
 LogN             | Comparison operator |


- **spreadsort** is a [novel hybrid radix sort algorithm](https://en.wikipedi\
a.org/wiki/Spreadsort), extremely fast, designed and developed by Steven Ross.
  [(paper)](doc/papers/original_spreadsort06_2002.pdf)

- **pdqsort** is a [improvement of the quick sort algorithm](https://en.wikip\
edia.org/wiki/Introsort#pdqsort), designed and developed by Orson Peters.
  [(paper)](https://arxiv.org/pdf/2106.05123.pdf)

- **spinsort** is a stable sort, fast with random and with near sorted data,\
 designed and developed by Francisco Tapia.

- **flat_stable_sort** stable sort with a small additional memory (around 1%\
 of the size of the data), provide the 80% - 90% of the speed of spinsort,\
 being fast with random and with near sorted data, designed and developed by\
 Francisco Tapia.
  [(paper)](doc/papers/flat_stable_sort_eng.pdf)


## Parallel Algorithms


  | Algorithm             |Stable |   Additional memory    |Best, average,\
 and worst case |
  |-----------------------|-------|------------------------|-----------------\
-------------|
  | block_indirect_sort   |  no   |block_size * num_threads| N, N LogN , N\
 LogN           |
  | sample_sort           |  yes  |        N               | N, N LogN , N\
 LogN           |
  | parallel_stable_sort  |  yes  |      N / 2             | N, N LogN , N\
 LogN           |


- **Sample_sort** is a implementation of the [Samplesort algorithm](https://e\
n.wikipedia.org/wiki/Samplesort) done by Francisco Tapia.

- **Parallel_stable_sort** is based on the samplesort algorithm, but using a\
 half of the memory used by sample_sort, conceived and implemented by\
 Francisco Tapia.

- **Block_indirect_sort** is a novel parallel sort algorithm, very fast, with\
 low additional memory consumption, conceived and implemented by Francisco\
 Tapia.
  [(paper)](doc/papers/block_indirect_sort_en.pdf)

The **block_size** is an internal parameter of the algorithm, which in order\
 to achieve the
highest speed, changes according to the size of the objects to sort according\
 to the next table. The strings use a block_size of 128.


  | object size (bytes)             | 1 - 15 | 16 - 31 | 32 - 63 | 64 -\
 127|128 - 255|256 - 511| 512 -    |
  |---------------------------------|--------|---------|---------|---------|-\
--------|---------|----------|
  | block_size (number of elements) |  4096  |  2048   |   1024  |   768   | \
  512   |   256   |  128     |


## Installation

- This library is **include only**.
- Don't need to link with any static or dynamic library. Only need a C++11\
 compiler
- Only need to include the file boost/sort/sort.hpp


## Author and Copyright

This library is integrated in the [Boost Library](https://boost.org).


Copyright 2017

- [Steven Ross](mailto:spreadsort@gmail.com)
- [Francisco Tapia](mailto:fjtapia@gmail.com)
- [Orson Peters](mailto:orsonpeters@gmail.com)

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/sort
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/sort
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-sort

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-sort-1.87.0.tar.gz
sha256sum: d8d49f4928e95215bd3dd32c18a6fd0a83424d884b4d4342e197377f6948cc32
:
name: libboost-spirit
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: LL parser framework represents parsers directly as EBNF grammars in\
 inlined C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Spirit
======

Spirit is a set of C++ libraries for parsing and output generation\
 implemented as 
Domain Specific Embedded Languages (DSEL) using Expression templates and\
 Template 
Meta-Programming. The Spirit libraries enable a target grammar to be written 
exclusively in C++. Inline grammar specifications can mix freely with other 
C++ code and, thanks to the generative power of C++ templates, are\
 immediately 
executable.

### Spirit.X3 (3rd generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/doc/x3/html\
/index.html)

The newest Spirit shines faster compile times. Currently only a parser\
 framework.

*WARNING*: C++14 compilers support will be dropped soon.

Spirit X3 in Boost 1.81 (scheduled to November 2022) will use C++17 features.

Supported compilers will be:
* Clang 4 (currently 3.6)
* GCC 7 (currently 5)
* VS 2017 v15.8 (currently 2015 U3)

### Spirit V2 (2nd generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/in\
dex.html)

The latest Long Term Support version of Spirit. A Swiss Army knife for data
manipulation on any kind of input.

Consists of:
  - [Qi]: Parser framework.
  - [Karma]: Generator framework.
  - [Lex]: Lexical analyzer framework.
  
Runs on most C++03 compilers (GCC 4.1, Clang 3.0, VS 2005).

[Spirit V2]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/index\
.html
[Qi]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/qi.ht\
ml
[Karma]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/ka\
rma.html
[Lex]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/lex.\
html

### Spirit.Classic (1st generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/classic/ind\
ex.html)

An elderling member of Spirit. It receives only limited maintanance, but
it is still used even inside Boost by [Boost.Serialization] and [Boost.Wave]
libraries. It also contains Phoenix V1.

Spririt.Classic should support even ancient compilers.

[Boost.Serialization]: http://boost.org/libs/serialization
[Boost.Wave]: http://boost.org/libs/wave

## Brief History

Date       | Boost | Commit   | Event
---------- | ----- | -------- | ---------------------------------------------\
--
2014-03-18 | 1.56  | 8a353328 | Spirit.X3 is added
2013-12-14 | 1.56  | c0537c82 | Phoenix V2 is retired
2011-03-28 | 1.47  | 400a764d | [Phoenix V3] support added to Spirit V2
2009-04-30 | 1.41  | 5963a395 | [Spirit.Repository] is appeared
2008-04-13 | 1.36  | ffd0cc10 | Spirit V2 (Qi, Karma, Lex, Phoenix V2) is\
 added
2006-08-23 | 1.35  | 2dc892b4 | Fusion V1 is retired
2003-01-31 | 1.30  | 81907916 | Spirit is the part of the Boost

[Phoenix V3]: http://boost.org/libs/phoenix
[Spirit.Repository]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/ht\
ml/spirit/repository.html

\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-spirit

The `build2` package of `libboost-spirit` supports the following configuration
variables:


### `config.libboost_spirit.classic`

Enable classic (1st generation) spirit API. Default is `false`.


### `config.libboost_spirit.classic_regex`

Enable regex support in classic spirit API. Default is `false`. Note that
enabling this support will cause the package to depend on `libboost-regex`.


### `config.libboost_spirit.x2`

Enable V2 (2nd generation) spirit API. Default is `false`.


### `config.libboost_spirit.x3`

Enable X3 (3rd generation) spirit API. Default is `false`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/spirit
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/spirit
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-endian == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-phoenix == 1.83.0
depends: libboost-pool == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-proto == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-regex == 1.83.0 ? ($config.libboost_spirit.classic_regex)
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-thread == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-unordered == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-variant == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-spirit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_spirit.classic ?= false
config [bool] config.libboost_spirit.classic_regex ?= false
config [bool] config.libboost_spirit.x2 ?= false
config [bool] config.libboost_spirit.x3 ?= false

\
location: boost/libboost-spirit-1.83.0.tar.gz
sha256sum: 83adb83b014c9e49295ff435eb2af3648ae695f6c3b0281465483925ac988f52
:
name: libboost-spirit
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: LL parser framework represents parsers directly as EBNF grammars in\
 inlined C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Spirit
======

Spirit is a set of C++ libraries for parsing and output generation\
 implemented as 
Domain Specific Embedded Languages (DSEL) using Expression templates and\
 Template 
Meta-Programming. The Spirit libraries enable a target grammar to be written 
exclusively in C++. Inline grammar specifications can mix freely with other 
C++ code and, thanks to the generative power of C++ templates, are\
 immediately 
executable.

### Spirit.X3 (3rd generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/doc/x3/html\
/index.html)

The newest Spirit shines faster compile times. Currently only a parser\
 framework.

*WARNING*: C++14 compilers support will be dropped soon.

Spirit X3 in Boost 1.81 (scheduled to November 2022) will use C++17 features.

Supported compilers will be:
* Clang 4 (currently 3.6)
* GCC 7 (currently 5)
* VS 2017 v15.8 (currently 2015 U3)

### Spirit V2 (2nd generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/in\
dex.html)

The latest Long Term Support version of Spirit. A Swiss Army knife for data
manipulation on any kind of input.

Consists of:
  - [Qi]: Parser framework.
  - [Karma]: Generator framework.
  - [Lex]: Lexical analyzer framework.
  
Runs on most C++03 compilers (GCC 4.1, Clang 3.0, VS 2005).

[Spirit V2]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/index\
.html
[Qi]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/qi.ht\
ml
[Karma]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/ka\
rma.html
[Lex]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/lex.\
html

### Spirit.Classic (1st generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/classic/ind\
ex.html)

An elderling member of Spirit. It receives only limited maintanance, but
it is still used even inside Boost by [Boost.Serialization] and [Boost.Wave]
libraries. It also contains Phoenix V1.

Spririt.Classic should support even ancient compilers.

[Boost.Serialization]: http://boost.org/libs/serialization
[Boost.Wave]: http://boost.org/libs/wave

## Brief History

Date       | Boost | Commit   | Event
---------- | ----- | -------- | ---------------------------------------------\
--
2014-03-18 | 1.56  | 8a353328 | Spirit.X3 is added
2013-12-14 | 1.56  | c0537c82 | Phoenix V2 is retired
2011-03-28 | 1.47  | 400a764d | [Phoenix V3] support added to Spirit V2
2009-04-30 | 1.41  | 5963a395 | [Spirit.Repository] is appeared
2008-04-13 | 1.36  | ffd0cc10 | Spirit V2 (Qi, Karma, Lex, Phoenix V2) is\
 added
2006-08-23 | 1.35  | 2dc892b4 | Fusion V1 is retired
2003-01-31 | 1.30  | 81907916 | Spirit is the part of the Boost

[Phoenix V3]: http://boost.org/libs/phoenix
[Spirit.Repository]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/ht\
ml/spirit/repository.html

\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-spirit

The `build2` package of `libboost-spirit` supports the following configuration
variables:


### `config.libboost_spirit.classic`

Enable classic (1st generation) spirit API. Default is `false`.


### `config.libboost_spirit.classic_regex`

Enable regex support in classic spirit API. Default is `false`. Note that
enabling this support will cause the package to depend on `libboost-regex`.


### `config.libboost_spirit.x2`

Enable V2 (2nd generation) spirit API. Default is `false`.


### `config.libboost_spirit.x3`

Enable X3 (3rd generation) spirit API. Default is `false`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/spirit
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/spirit
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-endian == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-phoenix == 1.85.0
depends: libboost-pool == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-proto == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-regex == 1.85.0 ? ($config.libboost_spirit.classic_regex)
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-thread == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-unordered == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-variant == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-spirit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_spirit.classic ?= false
config [bool] config.libboost_spirit.classic_regex ?= false
config [bool] config.libboost_spirit.x2 ?= false
config [bool] config.libboost_spirit.x3 ?= false

\
location: boost/libboost-spirit-1.85.0.tar.gz
sha256sum: c8c8303c4c2ae56f0aaecd37f860d7636714b9468a520d4252f2916dde687ca1
:
name: libboost-spirit
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: LL parser framework represents parsers directly as EBNF grammars in\
 inlined C++
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Spirit
======

Spirit is a set of C++ libraries for parsing and output generation\
 implemented as 
Domain Specific Embedded Languages (DSEL) using Expression templates and\
 Template 
Meta-Programming. The Spirit libraries enable a target grammar to be written 
exclusively in C++. Inline grammar specifications can mix freely with other 
C++ code and, thanks to the generative power of C++ templates, are\
 immediately 
executable.

### Spirit.X3 (3rd generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/doc/x3/html\
/index.html)

The newest Spirit shines faster compile times. Currently only a parser\
 framework.

*WARNING*: C++14 compilers support will be dropped soon.

Spirit X3 in Boost 1.81 (scheduled to November 2022) will use C++17 features.

Supported compilers will be:
* Clang 4 (currently 3.6)
* GCC 7 (currently 5)
* VS 2017 v15.8 (currently 2015 U3)

### Spirit V2 (2nd generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/in\
dex.html)

The latest Long Term Support version of Spirit. A Swiss Army knife for data
manipulation on any kind of input.

Consists of:
  - [Qi]: Parser framework.
  - [Karma]: Generator framework.
  - [Lex]: Lexical analyzer framework.
  
Runs on most C++03 compilers (GCC 4.1, Clang 3.0, VS 2005).

[Spirit V2]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/index\
.html
[Qi]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/qi.ht\
ml
[Karma]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/ka\
rma.html
[Lex]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/html/spirit/lex.\
html

### Spirit.Classic (1st generation)

[Documentation](http://www.boost.org/doc/libs/develop/libs/spirit/classic/ind\
ex.html)

An elderling member of Spirit. It receives only limited maintanance, but
it is still used even inside Boost by [Boost.Serialization] and [Boost.Wave]
libraries. It also contains Phoenix V1.

Spririt.Classic should support even ancient compilers.

[Boost.Serialization]: http://boost.org/libs/serialization
[Boost.Wave]: http://boost.org/libs/wave

## Brief History

Date       | Boost | Commit   | Event
---------- | ----- | -------- | ---------------------------------------------\
--
2014-03-18 | 1.56  | 8a353328 | Spirit.X3 is added
2013-12-14 | 1.56  | c0537c82 | Phoenix V2 is retired
2011-03-28 | 1.47  | 400a764d | [Phoenix V3] support added to Spirit V2
2009-04-30 | 1.41  | 5963a395 | [Spirit.Repository] is appeared
2008-04-13 | 1.36  | ffd0cc10 | Spirit V2 (Qi, Karma, Lex, Phoenix V2) is\
 added
2006-08-23 | 1.35  | 2dc892b4 | Fusion V1 is retired
2003-01-31 | 1.30  | 81907916 | Spirit is the part of the Boost

[Phoenix V3]: http://boost.org/libs/phoenix
[Spirit.Repository]: http://www.boost.org/doc/libs/develop/libs/spirit/doc/ht\
ml/spirit/repository.html

\
description-type: text/markdown;variant=GFM
package-description:
\
# libboost-spirit

The `build2` package of `libboost-spirit` supports the following configuration
variables:


### `config.libboost_spirit.classic`

Enable classic (1st generation) spirit API. Default is `false`.


### `config.libboost_spirit.classic_regex`

Enable regex support in classic spirit API. Default is `false`. Note that
enabling this support will cause the package to depend on `libboost-regex`.


### `config.libboost_spirit.x2`

Enable V2 (2nd generation) spirit API. Default is `false`.


### `config.libboost_spirit.x3`

Enable X3 (3rd generation) spirit API. Default is `false`.

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/spirit
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/spirit
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-array == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-endian == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-phoenix == 1.87.0
depends: libboost-pool == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-proto == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-regex == 1.87.0 ? ($config.libboost_spirit.classic_regex)
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-thread == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-unordered == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-variant == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-spirit

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

config [bool] config.libboost_spirit.classic ?= false
config [bool] config.libboost_spirit.classic_regex ?= false
config [bool] config.libboost_spirit.x2 ?= false
config [bool] config.libboost_spirit.x3 ?= false

\
location: boost/libboost-spirit-1.87.0.tar.gz
sha256sum: 393bf5c3a6227169a0f1aa07a53952374d9854c4c7225be9bc3612ff4979571c
:
name: libboost-stacktrace
version: 1.83.0
language: c++
project: boost
summary: Gather, store, copy and print backtraces
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Stacktrace](https://boost.org/libs/stacktrace)

Library for storing and printing backtraces.

Boost.Stacktrace is a part of the [Boost C++ Libraries](https://github.com/bo\
ostorg).


### Test results
@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch:  | [![CI](https://github.com/boostorg/stacktrace/actions/work\
flows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/stacktrac\
e/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proj\
ects/status/l3aak4j8k39rx08t/branch/develop?svg=true)](https://ci.appveyor.co\
m/project/apolukhin/stacktrace/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/github/boostorg/stacktrace/badge.svg?bran\
ch=develop)](https://coveralls.io/github/boostorg/stacktrace?branch=develop)\
 | [details...](https://www.boost.org/development/tests/develop/developer/sta\
cktrace.html)
Master branch:  | [![CI](https://github.com/boostorg/stacktrace/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/stacktrace/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/l3aak4j8k39rx08t/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/stacktrace/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/github/boostorg/stacktrace/badge.svg?branch=master)](https://c\
overalls.io/github/boostorg/stacktrace?branch=master) | [details...](https://\
www.boost.org/development/tests/master/developer/stacktrace.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/stacktrace.html)

### License
Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/stacktrace
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/stacktrace
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-array == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-stacktrace

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-stacktrace-1.83.0.tar.gz
sha256sum: f3a38d7997af63d2096e2a06b37da9fa8ee8e513775033d6b83cce07e28babb2
:
name: libboost-stacktrace
version: 1.85.0
language: c++
project: boost
summary: Gather, store, copy and print backtraces
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Stacktrace](https://boost.org/libs/stacktrace)

Library for storing and printing backtraces.

Boost.Stacktrace is a part of the [Boost C++ Libraries](https://github.com/bo\
ostorg).


### Test results
@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch:  | [![CI](https://github.com/boostorg/stacktrace/actions/work\
flows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/stacktrac\
e/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proj\
ects/status/l3aak4j8k39rx08t/branch/develop?svg=true)](https://ci.appveyor.co\
m/project/apolukhin/stacktrace/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/github/boostorg/stacktrace/badge.svg?bran\
ch=develop)](https://coveralls.io/github/boostorg/stacktrace?branch=develop)\
 | [details...](https://www.boost.org/development/tests/develop/developer/sta\
cktrace.html)
Master branch:  | [![CI](https://github.com/boostorg/stacktrace/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/stacktrace/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/l3aak4j8k39rx08t/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/stacktrace/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/github/boostorg/stacktrace/badge.svg?branch=master)](https://c\
overalls.io/github/boostorg/stacktrace?branch=master) | [details...](https://\
www.boost.org/development/tests/master/developer/stacktrace.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/stacktrace.html)

### License
Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/stacktrace
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/stacktrace
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-stacktrace

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-stacktrace-1.85.0.tar.gz
sha256sum: ae9a80d4d58880b1510357f04764a184f37c934f51f7ff292a1dba01b09c8fe7
:
name: libboost-stacktrace
version: 1.87.0
language: c++
project: boost
summary: Gather, store, copy and print backtraces
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Stacktrace](https://boost.org/libs/stacktrace)

Library for storing and printing backtraces.

Boost.Stacktrace is a part of the [Boost C++ Libraries](https://github.com/bo\
ostorg).


### Test results
@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch:  | [![CI](https://github.com/boostorg/stacktrace/actions/work\
flows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/stacktrac\
e/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proj\
ects/status/l3aak4j8k39rx08t/branch/develop?svg=true)](https://ci.appveyor.co\
m/project/apolukhin/stacktrace/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/github/boostorg/stacktrace/badge.svg?bran\
ch=develop)](https://coveralls.io/github/boostorg/stacktrace?branch=develop)\
 | [details...](https://www.boost.org/development/tests/develop/developer/sta\
cktrace.html)
Master branch:  | [![CI](https://github.com/boostorg/stacktrace/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/stacktrace/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/l3aak4j8k39rx08t/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/stacktrace/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/github/boostorg/stacktrace/badge.svg?branch=master)](https://c\
overalls.io/github/boostorg/stacktrace?branch=master) | [details...](https://\
www.boost.org/development/tests/master/developer/stacktrace.html)

[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/stacktrace.html)

### License
Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/stacktrace
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/stacktrace
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-stacktrace

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-stacktrace-1.87.0.tar.gz
sha256sum: 8bd9475a59c13b3755f6e738c47eac503291a4896b16c593b3e82003c7f3e0ca
:
name: libboost-statechart
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Boost.Statechart - Arbitrarily complex finite state machines can be\
 implemented in easily readable and maintainable C++ code
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/statechart
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/statechart
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-conversion == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-thread == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-statechart

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-statechart-1.83.0.tar.gz
sha256sum: ae363f4ab708c602af49cf373521a3cae90f9f9ef208fde9a84fbbcbf2b5c59a
:
name: libboost-statechart
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Boost.Statechart - Arbitrarily complex finite state machines can be\
 implemented in easily readable and maintainable C++ code
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/statechart
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/statechart
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-conversion == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-thread == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-statechart

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-statechart-1.85.0.tar.gz
sha256sum: 32856902b32c1c4ad0a707827046392b8f75c052334294ecee3559770841c299
:
name: libboost-statechart
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Boost.Statechart - Arbitrarily complex finite state machines can be\
 implemented in easily readable and maintainable C++ code
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/statechart
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/statechart
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-conversion == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-thread == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-statechart

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-statechart-1.87.0.tar.gz
sha256sum: e828acd859f98aa27da9f7409c7110f3ffa08acf60c21a5d680ab2de94314d1a
:
name: libboost-static-assert
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Static assertions (compile time assertions)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost StaticAssert Library
============================

The Boost StaticAssert library provides static assertions for C++, this\
 library is the ancestor to C++ native static_assert's and 
can be used on older compilers which don't have that feature.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/static_assert).

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/static_assert/issues)
(see [open issues](https://github.com/boostorg/static_assert/issues) and
[closed issues](https://github.com/boostorg/static_assert/issues?utf8=%E2%9C%\
93&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/static_assert/pulls).

There is no mailing-list specific to Boost StaticAssert, although you can use\
 the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/list\
info.cgi/boost-users) using the tag [static_assert].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost StaticAssert Library is located in `libs/static_assert/`. 

### Running tests ###
First, make sure you are in `libs/static_assert/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 static_assert_test     <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/static_assert
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/static_assert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-static-assert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-static-assert-1.83.0.tar.gz
sha256sum: 24235e2e294fb758151a43eaf1b86585ebe557b41c953b0d052ab256a8f96959
:
name: libboost-static-assert
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Static assertions (compile time assertions)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost StaticAssert Library
============================

The Boost StaticAssert library provides static assertions for C++, this\
 library is the ancestor to C++ native static_assert's and 
can be used on older compilers which don't have that feature.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/static_assert).

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/static_assert/issues)
(see [open issues](https://github.com/boostorg/static_assert/issues) and
[closed issues](https://github.com/boostorg/static_assert/issues?utf8=%E2%9C%\
93&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/static_assert/pulls).

There is no mailing-list specific to Boost StaticAssert, although you can use\
 the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/list\
info.cgi/boost-users) using the tag [static_assert].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost StaticAssert Library is located in `libs/static_assert/`. 

### Running tests ###
First, make sure you are in `libs/static_assert/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 static_assert_test     <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/static_assert
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/static_assert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-static-assert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-static-assert-1.85.0.tar.gz
sha256sum: 621516f63c887807b8359696101f151d8e64de6e493e13378178affec1c0483a
:
name: libboost-static-assert
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Static assertions (compile time assertions)
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost StaticAssert Library
============================

The Boost StaticAssert library provides static assertions for C++, this\
 library is the ancestor to C++ native static_assert's and 
can be used on older compilers which don't have that feature.

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/static_assert).

## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/static_assert/issues)
(see [open issues](https://github.com/boostorg/static_assert/issues) and
[closed issues](https://github.com/boostorg/static_assert/issues?utf8=%E2%9C%\
93&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/static_assert/pulls).

There is no mailing-list specific to Boost StaticAssert, although you can use\
 the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/list\
info.cgi/boost-users) using the tag [static_assert].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost StaticAssert Library is located in `libs/static_assert/`. 

### Running tests ###
First, make sure you are in `libs/static_assert/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 static_assert_test     <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/static_assert
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/static_assert
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-static-assert

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-static-assert-1.87.0.tar.gz
sha256sum: 4a87da503fb96a15c78e2b75a26117b865610becdbb7b9fa06ba50f0e02b8f8b
:
name: libboost-static-string
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A fixed capacity dynamically sized string
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.StaticString

Branch          | Travis | Appveyor | Azure Pipelines | codecov.io | Docs |\
 Matrix |
:-------------: | ------ | -------- | --------------- | ---------- | ---- |\
 ------ |
[`master`](https://github.com/boostorg/static_string/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/static_string.svg?branch=master)](htt\
ps://travis-ci.org/boostorg/static_string) | [![Build status](https://ci.appv\
eyor.com/api/projects/status/64es4wg4w7mc5wn2/branch/master?svg=true)](https:\
//ci.appveyor.com/project/sdkrystian/static-string/branch/master) | [![Build\
 Status](https://krystiands.visualstudio.com/static_string/_apis/build/status\
/Boost.StaticString?branchName=master)](https://krystiands.visualstudio.com/s\
tatic_string/_build/latest?definitionId=3&branchName=master) |\
 [![codecov](https://codecov.io/gh/boostorg/static_string/branch/master/graph\
/badge.svg)](https://codecov.io/gh/boostorg/static_string/branch/master) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/release/libs/static_string) |\
 [![Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http\
://www.boost.org/development/tests/master/developer/static_string.html)
[`develop`](https://github.com/boostorg/static_string/tree/develop) |\
 [![Build Status](https://travis-ci.org/boostorg/static_string.svg?branch=dev\
elop)](https://travis-ci.org/boostorg/static_string) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/64es4wg4w7mc5wn2/branch/\
develop?svg=true)](https://ci.appveyor.com/project/sdkrystian/static-string/b\
ranch/develop) | [![Build Status](https://krystiands.visualstudio.com/static_\
string/_apis/build/status/Boost.StaticString?branchName=develop)](https://kry\
stiands.visualstudio.com/static_string/_build/latest?definitionId=3&branchNam\
e=develop) | [![codecov](https://codecov.io/gh/boostorg/static_string/branch/\
develop/graph/badge.svg)](https://codecov.io/gh/boostorg/static_string/branch\
/develop) | [![Documentation](https://img.shields.io/badge/docs-develop-brigh\
tgreen.svg)](http://www.boost.org/doc/libs/develop/libs/static_string) |\
 [![Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](htt\
p://www.boost.org/development/tests/develop/developer/static_string.html)

## Introduction

This library provides a dynamically resizable string of characters with
compile-time fixed capacity and contiguous embedded storage in which the
characters are placed within the string object itself. Its API closely
resembles that of `std::string`.

**[Documentation](http://www.boost.org/doc/libs/release/libs/static_string)**

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/static_string
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/static_string
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-static-string

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-static-string-1.83.0.tar.gz
sha256sum: 3972a92ba52f13597815d9e74da8dd25492f25a88d45b6973a7686d2117176c7
:
name: libboost-static-string
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A fixed capacity dynamically sized string
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.StaticString

Branch          | Travis | Appveyor | Azure Pipelines | codecov.io | Docs |\
 Matrix |
:-------------: | ------ | -------- | --------------- | ---------- | ---- |\
 ------ |
[`master`](https://github.com/boostorg/static_string/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/static_string.svg?branch=master)](htt\
ps://travis-ci.org/boostorg/static_string) | [![Build status](https://ci.appv\
eyor.com/api/projects/status/64es4wg4w7mc5wn2/branch/master?svg=true)](https:\
//ci.appveyor.com/project/sdkrystian/static-string/branch/master) | [![Build\
 Status](https://krystiands.visualstudio.com/static_string/_apis/build/status\
/Boost.StaticString?branchName=master)](https://krystiands.visualstudio.com/s\
tatic_string/_build/latest?definitionId=3&branchName=master) |\
 [![codecov](https://codecov.io/gh/boostorg/static_string/branch/master/graph\
/badge.svg)](https://codecov.io/gh/boostorg/static_string/branch/master) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/release/libs/static_string) |\
 [![Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http\
://www.boost.org/development/tests/master/developer/static_string.html)
[`develop`](https://github.com/boostorg/static_string/tree/develop) |\
 [![Build Status](https://travis-ci.org/boostorg/static_string.svg?branch=dev\
elop)](https://travis-ci.org/boostorg/static_string) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/64es4wg4w7mc5wn2/branch/\
develop?svg=true)](https://ci.appveyor.com/project/sdkrystian/static-string/b\
ranch/develop) | [![Build Status](https://krystiands.visualstudio.com/static_\
string/_apis/build/status/Boost.StaticString?branchName=develop)](https://kry\
stiands.visualstudio.com/static_string/_build/latest?definitionId=3&branchNam\
e=develop) | [![codecov](https://codecov.io/gh/boostorg/static_string/branch/\
develop/graph/badge.svg)](https://codecov.io/gh/boostorg/static_string/branch\
/develop) | [![Documentation](https://img.shields.io/badge/docs-develop-brigh\
tgreen.svg)](http://www.boost.org/doc/libs/develop/libs/static_string) |\
 [![Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](htt\
p://www.boost.org/development/tests/develop/developer/static_string.html)

## Introduction

This library provides a dynamically resizable string of characters with
compile-time fixed capacity and contiguous embedded storage in which the
characters are placed within the string object itself. Its API closely
resembles that of `std::string`.

**[Documentation](http://www.boost.org/doc/libs/release/libs/static_string)**

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/static_string
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/static_string
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-static-string

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-static-string-1.85.0.tar.gz
sha256sum: 061e52a003b6a7cd18ea1b5baec7deb57fb369f9e6265678fecd67153749df00
:
name: libboost-static-string
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A fixed capacity dynamically sized string
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.StaticString

Branch          | Travis | Appveyor | Azure Pipelines | codecov.io | Docs |\
 Matrix |
:-------------: | ------ | -------- | --------------- | ---------- | ---- |\
 ------ |
[`master`](https://github.com/boostorg/static_string/tree/master) | [![Build\
 Status](https://travis-ci.org/boostorg/static_string.svg?branch=master)](htt\
ps://travis-ci.org/boostorg/static_string) | [![Build status](https://ci.appv\
eyor.com/api/projects/status/64es4wg4w7mc5wn2/branch/master?svg=true)](https:\
//ci.appveyor.com/project/sdkrystian/static-string/branch/master) | [![Build\
 Status](https://krystiands.visualstudio.com/static_string/_apis/build/status\
/Boost.StaticString?branchName=master)](https://krystiands.visualstudio.com/s\
tatic_string/_build/latest?definitionId=3&branchName=master) |\
 [![codecov](https://codecov.io/gh/boostorg/static_string/branch/master/graph\
/badge.svg)](https://codecov.io/gh/boostorg/static_string/branch/master) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/release/libs/static_string) |\
 [![Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http\
://www.boost.org/development/tests/master/developer/static_string.html)
[`develop`](https://github.com/boostorg/static_string/tree/develop) |\
 [![Build Status](https://travis-ci.org/boostorg/static_string.svg?branch=dev\
elop)](https://travis-ci.org/boostorg/static_string) | [![Build\
 status](https://ci.appveyor.com/api/projects/status/64es4wg4w7mc5wn2/branch/\
develop?svg=true)](https://ci.appveyor.com/project/sdkrystian/static-string/b\
ranch/develop) | [![Build Status](https://krystiands.visualstudio.com/static_\
string/_apis/build/status/Boost.StaticString?branchName=develop)](https://kry\
stiands.visualstudio.com/static_string/_build/latest?definitionId=3&branchNam\
e=develop) | [![codecov](https://codecov.io/gh/boostorg/static_string/branch/\
develop/graph/badge.svg)](https://codecov.io/gh/boostorg/static_string/branch\
/develop) | [![Documentation](https://img.shields.io/badge/docs-develop-brigh\
tgreen.svg)](http://www.boost.org/doc/libs/develop/libs/static_string) |\
 [![Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](htt\
p://www.boost.org/development/tests/develop/developer/static_string.html)

## Introduction

This library provides a dynamically resizable string of characters with
compile-time fixed capacity and contiguous embedded storage in which the
characters are placed within the string object itself. Its API closely
resembles that of `std::string`.

**[Documentation](http://www.boost.org/doc/libs/release/libs/static_string)**

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/static_string
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/static_string
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-static-string

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-static-string-1.87.0.tar.gz
sha256sum: b7e60eb09ca9ca41f7b5c36599f584e8e356a5a113e6a34ebc7ed32ce25f1c35
:
name: libboost-stl-interfaces
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: C++14 and later CRTP templates for defining iterators, views, and\
 containers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# stl_interfaces

An updated C++20-friendly version of the `iterator_facade` and
`iterator_adaptor` parts of Boost.Iterator (now called `iterator_interface`);
a pre-C++20 version of C++20's `view_interface`; and a new template called
`container_interface`, meant to aid the creation of new containers; all
targeting standardization.  This library requires at least C++14.

For the iterator portion -- if you need to write an iterator,\
 `iterator_interface` turns this:

```c++
    struct repeated_chars_iterator
    {
        using value_type = char;
        using difference_type = std::ptrdiff_t;
        using pointer = char const *;
        using reference = char const;
        using iterator_category = std::random_access_iterator_tag;

        constexpr repeated_chars_iterator() noexcept :
            first_(nullptr),
            size_(0),
            n_(0)
        {}
        constexpr repeated_chars_iterator(
            char const * first,
            difference_type size,
            difference_type n) noexcept :
            first_(first),
            size_(size),
            n_(n)
        {}

        constexpr reference operator*() const noexcept
        {
            return first_[n_ % size_];
        }

        constexpr value_type operator[](difference_type n) const noexcept
        {
            return first_[(n_ + n) % size_];
        }

        constexpr repeated_chars_iterator & operator++() noexcept
        {
            ++n_;
            return *this;
        }
        constexpr repeated_chars_iterator operator++(int)noexcept
        {
            repeated_chars_iterator retval = *this;
            ++*this;
            return retval;
        }
        constexpr repeated_chars_iterator & operator+=(difference_type n)\
 noexcept
        {
            n_ += n;
            return *this;
        }

        constexpr repeated_chars_iterator & operator--() noexcept
        {
            --n_;
            return *this;
        }
        constexpr repeated_chars_iterator operator--(int)noexcept
        {
            repeated_chars_iterator retval = *this;
            --*this;
            return retval;
        }
        constexpr repeated_chars_iterator & operator-=(difference_type n)\
 noexcept
        {
            n_ -= n;
            return *this;
        }

        friend constexpr bool operator==(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.first_ == rhs.first_ && lhs.n_ == rhs.n_;
        }
        friend constexpr bool operator!=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return !(lhs == rhs);
        }
        friend constexpr bool operator<(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.first_ == rhs.first_ && lhs.n_ < rhs.n_;
        }
        friend constexpr bool operator<=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs == rhs || lhs < rhs;
        }
        friend constexpr bool operator>(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs < lhs;
        }
        friend constexpr bool operator>=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs <= lhs;
        }

        friend constexpr repeated_chars_iterator
        operator+(repeated_chars_iterator lhs, difference_type rhs) noexcept
        {
            return lhs += rhs;
        }
        friend constexpr repeated_chars_iterator
        operator+(difference_type lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs += lhs;
        }
        friend constexpr repeated_chars_iterator
        operator-(repeated_chars_iterator lhs, difference_type rhs) noexcept
        {
            return lhs -= rhs;
        }
        friend constexpr difference_type operator-(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.n_ - rhs.n_;
        }

    private:
        char const * first_;
        difference_type size_;
        difference_type n_;
    };
```

into this:

```c++
struct repeated_chars_iterator : boost::stl_interfaces::iterator_interface<
                                     repeated_chars_iterator,
                                     std::random_access_iterator_tag,
                                     char,
                                     char>
{
    constexpr repeated_chars_iterator() noexcept :
        first_(nullptr),
        size_(0),
        n_(0)
    {}
    constexpr repeated_chars_iterator(
        char const * first, difference_type size, difference_type n) noexcept\
 :
        first_(first),
        size_(size),
        n_(n)
    {}

    constexpr char operator*() const noexcept { return first_[n_ % size_]; }
    constexpr repeated_chars_iterator & operator+=(std::ptrdiff_t i) noexcept
    {
        n_ += i;
        return *this;
    }
    constexpr auto operator-(repeated_chars_iterator other) const noexcept
    {
        return n_ - other.n_;
    }

private:
    char const * first_;
    difference_type size_;
    difference_type n_;
};
```

The code size savings are even more dramatic for `view_interface` and
`container_interface`! If you don't ever write iterators, views, containers,
or view adaptors, this is not for you.

This library includes both C++20 concept constrained and SFINAE-constrained
versions.

[![License](https://img.shields.io/badge/license-boost-brightgreen.svg)](LICE\
NSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/stl_interfaces
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/stl_interfaces
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-stl-interfaces

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-stl-interfaces-1.83.0.tar.gz
sha256sum: 50d8ca5eaf0afa997fac2bad504bdefd98f30447ca7c9394715db2b2f3a9bff3
:
name: libboost-stl-interfaces
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: C++14 and later CRTP templates for defining iterators, views, and\
 containers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# stl_interfaces

An updated C++20-friendly version of the `iterator_facade` and
`iterator_adaptor` parts of Boost.Iterator (now called `iterator_interface`);
a pre-C++20 version of C++20's `view_interface`; and a new template called
`container_interface`, meant to aid the creation of new containers; all
targeting standardization.  This library requires at least C++14.

For the iterator portion -- if you need to write an iterator,\
 `iterator_interface` turns this:

```c++
    struct repeated_chars_iterator
    {
        using value_type = char;
        using difference_type = std::ptrdiff_t;
        using pointer = char const *;
        using reference = char const;
        using iterator_category = std::random_access_iterator_tag;

        constexpr repeated_chars_iterator() noexcept :
            first_(nullptr),
            size_(0),
            n_(0)
        {}
        constexpr repeated_chars_iterator(
            char const * first,
            difference_type size,
            difference_type n) noexcept :
            first_(first),
            size_(size),
            n_(n)
        {}

        constexpr reference operator*() const noexcept
        {
            return first_[n_ % size_];
        }

        constexpr value_type operator[](difference_type n) const noexcept
        {
            return first_[(n_ + n) % size_];
        }

        constexpr repeated_chars_iterator & operator++() noexcept
        {
            ++n_;
            return *this;
        }
        constexpr repeated_chars_iterator operator++(int)noexcept
        {
            repeated_chars_iterator retval = *this;
            ++*this;
            return retval;
        }
        constexpr repeated_chars_iterator & operator+=(difference_type n)\
 noexcept
        {
            n_ += n;
            return *this;
        }

        constexpr repeated_chars_iterator & operator--() noexcept
        {
            --n_;
            return *this;
        }
        constexpr repeated_chars_iterator operator--(int)noexcept
        {
            repeated_chars_iterator retval = *this;
            --*this;
            return retval;
        }
        constexpr repeated_chars_iterator & operator-=(difference_type n)\
 noexcept
        {
            n_ -= n;
            return *this;
        }

        friend constexpr bool operator==(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.first_ == rhs.first_ && lhs.n_ == rhs.n_;
        }
        friend constexpr bool operator!=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return !(lhs == rhs);
        }
        friend constexpr bool operator<(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.first_ == rhs.first_ && lhs.n_ < rhs.n_;
        }
        friend constexpr bool operator<=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs == rhs || lhs < rhs;
        }
        friend constexpr bool operator>(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs < lhs;
        }
        friend constexpr bool operator>=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs <= lhs;
        }

        friend constexpr repeated_chars_iterator
        operator+(repeated_chars_iterator lhs, difference_type rhs) noexcept
        {
            return lhs += rhs;
        }
        friend constexpr repeated_chars_iterator
        operator+(difference_type lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs += lhs;
        }
        friend constexpr repeated_chars_iterator
        operator-(repeated_chars_iterator lhs, difference_type rhs) noexcept
        {
            return lhs -= rhs;
        }
        friend constexpr difference_type operator-(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.n_ - rhs.n_;
        }

    private:
        char const * first_;
        difference_type size_;
        difference_type n_;
    };
```

into this:

```c++
struct repeated_chars_iterator : boost::stl_interfaces::iterator_interface<
                                     repeated_chars_iterator,
                                     std::random_access_iterator_tag,
                                     char,
                                     char>
{
    constexpr repeated_chars_iterator() noexcept :
        first_(nullptr),
        size_(0),
        n_(0)
    {}
    constexpr repeated_chars_iterator(
        char const * first, difference_type size, difference_type n) noexcept\
 :
        first_(first),
        size_(size),
        n_(n)
    {}

    constexpr char operator*() const noexcept { return first_[n_ % size_]; }
    constexpr repeated_chars_iterator & operator+=(std::ptrdiff_t i) noexcept
    {
        n_ += i;
        return *this;
    }
    constexpr auto operator-(repeated_chars_iterator other) const noexcept
    {
        return n_ - other.n_;
    }

private:
    char const * first_;
    difference_type size_;
    difference_type n_;
};
```

The code size savings are even more dramatic for `view_interface` and
`container_interface`! If you don't ever write iterators, views, containers,
or view adaptors, this is not for you.

This library includes both C++20 concept constrained and SFINAE-constrained
versions.

[![License](https://img.shields.io/badge/license-boost-brightgreen.svg)](LICE\
NSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/stl_interfaces
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/stl_interfaces
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-stl-interfaces

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-stl-interfaces-1.85.0.tar.gz
sha256sum: a973cdb952870bdfb81e198d4424d0c39cad36e72b9cbe2f720c6f687f02056f
:
name: libboost-stl-interfaces
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: C++14 and later CRTP templates for defining iterators, views, and\
 containers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# stl_interfaces

An updated C++20-friendly version of the `iterator_facade` and
`iterator_adaptor` parts of Boost.Iterator (now called `iterator_interface`);
a pre-C++20 version of C++20's `view_interface`; and a new template called
`container_interface`, meant to aid the creation of new containers; all
targeting standardization.  This library requires at least C++14.

For the iterator portion -- if you need to write an iterator,\
 `iterator_interface` turns this:

```c++
    struct repeated_chars_iterator
    {
        using value_type = char;
        using difference_type = std::ptrdiff_t;
        using pointer = char const *;
        using reference = char const;
        using iterator_category = std::random_access_iterator_tag;

        constexpr repeated_chars_iterator() noexcept :
            first_(nullptr),
            size_(0),
            n_(0)
        {}
        constexpr repeated_chars_iterator(
            char const * first,
            difference_type size,
            difference_type n) noexcept :
            first_(first),
            size_(size),
            n_(n)
        {}

        constexpr reference operator*() const noexcept
        {
            return first_[n_ % size_];
        }

        constexpr value_type operator[](difference_type n) const noexcept
        {
            return first_[(n_ + n) % size_];
        }

        constexpr repeated_chars_iterator & operator++() noexcept
        {
            ++n_;
            return *this;
        }
        constexpr repeated_chars_iterator operator++(int)noexcept
        {
            repeated_chars_iterator retval = *this;
            ++*this;
            return retval;
        }
        constexpr repeated_chars_iterator & operator+=(difference_type n)\
 noexcept
        {
            n_ += n;
            return *this;
        }

        constexpr repeated_chars_iterator & operator--() noexcept
        {
            --n_;
            return *this;
        }
        constexpr repeated_chars_iterator operator--(int)noexcept
        {
            repeated_chars_iterator retval = *this;
            --*this;
            return retval;
        }
        constexpr repeated_chars_iterator & operator-=(difference_type n)\
 noexcept
        {
            n_ -= n;
            return *this;
        }

        friend constexpr bool operator==(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.first_ == rhs.first_ && lhs.n_ == rhs.n_;
        }
        friend constexpr bool operator!=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return !(lhs == rhs);
        }
        friend constexpr bool operator<(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.first_ == rhs.first_ && lhs.n_ < rhs.n_;
        }
        friend constexpr bool operator<=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs == rhs || lhs < rhs;
        }
        friend constexpr bool operator>(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs < lhs;
        }
        friend constexpr bool operator>=(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs <= lhs;
        }

        friend constexpr repeated_chars_iterator
        operator+(repeated_chars_iterator lhs, difference_type rhs) noexcept
        {
            return lhs += rhs;
        }
        friend constexpr repeated_chars_iterator
        operator+(difference_type lhs, repeated_chars_iterator rhs) noexcept
        {
            return rhs += lhs;
        }
        friend constexpr repeated_chars_iterator
        operator-(repeated_chars_iterator lhs, difference_type rhs) noexcept
        {
            return lhs -= rhs;
        }
        friend constexpr difference_type operator-(
            repeated_chars_iterator lhs, repeated_chars_iterator rhs) noexcept
        {
            return lhs.n_ - rhs.n_;
        }

    private:
        char const * first_;
        difference_type size_;
        difference_type n_;
    };
```

into this:

```c++
struct repeated_chars_iterator : boost::stl_interfaces::iterator_interface<
                                     repeated_chars_iterator,
                                     std::random_access_iterator_tag,
                                     char,
                                     char>
{
    constexpr repeated_chars_iterator() noexcept :
        first_(nullptr),
        size_(0),
        n_(0)
    {}
    constexpr repeated_chars_iterator(
        char const * first, difference_type size, difference_type n) noexcept\
 :
        first_(first),
        size_(size),
        n_(n)
    {}

    constexpr char operator*() const noexcept { return first_[n_ % size_]; }
    constexpr repeated_chars_iterator & operator+=(std::ptrdiff_t i) noexcept
    {
        n_ += i;
        return *this;
    }
    constexpr auto operator-(repeated_chars_iterator other) const noexcept
    {
        return n_ - other.n_;
    }

private:
    char const * first_;
    difference_type size_;
    difference_type n_;
};
```

The code size savings are even more dramatic for `view_interface` and
`container_interface`! If you don't ever write iterators, views, containers,
or view adaptors, this is not for you.

This library includes both C++20 concept constrained and SFINAE-constrained
versions.

[![License](https://img.shields.io/badge/license-boost-brightgreen.svg)](LICE\
NSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/stl_interfaces
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/stl_interfaces
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-stl-interfaces

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-stl-interfaces-1.87.0.tar.gz
sha256sum: 121b0845ef5ab6069b12aa91a428bfe84e95cd47518635fcb906ecfea75ea825
:
name: libboost-system
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Extensible error reporting
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.System

The Boost.System library, part of [Boost C++ Libraries](https://boost.org),
implements an extensible framework for error reporting in the form of an
`error_code` class and supporting facilities.

It has been proposed for the C++11 standard, has been accepted, and
is now available as part of the standard library in the `<system_error>`
header. However, the Boost implementation has continued to evolve and
gain enhancements and additional functionality, such as support for
attaching [source locations](https://www.boost.org/doc/libs/release/libs/asse\
rt/doc/html/assert.html#source_location_support)
to `error_code`, and a `result<T>` class that can carry either a value
or an error code.

See [the documentation of System](http://boost.org/libs/system) for more
information.

Since `<system_error>` is a relatively undocumented portion of the C++
standard library, the documentation of Boost.System may be useful to you
even if you use the standard components.

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/system
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/system
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-variant2 == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-system

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-system-1.83.0.tar.gz
sha256sum: 90083dde8a2d4c4950861343e745e81b5afced2cbc60228d8993d1f8804de5b9
:
name: libboost-system
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Extensible error reporting
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.System

The Boost.System library, part of [Boost C++ Libraries](https://boost.org),
implements an extensible framework for error reporting in the form of an
`error_code` class and supporting facilities.

It has been proposed for the C++11 standard, has been accepted, and
is now available as part of the standard library in the `<system_error>`
header. However, the Boost implementation has continued to evolve and
gain enhancements and additional functionality, such as support for
attaching [source locations](https://www.boost.org/doc/libs/release/libs/asse\
rt/doc/html/assert.html#source_location_support)
to `error_code`, and a `result<T>` class that can carry either a value
or an error code.

See [the documentation of System](http://boost.org/libs/system) for more
information.

Since `<system_error>` is a relatively undocumented portion of the C++
standard library, the documentation of Boost.System may be useful to you
even if you use the standard components.

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/system
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/system
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-variant2 == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-system

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-system-1.85.0.tar.gz
sha256sum: b88ccffb3258db51ed9ddb0fc3c297df47efbc83a90cefcb6cb1fb630ad46ad1
:
name: libboost-system
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Extensible error reporting
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.System

The Boost.System library, part of [Boost C++ Libraries](https://boost.org),
implements an extensible framework for error reporting in the form of an
`error_code` class and supporting facilities.

It has been proposed for the C++11 standard, has been accepted, and
is now available as part of the standard library in the `<system_error>`
header. However, the Boost implementation has continued to evolve and
gain enhancements and additional functionality, such as support for
attaching [source locations](https://www.boost.org/doc/libs/release/libs/asse\
rt/doc/html/assert.html#source_location_support)
to `error_code`, and a `result<T>` class that can carry either a value
or an error code.

See [the documentation of System](http://boost.org/libs/system) for more
information.

Since `<system_error>` is a relatively undocumented portion of the C++
standard library, the documentation of Boost.System may be useful to you
even if you use the standard components.

## License

Distributed under the
[Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/system
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/system
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-variant2 == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-system

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-system-1.87.0.tar.gz
sha256sum: 8a6612dd2df413fbdf6c441ad6fe17a3a9b67303c2fac2aa4b2c532a8fc4c207
:
name: libboost-test
version: 1.83.0
language: c++
project: boost
summary: Support for simple program testing, full unit testing, and for\
 program execution monitoring
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
![boosttest logo](doc/html/images/boost.test.logo.png)

# What is Boost.Test?
Boost.Test is a C++03/11/14/17 unit testing library, available on a wide\
 range of platforms and compilers.

The library is part of [Boost](http://www.boost.org). The latest release
of the library is available from the boost web site.

Full instructions for use of this library can be accessed from
http://www.boost.org/doc/libs/release/libs/test/

# Key features

* Easy to get started with:
    1. download and deflate the latest boost archive
    1. create a test module with this (header version):
        ```
        #define BOOST_TEST_MODULE your_test_module
        #include <boost/test/included/unit_test.hpp>
        ```
    1. Write your first test case:
        ```
        BOOST_AUTO_TEST_CASE( your_test_case ) {
            std::vector<int> a{1, 2};
            std::vector<int> b{1, 2};
            BOOST_TEST( a == b );
        }
        ```
    1. build and run
    1. done
* powerful and unique test assertion macro [`BOOST_TEST`](http://www.boost.or\
g/doc/libs/release/libs/test/doc/html/boost_test/testing_tools/boost_test_uni\
versal_macro.html), that understands floating points, collections, strings...\
 and uses appropriate comparison paradigm
* self-registering test cases, organize cases in test suites, apply fixtures\
 on test cases, suites or globally
* provide assertion [context](http://www.boost.org/doc/libs/release/libs/test\
/doc/html/boost_test/test_output/test_tools_support_for_logging/contexts.html\
) for advanced diagnostic on failure
* powerful and extensible [dataset](http://www.boost.org/doc/libs/release/lib\
s/test/doc/html/boost_test/tests_organization/test_cases/test_case_generation\
.html) tests
* add [decoration](http://www.boost.org/doc/libs/release/libs/test/doc/html/b\
oost_test/tests_organization/decorators.html) to test cases and suites for\
 [advanced description](http://www.boost.org/doc/libs/release/libs/test/doc/h\
tml/boost_test/tests_organization/semantic.html), [group/label](http://www.bo\
ost.org/doc/libs/release/libs/test/doc/html/boost_test/tests_organization/tes\
ts_grouping.html), and [dependencies](http://www.boost.org/doc/libs/release/l\
ibs/test/doc/html/boost_test/tests_organization/tests_dependencies.html)
* powerful command line options and test case filters
* extensible logging, XML and JUNIT outputs for third-party tools (eg. cont.\
 integration)
* various usage (shared/static library/header only) for faster integration\
 and/or compilation/build cycles, smaller binaries

# Copyright and license
Copyright 2001-2014, Gennadiy Rozental.<br/>
Copyright 2013-2020, Boost.Test team.

Distributed under the Boost Software License, Version 1.0.<br/>
(Get a copy at www.boost.org/LICENSE_1_0.txt)

# Contribute
Please read [this document](CONTRIBUTE.md) to get started.

# Build Status

Boost.Test uses mostly the facility provided by our wonderful Boost testers\
 (column `Tests` below).

Branch          | Deps | Docs | Tests | Github Actions |
:-------------: | ---- | ---- | ----- | -------------- |
[`master`](https://github.com/boostorg/test/tree/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/test.html)   | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/test.html) | [![Enter the Matrix](https://img.shields\
.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/te\
sts/master/developer/test.html) | [![Build Status](https://github.com/boostor\
g/test/workflows/CI/badge.svg?branch=master)](https://github.com/boostorg/tes\
t/actions)
[`develop`](https://github.com/boostorg/test/tree/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/test.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/test.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/test.html) | [![Build Status](https://github.com/boo\
storg/test/workflows/CI/badge.svg?branch=develop)](https://github.com/boostor\
g/test/actions)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/test
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/test
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-test-1.83.0.tar.gz
sha256sum: 1f72da38372b8d4e53560b14b26192777be097e55d7c45d25b833a5b16f13072
:
name: libboost-test
version: 1.85.0
language: c++
project: boost
summary: Support for simple program testing, full unit testing, and for\
 program execution monitoring
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
![boosttest logo](doc/html/images/boost.test.logo.png)

# What is Boost.Test?
Boost.Test is a C++11/14/17 unit testing library, available on a wide range\
 of platforms and compilers.

The library is part of [Boost](http://www.boost.org). The latest release
of the library is available from the boost web site.

Full instructions for use of this library can be accessed from
http://www.boost.org/doc/libs/release/libs/test/

# Key features

* Easy to get started with:
    1. download and deflate the latest boost archive
    1. create a test module with this (header version):
        ```
        #define BOOST_TEST_MODULE your_test_module
        #include <boost/test/included/unit_test.hpp>
        ```
    1. Write your first test case:
        ```
        BOOST_AUTO_TEST_CASE( your_test_case ) {
            std::vector<int> a{1, 2};
            std::vector<int> b{1, 2};
            BOOST_TEST( a == b );
        }
        ```
    1. build and run
    1. done
* powerful and unique test assertion macro [`BOOST_TEST`](http://www.boost.or\
g/doc/libs/release/libs/test/doc/html/boost_test/testing_tools/boost_test_uni\
versal_macro.html), that understands floating points, collections, strings...\
 and uses appropriate comparison paradigm
* self-registering test cases, organize cases in test suites, apply fixtures\
 on test cases, suites or globally
* provide assertion [context](http://www.boost.org/doc/libs/release/libs/test\
/doc/html/boost_test/test_output/test_tools_support_for_logging/contexts.html\
) for advanced diagnostic on failure
* powerful and extensible [dataset](http://www.boost.org/doc/libs/release/lib\
s/test/doc/html/boost_test/tests_organization/test_cases/test_case_generation\
.html) tests
* add [decoration](http://www.boost.org/doc/libs/release/libs/test/doc/html/b\
oost_test/tests_organization/decorators.html) to test cases and suites for\
 [advanced description](http://www.boost.org/doc/libs/release/libs/test/doc/h\
tml/boost_test/tests_organization/semantic.html), [group/label](http://www.bo\
ost.org/doc/libs/release/libs/test/doc/html/boost_test/tests_organization/tes\
ts_grouping.html), and [dependencies](http://www.boost.org/doc/libs/release/l\
ibs/test/doc/html/boost_test/tests_organization/tests_dependencies.html)
* powerful command line options and test case filters
* extensible logging, XML and JUNIT outputs for third-party tools (eg. cont.\
 integration)
* various usage (shared/static library/header only) for faster integration\
 and/or compilation/build cycles, smaller binaries

# Copyright and license
Copyright 2001-2014, Gennadiy Rozental.<br/>
Copyright 2013-2020, Boost.Test team.

Distributed under the Boost Software License, Version 1.0.<br/>
(Get a copy at www.boost.org/LICENSE_1_0.txt)

# Contribute
Please read [this document](CONTRIBUTE.md) to get started.

# Build Status

Boost.Test uses mostly the facility provided by our wonderful Boost testers\
 (column `Tests` below).

Branch          | Deps | Docs | Tests | Github Actions |
:-------------: | ---- | ---- | ----- | -------------- |
[`master`](https://github.com/boostorg/test/tree/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/test.html)   | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/test.html) | [![Enter the Matrix](https://img.shields\
.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/te\
sts/master/developer/test.html) | [![Build Status](https://github.com/boostor\
g/test/workflows/CI/badge.svg?branch=master)](https://github.com/boostorg/tes\
t/actions)
[`develop`](https://github.com/boostorg/test/tree/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/test.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/test.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/test.html) | [![Build Status](https://github.com/boo\
storg/test/workflows/CI/badge.svg?branch=develop)](https://github.com/boostor\
g/test/actions)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/test
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/test
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-exception == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-numeric-conversion == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-test-1.85.0.tar.gz
sha256sum: 772ca73e8ca52ea07913303fa1b7498c11e2ec5813b7fcaaf97185370c719193
:
name: libboost-test
version: 1.87.0
language: c++
project: boost
summary: Support for simple program testing, full unit testing, and for\
 program execution monitoring
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
![boosttest logo](doc/html/images/boost.test.logo.png)

# What is Boost.Test?
Boost.Test is a C++11/14/17 unit testing library, available on a wide range\
 of platforms and compilers.

The library is part of [Boost](http://www.boost.org). The latest release
of the library is available from the boost web site.

Full instructions for use of this library can be accessed from
http://www.boost.org/doc/libs/release/libs/test/

# Key features

* Easy to get started with:
    1. download and deflate the latest boost archive
    1. create a test module with this (header version):
        ```
        #define BOOST_TEST_MODULE your_test_module
        #include <boost/test/included/unit_test.hpp>
        ```
    1. Write your first test case:
        ```
        BOOST_AUTO_TEST_CASE( your_test_case ) {
            std::vector<int> a{1, 2};
            std::vector<int> b{1, 2};
            BOOST_TEST( a == b );
        }
        ```
    1. build and run
    1. done
* powerful and unique test assertion macro [`BOOST_TEST`](http://www.boost.or\
g/doc/libs/release/libs/test/doc/html/boost_test/testing_tools/boost_test_uni\
versal_macro.html), that understands floating points, collections, strings...\
 and uses appropriate comparison paradigm
* self-registering test cases, organize cases in test suites, apply fixtures\
 on test cases, suites or globally
* provide assertion [context](http://www.boost.org/doc/libs/release/libs/test\
/doc/html/boost_test/test_output/test_tools_support_for_logging/contexts.html\
) for advanced diagnostic on failure
* powerful and extensible [dataset](http://www.boost.org/doc/libs/release/lib\
s/test/doc/html/boost_test/tests_organization/test_cases/test_case_generation\
.html) tests
* add [decoration](http://www.boost.org/doc/libs/release/libs/test/doc/html/b\
oost_test/tests_organization/decorators.html) to test cases and suites for\
 [advanced description](http://www.boost.org/doc/libs/release/libs/test/doc/h\
tml/boost_test/tests_organization/semantic.html), [group/label](http://www.bo\
ost.org/doc/libs/release/libs/test/doc/html/boost_test/tests_organization/tes\
ts_grouping.html), and [dependencies](http://www.boost.org/doc/libs/release/l\
ibs/test/doc/html/boost_test/tests_organization/tests_dependencies.html)
* powerful command line options and test case filters
* extensible logging, XML and JUNIT outputs for third-party tools (eg. cont.\
 integration)
* various usage (shared/static library/header only) for faster integration\
 and/or compilation/build cycles, smaller binaries

# Copyright and license
Copyright 2001-2014, Gennadiy Rozental.<br/>
Copyright 2013-2020, Boost.Test team.

Distributed under the Boost Software License, Version 1.0.<br/>
(Get a copy at www.boost.org/LICENSE_1_0.txt)

# Contribute
Please read [this document](CONTRIBUTE.md) to get started.

# Build Status

Boost.Test uses mostly the facility provided by our wonderful Boost testers\
 (column `Tests` below).

Branch          | Deps | Docs | Tests | Github Actions |
:-------------: | ---- | ---- | ----- | -------------- |
[`master`](https://github.com/boostorg/test/tree/master) |\
 [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://\
pdimov.github.io/boostdep-report/master/test.html)   | [![Documentation](http\
s://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/d\
oc/libs/master/doc/html/test.html) | [![Enter the Matrix](https://img.shields\
.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/te\
sts/master/developer/test.html) | [![Build Status](https://github.com/boostor\
g/test/workflows/CI/badge.svg?branch=master)](https://github.com/boostorg/tes\
t/actions)
[`develop`](https://github.com/boostorg/test/tree/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/test.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/test.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/test.html) | [![Build Status](https://github.com/boo\
storg/test/workflows/CI/badge.svg?branch=develop)](https://github.com/boostor\
g/test/actions)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/test
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/test
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-algorithm == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-exception == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-numeric-conversion == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-test-1.87.0.tar.gz
sha256sum: 4c1821fd88c4b02ef7e77292be583a1389059818c642f87de40f9441ace4588b
:
name: libboost-thread
version: 1.83.0
language: c++
project: boost
summary: Portable C++ multi-threading. C++03, C++11, C++14, C++17
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
thread
======

Portable C++ multi-threading. C++11, C++14.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).



\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/thread
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/thread
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-algorithm == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-atomic == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-chrono == 1.83.0
depends: libboost-concept-check == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-date-time == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-function == 1.83.0
depends: libboost-intrusive == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-thread

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-thread-1.83.0.tar.gz
sha256sum: 6b638826495b6b27f8f36540e70a488c63e74b78af1ec8a709fff7fe633719b7
:
name: libboost-thread
version: 1.85.0
language: c++
project: boost
summary: Portable C++ multi-threading. C++11, C++14, C++17
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
thread
======

Portable C++ multi-threading. C++11, C++14.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).



\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/thread
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/thread
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-atomic == 1.85.0
depends: libboost-bind == 1.85.0
depends: libboost-chrono == 1.85.0
depends: libboost-concept-check == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-date-time == 1.85.0
depends: libboost-exception == 1.85.0
depends: libboost-function == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tuple == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-thread

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-thread-1.85.0.tar.gz
sha256sum: c048767b0db638aefad36dfcb58a996b0a52fcec9e61c5f99c7f46c214e70876
:
name: libboost-thread
version: 1.87.0
language: c++
project: boost
summary: Portable C++ multi-threading. C++11, C++14, C++17
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
thread
======

Portable C++ multi-threading. C++11, C++14.

### License

Distributed under the [Boost Software License, Version 1.0](http://boost.org/\
LICENSE_1_0.txt).



\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/thread
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/thread
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-atomic == 1.87.0
depends: libboost-bind == 1.87.0
depends: libboost-chrono == 1.87.0
depends: libboost-concept-check == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-date-time == 1.87.0
depends: libboost-exception == 1.87.0
depends: libboost-function == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-move == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-tuple == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
depends: libboost-winapi == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-thread

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-thread-1.87.0.tar.gz
sha256sum: 1db09ea81ca7acbb426e55a912fc8e6ce945173ae027a55a3ccb3b7bbbc89b16
:
name: libboost-throw-exception
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A common infrastructure for throwing exceptions from Boost libraries
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
throw_exception
===============

Common infrastructure for throwing exceptions

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/throw_exception
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/throw_exception
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-throw-exception

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-throw-exception-1.83.0.tar.gz
sha256sum: 3d19217265bb503acff59b8c65ead30685149e8b3ae430be3efc00354be182f7
:
name: libboost-throw-exception
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A common infrastructure for throwing exceptions from Boost libraries
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
throw_exception
===============

Common infrastructure for throwing exceptions

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/throw_exception
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/throw_exception
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-throw-exception

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-throw-exception-1.85.0.tar.gz
sha256sum: b2678db00f7bb496cdff9d6029b3661aa80fd835c9857e6afae8f44141c5fbcd
:
name: libboost-throw-exception
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A common infrastructure for throwing exceptions from Boost libraries
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
throw_exception
===============

Common infrastructure for throwing exceptions

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/throw_exception
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/throw_exception
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-throw-exception

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-throw-exception-1.87.0.tar.gz
sha256sum: cefb9a3fa30c0b1ce24762089de5065406e03c6073fb5454d13b719a93f50599
:
name: libboost-timer
version: 1.83.0
language: c++
project: boost
summary: Event timer, progress timer, and progress display classes
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/timer
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/timer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-io == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-config == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-timer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-timer-1.83.0.tar.gz
sha256sum: 294441dbc2ac66834c78752bb1124f28258f5ba8084cccf90cd70e726b8a09ef
:
name: libboost-timer
version: 1.85.0
language: c++
project: boost
summary: Event timer, progress timer, and progress display classes
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/timer
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/timer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-io == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-timer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-timer-1.85.0.tar.gz
sha256sum: 8c50c31e1740c3460fa567acf1a15ca5e061e379c9e5756a88450f0f11f1ccfb
:
name: libboost-timer
version: 1.87.0
language: c++
project: boost
summary: Event timer, progress timer, and progress display classes
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/timer
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/timer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-io == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-timer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-timer-1.87.0.tar.gz
sha256sum: 11f1f7255c680a5c3839d9ead1f02b7c542f186732ba5d32987789f8e1f5fcd5
:
name: libboost-tokenizer
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Break of a string or other character sequence into a series of tokens
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\



# [Boost.Tokenizer](http://boost.org/libs/tokenizer)



Boost.Tokenizer is a part of [Boost C++ Libraries](http://github.com/boostorg\
).  The Boost.Tokenizer package provides a flexible and easy-to-use way to\
 break a string or other character sequence into a series of tokens.

## License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

## Properties

* C++03
* Header-Only

## Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/tokenizer/tree/master) | [![Build\
 Status](https://github.com/boostorg/tokenizer/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/tokenizer/actions?query=bran\
ch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/vc8\
1nhd5i2f6hi8y/branch/master?svg=true)](https://ci.appveyor.com/project/jeking\
3/tokenizer-c6pnd/branch/master) | [![Coverity Scan Build Status](https://sca\
n.coverity.com/projects/15854/badge.svg)](https://scan.coverity.com/projects/\
boostorg-tokenizer) | [![codecov](https://codecov.io/gh/boostorg/tokenizer/br\
anch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/tokenizer/branch\
/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)]\
(https://pdimov.github.io/boostdep-report/master/tokenizer.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/tokenizer/doc/index.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/tokenizer.html)
[`develop`](https://github.com/boostorg/tokenizer/tree/develop) | [![Build\
 Status](https://github.com/boostorg/tokenizer/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/tokenizer/actions?query=bra\
nch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/v\
c81nhd5i2f6hi8y/branch/develop?svg=true)](https://ci.appveyor.com/project/jek\
ing3/tokenizer-c6pnd/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15854/badge.svg)](https://scan.co\
verity.com/projects/boostorg-tokenizer) | [![codecov](https://codecov.io/gh/b\
oostorg/tokenizer/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/tokenizer/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/tok\
enizer.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/tokenizer/doc/ind\
ex.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-b\
rightgreen.svg)](http://www.boost.org/development/tests/develop/developer/tok\
enizer.html)


## Overview


> break up a phrase into words.

 <a target="_blank" href="http://melpon.org/wandbox/permlink/kZeKmQAtqDlpn8if\
">![Try it online][badge.wandbox]</a>

```c++
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>

int main(){
    std::string s = "This is,  a test";
    typedef boost::tokenizer<> Tok;
    Tok tok(s);
    for (Tok::iterator beg = tok.begin(); beg != tok.end(); ++beg){
        std::cout << *beg << "\n";
    }
}

```

> Using Range-based for loop (>c++11)

 <a target="_blank" href="http://melpon.org/wandbox/permlink/z94YLs8PdYSh7rXz\
">![Try it online][badge.wandbox]</a>
```c++
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>

int main(){
    std::string s = "This is,  a test";
    boost::tokenizer<> tok(s);
    for (auto token: tok) {
        std::cout << token << "\n";
    }
}
```

## Documentation

Documentation can be found at [Boost.Tokenizer](http://boost.org/libs/tokeniz\
er)

## Related Material
[Boost.Tokenizer](http://theboostcpplibraries.com/boost.tokenizer) Chapter 10\
 at theboostcpplibraries.com, contains several examples including\
 **escaped_list_separator**.

##Contributing

>This library is being maintained as a part of the [Boost Library Official\
 Maintainer Program](http://beta.boost.org/community/official_library_maintai\
ner_program.html)


Open Issues on <a target="_blank" href="https://svn.boost.org/trac/boost/quer\
y?status=assigned&status=new&status=reopened&component=tokenizer&col=id&col=s\
ummary&col=status&col=owner&col=type&col=milestone&order=priority">![][badge.\
trac]</a>



##Acknowledgements
>From the author:
>
I wish to thank the members of the boost mailing list, whose comments,\
 compliments, and criticisms during both the development and formal review\
 helped make the Tokenizer library what it is. I especially wish to thank\
 Aleksey Gurtovoy for the idea of using a pair of iterators to specify the\
 input, instead of a string. I also wish to thank Jeremy Siek for his idea of\
 providing a container interface for the token iterators and for simplifying\
 the template parameters for the TokenizerFunctions. He and Daryle Walker\
 also emphasized the need to separate interface and implementation. Gary\
 Powell sparked the idea of using the isspace and ispunct as the defaults for\
 char_delimiters_separator. Jeff Garland provided ideas on how to change to\
 order of the template parameters in order to make tokenizer easier to\
 declare. Thanks to Douglas Gregor who served as review manager and provided\
 many insights both on the boost list and in e-mail on how to polish up the\
 implementation and presentation of Tokenizer. Finally, thanks to Beman Dawes\
 who integrated the final version into the boost distribution.

##License
Distributed under the Boost Software License, Version 1.0. (See accompanying\
 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)


[badge.Wandbox]: https://img.shields.io/badge/try%20it-online-blue.svg
[badge.Trac]:https://svn.boost.org/htdocs/common/trac_logo_mini.png


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/tokenizer
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/tokenizer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tokenizer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tokenizer-1.83.0.tar.gz
sha256sum: d140e41127e905b55c3d0a0e9da4b6d525775a7390524ce04d23036115c6e79a
:
name: libboost-tokenizer
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Break of a string or other character sequence into a series of tokens
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\



# [Boost.Tokenizer](http://boost.org/libs/tokenizer)



Boost.Tokenizer is a part of [Boost C++ Libraries](http://github.com/boostorg\
).  The Boost.Tokenizer package provides a flexible and easy-to-use way to\
 break a string or other character sequence into a series of tokens.

## License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

## Properties

* C++03
* Header-Only

## Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/tokenizer/tree/master) | [![Build\
 Status](https://github.com/boostorg/tokenizer/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/tokenizer/actions?query=bran\
ch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/vc8\
1nhd5i2f6hi8y/branch/master?svg=true)](https://ci.appveyor.com/project/jeking\
3/tokenizer-c6pnd/branch/master) | [![Coverity Scan Build Status](https://sca\
n.coverity.com/projects/15854/badge.svg)](https://scan.coverity.com/projects/\
boostorg-tokenizer) | [![codecov](https://codecov.io/gh/boostorg/tokenizer/br\
anch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/tokenizer/branch\
/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)]\
(https://pdimov.github.io/boostdep-report/master/tokenizer.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/tokenizer/doc/index.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/tokenizer.html)
[`develop`](https://github.com/boostorg/tokenizer/tree/develop) | [![Build\
 Status](https://github.com/boostorg/tokenizer/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/tokenizer/actions?query=bra\
nch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/v\
c81nhd5i2f6hi8y/branch/develop?svg=true)](https://ci.appveyor.com/project/jek\
ing3/tokenizer-c6pnd/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15854/badge.svg)](https://scan.co\
verity.com/projects/boostorg-tokenizer) | [![codecov](https://codecov.io/gh/b\
oostorg/tokenizer/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/tokenizer/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/tok\
enizer.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/tokenizer/doc/ind\
ex.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-b\
rightgreen.svg)](http://www.boost.org/development/tests/develop/developer/tok\
enizer.html)


## Overview


> break up a phrase into words.

 <a target="_blank" href="http://melpon.org/wandbox/permlink/kZeKmQAtqDlpn8if\
">![Try it online][badge.wandbox]</a>

```c++
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>

int main(){
    std::string s = "This is,  a test";
    typedef boost::tokenizer<> Tok;
    Tok tok(s);
    for (Tok::iterator beg = tok.begin(); beg != tok.end(); ++beg){
        std::cout << *beg << "\n";
    }
}

```

> Using Range-based for loop (>c++11)

 <a target="_blank" href="http://melpon.org/wandbox/permlink/z94YLs8PdYSh7rXz\
">![Try it online][badge.wandbox]</a>
```c++
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>

int main(){
    std::string s = "This is,  a test";
    boost::tokenizer<> tok(s);
    for (auto token: tok) {
        std::cout << token << "\n";
    }
}
```

## Documentation

Documentation can be found at [Boost.Tokenizer](http://boost.org/libs/tokeniz\
er)

## Related Material
[Boost.Tokenizer](http://theboostcpplibraries.com/boost.tokenizer) Chapter 10\
 at theboostcpplibraries.com, contains several examples including\
 **escaped_list_separator**.

##Contributing

>This library is being maintained as a part of the [Boost Library Official\
 Maintainer Program](http://beta.boost.org/community/official_library_maintai\
ner_program.html)


Open Issues on <a target="_blank" href="https://svn.boost.org/trac/boost/quer\
y?status=assigned&status=new&status=reopened&component=tokenizer&col=id&col=s\
ummary&col=status&col=owner&col=type&col=milestone&order=priority">![][badge.\
trac]</a>



##Acknowledgements
>From the author:
>
I wish to thank the members of the boost mailing list, whose comments,\
 compliments, and criticisms during both the development and formal review\
 helped make the Tokenizer library what it is. I especially wish to thank\
 Aleksey Gurtovoy for the idea of using a pair of iterators to specify the\
 input, instead of a string. I also wish to thank Jeremy Siek for his idea of\
 providing a container interface for the token iterators and for simplifying\
 the template parameters for the TokenizerFunctions. He and Daryle Walker\
 also emphasized the need to separate interface and implementation. Gary\
 Powell sparked the idea of using the isspace and ispunct as the defaults for\
 char_delimiters_separator. Jeff Garland provided ideas on how to change to\
 order of the template parameters in order to make tokenizer easier to\
 declare. Thanks to Douglas Gregor who served as review manager and provided\
 many insights both on the boost list and in e-mail on how to polish up the\
 implementation and presentation of Tokenizer. Finally, thanks to Beman Dawes\
 who integrated the final version into the boost distribution.

##License
Distributed under the Boost Software License, Version 1.0. (See accompanying\
 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)


[badge.Wandbox]: https://img.shields.io/badge/try%20it-online-blue.svg
[badge.Trac]:https://svn.boost.org/htdocs/common/trac_logo_mini.png


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/tokenizer
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/tokenizer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tokenizer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tokenizer-1.85.0.tar.gz
sha256sum: a7f02bbc5ed8b8e09d51ec369d50097352aa491c1b1d4954f921416a27b1d844
:
name: libboost-tokenizer
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Break of a string or other character sequence into a series of tokens
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\



# [Boost.Tokenizer](http://boost.org/libs/tokenizer)



Boost.Tokenizer is a part of [Boost C++ Libraries](http://github.com/boostorg\
).  The Boost.Tokenizer package provides a flexible and easy-to-use way to\
 break a string or other character sequence into a series of tokens.

## License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

## Properties

* C++03
* Header-Only

## Build Status

Branch          | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/tokenizer/tree/master) | [![Build\
 Status](https://github.com/boostorg/tokenizer/actions/workflows/ci.yml/badge\
.svg?branch=master)](https://github.com/boostorg/tokenizer/actions?query=bran\
ch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/vc8\
1nhd5i2f6hi8y/branch/master?svg=true)](https://ci.appveyor.com/project/jeking\
3/tokenizer-c6pnd/branch/master) | [![Coverity Scan Build Status](https://sca\
n.coverity.com/projects/15854/badge.svg)](https://scan.coverity.com/projects/\
boostorg-tokenizer) | [![codecov](https://codecov.io/gh/boostorg/tokenizer/br\
anch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/tokenizer/branch\
/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)]\
(https://pdimov.github.io/boostdep-report/master/tokenizer.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(https://www.boost.org/doc/libs/master/libs/tokenizer/doc/index.html) |\
 [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.\
svg)](http://www.boost.org/development/tests/master/developer/tokenizer.html)
[`develop`](https://github.com/boostorg/tokenizer/tree/develop) | [![Build\
 Status](https://github.com/boostorg/tokenizer/actions/workflows/ci.yml/badge\
.svg?branch=develop)](https://github.com/boostorg/tokenizer/actions?query=bra\
nch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/v\
c81nhd5i2f6hi8y/branch/develop?svg=true)](https://ci.appveyor.com/project/jek\
ing3/tokenizer-c6pnd/branch/develop) | [![Coverity Scan Build\
 Status](https://scan.coverity.com/projects/15854/badge.svg)](https://scan.co\
verity.com/projects/boostorg-tokenizer) | [![codecov](https://codecov.io/gh/b\
oostorg/tokenizer/branch/develop/graph/badge.svg)](https://codecov.io/gh/boos\
torg/tokenizer/branch/develop) | [![Deps](https://img.shields.io/badge/deps-d\
evelop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/tok\
enizer.html) | [![Documentation](https://img.shields.io/badge/docs-develop-br\
ightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/tokenizer/doc/ind\
ex.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-b\
rightgreen.svg)](http://www.boost.org/development/tests/develop/developer/tok\
enizer.html)


## Overview


> break up a phrase into words.

 <a target="_blank" href="http://melpon.org/wandbox/permlink/kZeKmQAtqDlpn8if\
">![Try it online][badge.wandbox]</a>

```c++
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>

int main(){
    std::string s = "This is,  a test";
    typedef boost::tokenizer<> Tok;
    Tok tok(s);
    for (Tok::iterator beg = tok.begin(); beg != tok.end(); ++beg){
        std::cout << *beg << "\n";
    }
}

```

> Using Range-based for loop (>c++11)

 <a target="_blank" href="http://melpon.org/wandbox/permlink/z94YLs8PdYSh7rXz\
">![Try it online][badge.wandbox]</a>
```c++
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>

int main(){
    std::string s = "This is,  a test";
    boost::tokenizer<> tok(s);
    for (auto token: tok) {
        std::cout << token << "\n";
    }
}
```

## Documentation

Documentation can be found at [Boost.Tokenizer](http://boost.org/libs/tokeniz\
er)

## Related Material
[Boost.Tokenizer](http://theboostcpplibraries.com/boost.tokenizer) Chapter 10\
 at theboostcpplibraries.com, contains several examples including\
 **escaped_list_separator**.

##Contributing

>This library is being maintained as a part of the [Boost Library Official\
 Maintainer Program](http://beta.boost.org/community/official_library_maintai\
ner_program.html)


Open Issues on <a target="_blank" href="https://svn.boost.org/trac/boost/quer\
y?status=assigned&status=new&status=reopened&component=tokenizer&col=id&col=s\
ummary&col=status&col=owner&col=type&col=milestone&order=priority">![][badge.\
trac]</a>



##Acknowledgements
>From the author:
>
I wish to thank the members of the boost mailing list, whose comments,\
 compliments, and criticisms during both the development and formal review\
 helped make the Tokenizer library what it is. I especially wish to thank\
 Aleksey Gurtovoy for the idea of using a pair of iterators to specify the\
 input, instead of a string. I also wish to thank Jeremy Siek for his idea of\
 providing a container interface for the token iterators and for simplifying\
 the template parameters for the TokenizerFunctions. He and Daryle Walker\
 also emphasized the need to separate interface and implementation. Gary\
 Powell sparked the idea of using the isspace and ispunct as the defaults for\
 char_delimiters_separator. Jeff Garland provided ideas on how to change to\
 order of the template parameters in order to make tokenizer easier to\
 declare. Thanks to Douglas Gregor who served as review manager and provided\
 many insights both on the boost list and in e-mail on how to polish up the\
 implementation and presentation of Tokenizer. Finally, thanks to Beman Dawes\
 who integrated the final version into the boost distribution.

##License
Distributed under the Boost Software License, Version 1.0. (See accompanying\
 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)


[badge.Wandbox]: https://img.shields.io/badge/try%20it-online-blue.svg
[badge.Trac]:https://svn.boost.org/htdocs/common/trac_logo_mini.png


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/tokenizer
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/tokenizer
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tokenizer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tokenizer-1.87.0.tar.gz
sha256sum: b796ba5f8bc7a94f0fc84587dc9ebd36346675f1b5fdc526c2cabcb2cb9dfc7e
:
name: libboost-tti
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Type Traits Introspection library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/tti
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/tti
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-function-types == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tti

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tti-1.83.0.tar.gz
sha256sum: 9ea0caf60083bc1d682f3352dd9a532571ac6123b1d65c5c26d4b295e533d7b1
:
name: libboost-tti
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Type Traits Introspection library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/tti
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/tti
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-function-types == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tti

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tti-1.85.0.tar.gz
sha256sum: 8b344ae03f2a5d1233a1462ffe2a6b25c695a15c8eab3074fd01087efc5460e1
:
name: libboost-tti
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Type Traits Introspection library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/tti
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/tti
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-function-types == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tti

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tti-1.87.0.tar.gz
sha256sum: 85094d06bb57da47db52c7b4f0758839ac62b8ede11424a16f2b7e0228b0087e
:
name: libboost-tuple
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Ease definition of functions returning multiple values, and more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/tuple
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/tuple
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tuple

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tuple-1.83.0.tar.gz
sha256sum: 7bc02e8221dbd92be1852fda13abf84cd9195e20ceddc0fab2eda721d68eedaf
:
name: libboost-tuple
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Ease definition of functions returning multiple values, and more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/tuple
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/tuple
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tuple

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tuple-1.85.0.tar.gz
sha256sum: f35bcb8f08491fc2b4698d1320af62d651489dd5c42013713486a3b072fb30ea
:
name: libboost-tuple
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Ease definition of functions returning multiple values, and more
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/tuple
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/tuple
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-tuple

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-tuple-1.87.0.tar.gz
sha256sum: 75e64f3bcdd20e6730b4a32a6938e5a36b6b174d64651240a914d7261836f3a6
:
name: libboost-type-erasure
version: 1.83.0
language: c++
project: boost
summary: Runtime polymorphism based on concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/type_erasure
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/type_erasure
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-thread == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-vmd == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-erasure

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-erasure-1.83.0.tar.gz
sha256sum: 7eb5cbcadfc85b427a5384ccb35b8cf05e36d036a0e37e6660e70529dcac90b4
:
name: libboost-type-erasure
version: 1.85.0
language: c++
project: boost
summary: Runtime polymorphism based on concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/type_erasure
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/type_erasure
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-thread == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-vmd == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-erasure

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-erasure-1.85.0.tar.gz
sha256sum: f6f918927e2710a4a48caa94561f9af79c07f8b64d34405fc5a164729a4bdb09
:
name: libboost-type-erasure
version: 1.87.0
language: c++
project: boost
summary: Runtime polymorphism based on concepts
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/type_erasure
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/type_erasure
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-thread == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-vmd == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-erasure

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-erasure-1.87.0.tar.gz
sha256sum: 3beecae2b02727d0cf614cfd7b2657a503333ab2f603a47a0b812ca041f6fe91
:
name: libboost-type-index
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Runtime/Compile time copyable type info
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.TypeIndex](https://boost.org/libs/type_index)
Boost.TypeIndex is a part of the [Boost C++ Libraries](https://github.com/boo\
storg). It is a runtime/compile time copyable type info.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/type_index/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/type_index\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/197a5imq10dqx6r8/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/type-index/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/apolukhin/type_index/badge.png?branch=dev\
elop)](https://coveralls.io/r/apolukhin/type_index?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/type_\
index.html)
Master branch:  | [![CI](https://github.com/boostorg/type_index/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/type_index/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/197a5imq10dqx6r8/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/type-index/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/apolukhin/type_index/badge.png?branch=master)](https://coveral\
ls.io/r/apolukhin/type_index?branch=master) | [details...](https://www.boost.\
org/development/tests/master/developer/type_index.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_typeindex.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/type_index
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/type_index
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-index

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-index-1.83.0.tar.gz
sha256sum: 8948c1cdcbd484ec64da69d14a3dab0ef4075d52e7323a28574c2293dd929f60
:
name: libboost-type-index
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Runtime/Compile time copyable type info
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.TypeIndex](https://boost.org/libs/type_index)
Boost.TypeIndex is a part of the [Boost C++ Libraries](https://github.com/boo\
storg). It is a runtime/compile time copyable type info.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/type_index/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/type_index\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/197a5imq10dqx6r8/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/type-index/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/apolukhin/type_index/badge.png?branch=dev\
elop)](https://coveralls.io/r/apolukhin/type_index?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/type_\
index.html)
Master branch:  | [![CI](https://github.com/boostorg/type_index/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/type_index/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/197a5imq10dqx6r8/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/type-index/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/apolukhin/type_index/badge.png?branch=master)](https://coveral\
ls.io/r/apolukhin/type_index?branch=master) | [details...](https://www.boost.\
org/development/tests/master/developer/type_index.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_typeindex.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/type_index
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/type_index
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-index

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-index-1.85.0.tar.gz
sha256sum: 38dbf5ce7750fa3af2cd05ae388222e97915efa6e3f65fe071fe9887f8a57592
:
name: libboost-type-index
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Runtime/Compile time copyable type info
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.TypeIndex](https://boost.org/libs/type_index)
Boost.TypeIndex is a part of the [Boost C++ Libraries](https://github.com/boo\
storg). It is a runtime/compile time copyable type info.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/type_index/actions/workf\
lows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/type_index\
/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/proje\
cts/status/197a5imq10dqx6r8/branch/develop?svg=true)](https://ci.appveyor.com\
/project/apolukhin/type-index/branch/develop) | [![Coverage\
 Status](https://coveralls.io/repos/apolukhin/type_index/badge.png?branch=dev\
elop)](https://coveralls.io/r/apolukhin/type_index?branch=develop) |\
 [details...](https://www.boost.org/development/tests/develop/developer/type_\
index.html)
Master branch:  | [![CI](https://github.com/boostorg/type_index/actions/workf\
lows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/type_index/\
actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projec\
ts/status/197a5imq10dqx6r8/branch/master?svg=true)](https://ci.appveyor.com/p\
roject/apolukhin/type-index/branch/master) | [![Coverage Status](https://cove\
ralls.io/repos/apolukhin/type_index/badge.png?branch=master)](https://coveral\
ls.io/r/apolukhin/type_index?branch=master) | [details...](https://www.boost.\
org/development/tests/master/developer/type_index.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/boost_typeindex.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/type_index
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/type_index
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-index

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-index-1.87.0.tar.gz
sha256sum: e9ab9b4a159836caf19438fa5143aebe7f8be1565b3c165ee0a8ed0625f190ba
:
name: libboost-type-traits
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Templates for fundamental properties of types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost TypeTraits Library
============================

The Boost type-traits library contains a set of very specific traits classes,\
 each of which encapsulate a single trait 
from the C++ type system; for example, is a type a pointer or a reference\
 type? Or does a type have a trivial constructor, or a const-qualifier?

The type-traits classes share a unified design: each class inherits from the\
 type true_type if the type has the specified property and inherits from\
 false_type otherwise.

The type-traits library also contains a set of classes that perform a\
 specific transformation on a type; for example, they can remove a top-level\
 const or 
volatile qualifier from a type. Each class that performs a transformation\
 defines a single typedef-member type that is the result of the\
 transformation. 

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/type_traits/index.html).

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Travis           | [![Build Status](https://travis-ci.org/boostorg/type_tra\
its.svg?branch=master)](https://travis-ci.org/boostorg/type_traits)  | \
 [![Build Status](https://travis-ci.org/boostorg/type_traits.svg)](https://tr\
avis-ci.org/boostorg/type_traits) |
| Appveyor         | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/lwjqu4087qiolje8/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jzmaddock/type-traits/branch/master) | [![Build status](https://ci.appveyor\
.com/api/projects/status/lwjqu4087qiolje8/branch/develop?svg=true)](https://c\
i.appveyor.com/project/jzmaddock/type-traits/branch/develop)  |


## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/type_traits/issues)
(see [open issues](https://github.com/boostorg/type_traits/issues) and
[closed issues](https://github.com/boostorg/type_traits/issues?utf8=%E2%9C%93\
&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/type_traits/pulls).

There is no mailing-list specific to Boost TypeTraits, although you can use\
 the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/list\
info.cgi/boost-users) using the tag [type_traits].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost TypeTraits Library is located in `libs/type_traits/`. 

### Running tests ###
First, make sure you are in `libs/type_traits/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 config_info            <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/type_traits
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/type_traits
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-static-assert == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-traits

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-traits-1.83.0.tar.gz
sha256sum: 25e113ec059270097b340bcd433c5a79005a86e10630c106f47d60ee5050e563
:
name: libboost-type-traits
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Templates for fundamental properties of types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost TypeTraits Library
============================

The Boost type-traits library contains a set of very specific traits classes,\
 each of which encapsulate a single trait 
from the C++ type system; for example, is a type a pointer or a reference\
 type? Or does a type have a trivial constructor, or a const-qualifier?

The type-traits classes share a unified design: each class inherits from the\
 type true_type if the type has the specified property and inherits from\
 false_type otherwise.

The type-traits library also contains a set of classes that perform a\
 specific transformation on a type; for example, they can remove a top-level\
 const or 
volatile qualifier from a type. Each class that performs a transformation\
 defines a single typedef-member type that is the result of the\
 transformation. 

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/type_traits/index.html).

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Travis           | [![Build Status](https://travis-ci.org/boostorg/type_tra\
its.svg?branch=master)](https://travis-ci.org/boostorg/type_traits)  | \
 [![Build Status](https://travis-ci.org/boostorg/type_traits.svg)](https://tr\
avis-ci.org/boostorg/type_traits) |
| Appveyor         | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/lwjqu4087qiolje8/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jzmaddock/type-traits/branch/master) | [![Build status](https://ci.appveyor\
.com/api/projects/status/lwjqu4087qiolje8/branch/develop?svg=true)](https://c\
i.appveyor.com/project/jzmaddock/type-traits/branch/develop)  |


## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/type_traits/issues)
(see [open issues](https://github.com/boostorg/type_traits/issues) and
[closed issues](https://github.com/boostorg/type_traits/issues?utf8=%E2%9C%93\
&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/type_traits/pulls).

There is no mailing-list specific to Boost TypeTraits, although you can use\
 the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/list\
info.cgi/boost-users) using the tag [type_traits].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost TypeTraits Library is located in `libs/type_traits/`. 

### Running tests ###
First, make sure you are in `libs/type_traits/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 config_info            <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/type_traits
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/type_traits
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-static-assert == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-traits

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-traits-1.85.0.tar.gz
sha256sum: a7d6f17e5f03098bef994506fa1c43b22b2b9566c378a28e1453bd058a698390
:
name: libboost-type-traits
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Templates for fundamental properties of types
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost TypeTraits Library
============================

The Boost type-traits library contains a set of very specific traits classes,\
 each of which encapsulate a single trait 
from the C++ type system; for example, is a type a pointer or a reference\
 type? Or does a type have a trivial constructor, or a const-qualifier?

The type-traits classes share a unified design: each class inherits from the\
 type true_type if the type has the specified property and inherits from\
 false_type otherwise.

The type-traits library also contains a set of classes that perform a\
 specific transformation on a type; for example, they can remove a top-level\
 const or 
volatile qualifier from a type. Each class that performs a transformation\
 defines a single typedef-member type that is the result of the\
 transformation. 

The full documentation is available on [boost.org](http://www.boost.org/doc/l\
ibs/release/libs/type_traits/index.html).

|                  |  Master  |   Develop   |
|------------------|----------|-------------|
| Travis           | [![Build Status](https://travis-ci.org/boostorg/type_tra\
its.svg?branch=master)](https://travis-ci.org/boostorg/type_traits)  | \
 [![Build Status](https://travis-ci.org/boostorg/type_traits.svg)](https://tr\
avis-ci.org/boostorg/type_traits) |
| Appveyor         | [![Build status](https://ci.appveyor.com/api/projects/st\
atus/lwjqu4087qiolje8/branch/master?svg=true)](https://ci.appveyor.com/projec\
t/jzmaddock/type-traits/branch/master) | [![Build status](https://ci.appveyor\
.com/api/projects/status/lwjqu4087qiolje8/branch/develop?svg=true)](https://c\
i.appveyor.com/project/jzmaddock/type-traits/branch/develop)  |


## Support, bugs and feature requests ##

Bugs and feature requests can be reported through the [Gitub issue\
 tracker](https://github.com/boostorg/type_traits/issues)
(see [open issues](https://github.com/boostorg/type_traits/issues) and
[closed issues](https://github.com/boostorg/type_traits/issues?utf8=%E2%9C%93\
&q=is%3Aissue+is%3Aclosed)).

You can submit your changes through a [pull request](https://github.com/boost\
org/type_traits/pulls).

There is no mailing-list specific to Boost TypeTraits, although you can use\
 the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/list\
info.cgi/boost-users) using the tag [type_traits].


## Development ##

Clone the whole boost project, which includes the individual Boost projects\
 as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Ge\
tting-Started)): 

    git clone https://github.com/boostorg/boost
    cd boost
    git submodule update --init

The Boost TypeTraits Library is located in `libs/type_traits/`. 

### Running tests ###
First, make sure you are in `libs/type_traits/test`. 
You can either run all the tests listed in `Jamfile.v2` or run a single test:

    ../../../b2                        <- run all tests
    ../../../b2 config_info            <- single test


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/type_traits
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/type_traits
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-static-assert == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-type-traits

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-type-traits-1.87.0.tar.gz
sha256sum: 1eaf23106e9796671b0fda1f7277b7738a98c88ce3efd4a9a2e3c8f12bcf49f8
:
name: libboost-typeof
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Typeof operator emulation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/typeof
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/typeof
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-typeof

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-typeof-1.83.0.tar.gz
sha256sum: 6af766542f26228eb902f251777f68b2fbcb87e147f4ee9606dd585d52004e58
:
name: libboost-typeof
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Typeof operator emulation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/typeof
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/typeof
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-typeof

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-typeof-1.85.0.tar.gz
sha256sum: 76905cee17a99454f14c3bc98e33d3e9cf223c89265627bf02df81395da27b6e
:
name: libboost-typeof
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Typeof operator emulation
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/typeof
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/typeof
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-typeof

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-typeof-1.87.0.tar.gz
sha256sum: 93ec3dbe44299788a2cb73e8a4d77002d587429dac5760f3b9c081b1c9d42bff
:
name: libboost-units
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Zero-overhead dimensional analysis and unit/quantity manipulation\
 and conversion
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Units
===========

Boost.Units, part of collection of the [Boost C++ Libraries](http://github.co\
m/boostorg),
implements dimensional analysis in a general and extensible manner,
treating it as a generic compile-time metaprogramming problem.
With appropriate compiler optimization, no runtime execution cost is\
 introduced,
facilitating the use of this library to provide dimension checking in\
 performance-critical code.

### Directories

* **doc** - QuickBook documentation sources
* **example** - examples
* **images** - images for documention
* **include** - Interface headers
* **test** - unit tests
* **test_headers** - unit tests for self containment of headers
* **tutorial** - tutorial

### Test results

@       | Travis      | AppVeyor
--------|-------------|---------
master  | [![Build Status](https://travis-ci.org/boostorg/units.svg?branch=ma\
ster)](https://travis-ci.org/boostorg/units) | [![Build Status](https://ci.ap\
pveyor.com/api/projects/status/github/boostorg/units?branch=master&svg=true)]\
(https://ci.appveyor.com/project/boostorg/units)
develop | [![Build Status](https://travis-ci.org/boostorg/units.svg)](https:/\
/travis-ci.org/boostorg/units) | [![Build Status](https://ci.appveyor.com/api\
/projects/status/github/boostorg/units?svg=true)](https://ci.appveyor.com/pro\
ject/boostorg/units)

<a href="https://scan.coverity.com/projects/boostorg-units">
  <img alt="Coverity Scan Build Status"
       src="https://img.shields.io/coverity/scan/14037.svg"/>
</a>

### More information

* [Documentation](http://boost.org/libs/units)

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/units
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/units
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-lambda == 1.83.0
depends: libboost-math == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-units

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-units-1.83.0.tar.gz
sha256sum: ced93ce9c3cf3fd780f72db2c5faaa926ad0655ae7f0839cb4eb4fc8a9288ece
:
name: libboost-units
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Zero-overhead dimensional analysis and unit/quantity manipulation\
 and conversion
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Units
===========

Boost.Units, part of collection of the [Boost C++ Libraries](http://github.co\
m/boostorg),
implements dimensional analysis in a general and extensible manner,
treating it as a generic compile-time metaprogramming problem.
With appropriate compiler optimization, no runtime execution cost is\
 introduced,
facilitating the use of this library to provide dimension checking in\
 performance-critical code.

### Directories

* **doc** - QuickBook documentation sources
* **example** - examples
* **images** - images for documention
* **include** - Interface headers
* **test** - unit tests
* **test_headers** - unit tests for self containment of headers
* **tutorial** - tutorial

### Test results

@       | Travis      | AppVeyor
--------|-------------|---------
master  | [![Build Status](https://travis-ci.org/boostorg/units.svg?branch=ma\
ster)](https://travis-ci.org/boostorg/units) | [![Build Status](https://ci.ap\
pveyor.com/api/projects/status/github/boostorg/units?branch=master&svg=true)]\
(https://ci.appveyor.com/project/boostorg/units)
develop | [![Build Status](https://travis-ci.org/boostorg/units.svg)](https:/\
/travis-ci.org/boostorg/units) | [![Build Status](https://ci.appveyor.com/api\
/projects/status/github/boostorg/units?svg=true)](https://ci.appveyor.com/pro\
ject/boostorg/units)

<a href="https://scan.coverity.com/projects/boostorg-units">
  <img alt="Coverity Scan Build Status"
       src="https://img.shields.io/coverity/scan/14037.svg"/>
</a>

### More information

* [Documentation](http://boost.org/libs/units)

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/units
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/units
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-lambda == 1.85.0
depends: libboost-math == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-units

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-units-1.85.0.tar.gz
sha256sum: 493c839a9ddb3ea8669c80b62cddd13be78d391d624a8c23214447dcc4dc49ef
:
name: libboost-units
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Zero-overhead dimensional analysis and unit/quantity manipulation\
 and conversion
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Boost.Units
===========

Boost.Units, part of collection of the [Boost C++ Libraries](http://github.co\
m/boostorg),
implements dimensional analysis in a general and extensible manner,
treating it as a generic compile-time metaprogramming problem.
With appropriate compiler optimization, no runtime execution cost is\
 introduced,
facilitating the use of this library to provide dimension checking in\
 performance-critical code.

### Directories

* **doc** - QuickBook documentation sources
* **example** - examples
* **images** - images for documention
* **include** - Interface headers
* **test** - unit tests
* **test_headers** - unit tests for self containment of headers
* **tutorial** - tutorial

### Test results

@       | Travis      | AppVeyor
--------|-------------|---------
master  | [![Build Status](https://travis-ci.org/boostorg/units.svg?branch=ma\
ster)](https://travis-ci.org/boostorg/units) | [![Build Status](https://ci.ap\
pveyor.com/api/projects/status/github/boostorg/units?branch=master&svg=true)]\
(https://ci.appveyor.com/project/boostorg/units)
develop | [![Build Status](https://travis-ci.org/boostorg/units.svg)](https:/\
/travis-ci.org/boostorg/units) | [![Build Status](https://ci.appveyor.com/api\
/projects/status/github/boostorg/units?svg=true)](https://ci.appveyor.com/pro\
ject/boostorg/units)

<a href="https://scan.coverity.com/projects/boostorg-units">
  <img alt="Coverity Scan Build Status"
       src="https://img.shields.io/coverity/scan/14037.svg"/>
</a>

### More information

* [Documentation](http://boost.org/libs/units)

### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/units
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/units
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-lambda == 1.87.0
depends: libboost-math == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-units

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-units-1.87.0.tar.gz
sha256sum: 4e82f61c4065b858e1660a39f88cbd2ff0a7800c4bccaaf46cf98cb26e03e4fe
:
name: libboost-unordered
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Unordered associative containers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Unordered

Part of collection of the [Boost C++ Libraries](http://github.com/boostorg).

For accessing data based on key lookup, the C++ standard library offers\
 `std::set`, `std::map`, `std::multiset` and `std::multimap`.
These are generally implemented using balanced binary trees so that lookup\
 time has logarithmic complexity.
That is generally okay, but in many cases a hash table can perform better, as\
 accessing data has constant complexity, on average.
The worst case complexity is linear, but that occurs rarely and with some\
 care, can be avoided.

Also, the existing containers require a 'less than' comparison object to\
 order their elements.
For some data types this is impossible to implement or isn’t practical.
In contrast, a hash table only needs an equality function and a hash function\
 for the key.

With this in mind, unordered associative containers were added to the C++\
 standard.
This is an implementation of the containers described in C++11, with some\
 deviations from the standard in order to work with non-C++11 compilers and\
 libraries.


### License

Distributed under the [Boost Software License, Version 1.0](http://www.boost.\
org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-Only

### Build Status

Branch          | GH Actions | Appveyor | codecov.io | Deps | Docs | Tests |
:-------------: | ---------- | -------- | ---------- | ---- | ---- | ----- |
[`master`](https://github.com/boostorg/unordered/tree/master)   |\
 [![CI](https://github.com/boostorg/unordered/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/unordered/actions/workflows/c\
i.yml)  | [![Build status](https://ci.appveyor.com/api/projects/status/github\
/boostorg/unordered?branch=master&svg=true)](https://ci.appveyor.com/project/\
danieljames/unordered-qtwe6/branch/master)   | [![codecov](https://codecov.io\
/gh/boostorg/unordered/branch/master/graph/badge.svg)](https://codecov.io/gh/\
boostorg/unordered/branch/master)   | [![Deps](https://img.shields.io/badge/d\
eps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/\
unordered.html)   | [![Documentation](https://img.shields.io/badge/docs-maste\
r-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/unordered/doc/\
html/unordered.html)   | [![Enter the Matrix](https://img.shields.io/badge/ma\
trix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/d\
eveloper/unordered.html)
[`develop`](https://github.com/boostorg/unordered/tree/develop) |\
 [![CI](https://github.com/boostorg/unordered/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/unordered/actions/workflows/\
ci.yml) | [![Build status](https://ci.appveyor.com/api/projects/status/github\
/boostorg/unordered?branch=develop&svg=true)](https://ci.appveyor.com/project\
/danieljames/unordered-qtwe6/branch/develop) | [![codecov](https://codecov.io\
/gh/boostorg/unordered/branch/develop/graph/badge.svg)](https://codecov.io/gh\
/boostorg/unordered/branch/develop) | [![Deps](https://img.shields.io/badge/d\
eps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develo\
p/unordered.html) | [![Documentation](https://img.shields.io/badge/docs-devel\
op-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/unordered/do\
c/html/unordered.html) | [![Enter the Matrix](https://img.shields.io/badge/ma\
trix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop\
/developer/unordered.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `example`   | examples                       |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-unordered)
* [Report bugs](https://github.com/boostorg/unordered/issues): Be sure to\
 mention Boost version, platform and compiler you're using. A small\
 compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[unordered]` tag at the beginning of the subject line.


\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/unordered
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/unordered
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tuple == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-unordered

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-unordered-1.83.0.tar.gz
sha256sum: 329da4613a16d13ecb3a7d0835ecadb3cecd914a77c372f427aa6a39fc2ea6f2
:
name: libboost-unordered
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Unordered associative containers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Unordered

[![Branch](https://img.shields.io/badge/branch-master-brightgreen.svg)](https\
://github.com/boostorg/unordered/tree/master) [![CI](https://github.com/boost\
org/unordered/actions/workflows/ci.yml/badge.svg?branch=master)](https://gith\
ub.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/unordered/master?server=\
https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https://\
drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/appv\
eyor/build/cppalliance/unordered/master?logo=appveyor&label=CI)](https://ci.a\
ppveyor.com/project/cppalliance/unordered/branch/master)  [![codecov](https:/\
/codecov.io/gh/boostorg/unordered/branch/master/graph/badge.svg)](https://cod\
ecov.io/gh/boostorg/unordered/branch/master)  [![Deps](https://img.shields.io\
/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report\
/master/unordered.html)  [![Documentation](https://img.shields.io/badge/docs-\
master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/unordered\
/doc/html/unordered.html)  [![Enter the Matrix](https://img.shields.io/badge/\
matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master\
/developer/unordered.html)<br/>
[![Branch](https://img.shields.io/badge/branch-develop-brightgreen.svg)](http\
s://github.com/boostorg/unordered/tree/develop) [![CI](https://github.com/boo\
storg/unordered/actions/workflows/ci.yml/badge.svg?branch=develop)](https://g\
ithub.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/unordered/develop?server\
=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https:/\
/drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/app\
veyor/build/cppalliance/unordered/master?logo=appveyor&label=CI)](https://ci.\
appveyor.com/project/cppalliance/unordered/branch/develop)\
 [![codecov](https://codecov.io/gh/boostorg/unordered/branch/develop/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/unordered/branch/develop)\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/unordered.html) [![Documentation](h\
ttps://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.\
org/doc/libs/develop/libs/unordered/doc/html/unordered.html) [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http:/\
/www.boost.org/development/tests/develop/developer/unordered.html)<br/>
[![BSL 1.0](https://img.shields.io/badge/license-BSL_1.0-blue.svg)](https://w\
ww.boost.org/users/license.html) <img alt="C++11 required"\
 src="https://img.shields.io/badge/standard-C%2b%2b11-blue.svg"> <img\
 alt="Header-only library" src="https://img.shields.io/badge/build-header--on\
ly-blue.svg">

Boost.Unordered offers a catalog of hash containers with different standards\
 compliance levels, performances and intented usage scenarios:

**`boost::unordered_set` `boost::unordered_map` `boost::unordered_multiset`\
 `boost::unordered_multimap`**

<ul>Fully conformant implementations of <code>std::unordered_[multi](set|map)\
</code>,
but faster and up to the latest revisions of the standard even if you're\
 working in an older version of C++ (heterogeneous lookup,
<code>try_emplace</code>, <code>contains</code>, etc.)</ul>

**`boost::unordered_flat_set` `boost::unordered_flat_map`**

<ul>The fastest of the lot. Based on open addressing, these containers\
 slightly
deviate from the standard in exchange for top performance.</ul>

**`boost::unordered_node_set` `boost::unordered_node_map`**

<ul>Variations of <code>boost::unordered_flat_(set|map)</code> providing\
 pointer stability.</ul>

**`boost::concurrent_flat_set` `boost::concurrent_flat_map`**

<ul>High performance for multithreaded scenarios. Introducing a new\
 non-standard, iterator-free API.</ul>

## Learn about Boost.Unordered

* [Online documentation](https://boost.org/libs/unordered)
* [Some benchmarks](https://github.com/boostorg/boost_unordered_benchmarks)
* Technical articles on Boost.Unordered internal design:
  * [Advancing the state of the art for `std::unordered_map`\
 implementations](https://bannalia.blogspot.com/2022/06/advancing-state-of-ar\
t-for.html)
  * [Inside `boost::unordered_flat_map`](https://bannalia.blogspot.com/2022/1\
1/inside-boostunorderedflatmap.html)
  * [Inside `boost::concurrent_flat_map`](https://bannalia.blogspot.com/2023/\
07/inside-boostconcurrentflatmap.html)
  * [Bulk visitation in `boost::concurrent_flat_map`](https://bannalia.blogsp\
ot.com/2023/10/bulk-visitation-in-boostconcurrentflatm.html)

## Get the library

Boost.Unordered can be installed in a number of ways:

* [Download Boost](https://www.boost.org/users/download/) and you're ready to\
 go (this is a header-only library requiring no building).
* Using Conan 2: In case you don't have it yet, add an entry for Boost in\
 your `conanfile.txt` (the example requires at least Boost 1.83):
```
[requires]
boost/[>=1.83.0]
```
<ul>If you're not using any compiled Boost library, the following will skip\
 building altogether:</ul>

```
[options]
boost:header_only=True
```
* Using vcpkg: Execute the command
```
vcpkg install boost-unordered
```
* Using CMake: [Boost CMake support infrastructure](https://github.com/boosto\
rg/cmake)
allows you to use CMake directly to download, build and consume all of Boost\
 or
some specific libraries.

## Support

* Join the **#boost-unordered** discussion group at [cpplang.slack.com](https\
://cpplang.slack.com/)
([ask for an invite](https://cppalliance.org/slack/) if you’re not a member\
 of this workspace yet)
* Ask in the [Boost Users mailing list](https://lists.boost.org/mailman/listi\
nfo.cgi/boost-users)
(add the `[unordered]` tag at the beginning of the subject line)
* [File an issue](https://github.com/boostorg/unordered/issues)

## Contribute

* [Pull requests](https://github.com/boostorg/unordered/pulls) against\
 **develop** branch are most welcome.
Note that by submitting patches you agree to license your modifications under\
 the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.t\
xt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/unordered
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/unordered
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-throw-exception == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-unordered

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-unordered-1.85.0.tar.gz
sha256sum: 0b65d569180b5e0050c3388995c288d3ee25580b7c449438eb3ebb0eedbc7589
:
name: libboost-unordered
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Unordered associative containers
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Unordered

[![Branch](https://img.shields.io/badge/branch-master-brightgreen.svg)](https\
://github.com/boostorg/unordered/tree/master) [![CI](https://github.com/boost\
org/unordered/actions/workflows/ci.yml/badge.svg?branch=master)](https://gith\
ub.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/unordered/master?server=\
https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https://\
drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/appv\
eyor/build/cppalliance/unordered/master?logo=appveyor&label=CI)](https://ci.a\
ppveyor.com/project/cppalliance/unordered/branch/master)  [![codecov](https:/\
/codecov.io/gh/boostorg/unordered/branch/master/graph/badge.svg)](https://cod\
ecov.io/gh/boostorg/unordered/branch/master)  [![Deps](https://img.shields.io\
/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report\
/master/unordered.html)  [![Documentation](https://img.shields.io/badge/docs-\
master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/unordered\
/doc/html/unordered.html)  [![Enter the Matrix](https://img.shields.io/badge/\
matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master\
/developer/unordered.html)<br/>
[![Branch](https://img.shields.io/badge/branch-develop-brightgreen.svg)](http\
s://github.com/boostorg/unordered/tree/develop) [![CI](https://github.com/boo\
storg/unordered/actions/workflows/ci.yml/badge.svg?branch=develop)](https://g\
ithub.com/boostorg/unordered/actions/workflows/ci.yml) [![Drone\
 status](https://img.shields.io/drone/build/boostorg/unordered/develop?server\
=https%3A%2F%2Fdrone.cpp.al&logo=drone&logoColor=%23CCCCCC&label=CI)](https:/\
/drone.cpp.al/boostorg/unordered) [![Build status](https://img.shields.io/app\
veyor/build/cppalliance/unordered/master?logo=appveyor&label=CI)](https://ci.\
appveyor.com/project/cppalliance/unordered/branch/develop)\
 [![codecov](https://codecov.io/gh/boostorg/unordered/branch/develop/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/unordered/branch/develop)\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/unordered.html) [![Documentation](h\
ttps://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.\
org/doc/libs/develop/libs/unordered/doc/html/unordered.html) [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http:/\
/www.boost.org/development/tests/develop/developer/unordered.html)<br/>
[![BSL 1.0](https://img.shields.io/badge/license-BSL_1.0-blue.svg)](https://w\
ww.boost.org/users/license.html) <img alt="C++11 required"\
 src="https://img.shields.io/badge/standard-C%2b%2b11-blue.svg"> <img\
 alt="Header-only library" src="https://img.shields.io/badge/build-header--on\
ly-blue.svg">

Boost.Unordered offers a catalog of hash containers with different standards\
 compliance levels, performances and intented usage scenarios:

**`boost::unordered_set` `boost::unordered_map` `boost::unordered_multiset`\
 `boost::unordered_multimap`**

<ul>Fully conformant implementations of <code>std::unordered_[multi](set|map)\
</code>,
but faster and up to the latest revisions of the standard even if you're\
 working in an older version of C++ (heterogeneous lookup,
<code>try_emplace</code>, <code>contains</code>, etc.)</ul>

**`boost::unordered_flat_set` `boost::unordered_flat_map`**

<ul>The fastest of the lot. Based on open addressing, these containers\
 slightly
deviate from the standard in exchange for top performance.</ul>

**`boost::unordered_node_set` `boost::unordered_node_map`**

<ul>Variations of <code>boost::unordered_flat_(set|map)</code> providing\
 pointer stability.</ul>

**`boost::concurrent_flat_set` `boost::concurrent_flat_map`**

<ul>High performance for multithreaded scenarios. Introducing a new\
 non-standard, iterator-free API.</ul>

**`boost::concurrent_node_set` `boost::concurrent_node_map`**

<ul>Variations of <code>boost::concurrent_flat_(set|map)</code> providing\
 pointer stability.</ul>

## Learn about Boost.Unordered

* [Online documentation](https://boost.org/libs/unordered)
* [Some benchmarks](https://github.com/boostorg/boost_unordered_benchmarks)
* Technical articles on Boost.Unordered internal design:
  * [Advancing the state of the art for `std::unordered_map`\
 implementations](https://bannalia.blogspot.com/2022/06/advancing-state-of-ar\
t-for.html)
  * [Inside `boost::unordered_flat_map`](https://bannalia.blogspot.com/2022/1\
1/inside-boostunorderedflatmap.html)
  * [Inside `boost::concurrent_flat_map`](https://bannalia.blogspot.com/2023/\
07/inside-boostconcurrentflatmap.html)
  * [Bulk visitation in `boost::concurrent_flat_map`](https://bannalia.blogsp\
ot.com/2023/10/bulk-visitation-in-boostconcurrentflatm.html)
* Debugging visualizers for Boost.Unordered:
  * [Natvis for boost::unordered_map, and how to use &lt;Intrinsic&gt;\
 elements](https://blog.ganets.ky/NatvisForUnordered/)
  * [Natvis for boost::concurrent_flat_map, and why fancy pointers are\
 hard](https://blog.ganets.ky/NatvisForUnordered2/)
  * [Visualizing boost::unordered_map in GDB, with pretty-printer\
 customization points](https://blog.ganets.ky/PrettyPrinter/)

Boost.Unordered can be installed in a number of ways:

* [Download Boost](https://www.boost.org/users/download/) and you're ready to\
 go (this is a header-only library requiring no building).
* Using Conan 2: In case you don't have it yet, add an entry for Boost in\
 your `conanfile.txt` (the example requires at least Boost 1.86):
```
[requires]
boost/[>=1.86.0]
```
<ul>If you're not using any compiled Boost library, the following will skip\
 building altogether:</ul>

```
[options]
boost:header_only=True
```
* Using vcpkg: Execute the command
```
vcpkg install boost-unordered
```
* Using CMake: [Boost CMake support infrastructure](https://github.com/boosto\
rg/cmake)
allows you to use CMake directly to download, build and consume all of Boost\
 or
some specific libraries.

## Support

* Join the **#boost-unordered** discussion group at [cpplang.slack.com](https\
://cpplang.slack.com/)
([ask for an invite](https://cppalliance.org/slack/) if you’re not a member\
 of this workspace yet)
* Ask in the [Boost Users mailing list](https://lists.boost.org/mailman/listi\
nfo.cgi/boost-users)
(add the `[unordered]` tag at the beginning of the subject line)
* [File an issue](https://github.com/boostorg/unordered/issues)

## Contribute

* [Pull requests](https://github.com/boostorg/unordered/pulls) against\
 **develop** branch are most welcome.
Note that by submitting patches you agree to license your modifications under\
 the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.t\
xt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/unordered
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/unordered
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-predef == 1.87.0
depends: libboost-throw-exception == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-unordered

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-unordered-1.87.0.tar.gz
sha256sum: 1dac1ae7c5b34aaa34a7bfbf94738f9ba56dbc571a28a0a07d85bbcf37c512d5
:
name: libboost-url
version: 1.83.0
language: c++
project: boost
summary: URL parsing in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Boost.URL](https://raw.githubusercontent.com/vinniefalco/url/master/doc/im\
ages/repo-logo.png)](https://www.boost.org/doc/libs/master/libs/url/doc/html/)

Branch          | [`master`](https://github.com/boostorg/url/tree/master)    \
                                                                             \
            | [`develop`](https://github.com/boostorg/url/tree/develop) |
--------------- |------------------------------------------------------------\
-----------------------------------------------------------------------------\
------------| ------------------------------------------------------------- |
Docs            | [![Documentation](https://img.shields.io/badge/docs-master-\
brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/url/doc/html/)  \
                                           | [![Documentation](https://img.sh\
ields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/\
develop/libs/url/doc/html/)
[Drone](https://drone.io/) | [![Build Status](https://drone.cpp.al/api/badges\
/boostorg/url/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostor\
g/url)                 | [![Build Status](https://drone.cpp.al/api/badges/boo\
storg/url/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/u\
rl)
[GitHub Actions](https://github.com/) | [![CI](https://github.com/boostorg/ur\
l/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boost\
org/url/actions/workflows/ci.yml) | [![CI](https://github.com/boostorg/url/ac\
tions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg\
/url/actions/workflows/ci.yml)
[codecov.io](https://codecov.io) | [![codecov](https://codecov.io/gh/boostorg\
/url/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/url/branc\
h/master)                    | [![codecov](https://codecov.io/gh/boostorg/url\
/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/url/branch/d\
evelop)
Matrix          | [![Matrix](https://img.shields.io/badge/matrix-master-brigh\
tgreen.svg)](http://www.boost.org/development/tests/master/developer/url.html\
)           | [![Matrix](https://img.shields.io/badge/matrix-develop-brightgr\
een.svg)](http://www.boost.org/development/tests/develop/developer/url.html)

# Boost.URL

## Overview

Boost.URL is a portable C++ library which provides containers and algorithms
which model a "URL", more formally described using the Uniform Resource
Identifier (URI) specification (henceforth referred to as rfc3986). A URL
is a compact sequence of characters that identifies an abstract or physical
resource. For example, this is a valid URL which satisfies the
absolute-URI grammar:

```
https://www.example.com/path/to/file.txt?userid=1001&page=2&results=full
```

This library understands the various grammars related to URLs and provides
for validating and parsing of strings, manipulation of URL strings, and
algorithms operating on URLs such as normalization and resolution. While
the library is general purpose, special care has been taken to ensure that
the implementation and data representation are friendly to network programs
which need to handle URLs efficiently and securely, including the case where
the inputs come from untrusted sources. Interfaces are provided for using
error codes instead of exceptions as needed, and all algorithms provide a
mechanism for avoiding memory allocations entirely if desired. Another
feature of the library is that all container mutations leave the URL in
a valid state. Code which uses Boost.URL will be easy to read, flexible,
and performant.

Network programs such as those using Boost.Asio or Boost.Beast often
encounter the need to process, generate, or modify URLs. This library
provides a very much needed modular component for handling these
use-cases.

## Example
```cpp
using namespace boost::urls;

// Parse a URL. This allocates no memory. The view
// references the character buffer without taking ownership.
//
url_view uv( "https://www.example.com/path/to/file.txt?id=1001&name=John%20Do\
e&results=full" );

// Print the query parameters with percent-decoding applied
//
for( auto v : uv.params() )
    std::cout << v.key << "=" << v.value << " ";

// Prints: id=1001 name=John Doe results=full

// Create a modifiable copy of `uv`, with ownership of the buffer
//
url u = uv;

// Change some elements in the URL
//
u.set_scheme( "http" )
 .set_encoded_host( "boost.org" )
 .set_encoded_path( "/index.htm" )
 .remove_query()
 .remove_fragment()
 .params().append( {"key", "value"} );

std::cout << u;

// Prints: http://boost.org/index.htm?key=value
```

## Design Goals

The library achieves these goals:

* Require only C++11
* Works without exceptions
* Fast compilation, no templates
* Strict compliance with rfc3986
* Allocate memory or use inline storage
* Optional header-only, without linking to a library

## Requirements

* Requires Boost and a compiler supporting at least C++11
* Aliases for standard types use their Boost equivalents
* Link to a built static or dynamic Boost library, or use header-only (see\
 below)
* Supports -fno-exceptions, detected automatically

### Header-Only

To use as header-only; that is, to eliminate the requirement to
link a program to a static or dynamic Boost.URL library, simply
place the following line in exactly one new or existing source
file in your project.
```cpp
#include <boost/url/src.hpp>
```

### Embedded

Boost.URL works great on embedded devices. It can be used in a way
that avoids all dynamic memory allocations. Furthermore it is designed 
to work without exceptions if desired.

### Supported Compilers

Boost.URL is tested with the following compilers:

* clang: 3.8, 4, 5, 6, 7, 8, 9, 10, 11, 12
* gcc: 4.8, 4.9, 5, 6, 7, 8, 9, 10, 11
* msvc: 14.0, 14.1, 14.2, 14.3

and these architectures: x86, x64, ARM64, S390x

### Quality Assurance

The development infrastructure for the library includes
these per-commit analyses:

* Coverage reports
* Benchmark performance comparisons
* Compilation and tests on Drone.io

## Visual Studio Solution Generation

    cmake -G "Visual Studio 16 2019" -A Win32 -B bin -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake
    cmake -G "Visual Studio 16 2019" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=c\
make/toolchains/msvc.cmake

## License

Distributed under the Boost Software License, Version 1.0.
(See accompanying file [LICENSE_1_0.txt](LICENSE_1_0.txt) or copy at
https://www.boost.org/LICENSE_1_0.txt)

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/url
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/url
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-align == 1.83.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-mp11 == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-system == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-variant2 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-url

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-url-1.83.0.tar.gz
sha256sum: 7675c4bc7aa5d3a43c188fba8e6ecd2ff08abe7e04e0ed5a90bb0a13d731cee0
:
name: libboost-url
version: 1.85.0
language: c++
project: boost
summary: URL parsing in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/url
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/url
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-align == 1.85.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-mp11 == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-system == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-variant2 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-url

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-url-1.85.0.tar.gz
sha256sum: 85fa4a109349ca8ce49acf90845d993d02d01c25d2aa399f48f32b9260545f19
:
name: libboost-url
version: 1.87.0
language: c++
project: boost
summary: URL parsing in C++11
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/url
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/url
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-align == 1.87.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-mp11 == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-system == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-variant2 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-url

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-url-1.87.0.tar.gz
sha256sum: d1306f90f80772751fe424def131f782a4ac357a83847fab5fd075c7ebb33969
:
name: libboost-utility
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Class noncopyable plus checked_delete(), checked_array_delete(),\
 next(), prior() function templates, plus base-from-member idiom
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Utility](doc/logo.png)

Boost.Utility, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg), provides a number of smaller components, too small to be\
 called libraries in their own right. See the documentation for the list of\
 components.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Utility
* **test** - Boost.Utility unit tests

### More information

* [Documentation](https://boost.org/libs/utility)
* [Report bugs](https://github.com/boostorg/utility/issues/new). Be sure to\
 mention Boost version, Boost.Utility component, platform and compiler you're\
 using. A small compilable code sample to reproduce the problem is always\
 good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/utility/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/utility/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/utility/actions?query=branch%\
3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/g09ehuy2\
o6aq42th/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/ut\
ility/branch/master) | [![Tests](https://img.shields.io/badge/matrix-master-b\
rightgreen.svg)](http://www.boost.org/development/tests/master/developer/util\
ity.html) | [![Dependencies](https://img.shields.io/badge/deps-master-brightg\
reen.svg)](https://pdimov.github.io/boostdep-report/master/utility.html)
[`develop`](https://github.com/boostorg/utility/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/utility/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/utility/actions?query=branch\
%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/g09ehu\
y2o6aq42th/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique\
/utility/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-deve\
lop-brightgreen.svg)](http://www.boost.org/development/tests/develop/develope\
r/utility.html) | [![Dependencies](https://img.shields.io/badge/deps-develop-\
brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/utility.ht\
ml)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/utility
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/utility
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-utility

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-utility-1.83.0.tar.gz
sha256sum: 323d12dada48604ca9a33519d6aed9d2ded78ea164e68ec1f763b05c24258782
:
name: libboost-utility
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Various utilities, such as base-from-member idiom and binary\
 literals in C++03
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Utility](doc/logo.png)

Boost.Utility, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg), provides a number of smaller components, too small to be\
 called libraries in their own right. See the documentation for the list of\
 components.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Utility
* **test** - Boost.Utility unit tests

### More information

* [Documentation](https://boost.org/libs/utility)
* [Report bugs](https://github.com/boostorg/utility/issues/new). Be sure to\
 mention Boost version, Boost.Utility component, platform and compiler you're\
 using. A small compilable code sample to reproduce the problem is always\
 good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/utility/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/utility/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/utility/actions?query=branch%\
3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/g09ehuy2\
o6aq42th/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/ut\
ility/branch/master) | [![Tests](https://img.shields.io/badge/matrix-master-b\
rightgreen.svg)](http://www.boost.org/development/tests/master/developer/util\
ity.html) | [![Dependencies](https://img.shields.io/badge/deps-master-brightg\
reen.svg)](https://pdimov.github.io/boostdep-report/master/utility.html)
[`develop`](https://github.com/boostorg/utility/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/utility/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/utility/actions?query=branch\
%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/g09ehu\
y2o6aq42th/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique\
/utility/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-deve\
lop-brightgreen.svg)](http://www.boost.org/development/tests/develop/develope\
r/utility.html) | [![Dependencies](https://img.shields.io/badge/deps-develop-\
brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/utility.ht\
ml)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/utility
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/utility
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-utility

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-utility-1.85.0.tar.gz
sha256sum: f9472b6e3e1c23e951e6ff9872c9aafc0d0463a9bf7b0f58864baf80bfc14214
:
name: libboost-utility
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Various utilities, such as base-from-member idiom and binary\
 literals in C++03
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# ![Boost.Utility](doc/logo.png)

Boost.Utility, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg), provides a number of smaller components, too small to be\
 called libraries in their own right. See the documentation for the list of\
 components.

### Directories

* **doc** - Documentation sources
* **include** - Interface headers of Boost.Utility
* **test** - Boost.Utility unit tests

### More information

* [Documentation](https://boost.org/libs/utility)
* [Report bugs](https://github.com/boostorg/utility/issues/new). Be sure to\
 mention Boost version, Boost.Utility component, platform and compiler you're\
 using. A small compilable code sample to reproduce the problem is always\
 good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).

### Build status

Branch          | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------------- | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/utility/tree/master) | [![GitHub\
 Actions](https://github.com/boostorg/utility/actions/workflows/ci.yml/badge.\
svg?branch=master)](https://github.com/boostorg/utility/actions?query=branch%\
3Amaster) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/g09ehuy2\
o6aq42th/branch/master?svg=true)](https://ci.appveyor.com/project/Lastique/ut\
ility/branch/master) | [![Tests](https://img.shields.io/badge/matrix-master-b\
rightgreen.svg)](http://www.boost.org/development/tests/master/developer/util\
ity.html) | [![Dependencies](https://img.shields.io/badge/deps-master-brightg\
reen.svg)](https://pdimov.github.io/boostdep-report/master/utility.html)
[`develop`](https://github.com/boostorg/utility/tree/develop) | [![GitHub\
 Actions](https://github.com/boostorg/utility/actions/workflows/ci.yml/badge.\
svg?branch=develop)](https://github.com/boostorg/utility/actions?query=branch\
%3Adevelop) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/g09ehu\
y2o6aq42th/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique\
/utility/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-deve\
lop-brightgreen.svg)](http://www.boost.org/development/tests/develop/develope\
r/utility.html) | [![Dependencies](https://img.shields.io/badge/deps-develop-\
brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/utility.ht\
ml)

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/utility
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/utility
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-io == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-utility

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-utility-1.87.0.tar.gz
sha256sum: c1cb175fcaeb8b6dd4006b892035493b70e8e8348a6ae7965abba3a94e5b756d
:
name: libboost-uuid
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A universally unique identifier
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Uuid, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides a C++ wrapper around [RFC-4122](http://www.ietf.org/rfc/rfc412\
2.txt) UUIDs.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor CI | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | ----------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/uuid/tree/master) | [![Build\
 Status](https://github.com/boostorg/uuid/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/uuid/actions?query=branch:master)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/nuihr6s92fjb9\
gwy/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/uuid-gaa\
mf/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/\
projects/13982/badge.svg)](https://scan.coverity.com/projects/boostorg-uuid)\
 | [![codecov](https://codecov.io/gh/boostorg/uuid/branch/master/graph/badge.\
svg)](https://codecov.io/gh/boostorg/uuid/branch/master)| [![Deps](https://im\
g.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boo\
stdep-report/master/uuid.html) | [![Documentation](https://img.shields.io/bad\
ge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/htm\
l/uuid.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/u\
uid.html)
[`develop`](https://github.com/boostorg/uuid/tree/develop) | [![Build\
 Status](https://github.com/boostorg/uuid/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/uuid/actions?query=branch:develo\
p) | [![Build status](https://ci.appveyor.com/api/projects/status/nuihr6s92fj\
b9gwy/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/uuid-\
gaamf/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.\
com/projects/13982/badge.svg)](https://scan.coverity.com/projects/boostorg-uu\
id) | [![codecov](https://codecov.io/gh/boostorg/uuid/branch/develop/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/uuid/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/uuid.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/uuid.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/uuid.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-uuid)
* [Report bugs](https://github.com/boostorg/uuid/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[uuid]` tag at the beginning of the subject line.

### Code Example - UUID Generation

    // Copyright 2017 James E. King III
    // Distributed under the Boost Software License, Version 1.0.
    // (See https://www.boost.org/LICENSE_1_0.txt)
    //  mkuuid.cpp example
    
    #include <boost/lexical_cast.hpp>
    #include <boost/uuid/random_generator.hpp>
    #include <boost/uuid/uuid_io.hpp>
    #include <iostream>
    
    int main(void)
    {
        boost::uuids::random_generator gen;
        std::cout << boost::lexical_cast<std::string>(gen()) << std::endl;
        return 0;
    }
    
    ----
    
    $ clang++ -ansi -Wall -Wextra -std=c++03 -O3 mkuuid.cpp -o mkuuid
    $ ./mkuuid
    2c186eb0-89cf-4a3c-9b97-86db1670d5f4
    $ ./mkuuid
    a9d3fbb9-0383-4389-a8a8-61f6629f90b6



\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/uuid
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/uuid
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-io == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-predef == 1.83.0
depends: libboost-random == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-tti == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-winapi == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-uuid-1.83.0.tar.gz
sha256sum: b96beed73a27c47f455825bf0b8993bae7da6f5f8114759e2f2eedffb15b043d
:
name: libboost-uuid
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A universally unique identifier
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
Uuid, part of collection of the [Boost C++ Libraries](http://github.com/boost\
org), provides a C++ wrapper around [RFC-4122](http://www.ietf.org/rfc/rfc412\
2.txt) UUIDs.

### License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

### Properties

* C++03
* Header-only

### Build Status

Branch          | GHA CI | Appveyor CI | Coverity Scan | codecov.io | Deps |\
 Docs | Tests |
:-------------: | ------ | ----------- | ------------- | ---------- | ---- |\
 ---- | ----- |
[`master`](https://github.com/boostorg/uuid/tree/master) | [![Build\
 Status](https://github.com/boostorg/uuid/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/uuid/actions?query=branch:master)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/nuihr6s92fjb9\
gwy/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/uuid-gaa\
mf/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/\
projects/13982/badge.svg)](https://scan.coverity.com/projects/boostorg-uuid)\
 | [![codecov](https://codecov.io/gh/boostorg/uuid/branch/master/graph/badge.\
svg)](https://codecov.io/gh/boostorg/uuid/branch/master)| [![Deps](https://im\
g.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boo\
stdep-report/master/uuid.html) | [![Documentation](https://img.shields.io/bad\
ge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/htm\
l/uuid.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-maste\
r-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/u\
uid.html)
[`develop`](https://github.com/boostorg/uuid/tree/develop) | [![Build\
 Status](https://github.com/boostorg/uuid/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/uuid/actions?query=branch:develo\
p) | [![Build status](https://ci.appveyor.com/api/projects/status/nuihr6s92fj\
b9gwy/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/uuid-\
gaamf/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.\
com/projects/13982/badge.svg)](https://scan.coverity.com/projects/boostorg-uu\
id) | [![codecov](https://codecov.io/gh/boostorg/uuid/branch/develop/graph/ba\
dge.svg)](https://codecov.io/gh/boostorg/uuid/branch/develop) |\
 [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https:/\
/pdimov.github.io/boostdep-report/develop/uuid.html) | [![Documentation](http\
s://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/\
doc/libs/develop/doc/html/uuid.html) | [![Enter the Matrix](https://img.shiel\
ds.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development\
/tests/develop/developer/uuid.html)

### Directories

| Name        | Purpose                        |
| ----------- | ------------------------------ |
| `doc`       | documentation                  |
| `include`   | headers                        |
| `test`      | unit tests                     |

### More information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-uuid)
* [Report bugs](https://github.com/boostorg/uuid/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that\
 by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[uuid]` tag at the beginning of the subject line.

### Code Example - UUID Generation

    // Copyright 2017 James E. King III
    // Distributed under the Boost Software License, Version 1.0.
    // (See https://www.boost.org/LICENSE_1_0.txt)
    //  mkuuid.cpp example
    
    #include <boost/lexical_cast.hpp>
    #include <boost/uuid/random_generator.hpp>
    #include <boost/uuid/uuid_io.hpp>
    #include <iostream>
    
    int main(void)
    {
        boost::uuids::random_generator gen;
        std::cout << boost::lexical_cast<std::string>(gen()) << std::endl;
        return 0;
    }
    
    ----
    
    $ clang++ -ansi -Wall -Wextra -std=c++03 -O3 mkuuid.cpp -o mkuuid
    $ ./mkuuid
    2c186eb0-89cf-4a3c-9b97-86db1670d5f4
    $ ./mkuuid
    a9d3fbb9-0383-4389-a8a8-61f6629f90b6



\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/uuid
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/uuid
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-io == 1.85.0
depends: libboost-move == 1.85.0
depends: libboost-numeric-conversion == 1.85.0
depends: libboost-predef == 1.85.0
depends: libboost-random == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-tti == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-winapi == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-uuid-1.85.0.tar.gz
sha256sum: 39c860da3a9db15a7930677e779418a10423877927dd49bc48cc70d70a206853
:
name: libboost-uuid
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A universally unique identifier
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Uuid

Boost.Uuid, part of [Boost C++ Libraries](http://boost.org),
provides a C++ implementation of Universally Unique Identifiers (UUID) as\
 described in [RFC 4122](https://datatracker.ietf.org/doc/rfc4122/) and [RFC\
 9562](https://datatracker.ietf.org/doc/rfc9562/).

See [the documentation](http://boost.org/libs/uuid) for more information.

## License

Distributed under the [Boost Software License, Version 1.0](https://www.boost\
.org/LICENSE_1_0.txt).

## Properties

* C++11 (since Boost 1.86.0)
* Header-only

## Current Status

Branch          | Github Actions | Appveyor | Dependencies | Documentation |\
 Test Matrix |
:-------------: | -------------- | -------- | ------------ | ------------- |\
 ----------- |
[`master`](https://github.com/boostorg/uuid/tree/master) | [![Build\
 Status](https://github.com/boostorg/uuid/actions/workflows/ci.yml/badge.svg?\
branch=master)](https://github.com/boostorg/uuid/actions?query=branch:master)\
 | [![Build status](https://ci.appveyor.com/api/projects/status/rmp9xmse2b6ur\
kjv/branch/master?svg=true)](https://ci.appveyor.com/project/cppalliance/uuid\
/branch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgre\
en.svg)](https://pdimov.github.io/boostdep-report/master/uuid.html) |\
 [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)]\
(http://www.boost.org/doc/libs/master/doc/html/uuid.html) | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://\
www.boost.org/development/tests/master/developer/uuid.html)
[`develop`](https://github.com/boostorg/uuid/tree/develop) | [![Build\
 Status](https://github.com/boostorg/uuid/actions/workflows/ci.yml/badge.svg?\
branch=develop)](https://github.com/boostorg/uuid/actions?query=branch:develo\
p) | [![Build status](https://ci.appveyor.com/api/projects/status/rmp9xmse2b6\
urkjv/branch/develop?svg=true)](https://ci.appveyor.com/project/cppalliance/u\
uid/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brig\
htgreen.svg)](https://pdimov.github.io/boostdep-report/develop/uuid.html) |\
 [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)\
](http://www.boost.org/doc/libs/develop/doc/html/uuid.html) | [![Enter the\
 Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http:/\
/www.boost.org/development/tests/develop/developer/uuid.html)

## More Information

* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,b\
oost-uuid)
* [Report bugs](https://github.com/boostorg/uuid/issues): Be sure to mention\
 Boost version, platform and compiler you're using. A small compilable code\
 sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against the **develop** branch. Note\
 that by submitting patches you agree to license your modifications under the\
 [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing\
 list](http://www.boost.org/community/groups.html#main). Be sure to read the\
 [discussion policy](http://www.boost.org/community/policy.html) before\
 posting and add the `[uuid]` tag at the beginning of the subject line.

## Code Example - UUID Generation

```cpp
//  mkuuid.cpp example

#include <boost/uuid.hpp>
#include <iostream>

int main()
{
    boost::uuids::random_generator gen;
    std::cout << gen() << std::endl;
}
```

```shell
$ clang++ -Wall -Wextra -std=c++11 -O2 mkuuid.cpp -o mkuuid
$ ./mkuuid
2c186eb0-89cf-4a3c-9b97-86db1670d5f4
$ ./mkuuid
a9d3fbb9-0383-4389-a8a8-61f6629f90b6
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/uuid
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/uuid
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-uuid-1.87.0.tar.gz
sha256sum: 6b4881b598a7e826e12a771908d13469ebb198357945c4b1f68bd3e68eebb379
:
name: libboost-variant
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Safe, generic, stack-based discriminated union container
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Variant](https://boost.org/libs/variant)
Boost.Variant, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg). It is a safe, generic, stack-based discriminated union\
 container, offering a simple solution for manipulating an object from a\
 heterogeneous set of types in a uniform manner.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/variant/actions/workflow\
s/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/variant/actio\
ns/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/st\
atus/bijfdoy7byfgc6e2/branch/develop?svg=true)](https://ci.appveyor.com/proje\
ct/apolukhin/variant-ykfti/branch/develop) | [![Coverage Status](https://cove\
ralls.io/repos/boostorg/variant/badge.png?branch=develop)](https://coveralls.\
io/r/apolukhin/variant?branch=develop) | [details...](http://www.boost.org/de\
velopment/tests/develop/developer/variant.html)
Master branch:  | [![CI](https://github.com/boostorg/variant/actions/workflow\
s/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/variant/action\
s/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/sta\
tus/bijfdoy7byfgc6e2/branch/master?svg=true)](https://ci.appveyor.com/project\
/apolukhin/variant-ykfti/branch/master) | [![Coverage Status](https://coveral\
ls.io/repos/boostorg/variant/badge.png?branch=master)](https://coveralls.io/r\
/apolukhin/variant?branch=master)  | [details...](http://www.boost.org/develo\
pment/tests/master/developer/variant.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/variant.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/variant
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/variant
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-bind == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-container-hash == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-detail == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-move == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-index == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-variant

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-variant-1.83.0.tar.gz
sha256sum: a3aa03cb851356ada09fcf2f07d2536ebae5604bcbdeff01c84a9251b8d40419
:
name: libboost-variant
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Safe, generic, stack-based discriminated union container
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Variant](https://boost.org/libs/variant)
Boost.Variant, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg). It is a safe, generic, stack-based discriminated union\
 container, offering a simple solution for manipulating an object from a\
 heterogeneous set of types in a uniform manner.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/variant/actions/workflow\
s/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/variant/actio\
ns/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/st\
atus/bijfdoy7byfgc6e2/branch/develop?svg=true)](https://ci.appveyor.com/proje\
ct/apolukhin/variant-ykfti/branch/develop) | [![Coverage Status](https://cove\
ralls.io/repos/boostorg/variant/badge.png?branch=develop)](https://coveralls.\
io/r/apolukhin/variant?branch=develop) | [details...](http://www.boost.org/de\
velopment/tests/develop/developer/variant.html)
Master branch:  | [![CI](https://github.com/boostorg/variant/actions/workflow\
s/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/variant/action\
s/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/sta\
tus/bijfdoy7byfgc6e2/branch/master?svg=true)](https://ci.appveyor.com/project\
/apolukhin/variant-ykfti/branch/master) | [![Coverage Status](https://coveral\
ls.io/repos/boostorg/variant/badge.png?branch=master)](https://coveralls.io/r\
/apolukhin/variant?branch=master)  | [details...](http://www.boost.org/develo\
pment/tests/master/developer/variant.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/variant.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/variant
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/variant
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-container-hash == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-detail == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-index == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-variant

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-variant-1.85.0.tar.gz
sha256sum: aa2ba117430417afc9b28fb6bc6e085f122cd0330243e9f12215c7ac13e5c04a
:
name: libboost-variant
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Safe, generic, stack-based discriminated union container
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# [Boost.Variant](https://boost.org/libs/variant)
Boost.Variant, part of collection of the [Boost C++ Libraries](https://github\
.com/boostorg). It is a safe, generic, stack-based discriminated union\
 container, offering a simple solution for manipulating an object from a\
 heterogeneous set of types in a uniform manner.

### Test results

@               | Build         | Tests coverage | More info
----------------|-------------- | -------------- |-----------
Develop branch: | [![CI](https://github.com/boostorg/variant/actions/workflow\
s/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/variant/actio\
ns/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/st\
atus/bijfdoy7byfgc6e2/branch/develop?svg=true)](https://ci.appveyor.com/proje\
ct/apolukhin/variant-ykfti/branch/develop) | [![Coverage Status](https://cove\
ralls.io/repos/boostorg/variant/badge.png?branch=develop)](https://coveralls.\
io/r/apolukhin/variant?branch=develop) | [details...](http://www.boost.org/de\
velopment/tests/develop/developer/variant.html)
Master branch:  | [![CI](https://github.com/boostorg/variant/actions/workflow\
s/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/variant/action\
s/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/sta\
tus/bijfdoy7byfgc6e2/branch/master?svg=true)](https://ci.appveyor.com/project\
/apolukhin/variant-ykfti/branch/master) | [![Coverage Status](https://coveral\
ls.io/repos/boostorg/variant/badge.png?branch=master)](https://coveralls.io/r\
/apolukhin/variant?branch=master)  | [details...](http://www.boost.org/develo\
pment/tests/master/developer/variant.html)


[Latest developer documentation](https://www.boost.org/doc/libs/develop/doc/h\
tml/variant.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/variant
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/variant
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-container-hash == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-detail == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-index == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-variant

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-variant-1.87.0.tar.gz
sha256sum: fd1ba5128ce667cdc219bc02c35c89c33dc9491c217718e5385450f5f89476af
:
name: libboost-variant2
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: A never-valueless, strong guarantee implementation of std::variant
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Variant2

This repository contains a never-valueless, strong guarantee, C++11/14/17
implementation of [std::variant](http://en.cppreference.com/w/cpp/utility/var\
iant).
See [the documentation](https://www.boost.org/libs/variant2)
for more information.

The library is part of Boost, starting from release 1.71. It depends on
Boost.Mp11, Boost.Config, and Boost.Assert.

Supported compilers:

* g++ 4.8 or later with `-std=c++11` or above
* clang++ 3.9 or later with `-std=c++11` or above
* Visual Studio 2015 or later

Tested on [Github Actions](https://github.com/boostorg/variant2/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/variant2-fkab9).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/variant2
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/variant2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-mp11 == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-variant2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-variant2-1.83.0.tar.gz
sha256sum: dd216feb9fa39c2dc89f10c7a2e2a507888ef700e795ac0b613eb1ae9081736e
:
name: libboost-variant2
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: A never-valueless, strong guarantee implementation of std::variant
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Variant2

This repository contains a never-valueless, strong guarantee, C++11/14/17
implementation of [std::variant](http://en.cppreference.com/w/cpp/utility/var\
iant).
See [the documentation](https://www.boost.org/libs/variant2)
for more information.

The library is part of Boost, starting from release 1.71. It depends on
Boost.Mp11, Boost.Config, and Boost.Assert.

Supported compilers:

* g++ 4.8 or later with `-std=c++11` or above
* clang++ 3.9 or later with `-std=c++11` or above
* Visual Studio 2015 or later

Tested on [Github Actions](https://github.com/boostorg/variant2/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/variant2-fkab9).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/variant2
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/variant2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-mp11 == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-variant2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-variant2-1.85.0.tar.gz
sha256sum: 09f2e30703723e9af7787476523819be5f791c320efbd96afeef378ff06c7c1a
:
name: libboost-variant2
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: A never-valueless, strong guarantee implementation of std::variant
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
# Boost.Variant2

This repository contains a never-valueless, strong guarantee, C++11/14/17
implementation of [std::variant](http://en.cppreference.com/w/cpp/utility/var\
iant).
See [the documentation](https://www.boost.org/libs/variant2)
for more information.

The library is part of Boost, starting from release 1.71. It depends on
Boost.Mp11, Boost.Config, and Boost.Assert.

Supported compilers:

* g++ 4.8 or later with `-std=c++11` or above
* clang++ 3.9 or later with `-std=c++11` or above
* Visual Studio 2015 or later

Tested on [Github Actions](https://github.com/boostorg/variant2/actions) and
[Appveyor](https://ci.appveyor.com/project/pdimov/variant2-fkab9).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/variant2
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/variant2
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-mp11 == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-variant2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-variant2-1.87.0.tar.gz
sha256sum: a62491c587c3aec1ea90bb9cd7a86c11a7fefd1054671ede1bd3287643578f7d
:
name: libboost-vmd
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Variadic Macro Data library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/vmd
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/vmd
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-preprocessor == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-vmd

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-vmd-1.83.0.tar.gz
sha256sum: 57319448c81dca89c22b7cb4391848d8b356ac7425d53f7f01c2673826a2302e
:
name: libboost-vmd
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Variadic Macro Data library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/vmd
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/vmd
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-preprocessor == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-vmd

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-vmd-1.85.0.tar.gz
sha256sum: eadc80968f5708f4d239711778b62ea9e127716e2bf6a4d465b3934301bd3a76
:
name: libboost-vmd
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Variadic Macro Data library
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/vmd
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/vmd
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-preprocessor == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-vmd

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-vmd-1.87.0.tar.gz
sha256sum: bb6e10336fcc5ef1ec4acffcb02a7fddf4607f8752b41d6806dfabca4054bb46
:
name: libboost-winapi
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Windows API abstraction layer
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
WinAPI
======

Windows API declarations without &lt;windows.h&gt;, for internal Boost use.

### Build Status

Branch          | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/winapi/tree/master) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/dkb233de24u30x9a/br\
anch/master?svg=true)](https://ci.appveyor.com/project/Lastique/winapi/branch\
/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.s\
vg)](http://www.boost.org/development/tests/master/developer/winapi.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/winapi.html)
[`develop`](https://github.com/boostorg/winapi/tree/develop) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/dkb233de24u30x9a/br\
anch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/winapi/branc\
h/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgree\
n.svg)](http://www.boost.org/development/tests/develop/developer/winapi.html)\
 | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg\
)](https://pdimov.github.io/boostdep-report/develop/winapi.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/winapi
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/winapi
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.83.0
depends: libboost-predef == 1.83.0
builds: &windows; Provides Windows API declarations.
bootstrap-build:
\
project = libboost-winapi

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-winapi-1.83.0.tar.gz
sha256sum: 3237c88e8f8cfe9b10e203176564c71c191be96991e1f3765eac80fbec99146e
:
name: libboost-winapi
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Windows API abstraction layer
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
WinAPI
======

Windows API declarations without &lt;windows.h&gt;, for internal Boost use.

### Build Status

Branch          | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/winapi/tree/master) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/dkb233de24u30x9a/br\
anch/master?svg=true)](https://ci.appveyor.com/project/Lastique/winapi/branch\
/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.s\
vg)](http://www.boost.org/development/tests/master/developer/winapi.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/winapi.html)
[`develop`](https://github.com/boostorg/winapi/tree/develop) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/dkb233de24u30x9a/br\
anch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/winapi/branc\
h/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgree\
n.svg)](http://www.boost.org/development/tests/develop/developer/winapi.html)\
 | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg\
)](https://pdimov.github.io/boostdep-report/develop/winapi.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/winapi
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/winapi
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-config == 1.85.0
depends: libboost-predef == 1.85.0
builds: &windows; Provides Windows API declarations.
bootstrap-build:
\
project = libboost-winapi

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-winapi-1.85.0.tar.gz
sha256sum: 0ae33163d5778af1acf9d8abd91e1a3051085b83e4d6d66aeb0af8e0bc545a3d
:
name: libboost-winapi
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Windows API abstraction layer
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
WinAPI
======

Windows API declarations without &lt;windows.h&gt;, for internal Boost use.

### Build Status

Branch          | AppVeyor | Test Matrix | Dependencies |
:-------------: | -------- | ----------- | ------------ |
[`master`](https://github.com/boostorg/winapi/tree/master) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/dkb233de24u30x9a/br\
anch/master?svg=true)](https://ci.appveyor.com/project/Lastique/winapi/branch\
/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.s\
vg)](http://www.boost.org/development/tests/master/developer/winapi.html) |\
 [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](\
https://pdimov.github.io/boostdep-report/master/winapi.html)
[`develop`](https://github.com/boostorg/winapi/tree/develop) |\
 [![AppVeyor](https://ci.appveyor.com/api/projects/status/dkb233de24u30x9a/br\
anch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/winapi/branc\
h/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgree\
n.svg)](http://www.boost.org/development/tests/develop/developer/winapi.html)\
 | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg\
)](https://pdimov.github.io/boostdep-report/develop/winapi.html)

### License

Distributed under the [Boost Software License, Version 1.0](https://boost.org\
/LICENSE_1_0.txt).

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/winapi
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/winapi
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-config == 1.87.0
depends: libboost-predef == 1.87.0
builds: &windows; Provides Windows API declarations.
bootstrap-build:
\
project = libboost-winapi

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-winapi-1.87.0.tar.gz
sha256sum: 835a5e35a0ddb22a81268860e625321290c6f36fdb6473fe0ffe76cea82f5734
:
name: libboost-xpressive
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: Regular expressions that can be written as strings or as expression\
 templates, and which can refer to each other and themselves recursively with\
 the power of context-free grammars
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/xpressive
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/xpressive
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.83.0
depends: libboost-config == 1.83.0
depends: libboost-conversion == 1.83.0
depends: libboost-core == 1.83.0
depends: libboost-exception == 1.83.0
depends: libboost-fusion == 1.83.0
depends: libboost-integer == 1.83.0
depends: libboost-iterator == 1.83.0
depends: libboost-lexical-cast == 1.83.0
depends: libboost-mpl == 1.83.0
depends: libboost-numeric-conversion == 1.83.0
depends: libboost-optional == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-proto == 1.83.0
depends: libboost-range == 1.83.0
depends: libboost-smart-ptr == 1.83.0
depends: libboost-static-assert == 1.83.0
depends: libboost-throw-exception == 1.83.0
depends: libboost-type-traits == 1.83.0
depends: libboost-typeof == 1.83.0
depends: libboost-utility == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-xpressive

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-xpressive-1.83.0.tar.gz
sha256sum: 203d852e110771f669bd9eef89b907280efca94113e34c2b1d1a71435eacafdf
:
name: libboost-xpressive
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: Regular expressions that can be written as strings or as expression\
 templates, and which can refer to each other and themselves recursively with\
 the power of context-free grammars
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/xpressive
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/xpressive
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-assert == 1.85.0
depends: libboost-config == 1.85.0
depends: libboost-conversion == 1.85.0
depends: libboost-core == 1.85.0
depends: libboost-exception == 1.85.0
depends: libboost-fusion == 1.85.0
depends: libboost-integer == 1.85.0
depends: libboost-iterator == 1.85.0
depends: libboost-lexical-cast == 1.85.0
depends: libboost-mpl == 1.85.0
depends: libboost-numeric-conversion == 1.85.0
depends: libboost-optional == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-proto == 1.85.0
depends: libboost-range == 1.85.0
depends: libboost-smart-ptr == 1.85.0
depends: libboost-static-assert == 1.85.0
depends: libboost-throw-exception == 1.85.0
depends: libboost-type-traits == 1.85.0
depends: libboost-typeof == 1.85.0
depends: libboost-utility == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-xpressive

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-xpressive-1.85.0.tar.gz
sha256sum: 00111fa1042e60655d180d75022e46205ed1369b78ff0f7af70facafc22a8b23
:
name: libboost-xpressive
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: Regular expressions that can be written as strings or as expression\
 templates, and which can refer to each other and themselves recursively with\
 the power of context-free grammars
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
url: https://github.com/boostorg/xpressive
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/xpressive
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-assert == 1.87.0
depends: libboost-config == 1.87.0
depends: libboost-conversion == 1.87.0
depends: libboost-core == 1.87.0
depends: libboost-exception == 1.87.0
depends: libboost-fusion == 1.87.0
depends: libboost-integer == 1.87.0
depends: libboost-iterator == 1.87.0
depends: libboost-lexical-cast == 1.87.0
depends: libboost-mpl == 1.87.0
depends: libboost-numeric-conversion == 1.87.0
depends: libboost-optional == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-proto == 1.87.0
depends: libboost-range == 1.87.0
depends: libboost-smart-ptr == 1.87.0
depends: libboost-static-assert == 1.87.0
depends: libboost-throw-exception == 1.87.0
depends: libboost-type-traits == 1.87.0
depends: libboost-typeof == 1.87.0
depends: libboost-utility == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-xpressive

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-xpressive-1.87.0.tar.gz
sha256sum: a016f46d000069c3fc8d06e7d1664d6fdf04078f08e6b1656b7932e4ca1cbe06
:
name: libboost-yap
version: 1.83.0
type: lib,binless
language: c++
project: boost
summary: An expression template library for C++14 and later
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Build Status](https://travis-ci.org/boostorg/yap.svg?branch=master)](https\
://travis-ci.org/boostorg/yap)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/tzlaine/y\
ap?branch=master&svg=true)](https://ci.appveyor.com/project/tzlaine/yap)
[![License](https://img.shields.io/badge/license-boost-brightgreen.svg)](LICE\
NSE_1_0.txt)


# yap
A C++14-and-later expression template library

This is a Boost library.  It covers the same problem space as Boost.Proto,\
 but works quite differently, due to the availability of lots of new features\
 in C++14 and later.

Please read the docs for details: https://boostorg.github.io/yap

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/yap
doc-url: https://www.boost.org/doc/libs/1_83_0/libs/yap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-hana == 1.83.0
depends: libboost-preprocessor == 1.83.0
depends: libboost-type-index == 1.83.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-yap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-yap-1.83.0.tar.gz
sha256sum: 962a66c6ab430f85be7b56f2770aeb4b82bcc76848ab56768619825cd7138368
:
name: libboost-yap
version: 1.85.0
type: lib,binless
language: c++
project: boost
summary: An expression template library for C++14 and later
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Build Status](https://travis-ci.org/boostorg/yap.svg?branch=master)](https\
://travis-ci.org/boostorg/yap)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/tzlaine/y\
ap?branch=master&svg=true)](https://ci.appveyor.com/project/tzlaine/yap)
[![License](https://img.shields.io/badge/license-boost-brightgreen.svg)](LICE\
NSE_1_0.txt)


# yap
A C++14-and-later expression template library

This is a Boost library.  It covers the same problem space as Boost.Proto,\
 but works quite differently, due to the availability of lots of new features\
 in C++14 and later.

Please read the docs for details: https://boostorg.github.io/yap

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/yap
doc-url: https://www.boost.org/doc/libs/1_85_0/libs/yap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libboost-hana == 1.85.0
depends: libboost-preprocessor == 1.85.0
depends: libboost-type-index == 1.85.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-yap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-yap-1.85.0.tar.gz
sha256sum: fda8252e6f072845f407051c2ca962fcccd29614178bdea2576b0f18b40e80d4
:
name: libboost-yap
version: 1.87.0
type: lib,binless
language: c++
project: boost
summary: An expression template library for C++14 and later
license: BSL-1.0; Boost Software License 1.0.
topics: C++, Boost
description:
\
[![Build Status](https://travis-ci.org/boostorg/yap.svg?branch=master)](https\
://travis-ci.org/boostorg/yap)
[![Build Status](https://ci.appveyor.com/api/projects/status/github/tzlaine/y\
ap?branch=master&svg=true)](https://ci.appveyor.com/project/tzlaine/yap)
[![License](https://img.shields.io/badge/license-boost-brightgreen.svg)](LICE\
NSE_1_0.txt)


# yap
A C++14-and-later expression template library

This is a Boost library.  It covers the same problem space as Boost.Proto,\
 but works quite differently, due to the availability of lots of new features\
 in C++14 and later.

Please read the docs for details: https://boostorg.github.io/yap

\
description-type: text/markdown;variant=GFM
url: https://github.com/boostorg/yap
doc-url: https://www.boost.org/doc/libs/1_87_0/libs/yap
package-url: https://github.com/build2-packaging/boost
email: boost-users@lists.boost.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libboost-hana == 1.87.0
depends: libboost-preprocessor == 1.87.0
depends: libboost-type-index == 1.87.0
builds: default
builds: -( +macos &gcc ); https://github.com/boostorg/config/issues/399
bootstrap-build:
\
project = libboost-yap

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: boost/libboost-yap-1.87.0.tar.gz
sha256sum: 4147715599920314b86bf090757fa8c00f231049f974b3a94941416969462c06
:
name: libbox2d
version: 2.4.1+1
project: box2d
summary: Box2D is a 2D physics engine for games.
license: MIT
description:
\
![Box2D Logo](https://box2d.org/images/logo.svg)

# Build Status
[![Build Status](https://travis-ci.org/erincatto/box2d.svg?branch=master)](ht\
tps://travis-ci.org/erincatto/box2d)

# Box2D 

Box2D is a 2D physics engine for games.

## Contributing

Please do not submit pull requests with new features or core library changes.\
 Instead, please file an issue first for discussion. For bugs, I prefer\
 detailed bug reports over pull requests.

## Features

### Collision
- Continuous collision detection
- Contact callbacks: begin, end, pre-solve, post-solve
- Convex polygons and circles
- Multiple shapes per body
- One-shot contact manifolds
- Dynamic tree broadphase
- Efficient pair management
- Fast broadphase AABB queries
- Collision groups and categories

### Physics
- Continuous physics with time of impact solver
- Persistent body-joint-contact graph
- Island solution and sleep management
- Contact, friction, and restitution
- Stable stacking with a linear-time solver
- Revolute, prismatic, distance, pulley, gear, mouse joint, and other joint\
 types
- Joint limits, motors, and friction
- Momentum decoupled position correction
- Fairly accurate reaction forces/impulses

### System
- Small block and stack allocators
- Centralized tuning parameters
- Highly portable C++ with no use of STL containers

### Testbed
- OpenGL with GLFW
- Graphical user interface with imgui
- Extensible test framework
- Support for loading world dumps

## Building
- Install [CMake](https://cmake.org/)
- Ensure CMake is in the user `PATH`
- Visual Studio: run `build.bat` from the command prompt
- Otherwise: run `build.sh` from a bash shell
- Results are in the build sub-folder
- On Windows you can open box2d.sln

## Building Box2D - Using vcpkg
You can download and install Box2D using the [vcpkg](https://github.com/Micro\
soft/vcpkg) dependency manager:

- git clone https://github.com/Microsoft/vcpkg.git
- cd vcpkg
- ./bootstrap-vcpkg.sh
- ./vcpkg integrate install
- ./vcpkg install box2d

The Box2D port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

Note: vcpkg support is not provided by the Box2D project

## Building for Xcode
- Install [CMake](https://cmake.org)
- Add Cmake to the path in .zprofile (the default Terminal shell is zsh)
    - export PATH="/Applications/CMake.app/Contents/bin:$PATH"
- mkdir build
- cd build
- cmake -G Xcode ..
- open box2d.xcodeproj
- Select the testbed scheme
- Edit the scheme to set a custom working directory, make this be in\
 box2d/testbed
- You can now build and run the testbed

## Installing using CMake
You can use the CMake install feature to deploy the library to a central\
 location that can
be accessed using:
```
find_package(box2d REQUIRED)
target_link_libraries(mytarget PRIVATE box2d)
```
You can build and install the library and docs using this command sequence\
 (requires Doxygen):
```
mkdir build
cd build
cmake -DBOX2D_BUILD_DOCS=ON ..
cmake --build .
cmake --build . --target INSTALL
```
On Windows this tries to install in `Program Files` and thus requires admin\
 privileges. Alternatively you can target another directory using something\
 like this:
```
mkdir build
cd build
cmake -DBOX2D_BUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX="C:/packages" ..
cmake --build .
cmake --build . --target INSTALL
```

## Documentation
- [Manual](https://box2d.org/documentation/)
- [reddit](https://www.reddit.com/r/box2d/)
- [Discord](https://discord.gg/NKYgCBP)

## License
Box2D is developed by Erin Catto, and uses the [MIT license](https://en.wikip\
edia.org/wiki/MIT_License).

## Sponsorship
Support development of Box2D through [Github Sponsors](https://github.com/spo\
nsors/erincatto)

\
description-type: text/markdown;variant=GFM
url: https://box2d.org/
doc-url: https://box2d.org/documentation/
src-url: https://github.com/erincatto/box2d
package-url: https://github.com/build2-packaging/box2d
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libbox2d-tests == 2.4.1
examples: libbox2d-testbed == 2.4.1
bootstrap-build:
\
project = libbox2d

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: box2d/libbox2d-2.4.1+1.tar.gz
sha256sum: 5a272d4764b801396c6ea340e0dbdb4e54fe1bd754309cd010e332fee770cd1f
:
name: libbox2d-testbed
version: 2.4.1+1
project: box2d
summary: Testbed of the Box2D physics engine for games.
license: MIT
description:
\
![Box2D Logo](https://box2d.org/images/logo.svg)

# Build Status
[![Build Status](https://travis-ci.org/erincatto/box2d.svg?branch=master)](ht\
tps://travis-ci.org/erincatto/box2d)

# Box2D 

Box2D is a 2D physics engine for games.

## Contributing

Please do not submit pull requests with new features or core library changes.\
 Instead, please file an issue first for discussion. For bugs, I prefer\
 detailed bug reports over pull requests.

## Features

### Collision
- Continuous collision detection
- Contact callbacks: begin, end, pre-solve, post-solve
- Convex polygons and circles
- Multiple shapes per body
- One-shot contact manifolds
- Dynamic tree broadphase
- Efficient pair management
- Fast broadphase AABB queries
- Collision groups and categories

### Physics
- Continuous physics with time of impact solver
- Persistent body-joint-contact graph
- Island solution and sleep management
- Contact, friction, and restitution
- Stable stacking with a linear-time solver
- Revolute, prismatic, distance, pulley, gear, mouse joint, and other joint\
 types
- Joint limits, motors, and friction
- Momentum decoupled position correction
- Fairly accurate reaction forces/impulses

### System
- Small block and stack allocators
- Centralized tuning parameters
- Highly portable C++ with no use of STL containers

### Testbed
- OpenGL with GLFW
- Graphical user interface with imgui
- Extensible test framework
- Support for loading world dumps

## Building
- Install [CMake](https://cmake.org/)
- Ensure CMake is in the user `PATH`
- Visual Studio: run `build.bat` from the command prompt
- Otherwise: run `build.sh` from a bash shell
- Results are in the build sub-folder
- On Windows you can open box2d.sln

## Building Box2D - Using vcpkg
You can download and install Box2D using the [vcpkg](https://github.com/Micro\
soft/vcpkg) dependency manager:

- git clone https://github.com/Microsoft/vcpkg.git
- cd vcpkg
- ./bootstrap-vcpkg.sh
- ./vcpkg integrate install
- ./vcpkg install box2d

The Box2D port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

Note: vcpkg support is not provided by the Box2D project

## Building for Xcode
- Install [CMake](https://cmake.org)
- Add Cmake to the path in .zprofile (the default Terminal shell is zsh)
    - export PATH="/Applications/CMake.app/Contents/bin:$PATH"
- mkdir build
- cd build
- cmake -G Xcode ..
- open box2d.xcodeproj
- Select the testbed scheme
- Edit the scheme to set a custom working directory, make this be in\
 box2d/testbed
- You can now build and run the testbed

## Installing using CMake
You can use the CMake install feature to deploy the library to a central\
 location that can
be accessed using:
```
find_package(box2d REQUIRED)
target_link_libraries(mytarget PRIVATE box2d)
```
You can build and install the library and docs using this command sequence\
 (requires Doxygen):
```
mkdir build
cd build
cmake -DBOX2D_BUILD_DOCS=ON ..
cmake --build .
cmake --build . --target INSTALL
```
On Windows this tries to install in `Program Files` and thus requires admin\
 privileges. Alternatively you can target another directory using something\
 like this:
```
mkdir build
cd build
cmake -DBOX2D_BUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX="C:/packages" ..
cmake --build .
cmake --build . --target INSTALL
```

## Documentation
- [Manual](https://box2d.org/documentation/)
- [reddit](https://www.reddit.com/r/box2d/)
- [Discord](https://discord.gg/NKYgCBP)

## License
Box2D is developed by Erin Catto, and uses the [MIT license](https://en.wikip\
edia.org/wiki/MIT_License).

## Sponsorship
Support development of Box2D through [Github Sponsors](https://github.com/spo\
nsors/erincatto)

\
description-type: text/markdown;variant=GFM
url: https://box2d.org/
doc-url: https://box2d.org/documentation/
src-url: https://github.com/erincatto/box2d
package-url: https://github.com/build2-packaging/box2d
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw ^1.86.0
depends: libimgui-render-opengl3 ^1.86.0
bootstrap-build:
\
project = libbox2d-testbed

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: box2d/libbox2d-testbed-2.4.1+1.tar.gz
sha256sum: e72b5d471e4ecc66f5bba0d7b4c33e2df66da14c7b43531c0f11f492a74f1d5c
:
name: libbox2d-tests
version: 2.4.1+1
project: box2d
summary: Unit test package of the Box2D physics engine for games.
license: MIT
description:
\
![Box2D Logo](https://box2d.org/images/logo.svg)

# Build Status
[![Build Status](https://travis-ci.org/erincatto/box2d.svg?branch=master)](ht\
tps://travis-ci.org/erincatto/box2d)

# Box2D 

Box2D is a 2D physics engine for games.

## Contributing

Please do not submit pull requests with new features or core library changes.\
 Instead, please file an issue first for discussion. For bugs, I prefer\
 detailed bug reports over pull requests.

## Features

### Collision
- Continuous collision detection
- Contact callbacks: begin, end, pre-solve, post-solve
- Convex polygons and circles
- Multiple shapes per body
- One-shot contact manifolds
- Dynamic tree broadphase
- Efficient pair management
- Fast broadphase AABB queries
- Collision groups and categories

### Physics
- Continuous physics with time of impact solver
- Persistent body-joint-contact graph
- Island solution and sleep management
- Contact, friction, and restitution
- Stable stacking with a linear-time solver
- Revolute, prismatic, distance, pulley, gear, mouse joint, and other joint\
 types
- Joint limits, motors, and friction
- Momentum decoupled position correction
- Fairly accurate reaction forces/impulses

### System
- Small block and stack allocators
- Centralized tuning parameters
- Highly portable C++ with no use of STL containers

### Testbed
- OpenGL with GLFW
- Graphical user interface with imgui
- Extensible test framework
- Support for loading world dumps

## Building
- Install [CMake](https://cmake.org/)
- Ensure CMake is in the user `PATH`
- Visual Studio: run `build.bat` from the command prompt
- Otherwise: run `build.sh` from a bash shell
- Results are in the build sub-folder
- On Windows you can open box2d.sln

## Building Box2D - Using vcpkg
You can download and install Box2D using the [vcpkg](https://github.com/Micro\
soft/vcpkg) dependency manager:

- git clone https://github.com/Microsoft/vcpkg.git
- cd vcpkg
- ./bootstrap-vcpkg.sh
- ./vcpkg integrate install
- ./vcpkg install box2d

The Box2D port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

Note: vcpkg support is not provided by the Box2D project

## Building for Xcode
- Install [CMake](https://cmake.org)
- Add Cmake to the path in .zprofile (the default Terminal shell is zsh)
    - export PATH="/Applications/CMake.app/Contents/bin:$PATH"
- mkdir build
- cd build
- cmake -G Xcode ..
- open box2d.xcodeproj
- Select the testbed scheme
- Edit the scheme to set a custom working directory, make this be in\
 box2d/testbed
- You can now build and run the testbed

## Installing using CMake
You can use the CMake install feature to deploy the library to a central\
 location that can
be accessed using:
```
find_package(box2d REQUIRED)
target_link_libraries(mytarget PRIVATE box2d)
```
You can build and install the library and docs using this command sequence\
 (requires Doxygen):
```
mkdir build
cd build
cmake -DBOX2D_BUILD_DOCS=ON ..
cmake --build .
cmake --build . --target INSTALL
```
On Windows this tries to install in `Program Files` and thus requires admin\
 privileges. Alternatively you can target another directory using something\
 like this:
```
mkdir build
cd build
cmake -DBOX2D_BUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX="C:/packages" ..
cmake --build .
cmake --build . --target INSTALL
```

## Documentation
- [Manual](https://box2d.org/documentation/)
- [reddit](https://www.reddit.com/r/box2d/)
- [Discord](https://discord.gg/NKYgCBP)

## License
Box2D is developed by Erin Catto, and uses the [MIT license](https://en.wikip\
edia.org/wiki/MIT_License).

## Sponsorship
Support development of Box2D through [Github Sponsors](https://github.com/spo\
nsors/erincatto)

\
description-type: text/markdown;variant=GFM
url: https://box2d.org/
doc-url: https://box2d.org/documentation/
src-url: https://github.com/erincatto/box2d
package-url: https://github.com/build2-packaging/box2d
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libbox2d-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

exe{*}: test = true

\
location: box2d/libbox2d-tests-2.4.1+1.tar.gz
sha256sum: 8603c5906bf28bd35c65cab52038128ae0ba12442a5eab1cfcc858255932a33c
:
name: libbrotli
version: 1.0.9
project: brotli
summary: Brotli data compression C library
license: MIT
description:
\
BROTLI DATA COMPRESSION LIBRARY

Brotli is a generic-purpose lossless compression algorithm that compresses\
 data
using a combination of a modern variant of the LZ77 algorithm, Huffman coding
and 2nd order context modeling, with a compression ratio comparable to the\
 best
currently available general-purpose compression methods. It is similar in\
 speed
with deflate but offers more dense compression.

The specification of the Brotli Compressed Data Format is defined in RFC 7932
https://tools.ietf.org/html/rfc7932

Brotli is open-sourced under the MIT License, see the LICENSE file.

Brotli mailing list:
https://groups.google.com/forum/#!forum/brotli

\
description-type: text/plain
url: https://github.com/google/brotli
src-url: https://github.com/google/brotli
package-url: https://github.com/build2-packaging/brotli
email: brotli@googlegroups.com; Mailing list
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = libbrotli

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: brotli/libbrotli-1.0.9.tar.gz
sha256sum: 96cd2902a46abe6777c088696e2341b6e1a44ba76310329531530a28fbd82fe9
:
name: libbzip2
version: 1.0.8+1
project: bzip2
summary: bzip2 is a freely available, patent free, high-quality data\
 compressor.
license: other: BSD
description:
\

This is the README for bzip2/libzip2.
This version is fully compatible with the previous public releases.

------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.

bzip2/libbzip2 version 1.0.8 of 13 July 2019
Copyright (C) 1996-2019 Julian Seward <jseward@acm.org>

Please read the WARNING, DISCLAIMER and PATENTS sections in this file.

This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------

Complete documentation is available in Postscript form (manual.ps),
PDF (manual.pdf) or html (manual.html).  A plain-text version of the
manual page is available as bzip2.txt.


HOW TO BUILD -- UNIX

Type 'make'.  This builds the library libbz2.a and then the programs
bzip2 and bzip2recover.  Six self-tests are run.  If the self-tests
complete ok, carry on to installation:

To install in /usr/local/bin, /usr/local/lib, /usr/local/man and
/usr/local/include, type

   make install

To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type

   make install PREFIX=/xxx/yyy

If you are (justifiably) paranoid and want to see what 'make install'
is going to do, you can first do

   make -n install                      or
   make -n install PREFIX=/xxx/yyy      respectively.

The -n instructs make to show the commands it would execute, but not
actually execute them.


HOW TO BUILD -- UNIX, shared library libbz2.so.

Do 'make -f Makefile-libbz2_so'.  This Makefile seems to work for
Linux-ELF (RedHat 7.2 on an x86 box), with gcc.  I make no claims
that it works for any other platform, though I suspect it probably
will work for most platforms employing both ELF and gcc.

bzip2-shared, a client of the shared library, is also built, but not
self-tested.  So I suggest you also build using the normal Makefile,
since that conducts a self-test.  A second reason to prefer the
version statically linked to the library is that, on x86 platforms,
building shared objects makes a valuable register (%ebx) unavailable
to gcc, resulting in a slowdown of 10%-20%, at least for bzip2.

Important note for people upgrading .so's from 0.9.0/0.9.5 to version
1.0.X.  All the functions in the library have been renamed, from (eg)
bzCompress to BZ2_bzCompress, to avoid namespace pollution.
Unfortunately this means that the libbz2.so created by
Makefile-libbz2_so will not work with any program which used an older
version of the library.  I do encourage library clients to make the
effort to upgrade to use version 1.0, since it is both faster and more
robust than previous versions.


HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc.

It's difficult for me to support compilation on all these platforms.
My approach is to collect binaries for these platforms, and put them
on the master web site (https://sourceware.org/bzip2/).  Look there.  However
(FWIW), bzip2-1.0.X is very standard ANSI C and should compile
unmodified with MS Visual C.  If you have difficulties building, you
might want to read README.COMPILATION.PROBLEMS.

At least using MS Visual C++ 6, you can build from the unmodified
sources by issuing, in a command shell: 

   nmake -f makefile.msc

(you may need to first run the MSVC-provided script VCVARS32.BAT
 so as to set up paths to the MSVC tools correctly).


VALIDATION

Correct operation, in the sense that a compressed file can always be
decompressed to reproduce the original, is obviously of paramount
importance.  To validate bzip2, I used a modified version of Mark
Nelson's churn program.  Churn is an automated test driver which
recursively traverses a directory structure, using bzip2 to compress
and then decompress each file it encounters, and checking that the
decompressed data is the same as the original.



Please read and be aware of the following:

WARNING:

   This program and library (attempts to) compress data by 
   performing several non-trivial transformations on it.  
   Unless you are 100% familiar with *all* the algorithms 
   contained herein, and with the consequences of modifying them, 
   you should NOT meddle with the compression or decompression 
   machinery.  Incorrect changes can and very likely *will* 
   lead to disastrous loss of data.


DISCLAIMER:

   I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE
   USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED.

   Every compression of a file implies an assumption that the
   compressed file can be decompressed to reproduce the original.
   Great efforts in design, coding and testing have been made to
   ensure that this program works correctly.  However, the complexity
   of the algorithms, and, in particular, the presence of various
   special cases in the code which occur with very low but non-zero
   probability make it impossible to rule out the possibility of bugs
   remaining in the program.  DO NOT COMPRESS ANY DATA WITH THIS
   PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER
   SMALL, THAT THE DATA WILL NOT BE RECOVERABLE.

   That is not to say this program is inherently unreliable.  
   Indeed, I very much hope the opposite is true.  bzip2/libbzip2 
   has been carefully constructed and extensively tested.


PATENTS:

   To the best of my knowledge, bzip2/libbzip2 does not use any 
   patented algorithms.  However, I do not have the resources 
   to carry out a patent search.  Therefore I cannot give any 
   guarantee of the above statement.



WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ?

   * Approx 10% faster compression, 30% faster decompression
   * -t (test mode) is a lot quicker
   * Can decompress concatenated compressed files
   * Programming interface, so programs can directly read/write .bz2 files
   * Less restrictive (BSD-style) licensing
   * Flag handling more compatible with GNU gzip
   * Much more documentation, i.e., a proper user manual
   * Hopefully, improved portability (at least of the library)

WHAT'S NEW IN 0.9.5 ?

   * Compression speed is much less sensitive to the input
     data than in previous versions.  Specifically, the very
     slow performance caused by repetitive data is fixed.
   * Many small improvements in file and flag handling.
   * A Y2K statement.

WHAT'S NEW IN 1.0.x ?

   See the CHANGES file.

I hope you find bzip2 useful.  Feel free to contact the developers at
   bzip2-devel@sourceware.org
if you have any suggestions or queries.  Many people mailed me with
comments, suggestions and patches after the releases of bzip-0.15,
bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1,
1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this
feedback.  I thank you for your comments.

bzip2's "home" is https://sourceware.org/bzip2/

Julian Seward
jseward@acm.org
Cambridge, UK.

18     July 1996 (version 0.15)
25   August 1996 (version 0.21)
 7   August 1997 (bzip2, version 0.1)
29   August 1997 (bzip2, version 0.1pl2)
23   August 1998 (bzip2, version 0.9.0)
 8     June 1999 (bzip2, version 0.9.5)
 4     Sept 1999 (bzip2, version 0.9.5d)
 5      May 2000 (bzip2, version 1.0pre8)
30 December 2001 (bzip2, version 1.0.2pre1)
15 February 2005 (bzip2, version 1.0.3)
20 December 2006 (bzip2, version 1.0.4)
10 December 2007 (bzip2, version 1.0.5)
 6     Sept 2010 (bzip2, version 1.0.6)
27     June 2019 (bzip2, version 1.0.7)
13     July 2019 (bzip2, version 1.0.8)

\
description-type: text/plain
url: https://www.sourceware.org/bzip2/
src-url: https://sourceware.org/git/?p=bzip2.git
package-url: https://github.com/build2-packaging/bzip2/
email: bzip2-devel@sourceware.org
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = libbzip2

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target


\
location: bzip2/libbzip2-1.0.8+1.tar.gz
sha256sum: 4f6d46f89173b853c142a4b5932733f3cf0e78c1d496447b72b6644a71f946a5
:
name: libca-certificates-curl
version: 1.0.0+1
upstream-version: 20200101
project: curl
summary: CA certificate bundle and C library for querying its path
license: MPLv2; Mozilla Public License v2.0.
topics: C, SSL, TLS, Certificate Authority
description:
\
cURL is a client-side software for transferring data using URLs. This is the
Certificate Authorities (CA) certificate bundle for peer SSL certificate
verification. For more information see:

https://curl.haxx.se/docs/caextract.html

This package contains the original CA certificate bundle file and the custom
C library source code for querying its path all packaged for the build2\
 package
manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the certificate
bundle itself to the cURL mailing lists. Send the library, build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of libca-certificates-curl for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.haxx.se/docs/caextract.html
src-url: https://git.build2.org/cgit/packaging/curl/ca-certificates-curl/tree\
/libca-certificates-curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@cool.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

project = libca-certificates-curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libca-certificates-curl-1.0.0+1.tar.gz
sha256sum: b6c7fa91d905a917e581373f579119eae96e51d92060c00be0d605d1f63f5212
:
name: libca-certificates-curl
version: 1.0.1
upstream-version: 20210119
project: curl
summary: CA certificate bundle and C library for querying its path
license: MPL-2.0; Mozilla Public License 2.0.
topics: C, SSL, TLS, Certificate Authority
description:
\
cURL is a client-side software for transferring data using URLs. This is the
Certificate Authorities (CA) certificate bundle for peer SSL certificate
verification. For more information see:

https://curl.se/docs/caextract.html

This package contains the original CA certificate bundle file and the custom
C library source code for querying its path all packaged for the build2\
 package
manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the certificate
bundle itself to the cURL mailing lists. Send the library, build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of libca-certificates-curl for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/docs/caextract.html
src-url: https://git.build2.org/cgit/packaging/curl/ca-certificates-curl/tree\
/libca-certificates-curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@cool.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

project = libca-certificates-curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libca-certificates-curl-1.0.1.tar.gz
sha256sum: fe5be488f5b57e2e626cc7e18cba927b32ee748d4416646826e8ce1081a924bc
:
name: libca-certificates-curl
version: 1.0.2
upstream-version: 20220719
project: curl
summary: CA certificate bundle and C library for querying its path
license: MPL-2.0; Mozilla Public License 2.0.
topics: C, SSL, TLS, Certificate Authority
description:
\
cURL is a client-side software for transferring data using URLs. This is the
Certificate Authorities (CA) certificate bundle for peer SSL certificate
verification. For more information see:

https://curl.se/docs/caextract.html

This package contains the original CA certificate bundle file and the custom
C library source code for querying its path all packaged for the build2\
 package
manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the certificate
bundle itself to the cURL mailing lists. Send the library, build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of libca-certificates-curl for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/docs/caextract.html
src-url: https://git.build2.org/cgit/packaging/curl/ca-certificates-curl/tree\
/libca-certificates-curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

project = libca-certificates-curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libca-certificates-curl-1.0.2.tar.gz
sha256sum: e903b5614a1630ddc0d54a724c77895a4489620d0c534f356c630c3acbcd9ca4
:
name: libca-certificates-curl
version: 1.0.3
upstream-version: 20230110
project: curl
summary: CA certificate bundle and C library for querying its path
license: MPL-2.0; Mozilla Public License 2.0.
topics: C, SSL, TLS, Certificate Authority
description:
\
cURL is a client-side software for transferring data using URLs. This is the
Certificate Authorities (CA) certificate bundle for peer SSL certificate
verification. For more information see:

https://curl.se/docs/caextract.html

This package contains the original CA certificate bundle file and the custom
C library source code for querying its path all packaged for the build2\
 package
manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the certificate
bundle itself to the cURL mailing lists. Send the library, build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of libca-certificates-curl for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/docs/caextract.html
src-url: https://git.build2.org/cgit/packaging/curl/ca-certificates-curl/tree\
/libca-certificates-curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

project = libca-certificates-curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libca-certificates-curl-1.0.3.tar.gz
sha256sum: 3d480b9eceead78559a13855a03e1f1cda79d122b65b280e864b52b7ea2f5a8f
:
name: libca-certificates-curl
version: 1.0.4
upstream-version: 20230822
project: curl
summary: CA certificate bundle and C library for querying its path
license: MPL-2.0; Mozilla Public License 2.0.
topics: C, SSL, TLS, Certificate Authority
description:
\
cURL is a client-side software for transferring data using URLs. This is the
Certificate Authorities (CA) certificate bundle for peer SSL certificate
verification. For more information see:

https://curl.se/docs/caextract.html

This package contains the original CA certificate bundle file and the custom C
library source code for querying its path all packaged for the build2 package
manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the certificate
bundle itself to the cURL mailing lists. Send the library, build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of libca-certificates-curl for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/docs/caextract.html
src-url: https://git.build2.org/cgit/packaging/curl/ca-certificates-curl/tree\
/libca-certificates-curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

project = libca-certificates-curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libca-certificates-curl-1.0.4.tar.gz
sha256sum: 83ba15d0aefeefecf56bc1c7dc1f99bee6631c88046bc71e39cd6a1e779ed0db
:
name: libca-certificates-curl
version: 1.0.5
upstream-version: 20240311
project: curl
summary: CA certificate bundle and C library for querying its path
license: MPL-2.0; Mozilla Public License 2.0.
topics: C, SSL, TLS, Certificate Authority
description:
\
cURL is a client-side software for transferring data using URLs. This is the
Certificate Authorities (CA) certificate bundle for peer SSL certificate
verification. For more information see:

https://curl.se/docs/caextract.html

This package contains the original CA certificate bundle file and the custom C
library source code for querying its path all packaged for the build2 package
manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the certificate
bundle itself to the cURL mailing lists. Send the library, build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of libca-certificates-curl for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/docs/caextract.html
src-url: https://git.build2.org/cgit/packaging/curl/ca-certificates-curl/tree\
/libca-certificates-curl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

project = libca-certificates-curl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : Mozilla Public License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libca-certificates-curl-1.0.5.tar.gz
sha256sum: 4c203437da350be545fe99f741f961f82c5536903a38655903c60a711cfb8178
:
name: libcppzmq
version: 4.9.0
language: c++
project: ZeroMQ
summary: Header-only C++ binding for libzmq
license: other: MIT; MIT License.
topics: C++
description:
\
[![CI](https://github.com/zeromq/cppzmq/actions/workflows/ci.yml/badge.svg)](\
https://github.com/zeromq/cppzmq/actions)
[![Coverage Status](https://coveralls.io/repos/github/zeromq/cppzmq/badge.svg\
?branch=master)](https://coveralls.io/github/zeromq/cppzmq?branch=master)
[![License](https://img.shields.io/github/license/zeromq/cppzmq.svg)](https:/\
/github.com/zeromq/cppzmq/blob/master/LICENSE)

Introduction & Design Goals
===========================

cppzmq is a C++ binding for libzmq. It has the following design goals:
 - cppzmq maps the libzmq C API to C++ concepts. In particular:
   - it is type-safe (the libzmq C API exposes various class-like concepts as\
 void*)
   - it provides exception-based error handling (the libzmq C API provides\
 errno-based error handling)
   - it provides RAII-style classes that automate resource management (the\
 libzmq C API requires the user to take care to free resources explicitly)
 - cppzmq is a light-weight, header-only binding. You only need to include\
 the header file zmq.hpp (and maybe zmq_addon.hpp) to use it.
 - zmq.hpp is meant to contain direct mappings of the abstractions provided\
 by the libzmq C API, while zmq_addon.hpp provides additional higher-level\
 abstractions.

There are other C++ bindings for ZeroMQ with different design goals. In\
 particular, none of the following bindings are header-only:
 - [zmqpp](https://github.com/zeromq/zmqpp) is a high-level binding to libzmq.
 - [czmqpp](https://github.com/zeromq/czmqpp) is a binding based on the\
 high-level czmq API.
 - [fbzmq](https://github.com/facebook/fbzmq) is a binding that integrates\
 with Apache Thrift and provides higher-level abstractions in addition. It\
 requires C++14.

Supported platforms
===================

 - Only a subset of the platforms that are supported by libzmq itself are\
 supported. Some features already require a compiler supporting C++11. In the\
 future, probably all features will require C++11. To build and run the\
 tests, CMake and Catch are required.
 - Any libzmq 4.x version is expected to work. DRAFT features may only work\
 for the most recent tested version. Currently explicitly tested libzmq\
 versions are
   - 4.2.0 (without DRAFT API)
   - 4.3.4 (with and without DRAFT API)
 - Platforms with full support (i.e. CI executing build and tests)
   - Ubuntu 18.04 x64 (with gcc 4.8.5, 5.5.0, 7.5.0)
   - Ubuntu 20.04 x64 (with gcc 9.3.0, 10.3.0 and clang 12)
   - Visual Studio 2017 x64
   - Visual Studio 2019 x64
   - macOS 10.15 (with clang 12, without DRAFT API)
 - Additional platforms that are known to work:
   - We have no current reports on additional platforms that are known to\
 work yet. Please add your platform here. If CI can be provided for them with\
 a cloud-based CI service working with GitHub, you are invited to add CI, and\
 make it possible to be included in the list above.
 - Additional platforms that probably work:
   - Any platform supported by libzmq that provides a sufficiently recent gcc\
 (4.8.1 or newer) or clang (3.4.1 or newer)
   - Visual Studio 2012+ x86/x64

Examples
========
These examples require at least C++11.
```c++
#include <zmq.hpp>

int main()
{
    zmq::context_t ctx;
    zmq::socket_t sock(ctx, zmq::socket_type::push);
    sock.bind("inproc://test");
    sock.send(zmq::str_buffer("Hello, world"), zmq::send_flags::dontwait);
}
```
This a more complex example where we send and receive multi-part messages\
 over TCP with a wildcard port.
```c++
#include <iostream>
#include <zmq_addon.hpp>

int main()
{
    zmq::context_t ctx;
    zmq::socket_t sock1(ctx, zmq::socket_type::push);
    zmq::socket_t sock2(ctx, zmq::socket_type::pull);
    sock1.bind("tcp://127.0.0.1:*");
    const std::string last_endpoint =
        sock1.get(zmq::sockopt::last_endpoint);
    std::cout << "Connecting to "
              << last_endpoint << std::endl;
    sock2.connect(last_endpoint);

    std::array<zmq::const_buffer, 2> send_msgs = {
        zmq::str_buffer("foo"),
        zmq::str_buffer("bar!")
    };
    if (!zmq::send_multipart(sock1, send_msgs))
        return 1;

    std::vector<zmq::message_t> recv_msgs;
    const auto ret = zmq::recv_multipart(
        sock2, std::back_inserter(recv_msgs));
    if (!ret)
        return 1;
    std::cout << "Got " << *ret
              << " messages" << std::endl;
    return 0;
}
```

See the `examples` directory for more examples. When the project is compiled\
 with tests enabled, each example gets compiled to an executable.


API Overview
============

For an extensive overview of the `zmq.hpp` API in use, see this [Tour of\
 CPPZMQ by @brettviren](https://brettviren.github.io/cppzmq-tour/index.html).

Bindings for libzmq in `zmq.hpp`:

Types:
* class `zmq::context_t`
* enum `zmq::ctxopt`
* class `zmq::socket_t`
* class `zmq::socket_ref`
* enum `zmq::socket_type`
* enum `zmq::sockopt`
* enum `zmq::send_flags`
* enum `zmq::recv_flags`
* class `zmq::message_t`
* class `zmq::const_buffer`
* class `zmq::mutable_buffer`
* struct `zmq::recv_buffer_size`
* alias `zmq::send_result_t`
* alias `zmq::recv_result_t`
* alias `zmq::recv_buffer_result_t`
* class `zmq::error_t`
* class `zmq::monitor_t`
* struct `zmq_event_t`,
* alias `zmq::free_fn`,
* alias `zmq::pollitem_t`,
* alias `zmq::fd_t`
* class `zmq::poller_t` DRAFT
* enum `zmq::event_flags` DRAFT
* enum `zmq::poller_event` DRAFT

Functions:
* `zmq::version`
* `zmq::poll`
* `zmq::proxy`
* `zmq::proxy_steerable`
* `zmq::buffer`
* `zmq::str_buffer`

Extra high-level types and functions `zmq_addon.hpp`:

Types:
* class `zmq::multipart_t`
* class `zmq::active_poller_t` DRAFT

Functions:
* `zmq::recv_multipart`
* `zmq::send_multipart`
* `zmq::send_multipart_n`
* `zmq::encode`
* `zmq::decode`

Compatibility Guidelines
========================

The users of cppzmq are expected to follow the guidelines below to ensure not\
 to break when upgrading cppzmq to newer versions (non-exhaustive list):

* Do not depend on any macros defined in cppzmq unless explicitly declared\
 public here.

The following macros may be used by consumers of cppzmq: `CPPZMQ_VERSION`,\
 `CPPZMQ_VERSION_MAJOR`, `CPPZMQ_VERSION_MINOR`, `CPPZMQ_VERSION_PATCH`.

Contribution policy
===================

The contribution policy is at: http://rfc.zeromq.org/spec:22

Build instructions
==================

Build steps:

1. Build [libzmq](https://github.com/zeromq/libzmq) via cmake. This does an\
 out of source build and installs the build files
   - download and unzip the lib, cd to directory
   - mkdir build
   - cd build
   - cmake ..
   - sudo make -j4 install

2. Build cppzmq via cmake. This does an out of source build and installs the\
 build files
   - download and unzip the lib, cd to directory
   - mkdir build
   - cd build
   - cmake ..
   - sudo make -j4 install

3. Build cppzmq via [vcpkg](https://github.com/Microsoft/vcpkg/). This does\
 an out of source build and installs the build files
   - git clone https://github.com/Microsoft/vcpkg.git
   - cd vcpkg
   - ./bootstrap-vcpkg.sh # bootstrap-vcpkg.bat for Powershell
   - ./vcpkg integrate install
   - ./vcpkg install cppzmq

Using this:

A cmake find package scripts is provided for you to easily include this\
 library.
Add these lines in your CMakeLists.txt to include the headers and library\
 files of
cpp zmq (which will also include libzmq for you).

```
#find cppzmq wrapper, installed by make of cppzmq
find_package(cppzmq)
target_link_libraries(*Your Project Name* cppzmq)
```

\
description-type: text/markdown;variant=GFM
url: https://zeromq.org/
doc-url: https://zguide.zeromq.org/
src-url: https://github.com/zeromq/cppzmq
package-url: https://github.com/build2-packaging/ZeroMQ-cppzmq
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libzmq ^4.0.0
tests: libcppzmq-tests == 4.9.0
bootstrap-build:
\
project = libcppzmq

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp

# Assume headers are importable unless stated otherwise.
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

\
location: ZeroMQ/libcppzmq-4.9.0.tar.gz
sha256sum: 16bff93c45292da4edb43abdd6c83a92497419a2ef6623cec4295149474253cb
:
name: libcppzmq-tests
version: 4.9.0
language: c++
project: ZeroMQ
summary: Test package for libcppzmq
license: other: MIT; MIT License.
topics: C++
description:
\
[![CI](https://github.com/zeromq/cppzmq/actions/workflows/ci.yml/badge.svg)](\
https://github.com/zeromq/cppzmq/actions)
[![Coverage Status](https://coveralls.io/repos/github/zeromq/cppzmq/badge.svg\
?branch=master)](https://coveralls.io/github/zeromq/cppzmq?branch=master)
[![License](https://img.shields.io/github/license/zeromq/cppzmq.svg)](https:/\
/github.com/zeromq/cppzmq/blob/master/LICENSE)

Introduction & Design Goals
===========================

cppzmq is a C++ binding for libzmq. It has the following design goals:
 - cppzmq maps the libzmq C API to C++ concepts. In particular:
   - it is type-safe (the libzmq C API exposes various class-like concepts as\
 void*)
   - it provides exception-based error handling (the libzmq C API provides\
 errno-based error handling)
   - it provides RAII-style classes that automate resource management (the\
 libzmq C API requires the user to take care to free resources explicitly)
 - cppzmq is a light-weight, header-only binding. You only need to include\
 the header file zmq.hpp (and maybe zmq_addon.hpp) to use it.
 - zmq.hpp is meant to contain direct mappings of the abstractions provided\
 by the libzmq C API, while zmq_addon.hpp provides additional higher-level\
 abstractions.

There are other C++ bindings for ZeroMQ with different design goals. In\
 particular, none of the following bindings are header-only:
 - [zmqpp](https://github.com/zeromq/zmqpp) is a high-level binding to libzmq.
 - [czmqpp](https://github.com/zeromq/czmqpp) is a binding based on the\
 high-level czmq API.
 - [fbzmq](https://github.com/facebook/fbzmq) is a binding that integrates\
 with Apache Thrift and provides higher-level abstractions in addition. It\
 requires C++14.

Supported platforms
===================

 - Only a subset of the platforms that are supported by libzmq itself are\
 supported. Some features already require a compiler supporting C++11. In the\
 future, probably all features will require C++11. To build and run the\
 tests, CMake and Catch are required.
 - Any libzmq 4.x version is expected to work. DRAFT features may only work\
 for the most recent tested version. Currently explicitly tested libzmq\
 versions are
   - 4.2.0 (without DRAFT API)
   - 4.3.4 (with and without DRAFT API)
 - Platforms with full support (i.e. CI executing build and tests)
   - Ubuntu 18.04 x64 (with gcc 4.8.5, 5.5.0, 7.5.0)
   - Ubuntu 20.04 x64 (with gcc 9.3.0, 10.3.0 and clang 12)
   - Visual Studio 2017 x64
   - Visual Studio 2019 x64
   - macOS 10.15 (with clang 12, without DRAFT API)
 - Additional platforms that are known to work:
   - We have no current reports on additional platforms that are known to\
 work yet. Please add your platform here. If CI can be provided for them with\
 a cloud-based CI service working with GitHub, you are invited to add CI, and\
 make it possible to be included in the list above.
 - Additional platforms that probably work:
   - Any platform supported by libzmq that provides a sufficiently recent gcc\
 (4.8.1 or newer) or clang (3.4.1 or newer)
   - Visual Studio 2012+ x86/x64

Examples
========
These examples require at least C++11.
```c++
#include <zmq.hpp>

int main()
{
    zmq::context_t ctx;
    zmq::socket_t sock(ctx, zmq::socket_type::push);
    sock.bind("inproc://test");
    sock.send(zmq::str_buffer("Hello, world"), zmq::send_flags::dontwait);
}
```
This a more complex example where we send and receive multi-part messages\
 over TCP with a wildcard port.
```c++
#include <iostream>
#include <zmq_addon.hpp>

int main()
{
    zmq::context_t ctx;
    zmq::socket_t sock1(ctx, zmq::socket_type::push);
    zmq::socket_t sock2(ctx, zmq::socket_type::pull);
    sock1.bind("tcp://127.0.0.1:*");
    const std::string last_endpoint =
        sock1.get(zmq::sockopt::last_endpoint);
    std::cout << "Connecting to "
              << last_endpoint << std::endl;
    sock2.connect(last_endpoint);

    std::array<zmq::const_buffer, 2> send_msgs = {
        zmq::str_buffer("foo"),
        zmq::str_buffer("bar!")
    };
    if (!zmq::send_multipart(sock1, send_msgs))
        return 1;

    std::vector<zmq::message_t> recv_msgs;
    const auto ret = zmq::recv_multipart(
        sock2, std::back_inserter(recv_msgs));
    if (!ret)
        return 1;
    std::cout << "Got " << *ret
              << " messages" << std::endl;
    return 0;
}
```

See the `examples` directory for more examples. When the project is compiled\
 with tests enabled, each example gets compiled to an executable.


API Overview
============

For an extensive overview of the `zmq.hpp` API in use, see this [Tour of\
 CPPZMQ by @brettviren](https://brettviren.github.io/cppzmq-tour/index.html).

Bindings for libzmq in `zmq.hpp`:

Types:
* class `zmq::context_t`
* enum `zmq::ctxopt`
* class `zmq::socket_t`
* class `zmq::socket_ref`
* enum `zmq::socket_type`
* enum `zmq::sockopt`
* enum `zmq::send_flags`
* enum `zmq::recv_flags`
* class `zmq::message_t`
* class `zmq::const_buffer`
* class `zmq::mutable_buffer`
* struct `zmq::recv_buffer_size`
* alias `zmq::send_result_t`
* alias `zmq::recv_result_t`
* alias `zmq::recv_buffer_result_t`
* class `zmq::error_t`
* class `zmq::monitor_t`
* struct `zmq_event_t`,
* alias `zmq::free_fn`,
* alias `zmq::pollitem_t`,
* alias `zmq::fd_t`
* class `zmq::poller_t` DRAFT
* enum `zmq::event_flags` DRAFT
* enum `zmq::poller_event` DRAFT

Functions:
* `zmq::version`
* `zmq::poll`
* `zmq::proxy`
* `zmq::proxy_steerable`
* `zmq::buffer`
* `zmq::str_buffer`

Extra high-level types and functions `zmq_addon.hpp`:

Types:
* class `zmq::multipart_t`
* class `zmq::active_poller_t` DRAFT

Functions:
* `zmq::recv_multipart`
* `zmq::send_multipart`
* `zmq::send_multipart_n`
* `zmq::encode`
* `zmq::decode`

Compatibility Guidelines
========================

The users of cppzmq are expected to follow the guidelines below to ensure not\
 to break when upgrading cppzmq to newer versions (non-exhaustive list):

* Do not depend on any macros defined in cppzmq unless explicitly declared\
 public here.

The following macros may be used by consumers of cppzmq: `CPPZMQ_VERSION`,\
 `CPPZMQ_VERSION_MAJOR`, `CPPZMQ_VERSION_MINOR`, `CPPZMQ_VERSION_PATCH`.

Contribution policy
===================

The contribution policy is at: http://rfc.zeromq.org/spec:22

Build instructions
==================

Build steps:

1. Build [libzmq](https://github.com/zeromq/libzmq) via cmake. This does an\
 out of source build and installs the build files
   - download and unzip the lib, cd to directory
   - mkdir build
   - cd build
   - cmake ..
   - sudo make -j4 install

2. Build cppzmq via cmake. This does an out of source build and installs the\
 build files
   - download and unzip the lib, cd to directory
   - mkdir build
   - cd build
   - cmake ..
   - sudo make -j4 install

3. Build cppzmq via [vcpkg](https://github.com/Microsoft/vcpkg/). This does\
 an out of source build and installs the build files
   - git clone https://github.com/Microsoft/vcpkg.git
   - cd vcpkg
   - ./bootstrap-vcpkg.sh # bootstrap-vcpkg.bat for Powershell
   - ./vcpkg integrate install
   - ./vcpkg install cppzmq

Using this:

A cmake find package scripts is provided for you to easily include this\
 library.
Add these lines in your CMakeLists.txt to include the headers and library\
 files of
cpp zmq (which will also include libzmq for you).

```
#find cppzmq wrapper, installed by make of cppzmq
find_package(cppzmq)
target_link_libraries(*Your Project Name* cppzmq)
```

\
description-type: text/markdown;variant=GFM
url: https://zeromq.org/
doc-url: https://zguide.zeromq.org/
src-url: https://github.com/zeromq/cppzmq
package-url: https://github.com/build2-packaging/ZeroMQ-cppzmq
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: catch2 ^2.0.0
bootstrap-build:
\
project = libcppzmq-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
hxx{*}: cxx.importable = true

# Alle executeables are tests
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

\
location: ZeroMQ/libcppzmq-tests-4.9.0.tar.gz
sha256sum: 7d9fcda5b64e94dd972551e06fbc79113359f83332fd68040abc57e8b810c5d0
:
name: libcrypto
version: 1.1.1+21
upstream-version: 1.1.1u
project: openssl
priority: security
summary: C library providing general cryptography and X.509 support
license: OpenSSL; OpenSSL and Original SSLeay Licenses.
topics: C, x.509, cryptography
description:
\
OpenSSL is a robust, commercial-grade, and full-featured toolkit for the
Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols with
libcrypto C library providing general cryptographic and X.509 support. For
more information see:

https://www.openssl.org

This package contains the original libcrypto library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the OpenSSL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of libcrypto for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/openssl/

\
description-type: text/plain
url: https://www.openssl.org/
doc-url: https://www.openssl.org/docs/man1.1.1/man3/
src-url: https://git.build2.org/cgit/packaging/openssl/openssl/tree/libcrypto/
package-url: https://git.build2.org/cgit/packaging/openssl/
email: openssl-users@openssl.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libz ^1.2.1100
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : OpenSSL and SSLeay Licenses; see accompanying LICENSE file

project = libcrypto

using version
using config
using test
using install
using dist

# As of 1.0.0 the OpenSSL version has the <major>.<minor>.<fix>[<patch>] form,
# where optional <patch> is a letter. The patch releases contain only bug and
# security fixes. Fix releases are likely to contain new features, but don't
# break ABI compatibility. This versioning scheme will change with the next
# major release 3.0.0 (2.0.0 will be skipped) to just <major>.<minor>.<patch>,
# with the ABI compatibility guaranteed across the minor releases. See also:
#
# https://www.openssl.org/policies/releasestrat.html
# https://www.openssl.org/blog/blog/2018/11/28/version/
#
# The upstream version 1.1.1a, that we packaged initially, is not a semantic
# version. Not to mess with such a version, it seems reasonable for us to
# start with 1.1.1-a.0.z, release as 1.1.1 and, if required, followup with
# revisions, even for further letter-based upstream patches (that contain
# nothing more than just fixes).
#
# There is no way to deduce the ABI version from the release version, so we
# obtain it from the SHLIB_VERSION_NUMBER macro definition in
# ../libcrypto/include/openssl/opensslv.h.
#
if ($version.major == 1 && $version.minor == 1 && $version.patch == 1)
  abi_version = '1.1'
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : OpenSSL and SSLeay Licenses; see accompanying LICENSE file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: openssl/libcrypto-1.1.1+21.tar.gz
sha256sum: bd6b11abd7d063a2c15b2770df52a4821ddab4c1811625d107fbc00864c9997e
:
name: libcrypto
version: 3.3.1
project: openssl
summary: C library providing general cryptography and X.509 support
license: Apache-2.0; Apache License 2.0.
topics: C, x.509, cryptography
description:
\
OpenSSL is a robust, commercial-grade, and full-featured toolkit for the
Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols with
libcrypto C library providing general cryptographic and X.509 support. For
more information see:

https://www.openssl.org

This package contains the original libcrypto library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the OpenSSL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of libcrypto for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/openssl/

\
description-type: text/plain
url: https://www.openssl.org/
doc-url: https://docs.openssl.org/3.3/man3/
src-url: https://git.build2.org/cgit/packaging/openssl/openssl/tree/libcrypto/
package-url: https://git.build2.org/cgit/packaging/openssl/
email: openssl-users@openssl.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libz ^1.2.1100
depends: libzstd ^1.4.0
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0; see accompanying LICENSE file

project = libcrypto

using version
using config
using test
using install
using dist

# Starting the 3.0.0 major release the versioning scheme has become semantic
# alike (no more patch letters, etc). In particular, versions with the same
# major numbers are ABI and API compatible. See also
# https://docs.openssl.org/3.0/man7/migration_guide/#versioning-scheme.
#
# The ABI version can be retrieved from the SHLIB_VERSION variable assignment
# in the upstream's VERSION.dat file.
#
if ($version.major == 3)
  abi_version = 3
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : Apache License 2.0; see accompanying LICENSE file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: openssl/libcrypto-3.3.1.tar.gz
sha256sum: 55313e3cbc3f228072f020b059117ba654c2716c7b96d52a316a10f8f340c7b4
:
name: libcurl
version: 7.67.0+8
project: curl
summary: C library for transferring data with URLs
license: cURL; MIT/X derivate license.
topics: C, HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs with the
libcurl C library providing the data transfer and URL manipulation APIs.
For more information see:

https://curl.haxx.se/

This package contains the original libcurl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of libcurl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.haxx.se/
doc-url: https://curl.haxx.se/libcurl/c/
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@cool.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libz >= 1.2.1100
depends: libcrypto >= 1.1.1
depends: libssl >= 1.1.1
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : cURL License; see accompanying COPYING file

project = libcurl

using version
using config
using test
using install
using dist

# The cURL version has the <major>.<minor>.<patch> form and follows the semver
# semantics. Specifically, the major version is increased when really big
# changes are made, the minor version when new features are added, and the
# patch version is increased for bug fixes. See also:
#
# https://curl.haxx.se/docs/versions.html
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (VERSIONINFO in lib/Makefile.am). As it follows from the comment in the
# makefile, the major version (current - age) is incremented for backwards-
# incompatible ABI changes. See also:
#
# https://curl.haxx.se/libcurl/abi.html
#
if ($version.major == 7 && $version.minor == 67 && $version.patch == 0)
{

  abi_version_major = 4
  abi_version = "$abi_version_major.6.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : cURL License; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libcurl-7.67.0+8.tar.gz
sha256sum: 1ad1e96a74c0435ed8e38401ce285ff8d2889d59ad55f9d0ca5ff38b326a58f7
:
name: libcurl
version: 7.76.0
project: curl
summary: C library for transferring data with URLs
license: curl; MIT/X derivate license.
topics: C, HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs with the
libcurl C library providing the data transfer and URL manipulation APIs. For
more information see:

https://curl.se/

This package contains the original libcurl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of libcurl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/libcurl/c/
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@cool.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: libz ^1.2.1100
depends: libcrypto ^1.1.1
depends: libssl ^1.1.1
builds: all
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = libcurl

using version
using config
using test
using install
using dist

# The cURL version has the <major>.<minor>.<patch> form and follows the semver
# semantics. Specifically, the major version is increased when really big
# changes are made, the minor version when new features are added, and the
# patch version is increased for bug fixes. See also:
#
# https://curl.se/docs/versions.html
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (VERSIONINFO in lib/Makefile.am). As it follows from the comment in the
# makefile, the major version (current - age) is incremented for backwards-
# incompatible ABI changes. See also:
#
# https://curl.se/libcurl/abi.html
#
if ($version.major == 7 && $version.minor == 76 && $version.patch == 0)
{
  abi_version_major = 4
  abi_version = "$abi_version_major.7.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libcurl-7.76.0.tar.gz
sha256sum: 70ed66f5e8d8dfd238d5abf9c38cb14b85eb3fc273a2a14f9240a6444e8ce482
:
name: libcurl
version: 7.84.0
project: curl
priority: security
summary: C library for transferring data with URLs
license: curl; MIT/X derivate license.
topics: C, HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs with the
libcurl C library providing the data transfer and URL manipulation APIs. For
more information see:

https://curl.se/

This package contains the original libcurl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of libcurl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/libcurl/c/
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libz ^1.2.1100
depends: libcrypto ^1.1.1
depends: libssl ^1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

project = libcurl

using version
using config
using test
using install
using dist

# The cURL version has the <major>.<minor>.<patch> form and follows the semver
# semantics. Specifically, the major version is increased when really big
# changes are made, the minor version when new features are added, and the
# patch version is increased for bug fixes. See also:
#
# https://curl.se/docs/versions.html
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (VERSIONINFO in lib/Makefile.am). As it follows from the comment in the
# makefile, the major version (current - age) is incremented for backwards-
# incompatible ABI changes. See also:
#
# https://curl.se/libcurl/abi.html
#
if ($version.major == 7 && $version.minor == 84 && $version.patch == 0)
{
  abi_version_major = 4
  abi_version = "$abi_version_major.8.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libcurl-7.84.0.tar.gz
sha256sum: c06a994027f2769435d63a0195e079e6e2f1694ccac137cd227ded8c5512a068
:
name: libcurl
version: 7.87.0
project: curl
priority: security
summary: C library for transferring data with URLs
license: curl; MIT/X derivate license.
topics: C, HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs with the
libcurl C library providing the data transfer and URL manipulation APIs. For
more information see:

https://curl.se/

This package contains the original libcurl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of libcurl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/libcurl/c/
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libz ^1.2.1100
depends: libcrypto ^1.1.1
depends: libssl ^1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : curl License; see accompanying COPYING file

project = libcurl

using version
using config
using test
using install
using dist

# The cURL version has the <major>.<minor>.<patch> form and follows the semver
# semantics. Specifically, the major version is increased when really big
# changes are made, the minor version when new features are added, and the
# patch version is increased for bug fixes. See also:
#
# https://curl.se/docs/versions.html
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option (VERSION*
# variables in lib/Makefile.soname). As it follows from the comment in the
# makefile, the major version (current - age) is incremented for backwards-
# incompatible ABI changes. See also:
#
# https://curl.se/libcurl/abi.html
#
if ($version.major == 7 && $version.minor == 87 && $version.patch == 0)
{
  abi_version_major = 4
  abi_version = "$abi_version_major.8.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libcurl-7.87.0.tar.gz
sha256sum: 3f135e93dd364817f96139077ec4d7c609b491a4d328dbf5bf3c33907bbb4e6f
:
name: libcurl
version: 7.88.1
project: curl
priority: security
summary: C library for transferring data with URLs
license: curl; MIT/X derivate license.
topics: C, HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs with the
libcurl C library providing the data transfer and URL manipulation APIs. For
more information see:

https://curl.se/

This package contains the original libcurl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of libcurl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/libcurl/c/
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libz ^1.2.1100
depends: libcrypto ^1.1.1
depends: libssl ^1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : curl License; see accompanying COPYING file

project = libcurl

using version
using config
using test
using install
using dist

# The cURL version has the <major>.<minor>.<patch> form and follows the semver
# semantics. Specifically, the major version is increased when really big
# changes are made, the minor version when new features are added, and the
# patch version is increased for bug fixes. See also:
#
# https://curl.se/docs/versions.html
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option (VERSION*
# variables in lib/Makefile.soname). As it follows from the comment in the
# makefile, the major version (current - age) is incremented for backwards-
# incompatible ABI changes. See also:
#
# https://curl.se/libcurl/abi.html
#
if ($version.major == 7 && $version.minor == 88 && $version.patch == 1)
{
  abi_version_major = 4
  abi_version = "$abi_version_major.8.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libcurl-7.88.1.tar.gz
sha256sum: 1528068c984c1943497814d83fd70ec55fb0d0aef0b04eaebd019d52e787e90c
:
name: libcurl
version: 8.4.0
project: curl
priority: security
summary: C library for transferring data with URLs
license: curl; MIT/X derivate license.
topics: C, HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs with the
libcurl C library providing the data transfer and URL manipulation APIs. For
more information see:

https://curl.se/

This package contains the original libcurl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of libcurl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/libcurl/c/
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libz ^1.2.1100
depends: libcrypto ^1.1.1
depends: libssl ^1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : curl License; see accompanying COPYING file

project = libcurl

using version
using config
using test
using install
using dist

# The cURL version has the <major>.<minor>.<patch> form and follows the semver
# semantics. Specifically, the major version is increased when really big
# changes are made, the minor version when new features are added, and the
# patch version is increased for bug fixes. See also:
#
# https://curl.se/docs/versions.html
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option (VERSION*
# variables in lib/Makefile.soname). As it follows from the comment in the
# makefile, the major version (current - age) is incremented for backwards-
# incompatible ABI changes. See also:
#
# https://curl.se/libcurl/abi.html
#
if ($version.major == 8 && $version.minor == 4 && $version.patch == 0)
{
  abi_version_major = 4
  abi_version = "$abi_version_major.8.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libcurl-8.4.0.tar.gz
sha256sum: 9a765daaa75bb67a7c974d2961343d41621306de0bbc9c74e4e5f0f48a5e933a
:
name: libcurl
version: 8.8.0+3
project: curl
summary: C library for transferring data with URLs
license: curl; MIT/X derivate license.
topics: C, HTTP, FTP, URL, data transfer
description:
\
cURL is a client-side software for transferring data using URLs with the
libcurl C library providing the data transfer and URL manipulation APIs. For
more information see:

https://curl.se/

This package contains the original libcurl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the cURL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of libcurl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/curl/

\
description-type: text/plain
url: https://curl.se/
doc-url: https://curl.se/libcurl/c/
src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/
package-url: https://git.build2.org/cgit/packaging/curl/
email: curl-library@lists.haxx.se; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libz ^1.2.1100
depends: libcrypto >= 1.1.1
depends: libssl >= 1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : curl License; see accompanying COPYING file

project = libcurl

using version
using config
using test
using install
using dist

# The cURL version has the <major>.<minor>.<patch> form and follows the semver
# semantics. Specifically, the major version is increased when really big
# changes are made, the minor version when new features are added, and the
# patch version is increased for bug fixes. See also:
#
# https://curl.se/docs/versions.html
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option (VERSION*
# variables in lib/Makefile.soname). As it follows from the comment in the
# makefile, the major version (current - age) is incremented for backwards-
# incompatible ABI changes. See also:
#
# https://curl.se/libcurl/abi.html
#
if ($version.major == 8 && $version.minor == 8 && $version.patch == 0)
{
  abi_version_major = 4
  abi_version = "$abi_version_major.8.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : curl License; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: curl/libcurl-8.8.0+3.tar.gz
sha256sum: 712b26d7e308d1752c323635d8181467606200810c3be597eb68f9ecaaa2b190
:
name: libcurlez
version: 1.0.0
language: c++
summary: c++ wrapper for libcurl's easy API
license: BSD-3-Clause
description:
\
# libcurlez

A C++ library wrapping libcurl's easy API, allowing you
to easily perform synchronous HTTP queries.

## Example

Simple query:

```c++
#include <libcurlez/curlez.hxx>
#include <iostream>

int main()
{
  Curl query;
  unsigned short status;

  query.url("http://google.fr")
       .follow_redirects();
  switch (status = query.perform())
  {
  case 0:
    std::cout << "CURL error: " << query.error() << std::endl;
    break ;
  default:
    std::cout << "Received status: " << status;
    break ;
  }
  return 0;
}
```

Reading response headers and body:

```c++
#include <libcurlez/curlez.hxx>
#include <iostream>

int main()
{
  CurlReader query;

  query.url("http://google.fr")
       .follow_redirects();
  if (query.perform() == 200)
  {
    std::cout << "Content-Type = " << query.response_header("Content-Type")
              << std::endl << "--" << std::endl
              << query.response_body() << std::endl;
    return 0;
  }
  return -1;
}
```

Sending queries with custom method, header and body:

```c++
#include <libcurlez/curlez.hxx>
#include <iostream>

int main()
{
  Curl query;

  query.method("PUT")
       .url("http://google.fr")
       .header("Content-Type", "application/json")
       .body("{ \"json\": 42 }")
       .follow_redirects();
  return query.perform() == 200;
}
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/Plaristote/libcurlez.git
email: michael@unetresgrossebite.com
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libcurl ^8.4.0
bootstrap-build:
\
project = libcurlez

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libcurlez/libcurlez-1.0.0.tar.gz
sha256sum: caa78be16c67d80d374d1de9b8426797aa60494cc5a87a55e694d845fb1e923a
:
name: libcutl
version: 1.11.0
summary: C++ utility library for compilers
license: MIT
topics: C++, utility
description:
\
libcutl is a C++ utility library for compilers. It contains a collection of
generic and fairly independent components. See doc/components.txt for an
overview.

See the NEWS file for the user-visible changes from the previous release.

See the LICENSE file for distribution conditions.

See the INSTALL file for prerequisites and installation instructions.

See the doc/ directory for documentation.

The project page is at https://www.codesynthesis.com/projects/libcutl/.

Send questions, bug reports, or any other feedback to
libcutl-users@codesynthesis.com.

\
description-type: text/plain
changes:
\
For all further versions see the change log at:

https://git.codesynthesis.com/cgit/libcutl/libcutl/log/

Version 1.10.0

  * fs::basic_path::string() now returns the string by reference.

Version 1.9.0

  * Add xml::value_traits specialization for std::string.
  * Do not low-case paths in normalize() for Win32. Instead, do case-
    insensitive comparison.

Version 1.8.0

  * Add support for XML parsing (based in Expat) and serialization (based
    on Genx).
  * Improve the C++ indenter by handling the '},' sequence.
  * Add fs::basic_path::posix_string().
  * Update the internal Boost subset to version 1.54.0.

Version 1.7.0

  * Add building blocks for multi-index containers.
  * Make regex a class template with character type as a template argument
    (currently can only be char or wchar_t).
  * Add support for case-insensitive regex.
  * Add clear() to fs::path.

Version 1.6.3

  * Minor fixes to make libcutl compilable with more pedantic GCC 4.7.

Version 1.6.2

  * Support for using external Boost instead of the internal subset in
    the autotools build system.

Version 1.6.0

  * Add support for setting a compiler::context value as container::any.
  * Return a reference to the newly set value from compiler::context::set().
  * Add support for empty any containers.

Version 1.5.0

  * Add support for regular expressions. Underneath regex support is
    provided by a Boost subset.

Version 1.4.0

  * Add support for querying type_info of context entries (compiler).
  * Do sensible things if traversers are copied (compiler).

Version 1.3.0

  * Add new fs::path functions: absolute(), relative(), current(),
    complete(), and normalize().

Version 1.2.0

  * Add support for automake and VC++ builds via meta-build.
  * Add support for resetting nodes/edges and deleting nodes in
    container::graph.
  * Redesign fs::path, add comparison operators.

Version 1.1.1

  * Bugfix release.

Version 1.1.0

  * Code stream interface (compiler/code-stream).
  * SLOC counter code stream (compiler/sloc-counter).
  * C++ code indenter (compiler/cxx-indenter).
  * Filesystem path abstraction (fs/path).
  * RAII-based file auto-removal (fs/auto-remove).
  * Project and solution files for VC++ 8 and 9.
  * Install target.

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/projects/libcutl/
src-url: https://git.codesynthesis.com/cgit/libcutl/libcutl/
email: libcutl-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
requires: c++11
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = libcutl

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
cxx{*}: extension = cxx
ixx{*}: extension = ixx
txx{*}: extension = txx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: libcutl/libcutl-1.11.0.tar.gz
sha256sum: bec183731c1c01b9dfa1a9e835a25227cfb626d29cbacd33df7577e0a50be2f9
:
name: libcxxopts
version: 3.1.1+2
type: lib,binless
language: c++
project: cxxopts
summary: Lightweight C++ command line option parser
license: MIT
topics: option parser, positional arguments
description:
\
[![Build Status](https://travis-ci.org/jarro2783/cxxopts.svg?branch=master)](\
https://travis-ci.org/jarro2783/cxxopts)

# Release versions

Note that `master` is generally a work in progress, and you probably want to\
 use a
tagged release version.

## Version 3 breaking changes

If you have used version 2, there are a couple of breaking changes in version\
 3
that you should be aware of. If you are new to `cxxopts` you can skip this
section.

The parser no longer modifies its arguments, so you can pass a const `argc`\
 and
`argv` and expect them not to be changed.

The `ParseResult` object no longer depends on the parser. So it can be\
 returned
from a scope outside the parser and still work. Now that the inputs are not
modified, `ParseResult` stores a list of the unmatched arguments. These are
retrieved like follows:

```cpp
auto result = options.parse(argc, argv);
result.unmatched(); // get the unmatched arguments
```

# Quick start

This is a lightweight C++ option parser library, supporting the standard GNU
style syntax for options.

Options can be given as:

    --long
    --long=argument
    --long argument
    -a
    -ab
    -abc argument

where c takes an argument, but a and b do not.

Additionally, anything after `--` will be parsed as a positional argument.

## Basics

```cpp
#include <cxxopts.hpp>
```

Create a `cxxopts::Options` instance.

```cpp
cxxopts::Options options("MyProgram", "One line description of MyProgram");
```

Then use `add_options`.

```cpp
options.add_options()
  ("d,debug", "Enable debugging") // a bool parameter
  ("i,integer", "Int param", cxxopts::value<int>())
  ("f,file", "File name", cxxopts::value<std::string>())
  ("v,verbose", "Verbose output", cxxopts::value<bool>()->default_value("fals\
e"))
  ;
```

Options are declared with a long and an optional short option. A description
must be provided. The third argument is the value, if omitted it is boolean.
Any type can be given as long as it can be parsed, with operator>>.

To parse the command line do:

```cpp
auto result = options.parse(argc, argv);
```

To retrieve an option use `result.count("option")` to get the number of times
it appeared, and

```cpp
result["opt"].as<type>()
```

to get its value. If "opt" doesn't exist, or isn't of the right type, then an
exception will be thrown.

Note that the result of `options.parse` should only be used as long as the
`options` object that created it is in scope.

## Unrecognised arguments

You can allow unrecognised arguments to be skipped. This applies to both
positional arguments that are not parsed into another option, and `--`
arguments that do not match an argument that you specify. This is done by
calling:

```cpp
options.allow_unrecognised_options();
```

and in the result object they are retrieved with:

```cpp
result.unmatched()
```

## Exceptions

Exceptional situations throw C++ exceptions. There are two types of
exceptions: errors defining the options, and errors when parsing a list of
arguments. All exceptions derive from `cxxopts::exceptions::exception`. Errors
defining options derive from `cxxopts::exceptions::specification` and errors
parsing arguments derive from `cxxopts::exceptions::parsing`.

All exceptions define a `what()` function to get a printable string
explaining the error.

## Help groups

Options can be placed into groups for the purposes of displaying help\
 messages.
To place options in a group, pass the group as a string to `add_options`.\
 Then,
when displaying the help, pass the groups that you would like displayed as a
vector to the `help` function.

## Positional Arguments

Positional arguments are those given without a preceding flag and can be used
alongside non-positional arguments. There may be multiple positional\
 arguments,
and the final positional argument may be a container type to hold a list of\
 all
remaining positionals.

To set up positional arguments, first declare the options, then configure a
set of those arguments as positional like:

```cpp
options.add_options()
  ("script", "The script file to execute", cxxopts::value<std::string>())
  ("server", "The server to execute on", cxxopts::value<std::string>())
  ("filenames", "The filename(s) to process", cxxopts::value<std::vector<std:\
:string>>());

options.parse_positional({"script", "server", "filenames"});

// Parse options the usual way
options.parse(argc, argv);
```

For example, parsing the following arguments:
~~~
my_script.py my_server.com file1.txt file2.txt file3.txt
~~~
will result in parsed arguments like the following table:

| Field         | Value                                     |
| ------------- | ----------------------------------------- |
| `"script"`    | `"my_script.py"`                          |
| `"server"`    | `"my_server.com"`                         |
| `"filenames"` | `{"file1.txt", "file2.txt", "file3.txt"}` |

## Default and implicit values

An option can be declared with a default or an implicit value, or both.

A default value is the value that an option takes when it is not specified
on the command line. The following specifies a default value for an option:

```cpp
cxxopts::value<std::string>()->default_value("value")
```

An implicit value is the value that an option takes when it is given on the
command line without an argument. The following specifies an implicit value:

```cpp
cxxopts::value<std::string>()->implicit_value("implicit")
```

If an option had both, then not specifying it would give the value `"value"`,
writing it on the command line as `--option` would give the value\
 `"implicit"`,
and writing `--option=another` would give it the value `"another"`.

Note that the default and implicit value is always stored as a string,
regardless of the type that you want to store it in. It will be parsed as
though it was given on the command line.

Default values are not counted by `Options::count`.

## Boolean values

Boolean options have a default implicit value of `"true"`, which can be
overridden. The effect is that writing `-o` by itself will set option `o` to
`true`. However, they can also be written with various strings using `=value`.
There is no way to disambiguate positional arguments from the value following
a boolean, so we have chosen that they will be positional arguments, and
therefore, `-o false` does not work.

## `std::vector<T>` values

Parsing of list of values in form of an `std::vector<T>` is also supported,\
 as long as `T`
can be parsed. To separate single values in a list the definition\
 `CXXOPTS_VECTOR_DELIMITER`
is used, which is ',' by default. Ensure that you use no whitespaces between\
 values because
those would be interpreted as the next command line option. Example for a\
 command line option
that can be parsed as a `std::vector<double>`:

~~~
--my_list=1,-2.1,3,4.5
~~~

## Options specified multiple times

The same option can be specified several times, with different arguments,\
 which will all
be recorded in order of appearance. An example:

~~~
--use train --use bus --use ferry
~~~

this is supported through the use of a vector of value for the option:

~~~
options.add_options()
  ("use", "Usable means of transport", cxxopts::value<std::vector<std::string\
>>())
~~~

## Custom help

The string after the program name on the first line of the help can be
completely replaced by calling `options.custom_help`. Note that you might
also want to override the positional help by calling `options.positional_help\
`.


## Example

Putting all together:
```cpp
int main(int argc, char** argv)
{
    cxxopts::Options options("test", "A brief description");

    options.add_options()
        ("b,bar", "Param bar", cxxopts::value<std::string>())
        ("d,debug", "Enable debugging", cxxopts::value<bool>()->default_value\
("false"))
        ("f,foo", "Param foo", cxxopts::value<int>()->default_value("10"))
        ("h,help", "Print usage")
    ;

    auto result = options.parse(argc, argv);

    if (result.count("help"))
    {
      std::cout << options.help() << std::endl;
      exit(0);
    }
    bool debug = result["debug"].as<bool>();
    std::string bar;
    if (result.count("bar"))
      bar = result["bar"].as<std::string>();
    int foo = result["foo"].as<int>();

    return 0;
}
```

# Linking

This is a header only library.

# Requirements

The only build requirement is a C++ compiler that supports C++11 features\
 such as:

* regex
* constexpr
* default constructors

GCC >= 4.9 or clang >= 3.1 with libc++ are known to work.

The following compilers are known not to work:

* MSVC 2013

# TODO list

* Allow unrecognised options.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for cxxopts
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/jarro2783/cxxopts">cxxopts</a>.
    A lightweight C++ command line option parser.
</p>

<p align="center">
    <a href="https://github.com/jarro2783/cxxopts">
        <img src="https://img.shields.io/website/https/github.com/jarro2783/c\
xxopts.svg?down_message=offline&label=Official&style=for-the-badge&up_color=b\
lue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/cxxopts">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/cxxopts.svg?down_message=offline&label=build2&style=for-the-badge&up_co\
lor=blue&up_message=online">
    </a>
    <a href="https://cppget.org/cxxopts">
        <img src="https://img.shields.io/website/https/cppget.org/cxxopts.svg\
?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_m\
essage=online">
    </a>
    <a href="https://queue.cppget.org/cxxopts">
        <img src="https://img.shields.io/website/https/queue.cppget.org/cxxop\
ts.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-th\
e-badge&up_color=orange&up_message=running">
    </a>
</p>

<!-- [![build2](https://github.com/build2-packaging/cxxopts/actions/workflows\
/build2.yml/badge.svg)](https://github.com/build2-packaging/cxxopts/actions/w\
orkflows/build2.yml) -->
<p align="center">
  <a href="https://github.com/build2-packaging/cxxopts/actions/workflows/buil\
d2.yml">
      <img src="https://github.com/build2-packaging/cxxopts/actions/workflows\
/build2.yml/badge.svg">
  </a>
</p>

This project builds and defines the build2 package for the\
 [cxxopts](https://github.com/jarro2783/cxxopts) library.

The packaging code is licensed under the MIT License, the upstream artifacts\
 are licensed under the terms and conditions of cxxopts.

## Usage

Make sure to add the stable section of the [cppget.org](https://cppget.org/?a\
bout) repository to your project's `repositories.manifest` to be able to\
 fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If this is not an option then, instead, add this Git repository itself as a\
 prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/cxxopts.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

```
depends: libcxxopts ^ 3.1.1
```

Import the library in your `buildfile` by using the following line.

```
import cxxopts = libcxxopts%lib{cxxopts}
```

## Configuration
### Unicode Support

    config [bool] config.libcxxopts.use_unicode ?= false

Unicode functionality in cxxopts is based on the ICU library.
It will be added as interface dependency to the header-only library if this\
 config variable is set to `true`.

## Issues
Currently, there are no known issues.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/cxxopts/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/cxxopts\
/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/cxxopt\
s) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
# Changelog

This is the changelog for `cxxopts`, a C++11 library for parsing command line
options. The project adheres to semantic versioning.

## 3.1.1

### Bug Fixes

* Fixed version number in header.

## 3.1

### Added

* Support for multiple long names for the same option (= multiple long\
 aliases)
* Add a `program()` function to retrieve the program name.
* Added a .clang-format file.
* Added iterator and printing for a ParseResult.

### Changed

* Cleanup exception code, add cxxopts::exceptions namespace.

### Bug Fixes

* Fix `arguments()` having no key for options that only have a short name.

## 3.0

### Changed

* Only search for a C++ compiler in CMakeLists.txt.
* Allow for exceptions to be disabled.
* Fix duplicate default options when there is a short and long option.
* Add `CXXOPTS_NO_EXCEPTIONS` to disable exceptions.
* Fix char parsing for space and check for length.
* Change argument type in `Options::parse` from `char**` to `const char**`.
* Refactor parser to not change its arguments.
* `ParseResult` doesn't depend on a reference to the parser.
* Fixed several warnings and code quality issues.
* Improved formatting for help descriptions.
* Improve integer parsing.

### Added

* A list of unmatched arguments is available in `ParseResult`.
* Support single letter options with argument attached.
* Use <optional> if it is present.

### Bug Fixes

* Fix missing option name in exception.

## 2.2

### Changed

* Allow integers to have leading zeroes.
* Build the tests by default.
* Don't check for container when showing positional help.

### Added

* Iterator inputs to `parse_positional`.
* Throw an exception if the option in `parse_positional` doesn't exist.
* Parse a delimited list in a single argument for vector options.
* Add an option to disable implicit value on booleans.

### Bug Fixes

* Fix a warning about possible loss of data.
* Fix version numbering in CMakeLists.txt
* Remove unused declaration of the undefined `ParseResult::get_option`.
* Throw on invalid option syntax when beginning with a `-`.
* Throw in `as` when option wasn't present.
* Fix catching exceptions by reference.
* Fix out of bounds errors parsing integers.

## 2.1.1

### Bug Fixes

* Revert the change adding `const` type for `argv`, because most users expect
  to pass a non-const `argv` from `main`.

## 2.1

### Changed

* Options with implicit arguments now require the `--option=value` form if
  they are to be specified with an option. This is to remove the ambiguity
  when a positional argument could follow an option with an implicit value.
  For example, `--foo value`, where `foo` has an implicit value, will be
  parsed as `--foo=implicit` and a positional argument `value`.
* Boolean values are no longer special, but are just an option with a default
  and implicit value.

### Added

* Added support for `std::optional` as a storage type.
* Allow the help string to be customised.
* Use `const` for the type in the `argv` parameter, since the contents of the
  arguments is never modified.

### Bug Fixes

* Building against GCC 4.9 was broken due to overly strict shadow warnings.
* Fixed an ambiguous overload in the `parse_positional` function when an
  `initializer_list` was directly passed.
* Fixed precedence in the Boolean value regex.

## 2.0

### Changed

* `Options::parse` returns a ParseResult rather than storing the parse
  result internally.
* Options with default values now get counted as appearing once if they
  were not specified by the user.

### Added

* A new `ParseResult` object that is the immutable result of parsing. It
  responds to the same `count` and `operator[]` as `Options` of 1.x did.
* The function `ParseResult::arguments` returns a vector of the parsed
  arguments to iterate through in the order they were provided.
* The symbol `cxxopts::version` for the version of the library.
* Booleans can be specified with various strings and explicitly set false.

## 1.x

The 1.x series was the first major version of the library, with release\
 numbers
starting to follow semantic versioning, after 0.x being unstable.  It never\
 had
a changelog maintained for it. Releases mostly contained bug fixes, with the
occasional feature added.

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jarro2783/cxxopts
doc-url: https://github.com/jarro2783/cxxopts/wiki
src-url: https://github.com/jarro2783/cxxopts
package-url: https://github.com/build2-packaging/cxxopts
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libicuuc ? ($config.libcxxopts.use_unicode)
unicode-build-config: config.libcxxopts.use_unicode=true
bootstrap-build:
\
project = libcxxopts

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# This header-only library may not be importable by default.
#
hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Unicode configuration based on ICU.
#
config [bool] config.libcxxopts.use_unicode ?= false

\
location: cxxopts/libcxxopts-3.1.1+2.tar.gz
sha256sum: 86954f385d5173831c5cdad6b63f7fc05f288f41d08fae8a6609b299371a1409
:
name: libcxxopts
version: 3.2.0
type: lib,binless
language: c++
project: cxxopts
summary: C++ command line option parser
license: MIT
topics: option parser, positional arguments
description:
\
[![Build Status](https://travis-ci.org/jarro2783/cxxopts.svg?branch=master)](\
https://travis-ci.org/jarro2783/cxxopts)

# Release versions

Note that `master` is generally a work in progress, and you probably want to\
 use a
tagged release version.

## Version 3 breaking changes

If you have used version 2, there are a couple of breaking changes in version\
 3
that you should be aware of. If you are new to `cxxopts` you can skip this
section.

The parser no longer modifies its arguments, so you can pass a const `argc`\
 and
`argv` and expect them not to be changed.

The `ParseResult` object no longer depends on the parser. So it can be\
 returned
from a scope outside the parser and still work. Now that the inputs are not
modified, `ParseResult` stores a list of the unmatched arguments. These are
retrieved like follows:

```cpp
auto result = options.parse(argc, argv);
result.unmatched(); // get the unmatched arguments
```

# Quick start

This is a lightweight C++ option parser library, supporting the standard GNU
style syntax for options.

Options can be given as:

    --long
    --long=argument
    --long argument
    -a
    -ab
    -abc argument

where c takes an argument, but a and b do not.

Additionally, anything after `--` will be parsed as a positional argument.

## Basics

```cpp
#include <cxxopts.hpp>
```

Create a `cxxopts::Options` instance.

```cpp
cxxopts::Options options("MyProgram", "One line description of MyProgram");
```

Then use `add_options`.

```cpp
options.add_options()
  ("d,debug", "Enable debugging") // a bool parameter
  ("i,integer", "Int param", cxxopts::value<int>())
  ("f,file", "File name", cxxopts::value<std::string>())
  ("v,verbose", "Verbose output", cxxopts::value<bool>()->default_value("fals\
e"))
  ;
```

Options are declared with a long and an optional short option. A description
must be provided. The third argument is the value, if omitted it is boolean.
Any type can be given as long as it can be parsed, with operator>>.

To parse the command line do:

```cpp
auto result = options.parse(argc, argv);
```

To retrieve an option use `result.count("option")` to get the number of times
it appeared, and

```cpp
result["opt"].as<type>()
```

to get its value. If "opt" doesn't exist, or isn't of the right type, then an
exception will be thrown.

## Unrecognised arguments

You can allow unrecognised arguments to be skipped. This applies to both
positional arguments that are not parsed into another option, and `--`
arguments that do not match an argument that you specify. This is done by
calling:

```cpp
options.allow_unrecognised_options();
```

and in the result object they are retrieved with:

```cpp
result.unmatched()
```

## Exceptions

Exceptional situations throw C++ exceptions. There are two types of
exceptions: errors defining the options, and errors when parsing a list of
arguments. All exceptions derive from `cxxopts::exceptions::exception`. Errors
defining options derive from `cxxopts::exceptions::specification` and errors
parsing arguments derive from `cxxopts::exceptions::parsing`.

All exceptions define a `what()` function to get a printable string
explaining the error.

## Help groups

Options can be placed into groups for the purposes of displaying help\
 messages.
To place options in a group, pass the group as a string to `add_options`.\
 Then,
when displaying the help, pass the groups that you would like displayed as a
vector to the `help` function.

## Positional Arguments

Positional arguments are those given without a preceding flag and can be used
alongside non-positional arguments. There may be multiple positional\
 arguments,
and the final positional argument may be a container type to hold a list of\
 all
remaining positionals.

To set up positional arguments, first declare the options, then configure a
set of those arguments as positional like:

```cpp
options.add_options()
  ("script", "The script file to execute", cxxopts::value<std::string>())
  ("server", "The server to execute on", cxxopts::value<std::string>())
  ("filenames", "The filename(s) to process", cxxopts::value<std::vector<std:\
:string>>());

options.parse_positional({"script", "server", "filenames"});

// Parse options the usual way
options.parse(argc, argv);
```

For example, parsing the following arguments:
~~~
my_script.py my_server.com file1.txt file2.txt file3.txt
~~~
will result in parsed arguments like the following table:

| Field         | Value                                     |
| ------------- | ----------------------------------------- |
| `"script"`    | `"my_script.py"`                          |
| `"server"`    | `"my_server.com"`                         |
| `"filenames"` | `{"file1.txt", "file2.txt", "file3.txt"}` |

## Default and implicit values

An option can be declared with a default or an implicit value, or both.

A default value is the value that an option takes when it is not specified
on the command line. The following specifies a default value for an option:

```cpp
cxxopts::value<std::string>()->default_value("value")
```

An implicit value is the value that an option takes when it is given on the
command line without an argument. The following specifies an implicit value:

```cpp
cxxopts::value<std::string>()->implicit_value("implicit")
```

If an option had both, then not specifying it would give the value `"value"`,
writing it on the command line as `--option` would give the value\
 `"implicit"`,
and writing `--option=another` would give it the value `"another"`.

Note that the default and implicit value is always stored as a string,
regardless of the type that you want to store it in. It will be parsed as
though it was given on the command line.

Default values are not counted by `Options::count`.

## Boolean values

Boolean options have a default implicit value of `"true"`, which can be
overridden. The effect is that writing `-o` by itself will set option `o` to
`true`. However, they can also be written with various strings using `=value`.
There is no way to disambiguate positional arguments from the value following
a boolean, so we have chosen that they will be positional arguments, and
therefore, `-o false` does not work.

## `std::vector<T>` values

Parsing a list of values into a `std::vector<T>` is also supported, as long\
 as `T`
can be parsed. To separate single values in a list the define symbol\
 `CXXOPTS_VECTOR_DELIMITER`
is used, which is ',' by default. Ensure that you use no whitespaces between\
 values because
those would be interpreted as the next command line option. Example for a\
 command line option
that can be parsed as a `std::vector<double>`:

~~~
--my_list=1,-2.1,3,4.5
~~~

## Options specified multiple times

The same option can be specified several times, with different arguments,\
 which will all
be recorded in order of appearance. An example:

~~~
--use train --use bus --use ferry
~~~

this is supported through the use of a vector of value for the option:

~~~
options.add_options()
  ("use", "Usable means of transport", cxxopts::value<std::vector<std::string\
>>())
~~~

## Custom help

The string after the program name on the first line of the help can be
completely replaced by calling `options.custom_help`. Note that you might
also want to override the positional help by calling `options.positional_help\
`.


## Example

Putting all together:
```cpp
int main(int argc, char** argv)
{
    cxxopts::Options options("test", "A brief description");

    options.add_options()
        ("b,bar", "Param bar", cxxopts::value<std::string>())
        ("d,debug", "Enable debugging", cxxopts::value<bool>()->default_value\
("false"))
        ("f,foo", "Param foo", cxxopts::value<int>()->default_value("10"))
        ("h,help", "Print usage")
    ;

    auto result = options.parse(argc, argv);

    if (result.count("help"))
    {
      std::cout << options.help() << std::endl;
      exit(0);
    }
    bool debug = result["debug"].as<bool>();
    std::string bar;
    if (result.count("bar"))
      bar = result["bar"].as<std::string>();
    int foo = result["foo"].as<int>();

    return 0;
}
```

# Linking

This is a header only library.

# Requirements

The only build requirement is a C++ compiler that supports C++11 features\
 such as:

* regex
* constexpr
* default constructors

GCC >= 4.9 or clang >= 3.1 with libc++ are known to work.

The following compilers are known not to work:

* MSVC 2013

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for cxxopts

This project builds and defines the build2 package for [`cxxopts`](https://gi\
thub.com/jarro2783/cxxopts), a lightweight C++ command line option parser.
The packaging code is licensed under the MIT License, the upstream artifacts\
 are licensed under the terms and conditions of cxxopts.

[![Official](https://img.shields.io/website/https/github.com/jarro2783/cxxopt\
s.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online)](https://github.com/jarro2783/cxxopts)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/c\
xxopts.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blu\
e&up_message=online)](https://github.com/build2-packaging/cxxopts)
[![cppget.org](https://img.shields.io/website/https/cppget.org/libcxxopts.svg\
?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_m\
essage=online)](https://cppget.org/libcxxopts)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/li\
bcxxopts.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=\
for-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/l\
ibcxxopts)

[![build2](https://github.com/build2-packaging/cxxopts/actions/workflows/buil\
d2.yml/badge.svg)](https://github.com/build2-packaging/cxxopts/actions/workfl\
ows/build2.yml)

## Usage

Make sure to add the stable section of the [cppget.org](https://cppget.org/?a\
bout) repository to your project's `repositories.manifest` to be able to\
 fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If this is not an option then, instead, add this Git repository itself as a\
 prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/cxxopts.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

```
depends: libcxxopts ^ 3.2.0
```

Import the library in your `buildfile` by using the following line.

```
import cxxopts = libcxxopts%lib{cxxopts}
```

## Configuration
### Unicode Support

    config [bool] config.libcxxopts.use_unicode ?= false

Unicode functionality in cxxopts is based on the ICU library.
It will be added as interface dependency to the header-only library if this\
 config variable is set to `true`.

## Issues
- The upstream code uses older versions of Catch2 and provides its source\
 code in-place. We don't depend on the Catch2 package as this older version\
 is not available on `cppget.org`.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/cxxopts/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/cxxopts\
/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/cxxopt\
s) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
# Changelog

This is the changelog for `cxxopts`, a C++11 library for parsing command line
options. The project adheres to semantic versioning.

## 3.2

### Bug fixes

* Fix unannotated fallthrough.
* Fix sign conversion with Unicode output.
* Don't initialize regex in static initialiser.
* Fix incorrect integer overflow checks.

### Added

* Add fuzzing to CI

### Changed

* Change quote output to '' to match Windows.
* Don't split positional arguments by the list delimiter.
* Order help groups by the order they were added.

## 3.1.1

### Bug Fixes

* Fixed version number in header.
* Fixed cast warning in Unicode function.

## 3.1

### Added

* Support for multiple long names for the same option (= multiple long\
 aliases)
* Add a `program()` function to retrieve the program name.
* Added a .clang-format file.
* Added iterator and printing for a ParseResult.

### Changed

* Cleanup exception code, add cxxopts::exceptions namespace.
* Renamed several exceptions to be more descriptive, and added to a nested\
 namespace.

### Bug Fixes

* Fix `arguments()` having no key for options that only have a short name.

## 3.0

### Changed

* Only search for a C++ compiler in CMakeLists.txt.
* Allow for exceptions to be disabled.
* Fix duplicate default options when there is a short and long option.
* Add `CXXOPTS_NO_EXCEPTIONS` to disable exceptions.
* Fix char parsing for space and check for length.
* Change argument type in `Options::parse` from `char**` to `const char**`.
* Refactor parser to not change its arguments.
* `ParseResult` doesn't depend on a reference to the parser.
* Fixed several warnings and code quality issues.
* Improved formatting for help descriptions.
* Improve integer parsing.

### Added

* A list of unmatched arguments is available in `ParseResult`.
* Support single letter options with argument attached.
* Use <optional> if it is present.

### Bug Fixes

* Fix missing option name in exception.

## 2.2

### Changed

* Allow integers to have leading zeroes.
* Build the tests by default.
* Don't check for container when showing positional help.

### Added

* Iterator inputs to `parse_positional`.
* Throw an exception if the option in `parse_positional` doesn't exist.
* Parse a delimited list in a single argument for vector options.
* Add an option to disable implicit value on booleans.

### Bug Fixes

* Fix a warning about possible loss of data.
* Fix version numbering in CMakeLists.txt
* Remove unused declaration of the undefined `ParseResult::get_option`.
* Throw on invalid option syntax when beginning with a `-`.
* Throw in `as` when option wasn't present.
* Fix catching exceptions by reference.
* Fix out of bounds errors parsing integers.

## 2.1.1

### Bug Fixes

* Revert the change adding `const` type for `argv`, because most users expect
  to pass a non-const `argv` from `main`.

## 2.1

### Changed

* Options with implicit arguments now require the `--option=value` form if
  they are to be specified with an option. This is to remove the ambiguity
  when a positional argument could follow an option with an implicit value.
  For example, `--foo value`, where `foo` has an implicit value, will be
  parsed as `--foo=implicit` and a positional argument `value`.
* Boolean values are no longer special, but are just an option with a default
  and implicit value.

### Added

* Added support for `std::optional` as a storage type.
* Allow the help string to be customised.
* Use `const` for the type in the `argv` parameter, since the contents of the
  arguments is never modified.

### Bug Fixes

* Building against GCC 4.9 was broken due to overly strict shadow warnings.
* Fixed an ambiguous overload in the `parse_positional` function when an
  `initializer_list` was directly passed.
* Fixed precedence in the Boolean value regex.

## 2.0

### Changed

* `Options::parse` returns a ParseResult rather than storing the parse
  result internally.
* Options with default values now get counted as appearing once if they
  were not specified by the user.

### Added

* A new `ParseResult` object that is the immutable result of parsing. It
  responds to the same `count` and `operator[]` as `Options` of 1.x did.
* The function `ParseResult::arguments` returns a vector of the parsed
  arguments to iterate through in the order they were provided.
* The symbol `cxxopts::version` for the version of the library.
* Booleans can be specified with various strings and explicitly set false.

## 1.x

The 1.x series was the first major version of the library, with release\
 numbers
starting to follow semantic versioning, after 0.x being unstable.  It never\
 had
a changelog maintained for it. Releases mostly contained bug fixes, with the
occasional feature added.

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jarro2783/cxxopts
doc-url: https://github.com/jarro2783/cxxopts/wiki
src-url: https://github.com/jarro2783/cxxopts
package-url: https://github.com/build2-packaging/cxxopts
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libicuuc ? ($config.libcxxopts.use_unicode)
unicode-build-config: config.libcxxopts.use_unicode=true
bootstrap-build:
\
project = libcxxopts

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# This header-only library may not be importable by default.
#
hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Unicode configuration based on ICU.
#
config [bool] config.libcxxopts.use_unicode ?= false

\
location: cxxopts/libcxxopts-3.2.0.tar.gz
sha256sum: 399db37b1beed8fa1c16197c846fcdc3558accc0c31ec4d0a3022cda5e80fd3f
:
name: libcxxopts
version: 3.3.1
type: lib,binless
language: c++
project: cxxopts
summary: C++ command line option parser library
license: MIT
topics: option parser, positional arguments
description:
\
[![Build Status](https://travis-ci.org/jarro2783/cxxopts.svg?branch=master)](\
https://travis-ci.org/jarro2783/cxxopts)

# Release versions

Note that `master` is generally a work in progress, and you probably want to\
 use a
tagged release version.

## Version 3 breaking changes

If you have used version 2, there are a couple of breaking changes in version\
 3
that you should be aware of. If you are new to `cxxopts` you can skip this
section.

The parser no longer modifies its arguments, so you can pass a const `argc`\
 and
`argv` and expect them not to be changed.

The `ParseResult` object no longer depends on the parser. So it can be\
 returned
from a scope outside the parser and still work. Now that the inputs are not
modified, `ParseResult` stores a list of the unmatched arguments. These are
retrieved like follows:

```cpp
auto result = options.parse(argc, argv);
result.unmatched(); // get the unmatched arguments
```

# Quick start

This is a lightweight C++ option parser library, supporting the standard GNU
style syntax for options.

Options can be given as:

    --long
    --long=argument
    --long argument
    -a
    -ab
    -abc argument

where c takes an argument, but a and b do not.

Additionally, anything after `--` will be parsed as a positional argument.

## Basics

```cpp
#include <cxxopts.hpp>
```

Create a `cxxopts::Options` instance.

```cpp
cxxopts::Options options("MyProgram", "One line description of MyProgram");
```

Then use `add_options`.

```cpp
options.add_options()
  ("d,debug", "Enable debugging") // a bool parameter
  ("i,integer", "Int param", cxxopts::value<int>())
  ("f,file", "File name", cxxopts::value<std::string>())
  ("v,verbose", "Verbose output", cxxopts::value<bool>()->default_value("fals\
e"))
  ;
```

Options are declared with a long and an optional short option. A description
must be provided. The third argument is the value, if omitted it is boolean.
Any type can be given as long as it can be parsed, with operator>>.

To parse the command line do:

```cpp
auto result = options.parse(argc, argv);
```

To retrieve an option use `result.count("option")` to get the number of times
it appeared, and

```cpp
result["opt"].as<type>()
```

to get its value. If "opt" doesn't exist, or isn't of the right type, then an
exception will be thrown.

## Unrecognised arguments

You can allow unrecognised arguments to be skipped. This applies to both
positional arguments that are not parsed into another option, and `--`
arguments that do not match an argument that you specify. This is done by
calling:

```cpp
options.allow_unrecognised_options();
```

and in the result object they are retrieved with:

```cpp
result.unmatched()
```

## Exceptions

Exceptional situations throw C++ exceptions. There are two types of
exceptions: errors defining the options, and errors when parsing a list of
arguments. All exceptions derive from `cxxopts::exceptions::exception`. Errors
defining options derive from `cxxopts::exceptions::specification` and errors
parsing arguments derive from `cxxopts::exceptions::parsing`.

All exceptions define a `what()` function to get a printable string
explaining the error.

## Help groups

Options can be placed into groups for the purposes of displaying help\
 messages.
To place options in a group, pass the group as a string to `add_options`.\
 Then,
when displaying the help, pass the groups that you would like displayed as a
vector to the `help` function.

## Positional Arguments

Positional arguments are those given without a preceding flag and can be used
alongside non-positional arguments. There may be multiple positional\
 arguments,
and the final positional argument may be a container type to hold a list of\
 all
remaining positionals.

To set up positional arguments, first declare the options, then configure a
set of those arguments as positional like:

```cpp
options.add_options()
  ("script", "The script file to execute", cxxopts::value<std::string>())
  ("server", "The server to execute on", cxxopts::value<std::string>())
  ("filenames", "The filename(s) to process", cxxopts::value<std::vector<std:\
:string>>());

options.parse_positional({"script", "server", "filenames"});

// Parse options the usual way
options.parse(argc, argv);
```

For example, parsing the following arguments:
~~~
my_script.py my_server.com file1.txt file2.txt file3.txt
~~~
will result in parsed arguments like the following table:

| Field         | Value                                     |
| ------------- | ----------------------------------------- |
| `"script"`    | `"my_script.py"`                          |
| `"server"`    | `"my_server.com"`                         |
| `"filenames"` | `{"file1.txt", "file2.txt", "file3.txt"}` |

## Default and implicit values

An option can be declared with a default or an implicit value, or both.

A default value is the value that an option takes when it is not specified
on the command line. The following specifies a default value for an option:

```cpp
cxxopts::value<std::string>()->default_value("value")
```

An implicit value is the value that an option takes when it is given on the
command line without an argument. The following specifies an implicit value:

```cpp
cxxopts::value<std::string>()->implicit_value("implicit")
```

If an option had both, then not specifying it would give the value `"value"`,
writing it on the command line as `--option` would give the value\
 `"implicit"`,
and writing `--option=another` would give it the value `"another"`.

Note that the default and implicit value is always stored as a string,
regardless of the type that you want to store it in. It will be parsed as
though it was given on the command line.

Default values are not counted by `Options::count`.

## Boolean values

Boolean options have a default implicit value of `"true"`, which can be
overridden. The effect is that writing `-o` by itself will set option `o` to
`true`. However, they can also be written with various strings using `=value`.
There is no way to disambiguate positional arguments from the value following
a boolean, so we have chosen that they will be positional arguments, and
therefore, `-o false` does not work.

## `std::vector<T>` values

Parsing a list of values into a `std::vector<T>` is also supported, as long\
 as `T`
can be parsed. To separate single values in a list the define symbol\
 `CXXOPTS_VECTOR_DELIMITER`
is used, which is ',' by default. Ensure that you use no whitespaces between\
 values because
those would be interpreted as the next command line option. Example for a\
 command line option
that can be parsed as a `std::vector<double>`:

~~~
--my_list=1,-2.1,3,4.5
~~~

## Options specified multiple times

The same option can be specified several times, with different arguments,\
 which will all
be recorded in order of appearance. An example:

~~~
--use train --use bus --use ferry
~~~

this is supported through the use of a vector of value for the option:

~~~
options.add_options()
  ("use", "Usable means of transport", cxxopts::value<std::vector<std::string\
>>())
~~~

## Custom help

The string after the program name on the first line of the help can be
completely replaced by calling `options.custom_help`. Note that you might
also want to override the positional help by calling `options.positional_help\
`.


## Example

Putting all together:
```cpp
int main(int argc, char** argv)
{
    cxxopts::Options options("test", "A brief description");

    options.add_options()
        ("b,bar", "Param bar", cxxopts::value<std::string>())
        ("d,debug", "Enable debugging", cxxopts::value<bool>()->default_value\
("false"))
        ("f,foo", "Param foo", cxxopts::value<int>()->default_value("10"))
        ("h,help", "Print usage")
    ;

    auto result = options.parse(argc, argv);

    if (result.count("help"))
    {
      std::cout << options.help() << std::endl;
      exit(0);
    }
    bool debug = result["debug"].as<bool>();
    std::string bar;
    if (result.count("bar"))
      bar = result["bar"].as<std::string>();
    int foo = result["foo"].as<int>();

    return 0;
}
```

# Linking

This is a header only library.

# Requirements

The only build requirement is a C++ compiler that supports C++11 features\
 such as:

* regex
* constexpr
* default constructors

GCC >= 4.9 or clang >= 3.1 with libc++ are known to work.

The following compilers are known not to work:

* MSVC 2013

\
description-type: text/markdown;variant=GFM
package-description:
\
# cxxopts - C++ command line option parser

This is the `build2` package for `cxxopts`, a lightweight C++ command line\
 option parser library.

## Usage
To use `libcxxopts` in your project, add the following configurations to the\
 respective files after you have gained access to a `build2` package\
 repository that contains it.

### `manifest`
To make `cxxopts` available for import, add the following dependency to the\
 `manifest` of each package in your project that requires it, adjusting the\
 version constraint as appropriate.

    depends: libcxxopts ^3.3.1

### `buildfile`
To import the contained library, use the following declaration in your\
 `buildfile`.

    import cxxopts = libcxxopts%lib{cxxopts}

### C++ Header Inclusion
Finally, include the `cxxopts` header in your C++ source code.

```c++
#include <cxxopts.hpp>
```

## Configuration Variables
### Unicode Support

    config [bool] config.libcxxopts.use_unicode ?= false

Unicode functionality in `cxxopts` is based on the ICU library.
It will be added as interface dependency to the header-only library if this\
 config variable is set to `true`.

\
package-description-type: text/markdown;variant=GFM
changes:
\
# Changelog

This is the changelog for `cxxopts`, a C++11 library for parsing command line
options. The project adheres to semantic versioning.

## 3.3.1

### Bug fixes

* Added missing version bump

## 3.3.0

### Bug fixes

* Added missing header for GCC 15
* Fix some CMake packaging problems

### Added

* `as_optional`
* `ParseResult::contains`
* `std::filesystem` support
* CMake 4 compatibility

## 3.2.1

### Bug fixes

* Fix compilation with optional on C++20.

## 3.2

### Bug fixes

* Fix unannotated fallthrough.
* Fix sign conversion with Unicode output.
* Don't initialize regex in static initialiser.
* Fix incorrect integer overflow checks.

### Added

* Add fuzzing to CI

### Changed

* Change quote output to '' to match Windows.
* Don't split positional arguments by the list delimiter.
* Order help groups by the order they were added.

## 3.1.1

### Bug Fixes

* Fixed version number in header.
* Fixed cast warning in Unicode function.

## 3.1

### Added

* Support for multiple long names for the same option (= multiple long\
 aliases)
* Add a `program()` function to retrieve the program name.
* Added a .clang-format file.
* Added iterator and printing for a ParseResult.

### Changed

* Cleanup exception code, add cxxopts::exceptions namespace.
* Renamed several exceptions to be more descriptive, and added to a nested\
 namespace.

### Bug Fixes

* Fix `arguments()` having no key for options that only have a short name.

## 3.0

### Changed

* Only search for a C++ compiler in CMakeLists.txt.
* Allow for exceptions to be disabled.
* Fix duplicate default options when there is a short and long option.
* Add `CXXOPTS_NO_EXCEPTIONS` to disable exceptions.
* Fix char parsing for space and check for length.
* Change argument type in `Options::parse` from `char**` to `const char**`.
* Refactor parser to not change its arguments.
* `ParseResult` doesn't depend on a reference to the parser.
* Fixed several warnings and code quality issues.
* Improved formatting for help descriptions.
* Improve integer parsing.

### Added

* A list of unmatched arguments is available in `ParseResult`.
* Support single letter options with argument attached.
* Use <optional> if it is present.

### Bug Fixes

* Fix missing option name in exception.

## 2.2

### Changed

* Allow integers to have leading zeroes.
* Build the tests by default.
* Don't check for container when showing positional help.

### Added

* Iterator inputs to `parse_positional`.
* Throw an exception if the option in `parse_positional` doesn't exist.
* Parse a delimited list in a single argument for vector options.
* Add an option to disable implicit value on booleans.

### Bug Fixes

* Fix a warning about possible loss of data.
* Fix version numbering in CMakeLists.txt
* Remove unused declaration of the undefined `ParseResult::get_option`.
* Throw on invalid option syntax when beginning with a `-`.
* Throw in `as` when option wasn't present.
* Fix catching exceptions by reference.
* Fix out of bounds errors parsing integers.

## 2.1.1

### Bug Fixes

* Revert the change adding `const` type for `argv`, because most users expect
  to pass a non-const `argv` from `main`.

## 2.1

### Changed

* Options with implicit arguments now require the `--option=value` form if
  they are to be specified with an option. This is to remove the ambiguity
  when a positional argument could follow an option with an implicit value.
  For example, `--foo value`, where `foo` has an implicit value, will be
  parsed as `--foo=implicit` and a positional argument `value`.
* Boolean values are no longer special, but are just an option with a default
  and implicit value.

### Added

* Added support for `std::optional` as a storage type.
* Allow the help string to be customised.
* Use `const` for the type in the `argv` parameter, since the contents of the
  arguments is never modified.

### Bug Fixes

* Building against GCC 4.9 was broken due to overly strict shadow warnings.
* Fixed an ambiguous overload in the `parse_positional` function when an
  `initializer_list` was directly passed.
* Fixed precedence in the Boolean value regex.

## 2.0

### Changed

* `Options::parse` returns a ParseResult rather than storing the parse
  result internally.
* Options with default values now get counted as appearing once if they
  were not specified by the user.

### Added

* A new `ParseResult` object that is the immutable result of parsing. It
  responds to the same `count` and `operator[]` as `Options` of 1.x did.
* The function `ParseResult::arguments` returns a vector of the parsed
  arguments to iterate through in the order they were provided.
* The symbol `cxxopts::version` for the version of the library.
* Booleans can be specified with various strings and explicitly set false.

## 1.x

The 1.x series was the first major version of the library, with release\
 numbers
starting to follow semantic versioning, after 0.x being unstable.  It never\
 had
a changelog maintained for it. Releases mostly contained bug fixes, with the
occasional feature added.

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jarro2783/cxxopts
doc-url: https://github.com/jarro2783/cxxopts/wiki
src-url: https://github.com/jarro2783/cxxopts
package-url: https://github.com/build2-packaging/cxxopts
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libicuuc ? ($config.libcxxopts.use_unicode)
tests: libcxxopts-tests == 3.3.1
unicode-build-config: config.libcxxopts.use_unicode=true
bootstrap-build:
\
project = libcxxopts

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# This header-only library may not be importable by default.
#
hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Unicode configuration based on ICU.
#
config [bool] config.libcxxopts.use_unicode ?= false

\
location: cxxopts/libcxxopts-3.3.1.tar.gz
sha256sum: 52147846c3d71c119974880897178a9355aefa4547614a5993b6510a919ad6c7
:
name: libcxxopts-tests
version: 3.3.1
type: exe
language: c++
project: cxxopts
summary: C++ command line option parser library, tests
license: MIT
topics: option parser, positional arguments
description:
\
[![Build Status](https://travis-ci.org/jarro2783/cxxopts.svg?branch=master)](\
https://travis-ci.org/jarro2783/cxxopts)

# Release versions

Note that `master` is generally a work in progress, and you probably want to\
 use a
tagged release version.

## Version 3 breaking changes

If you have used version 2, there are a couple of breaking changes in version\
 3
that you should be aware of. If you are new to `cxxopts` you can skip this
section.

The parser no longer modifies its arguments, so you can pass a const `argc`\
 and
`argv` and expect them not to be changed.

The `ParseResult` object no longer depends on the parser. So it can be\
 returned
from a scope outside the parser and still work. Now that the inputs are not
modified, `ParseResult` stores a list of the unmatched arguments. These are
retrieved like follows:

```cpp
auto result = options.parse(argc, argv);
result.unmatched(); // get the unmatched arguments
```

# Quick start

This is a lightweight C++ option parser library, supporting the standard GNU
style syntax for options.

Options can be given as:

    --long
    --long=argument
    --long argument
    -a
    -ab
    -abc argument

where c takes an argument, but a and b do not.

Additionally, anything after `--` will be parsed as a positional argument.

## Basics

```cpp
#include <cxxopts.hpp>
```

Create a `cxxopts::Options` instance.

```cpp
cxxopts::Options options("MyProgram", "One line description of MyProgram");
```

Then use `add_options`.

```cpp
options.add_options()
  ("d,debug", "Enable debugging") // a bool parameter
  ("i,integer", "Int param", cxxopts::value<int>())
  ("f,file", "File name", cxxopts::value<std::string>())
  ("v,verbose", "Verbose output", cxxopts::value<bool>()->default_value("fals\
e"))
  ;
```

Options are declared with a long and an optional short option. A description
must be provided. The third argument is the value, if omitted it is boolean.
Any type can be given as long as it can be parsed, with operator>>.

To parse the command line do:

```cpp
auto result = options.parse(argc, argv);
```

To retrieve an option use `result.count("option")` to get the number of times
it appeared, and

```cpp
result["opt"].as<type>()
```

to get its value. If "opt" doesn't exist, or isn't of the right type, then an
exception will be thrown.

## Unrecognised arguments

You can allow unrecognised arguments to be skipped. This applies to both
positional arguments that are not parsed into another option, and `--`
arguments that do not match an argument that you specify. This is done by
calling:

```cpp
options.allow_unrecognised_options();
```

and in the result object they are retrieved with:

```cpp
result.unmatched()
```

## Exceptions

Exceptional situations throw C++ exceptions. There are two types of
exceptions: errors defining the options, and errors when parsing a list of
arguments. All exceptions derive from `cxxopts::exceptions::exception`. Errors
defining options derive from `cxxopts::exceptions::specification` and errors
parsing arguments derive from `cxxopts::exceptions::parsing`.

All exceptions define a `what()` function to get a printable string
explaining the error.

## Help groups

Options can be placed into groups for the purposes of displaying help\
 messages.
To place options in a group, pass the group as a string to `add_options`.\
 Then,
when displaying the help, pass the groups that you would like displayed as a
vector to the `help` function.

## Positional Arguments

Positional arguments are those given without a preceding flag and can be used
alongside non-positional arguments. There may be multiple positional\
 arguments,
and the final positional argument may be a container type to hold a list of\
 all
remaining positionals.

To set up positional arguments, first declare the options, then configure a
set of those arguments as positional like:

```cpp
options.add_options()
  ("script", "The script file to execute", cxxopts::value<std::string>())
  ("server", "The server to execute on", cxxopts::value<std::string>())
  ("filenames", "The filename(s) to process", cxxopts::value<std::vector<std:\
:string>>());

options.parse_positional({"script", "server", "filenames"});

// Parse options the usual way
options.parse(argc, argv);
```

For example, parsing the following arguments:
~~~
my_script.py my_server.com file1.txt file2.txt file3.txt
~~~
will result in parsed arguments like the following table:

| Field         | Value                                     |
| ------------- | ----------------------------------------- |
| `"script"`    | `"my_script.py"`                          |
| `"server"`    | `"my_server.com"`                         |
| `"filenames"` | `{"file1.txt", "file2.txt", "file3.txt"}` |

## Default and implicit values

An option can be declared with a default or an implicit value, or both.

A default value is the value that an option takes when it is not specified
on the command line. The following specifies a default value for an option:

```cpp
cxxopts::value<std::string>()->default_value("value")
```

An implicit value is the value that an option takes when it is given on the
command line without an argument. The following specifies an implicit value:

```cpp
cxxopts::value<std::string>()->implicit_value("implicit")
```

If an option had both, then not specifying it would give the value `"value"`,
writing it on the command line as `--option` would give the value\
 `"implicit"`,
and writing `--option=another` would give it the value `"another"`.

Note that the default and implicit value is always stored as a string,
regardless of the type that you want to store it in. It will be parsed as
though it was given on the command line.

Default values are not counted by `Options::count`.

## Boolean values

Boolean options have a default implicit value of `"true"`, which can be
overridden. The effect is that writing `-o` by itself will set option `o` to
`true`. However, they can also be written with various strings using `=value`.
There is no way to disambiguate positional arguments from the value following
a boolean, so we have chosen that they will be positional arguments, and
therefore, `-o false` does not work.

## `std::vector<T>` values

Parsing a list of values into a `std::vector<T>` is also supported, as long\
 as `T`
can be parsed. To separate single values in a list the define symbol\
 `CXXOPTS_VECTOR_DELIMITER`
is used, which is ',' by default. Ensure that you use no whitespaces between\
 values because
those would be interpreted as the next command line option. Example for a\
 command line option
that can be parsed as a `std::vector<double>`:

~~~
--my_list=1,-2.1,3,4.5
~~~

## Options specified multiple times

The same option can be specified several times, with different arguments,\
 which will all
be recorded in order of appearance. An example:

~~~
--use train --use bus --use ferry
~~~

this is supported through the use of a vector of value for the option:

~~~
options.add_options()
  ("use", "Usable means of transport", cxxopts::value<std::vector<std::string\
>>())
~~~

## Custom help

The string after the program name on the first line of the help can be
completely replaced by calling `options.custom_help`. Note that you might
also want to override the positional help by calling `options.positional_help\
`.


## Example

Putting all together:
```cpp
int main(int argc, char** argv)
{
    cxxopts::Options options("test", "A brief description");

    options.add_options()
        ("b,bar", "Param bar", cxxopts::value<std::string>())
        ("d,debug", "Enable debugging", cxxopts::value<bool>()->default_value\
("false"))
        ("f,foo", "Param foo", cxxopts::value<int>()->default_value("10"))
        ("h,help", "Print usage")
    ;

    auto result = options.parse(argc, argv);

    if (result.count("help"))
    {
      std::cout << options.help() << std::endl;
      exit(0);
    }
    bool debug = result["debug"].as<bool>();
    std::string bar;
    if (result.count("bar"))
      bar = result["bar"].as<std::string>();
    int foo = result["foo"].as<int>();

    return 0;
}
```

# Linking

This is a header only library.

# Requirements

The only build requirement is a C++ compiler that supports C++11 features\
 such as:

* regex
* constexpr
* default constructors

GCC >= 4.9 or clang >= 3.1 with libc++ are known to work.

The following compilers are known not to work:

* MSVC 2013

\
description-type: text/markdown;variant=GFM
package-description:
\
# cxxopts - C++ command line option parser

This is the `build2` package for `cxxopts`, a lightweight C++ command line\
 option parser library.

## Usage
To use `libcxxopts` in your project, add the following configurations to the\
 respective files after you have gained access to a `build2` package\
 repository that contains it.

### `manifest`
To make `cxxopts` available for import, add the following dependency to the\
 `manifest` of each package in your project that requires it, adjusting the\
 version constraint as appropriate.

    depends: libcxxopts ^3.3.1

### `buildfile`
To import the contained library, use the following declaration in your\
 `buildfile`.

    import cxxopts = libcxxopts%lib{cxxopts}

### C++ Header Inclusion
Finally, include the `cxxopts` header in your C++ source code.

```c++
#include <cxxopts.hpp>
```

## Configuration Variables
### Unicode Support

    config [bool] config.libcxxopts.use_unicode ?= false

Unicode functionality in `cxxopts` is based on the ICU library.
It will be added as interface dependency to the header-only library if this\
 config variable is set to `true`.

\
package-description-type: text/markdown;variant=GFM
changes:
\
# Changelog

This is the changelog for `cxxopts`, a C++11 library for parsing command line
options. The project adheres to semantic versioning.

## 3.3.1

### Bug fixes

* Added missing version bump

## 3.3.0

### Bug fixes

* Added missing header for GCC 15
* Fix some CMake packaging problems

### Added

* `as_optional`
* `ParseResult::contains`
* `std::filesystem` support
* CMake 4 compatibility

## 3.2.1

### Bug fixes

* Fix compilation with optional on C++20.

## 3.2

### Bug fixes

* Fix unannotated fallthrough.
* Fix sign conversion with Unicode output.
* Don't initialize regex in static initialiser.
* Fix incorrect integer overflow checks.

### Added

* Add fuzzing to CI

### Changed

* Change quote output to '' to match Windows.
* Don't split positional arguments by the list delimiter.
* Order help groups by the order they were added.

## 3.1.1

### Bug Fixes

* Fixed version number in header.
* Fixed cast warning in Unicode function.

## 3.1

### Added

* Support for multiple long names for the same option (= multiple long\
 aliases)
* Add a `program()` function to retrieve the program name.
* Added a .clang-format file.
* Added iterator and printing for a ParseResult.

### Changed

* Cleanup exception code, add cxxopts::exceptions namespace.
* Renamed several exceptions to be more descriptive, and added to a nested\
 namespace.

### Bug Fixes

* Fix `arguments()` having no key for options that only have a short name.

## 3.0

### Changed

* Only search for a C++ compiler in CMakeLists.txt.
* Allow for exceptions to be disabled.
* Fix duplicate default options when there is a short and long option.
* Add `CXXOPTS_NO_EXCEPTIONS` to disable exceptions.
* Fix char parsing for space and check for length.
* Change argument type in `Options::parse` from `char**` to `const char**`.
* Refactor parser to not change its arguments.
* `ParseResult` doesn't depend on a reference to the parser.
* Fixed several warnings and code quality issues.
* Improved formatting for help descriptions.
* Improve integer parsing.

### Added

* A list of unmatched arguments is available in `ParseResult`.
* Support single letter options with argument attached.
* Use <optional> if it is present.

### Bug Fixes

* Fix missing option name in exception.

## 2.2

### Changed

* Allow integers to have leading zeroes.
* Build the tests by default.
* Don't check for container when showing positional help.

### Added

* Iterator inputs to `parse_positional`.
* Throw an exception if the option in `parse_positional` doesn't exist.
* Parse a delimited list in a single argument for vector options.
* Add an option to disable implicit value on booleans.

### Bug Fixes

* Fix a warning about possible loss of data.
* Fix version numbering in CMakeLists.txt
* Remove unused declaration of the undefined `ParseResult::get_option`.
* Throw on invalid option syntax when beginning with a `-`.
* Throw in `as` when option wasn't present.
* Fix catching exceptions by reference.
* Fix out of bounds errors parsing integers.

## 2.1.1

### Bug Fixes

* Revert the change adding `const` type for `argv`, because most users expect
  to pass a non-const `argv` from `main`.

## 2.1

### Changed

* Options with implicit arguments now require the `--option=value` form if
  they are to be specified with an option. This is to remove the ambiguity
  when a positional argument could follow an option with an implicit value.
  For example, `--foo value`, where `foo` has an implicit value, will be
  parsed as `--foo=implicit` and a positional argument `value`.
* Boolean values are no longer special, but are just an option with a default
  and implicit value.

### Added

* Added support for `std::optional` as a storage type.
* Allow the help string to be customised.
* Use `const` for the type in the `argv` parameter, since the contents of the
  arguments is never modified.

### Bug Fixes

* Building against GCC 4.9 was broken due to overly strict shadow warnings.
* Fixed an ambiguous overload in the `parse_positional` function when an
  `initializer_list` was directly passed.
* Fixed precedence in the Boolean value regex.

## 2.0

### Changed

* `Options::parse` returns a ParseResult rather than storing the parse
  result internally.
* Options with default values now get counted as appearing once if they
  were not specified by the user.

### Added

* A new `ParseResult` object that is the immutable result of parsing. It
  responds to the same `count` and `operator[]` as `Options` of 1.x did.
* The function `ParseResult::arguments` returns a vector of the parsed
  arguments to iterate through in the order they were provided.
* The symbol `cxxopts::version` for the version of the library.
* Booleans can be specified with various strings and explicitly set false.

## 1.x

The 1.x series was the first major version of the library, with release\
 numbers
starting to follow semantic versioning, after 0.x being unstable.  It never\
 had
a changelog maintained for it. Releases mostly contained bug fixes, with the
occasional feature added.

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jarro2783/cxxopts
doc-url: https://github.com/jarro2783/cxxopts/wiki
src-url: https://github.com/jarro2783/cxxopts
package-url: https://github.com/build2-packaging/cxxopts
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: catch2 ^2.13.9
bootstrap-build:
\
project = libcxxopts-tests

using version
using config
using test
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Headers are not importable by default.
#
hxx{*}: cxx.importable = false

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: cxxopts/libcxxopts-tests-3.3.1.tar.gz
sha256sum: 284c40c27365dd80f337f2445fa42a4eea345be829a35f41567d74ae2abf101a
:
name: libdouble-conversion
version: 3.1.7
summary: Efficient binary-decimal and decimal-binary conversion routines for\
 IEEE doubles
license: BSD-3-Clause
description:
\
https://github.com/google/double-conversion

This project (double-conversion) provides binary-decimal and decimal-binary
routines for IEEE doubles.

The library consists of efficient conversion routines that have been extracted
from the V8 JavaScript engine. The code has been refactored and improved so\
 that
it can be used more easily in other projects.

There is extensive documentation in `double-conversion/string-to-double.h` and
`double-conversion/double-to-string.h`. Other examples can be found in
`test/cctest/test-conversions.cc`.


Building
========

This library can be built with [scons][0] or [cmake][1].
The checked-in Makefile simply forwards to scons, and provides a
shortcut to run all tests:

    make
    make test

Scons
-----

The easiest way to install this library is to use `scons`. It builds
the static and shared library, and is set up to install those at the
correct locations:

    scons install

Use the `DESTDIR` option to change the target directory:

    scons DESTDIR=alternative_directory install

Cmake
-----

To use cmake run `cmake .` in the root directory. This overwrites the
existing Makefile.

Use `-DBUILD_SHARED_LIBS=ON` to enable the compilation of shared libraries.
Note that this disables static libraries. There is currently no way to
build both libraries at the same time with cmake.

Use `-DBUILD_TESTING=ON` to build the test executable.

    cmake . -DBUILD_TESTING=ON
    make
    test/cctest/cctest

[0]: http://www.scons.org/
[1]: https://cmake.org/

\
description-type: text/markdown;variant=GFM
url: https://github.com/google/double-conversion
src-url: https://github.com/google/double-conversion
package-url: https://github.com/build2-packaging/libdouble-conversion
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = libdouble-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libdouble-conversion/libdouble-conversion-3.1.7.tar.gz
sha256sum: 7cfd76595ce518c9e3175fc685373fa788ad85f76f3c6d6ec9a0a6f08128ed5a
:
name: libdouble-conversion
version: 3.2.0
summary: Efficient binary-decimal and decimal-binary conversion routines for\
 IEEE doubles
license: BSD-3-Clause
description:
\
https://github.com/google/double-conversion

This project (double-conversion) provides binary-decimal and decimal-binary
routines for IEEE doubles.

The library consists of efficient conversion routines that have been extracted
from the V8 JavaScript engine. The code has been refactored and improved so\
 that
it can be used more easily in other projects.

There is extensive documentation in `double-conversion/string-to-double.h` and
`double-conversion/double-to-string.h`. Other examples can be found in
`test/cctest/test-conversions.cc`.


Building
========

This library can be built with [scons][0] or [cmake][1].
The checked-in Makefile simply forwards to scons, and provides a
shortcut to run all tests:

    make
    make test

Scons
-----

The easiest way to install this library is to use `scons`. It builds
the static and shared library, and is set up to install those at the
correct locations:

    scons install

Use the `DESTDIR` option to change the target directory:

    scons DESTDIR=alternative_directory install

Cmake
-----

To use cmake run `cmake .` in the root directory. This overwrites the
existing Makefile.

Use `-DBUILD_SHARED_LIBS=ON` to enable the compilation of shared libraries.
Note that this disables static libraries. There is currently no way to
build both libraries at the same time with cmake.

Use `-DBUILD_TESTING=ON` to build the test executable.

    cmake . -DBUILD_TESTING=ON
    make
    test/cctest/cctest

[0]: http://www.scons.org/
[1]: https://cmake.org/

\
description-type: text/markdown;variant=GFM
url: https://github.com/google/double-conversion
src-url: https://github.com/google/double-conversion
package-url: https://github.com/build2-packaging/libdouble-conversion
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = libdouble-conversion

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libdouble-conversion/libdouble-conversion-3.2.0.tar.gz
sha256sum: 5260e861f9e27600691299cdf6ca46957a8240673a3a0f2697bb94548bcd8c0f
:
name: libevent
version: 2.1.12+1
summary: Event notification C library
license: BSD-3-Clause AND BSD-2-Clause AND MIT
description:
\
<p align="center">
  <img src="https://strcpy.net/libevent3.png" alt="libevent logo"/>
</p>



[![Appveyor Win32 Build Status](https://ci.appveyor.com/api/projects/status/n\
g3jg0uhy44mp7ik?svg=true)](https://ci.appveyor.com/project/libevent/libevent)
[![Travis Build Status](https://travis-ci.org/libevent/libevent.svg?branch=ma\
ster)](https://travis-ci.org/libevent/libevent)
[![Coverage Status](https://coveralls.io/repos/github/libevent/libevent/badge\
.svg)](https://coveralls.io/github/libevent/libevent)
[![Join the chat at https://gitter.im/libevent/libevent](https://badges.gitte\
r.im/libevent/libevent.svg)](https://gitter.im/libevent/libevent?utm_source=b\
adge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)



# 0. BUILDING AND INSTALLATION (Briefly)

## Autoconf

     $ ./configure
     $ make
     $ make verify   # (optional)
     $ sudo make install

## CMake (General)


The following Libevent specific CMake variables are as follows (the values\
 being
the default).

```
# Type of the library to build (SHARED or STATIC)
# Default is: SHARED for MSVC, otherwise BOTH
EVENT__LIBRARY_TYPE:STRING=DEFAULT

# Installation directory for CMake files
EVENT_INSTALL_CMAKE_DIR:PATH=lib/cmake/libevent

# Enable running gcov to get a test coverage report (only works with
# GCC/CLang). Make sure to enable -DCMAKE_BUILD_TYPE=Debug as well.
EVENT__COVERAGE:BOOL=OFF

# Defines if Libevent should build without the benchmark executables
EVENT__DISABLE_BENCHMARK:BOOL=OFF

# Define if Libevent should build without support for a debug mode
EVENT__DISABLE_DEBUG_MODE:BOOL=OFF

# Define if Libevent should not allow replacing the mm functions
EVENT__DISABLE_MM_REPLACEMENT:BOOL=OFF

# Define if Libevent should build without support for OpenSSL encryption
EVENT__DISABLE_OPENSSL:BOOL=OFF

# Disable the regress tests
EVENT__DISABLE_REGRESS:BOOL=OFF

# Disable sample files
EVENT__DISABLE_SAMPLES:BOOL=OFF

# If tests should be compiled or not
EVENT__DISABLE_TESTS:BOOL=OFF

# Define if Libevent should not be compiled with thread support
EVENT__DISABLE_THREAD_SUPPORT:BOOL=OFF

# Enables verbose debugging
EVENT__ENABLE_VERBOSE_DEBUG:BOOL=OFF

# When cross compiling, forces running a test program that verifies that\
 Kqueue
# works with pipes. Note that this requires you to manually run the test\
 program
# on the the cross compilation target to verify that it works. See CMake
# documentation for try_run for more details
EVENT__FORCE_KQUEUE_CHECK:BOOL=OFF
```

__More variables can be found by running `cmake -LAH <sourcedir_path>`__


## CMake (Windows)

Install CMake: <https://www.cmake.org>


     $ md build && cd build
     $ cmake -G "Visual Studio 10" ..   # Or whatever generator you want to\
 use cmake --help for a list.
     $ start libevent.sln

## CMake (Unix)

     $ mkdir build && cd build
     $ cmake ..     # Default to Unix Makefiles.
     $ make
     $ make verify  # (optional)


# 1. BUILDING AND INSTALLATION (In Depth)

## Autoconf

To build Libevent, type

     $ ./configure && make


 (If you got Libevent from the git repository, you will
  first need to run the included "autogen.sh" script in order to
  generate the configure script.)

You can run the regression tests by running

     $ make verify

Install as root via

     $ make install

Before reporting any problems, please run the regression tests.

To enable low-level tracing, build the library as:

     $ CFLAGS=-DUSE_DEBUG ./configure [...]

Standard configure flags should work.  In particular, see:

     --disable-shared          Only build static libraries.
     --prefix                  Install all files relative to this directory.


The configure script also supports the following flags:

     --enable-gcc-warnings     Enable extra compiler checking with GCC.
     --disable-malloc-replacement
                               Don't let applications replace our memory
                               management functions.
     --disable-openssl         Disable support for OpenSSL encryption.
     --disable-thread-support  Don't support multithreaded environments.

## CMake (Windows)

(Note that autoconf is currently the most mature and supported build
environment for Libevent; the CMake instructions here are new and
experimental, though they _should_ be solid.  We hope that CMake will
still be supported in future versions of Libevent, and will try to
make sure that happens.)

First of all install <https://www.cmake.org>.

To build Libevent using Microsoft Visual studio open the "Visual Studio\
 Command prompt" and type:

```
$ cd <libevent source dir>
$ mkdir build && cd build
$ cmake -G "Visual Studio 10" ..   # Or whatever generator you want to use\
 cmake --help for a list.
$ start libevent.sln
```

In the above, the ".." refers to the dir containing the Libevent source code. 
You can build multiple versions (with different compile time settings) from\
 the same source tree
by creating other build directories. 

It is highly recommended to build "out of source" when using
CMake instead of "in source" like the normal behaviour of autoconf for this\
 reason.

The "NMake Makefiles" CMake generator can be used to build entirely via the\
 command line.

To get a list of settings available for the project you can type:

```
$ cmake -LH ..
```

### GUI

CMake also provides a GUI that lets you specify the source directory and\
 output (binary) directory
that the build should be placed in.

# 2. USEFUL LINKS:

For the latest released version of Libevent, see the official website at
<http://libevent.org/> .

There's a pretty good work-in-progress manual up at
   <http://www.wangafu.net/~nickm/libevent-book/> .

For the latest development versions of Libevent, access our Git repository
via

```
$ git clone https://github.com/libevent/libevent.git
```

You can browse the git repository online at:

<https://github.com/libevent/libevent>

To report bugs, issues, or ask for new features:

__Patches__: https://github.com/libevent/libevent/pulls
> OK, those are not really _patches_. You fork, modify, and hit the "Create\
 Pull Request" button.
> You can still submit normal git patches via the mailing list.

__Bugs, Features [RFC], and Issues__: https://github.com/libevent/libevent/is\
sues
> Or you can do it via the mailing list.

There's also a libevent-users mailing list for talking about Libevent
use and development: 

<http://archives.seul.org/libevent/users/>

# 3. ACKNOWLEDGMENTS

The following people have helped with suggestions, ideas, code or
fixing bugs:

 * Samy Al Bahra
 * Antony Antony
 * Jacob Appelbaum
 * Arno Bakker
 * Weston Andros Adamson
 * William Ahern
 * Ivan Andropov
 * Sergey Avseyev
 * Avi Bab
 * Joachim Bauch
 * Andrey Belobrov
 * Gilad Benjamini
 * Stas Bekman
 * Denis Bilenko
 * Julien Blache
 * Kevin Bowling
 * Tomash Brechko
 * Kelly Brock
 * Ralph Castain
 * Adrian Chadd
 * Lawnstein Chan
 * Shuo Chen
 * Ka-Hing Cheung
 * Andrew Cox
 * Paul Croome
 * George Danchev
 * Andrew Danforth
 * Ed Day
 * Christopher Davis
 * Mike Davis
 * Frank Denis
 * Antony Dovgal
 * Mihai Draghicioiu
 * Alexander Drozdov
 * Mark Ellzey
 * Shie Erlich
 * Leonid Evdokimov
 * Juan Pablo Fernandez
 * Christophe Fillot
 * Mike Frysinger
 * Remi Gacogne
 * Artem Germanov
 * Alexander von Gernler
 * Diego Giagio
 * Artur Grabowski
 * Diwaker Gupta
 * Kuldeep Gupta
 * Sebastian Hahn
 * Dave Hart
 * Greg Hazel
 * Nicholas Heath
 * Michael Herf
 * Savg He
 * Mark Heily
 * Maxime Henrion
 * Michael Herf
 * Greg Hewgill
 * Andrew Hochhaus
 * Aaron Hopkins
 * Tani Hosokawa
 * Jamie Iles
 * Xiuqiang Jiang
 * Claudio Jeker
 * Evan Jones
 * Marcin Juszkiewicz
 * George Kadianakis
 * Makoto Kato
 * Phua Keat
 * Azat Khuzhin
 * Alexander Klauer
 * Kevin Ko
 * Brian Koehmstedt
 * Marko Kreen
 * Ondřej Kuzník
 * Valery Kyholodov
 * Ross Lagerwall
 * Scott Lamb
 * Christopher Layne
 * Adam Langley
 * Graham Leggett
 * Volker Lendecke
 * Philip Lewis
 * Zhou Li
 * David Libenzi
 * Yan Lin
 * Moshe Litvin
 * Simon Liu
 * Mitchell Livingston
 * Hagne Mahre
 * Lubomir Marinov
 * Abilio Marques
 * Nicolas Martyanoff
 * Abel Mathew
 * Nick Mathewson
 * James Mansion
 * Nicholas Marriott
 * Andrey Matveev
 * Caitlin Mercer
 * Dagobert Michelsen
 * Andrea Montefusco
 * Mansour Moufid
 * Mina Naguib
 * Felix Nawothnig
 * Trond Norbye
 * Linus Nordberg
 * Richard Nyberg
 * Jon Oberheide
 * John Ohl
 * Phil Oleson
 * Alexey Ozeritsky
 * Dave Pacheco
 * Derrick Pallas
 * Tassilo von Parseval
 * Catalin Patulea
 * Patrick Pelletier
 * Simon Perreault
 * Dan Petro
 * Pierre Phaneuf
 * Amarin Phaosawasdi
 * Ryan Phillips
 * Dimitre Piskyulev
 * Pavel Plesov
 * Jon Poland
 * Roman Puls
 * Nate R
 * Robert Ransom
 * Balint Reczey
 * Bert JW Regeer
 * Nate Rosenblum
 * Peter Rosin
 * Maseeb Abdul Qadir
 * Wang Qin
 * Alex S
 * Gyepi Sam
 * Hanna Schroeter
 * Ralf Schmitt
 * Mike Smellie
 * Steve Snyder
 * Nir Soffer
 * Dug Song
 * Dongsheng Song
 * Hannes Sowa
 * Joakim Soderberg
 * Joseph Spadavecchia
 * Kevin Springborn
 * Harlan Stenn
 * Andrew Sweeney
 * Ferenc Szalai
 * Brodie Thiesfield
 * Jason Toffaletti
 * Brian Utterback
 * Gisle Vanem
 * Bas Verhoeven
 * Constantine Verutin
 * Colin Watt
 * Zack Weinberg
 * Jardel Weyrich
 * Jay R. Wren
 * Zack Weinberg
 * Mobai Zhang
 * Alejo
 * Alex
 * Taral
 * propanbutan
 * masksqwe
 * mmadia
 * yangacer
 * Andrey Skriabin
 * basavesh.as
 * billsegall
 * Bill Vaughan
 * Christopher Wiley
 * David Paschich
 * Ed Schouten
 * Eduardo Panisset
 * Jan Heylen
 * jer-gentoo
 * Joakim Söderberg
 * kirillDanshin
 * lzmths
 * Marcus Sundberg
 * Mark Mentovai
 * Mattes D
 * Matyas Dolak
 * Neeraj Badlani
 * Nick Mathewson
 * Rainer Keller
 * Seungmo Koo
 * Thomas Bernard
 * Xiao Bao Clark
 * zeliard
 * Zonr Chang
 * Kurt Roeckx
 * Seven
 * Simone Basso
 * Vlad Shcherban
 * Tim Hentenaar
 * Breaker
 * johnsonlee
 * Philip Prindeville
 * Vis Virial
 * Andreas Gustafsson
 * Andrey Okoshkin
 * an-tao
 * baixiangcpp
 * Bernard Spil
 * Bogdan Harjoc
 * Carlo Marcelo Arenas Belón
 * David Benjamin
 * David Disseldorp
 * Dmitry Alimov
 * Dominic Chen
 * dpayne
 * ejurgensen
 * Fredrik Strupe
 * Gonçalo Ribeiro
 * James Synge
 * Jan Beich
 * Jesse Fang
 * Jiri Luznicky
 * José Luis Millán
 * Kiyoshi Aman
 * Leo Zhang
 * lightningkay
 * Luke Dashjr
 * Marcin Szewczyk
 * Maximilian Brunner
 * Maya Rashish
 * Murat Demirten
 * Nathan French
 * Nikolay Edigaryev
 * Philip Herron
 * Redfoxmoon
 * stenn
 * SuckShit
 * The Gitter Badger
 * tim-le
 * Vincent JARDIN
 * Xiang Zhang
 * Xiaozhou Liu
 * yongqing.jiao
 * Enji Cooper
 * linxiaohui
 * Seong-Joong Kim
 * Tobias Stoeckmann
 * Yury Korzhetsky
 * zhuizhuhaomeng
 * Pierce Lopez
 * yuangongji
 * Keith Smiley
 * jeremyerb
 * Fabrice Fontaine
 * wenyg
 * Aleksandr-Melnikov
 * ayuseleznev
 * chenguolong
 * Dimo Markov
 * dota17
 * fanquake
 * Jan Kasiak
 * Kamil Rytarowski
 * Mario Emmenlauer
 * Michael Davidsaver
 * mohuang
 * Nick Grifka
 * Nicolas J. Bouliane
 * Paul Osborne
 * Philip Homburg
 * Wataru Ashihara
 * William A Rowe Jr
 * yangyongsheng


If we have forgotten your name, please contact us.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libevent - An event notification C library

This is a `build2` package for the [`libevent`](https://libevent.org) C
library. It provides a mechanism to execute a callback function when
a specific event occurs on a file descriptor or after a timeout has been
reached. Furthermore, `libevent` also supports callbacks due to signals or
regular timeouts.

`libevent` is meant to replace the event loop found in event driven network
servers. An application just needs to call `event_dispatch()` and then add or
remove events dynamically without having to change the event loop.

Currently, `libevent` supports `/dev/poll`, `kqueue(2)`, event ports, POSIX
`select(2)`, Windows `select()`, `poll(2)`, and `epoll(4)`.

`libevent` additionally provides a sophisticated framework for buffered
network IO, with support for sockets, filters, rate-limiting, SSL, zero-copy
file transmission, and IOCP. `libevent` includes support for several useful
protocols, including DNS, HTTP, and a minimal RPC framework.


## Usage

To start using this library in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libevent ^2.1.12
```

Then import the library in your `buildfile`:

```
import libs = libevent%lib{event_core}
```

If you need one or more of the optional libraries (discussed below), then you
will need to use the dependency configuration mechanism to enable them. For
example, if you wish to use both `lib{event_core}` and `lib{event_extra}` in
your project, then you can add the following to your `manifest`:

```
depends:
\\
libevent ^2.1.12
{
  require
  {
    config.libevent.extra = true
  }
}
\\
```

And the following to your `buildfile`:

```
import libs = libevent%lib{event_core event_extra}
```

## Importable targets

This package provides the following importable targets (see the upstream
documentation for background):

```
lib{event_core}
lib{event_extra}
lib{event_openssl}
lib{event_pthreads}
```

All the libraries except `lib{event_core}` are optional, disabled by
default, and can be enabled with the corresponding configuration variables
(discussed below).


## Configuration variables

This package provides the following configuration variables:

```
[bool] config.libevent.extra    ?= false
[bool] config.libevent.openssl  ?= false
[bool] config.libevent.pthreads ?= false
```

These variables can be used to enable the corresponding optional libraries
(discussed above). Note that an attempt to enable the `lib{event_pthreads}`
library on Windows has no effect.

Note also that the `lib{event_core}` library provides `build2` metadata that
describes the effective configuration:

```
lib{event_core}:
{
  libevent.extra    = $config.libevent.extra
  libevent.openssl  = $config.libevent.openssl
  libevent.pthreads = $config.libevent.pthreads
}
```

\
package-description-type: text/markdown;variant=GFM
changes:
\
Changes in version 2.1.12-stable (05 Jul 2020)

 This release contains mostly bug fixes (I decided not to port some features
 that can be ported even without ABI breakage, if you cannot find feature that
 you are interested in, please give us a note!)

 Since 2.1.12 libevent will use github actions as main CI, since
 it recommends itself better then travis/appveyor (and had been removed from
 upstream).

 Look carefully at "slightly touches the behaviour" section.

 Below you will find some of changes (this list has been cleaned up from the
 patches that touches only tests and similar):

 CI:
  o Backport github actions to 2.1 (be3acd7c Azat Khuzhin)
  o Merge branch 'event_rpcgen.py-cleanup' (f0ded5f3, 48e04887 Enji Cooper)
  o Add API/ABI checker (using LVC) (709210d4, 2af1f6cc yuangongji)

 test:
  o tinytest: support timeout on Windows (794e8f75 yuangongji)
  o Merge branch 'osx-clock' (e85afbe3 Azat Khuzhin)
  o test-ratelim: calculate timers bias (for slow CPUs) to avoid\
 false-positive (8ad26d0b Azat Khuzhin)

 fixes:
  o buffer: do not pass NULL to memcpy() from evbuffer_pullup() (5b063049\
 Azat Khuzhin)
  o http: fix undefined-shift in EVUTIL_IS*_ helpers (6b8d02a7 Azat Khuzhin)
  o Check error code of evhttp_add_header_internal() in evhttp_parse_query_im\
pl() (97e28f09 Azat Khuzhin)
  o http: fix EVHTTP_CON_AUTOFREE in case of timeout (and some else)\
 (1be25938 Azat Khuzhin)
  o evdns: Add additional validation for values of dns options (c2972453\
 ayuseleznev)
  o There is typo in GetAdaptersAddresses windows library. It should be\
 iphlpapi.dll (891adda9 Aleksandr-Melnikov)
  o Merge branch 'EV_CLOSED-and-EV_ET-fixes' (db2efdf5 Azat Khuzhin)
  o Fix memory corruption in EV_CLOSURE_EVENT_FINALIZE with debug enabled\
 (8ccd8f56 Jan Kasiak)
  o increase segment refcnt only if evbuffer_add_file_segment() succeeds\
 (30662a3c yuangongji)
  o evdns: fix a crash when evdns_base with waiting requests is freed\
 (6f8e0e97 ayuseleznev)
  o event_base_once: fix potential null pointer threat (2e9ceb16 chenguolong)
  o http: do not assume body for CONNECT (1b42270b Azat Khuzhin)
  o evbuffer_add_file: fix freeing of segment in the error path (5f017bde\
 Azat Khuzhin)
  o Fix checking return value of the evdns_base_resolv_conf_parse() (fc51bf2c\
 Azat Khuzhin)
  o Merge branch 'fix-signal-leak' (poll/select now needs reinit) (1c9cc07b\
 Azat Khuzhin)

 improvements:
  o evutil_time: improve evutil_gettimeofday on Windows (a8219143 Nick Grifka)
  o Support EV_CLOSED on linux for poll(2) (2530e7c6 Azat Khuzhin)
  o Parse IPv6 scope IDs. (f602211f Philip Homburg)
  o evutil_time: Implements usleep() using wait funtion on Windows (d42240d1\
 yuangongji)
  o evutil_time: detect and use _gmtime64_s()/_gmtime64() (f4a6152c\
 yuangongji)

 slightly touches the behaviour:
  o bufferevent: allow setting priority on socket and openssl type (4dd3acdd\
 Nicolas J. Bouliane)
  o Fix EV_CLOSED detection/reporting (epoll only) (1df324d4 Azat Khuzhin)\
 (XXX)
  o Revert "Warn if forked from the event loop during event_reinit()"\
 (71f5c0d3 Azat Khuzhin)

 samples:
  o https-client: load certificates from the system cert store on Windows\
 (e9478640 yuangongji)

 build fixes:
  o Do not use sysctl.h on linux (it had been deprecated) (d2871a37 Azat\
 Khuzhin)
  o cmake: avoid problems from use of CMAKE_USE_PTHREADS_INIT (a62ec765 Paul\
 Osborne)
  o Update list of cmake files for autotools dist archive (2016f017 Azat\
 Khuzhin)
  o LibeventConfig.cmake: restore CMAKE_FIND_LIBRARY_SUFFIXES and\
 LIBEVENT_STATIC_LINK default (640f9cf6 Mario Emmenlauer)
  o cmake: fix getaddrinfo checking error (dea51c2e yuangongji)
  o autoconf: fix getaddrinfo checking errors on mingw (b9bf7fa7 yuangongji)
  o Do not use shared global structures on CYGWIN (8a9b5655 Azat Khuzhin)
  o Added uninstall target check to cmakelists (3f1fb1f9 Dimo Markov)
  o Fix compilation without OPENSSL_API_COMPAT (921bdcdd Azat Khuzhin)
  o cmake: improve package config file (1c047618, baec84f2 yuangongji)
  o Link with iphlpapi only on windows (976f7d34 Azat Khuzhin)
  o autotools: fails build when need but can not find openssl (93174bb5\
 yuangongji)
  o Merge branch 'http-connect' (e2424229 Azat Khuzhin)
  o Fix compat with NetBSD >= 10 (5febb4e1 Kamil Rytarowski)
  o cmake: fix getrandom() detection (e0e5f3bd Azat Khuzhin)
  o arc4random: replace sysctl() with getrandom (on linux) (66ec78fd Azat\
 Khuzhin)
  o Upgrade autoconf (after upgrading minimum required to 2.67) (45da7d9d\
 yuangongji)
  o eliminate some C4267 warnings in Windows (9e468c77 yuangongji)
  o autotools: attach doxygen target into all target (5d1e8570 yuangongji)
  o cmake: attach doxygen target into all target (7a85300a yuangongji)
  o Change the minimum version of automake to 1.13 and autoconf to 2.67\
 (fdb8fb66 ygj6)
  o Add Uninstall.cmake.in into dist archive (877f2355 Azat Khuzhin)

Changes in version 2.1.11-stable (01 Aug 2019)

 This release contains one ABI breakage fix (that had been introduced in
 2.1.10, and strictly speaking this release breaks ABI again to make it
 compatible with 2.1.9 and less, please take a look at 18104973 for more
 details). Apart from that it contains some bug fixes, that grouped below.

 And even though the return value for evbuffer_setcb() had been changed it
 should ABI compatible (anyway that function is in -compat.h header).

 There is also one patch that introduce new functionality, this is 546a366c,
 to tune SO_RCVBUF/SO_SNDBUF in evdns, but one can count it as a bug-fix on
 the application level, since before you cannot tune this settings and hence
 you could stumble on problems.

 ABI breakage:
  o Protect min_heap_push_ against integer overflow. (8c899768 Tobias\
 Stoeckmann)
  o Revert "Protect min_heap_push_ against integer overflow." (18104973 Azat\
 Khuzhin)

 functionality:
  o evdns: add new options -- so-rcvbuf/so-sndbuf (546a366c Azat Khuzhin)

 build:
  o Change autoconf version to 2.62 and automake version to 1.11.2 (2a333008\
 yuangongji)
  o cmake: install shared library only if it was requested (596855f7 Azat\
 Khuzhin)
  o Missing <winerror.h> on win7/MinGW(MINGW32_NT-6.1)/MSYS (9559349c\
 yuangongji)
  o cmake: set library names to be the same as with autotools (305251b9\
 yuangongji)
  o Enable _GNU_SOURCE for Android (f013fc7d Keith Smiley)
  o Enable kqueue for APPLE targets (3aa68a82 Keith Smiley)
  o autotools: do not install bufferevent_ssl.h under --disable-openssl\
 (5349a07e Azat Khuzhin)
  o cmake: link against shell32.lib/advapi32.lib (c9ce638c Azat Khuzhin)
  o Add README.md into dist archive (3660a4cc Azat Khuzhin)
  o cmake: add missing autotools targets (doxygen, uninstall,\
 event_rpcgen.py) (2d65071c yuangongji)
  o m4/libevent_openssl.m4: fix detection of openssl (d4056e59 Fabrice\
 Fontaine)
  o Fix detection of the __has_attribute() for apple clang [ci skip]\
 (7fd7c5ef Azat Khuzhin)

 lib:
  o buffer: fix possible NULL dereference in evbuffer_setcb() on ENOMEM\
 (598f247d Azat Khuzhin)
  o Warn if forked from the event loop during event_reinit() (b75922ae Azat\
 Khuzhin)
  o evutil: set the have_checked_interfaces in evutil_check_interfaces()
    (ef498aa2, a09265ac jeremyerb)

 samples:
  o https-client: correction error checking (a8a04565 wenyg)


Changes in version 2.1.10-stable (26 May 2019)

 This release contains mostly fixes (some evbuffer oddity, AF_UNIX handling in
 http server, some UB fixes and others) but also some new functionality
 (without ABI breakage as usual) and now dist archive can be used for building
 on windows (getopt had been added into it).

 Above you will find changelog for this particular release (but with some
 trivial fixes pruned out from it - to make it a little bit more informative).

 To view full changelog please use git:
   git log --format='  o %s (%h %aN)' release-2.1.9-beta...release-2.1.10-sta\
ble

 dist:
  o Add getopt into dist archive (7042ff24 Azat Khuzhin)

 functionality:
  o evdns: add DNS_OPTION_NAMESERVERS_NO_DEFAULT/EVDNS_BASE_NAMESERVERS_NO_DE\
FAULT
  (58e81106 Azat Khuzhin)
  o Add support for EV_TIMEOUT to event_base_active_by_fd (3f893f0a John Ohl)

 fixes:
  o Merge branch 'evbuffer-fixes-806-v2' (2fea04b3 Azat Khuzhin)
  o Merge branch 'issue-807-accept4-getnameinfo-AF_UNIX' (7c4da937, e2790a7f
    Azat Khuzhin)
  o kqueue: Avoid undefined behaviour. (e70e18e9 Tobias Stoeckmann)
  o Prevent integer overflow in kq_build_changes_list. (43a55a23 Tobias\
 Stoeckmann)
  o evdns: fix lock/unlock mismatch in evdns_close_server_port() (54103883\
 zhuizhuhaomeng)
  o Merge remote-tracking branch 'official/pr/804' -- Enforce limit of NSIG
    signals (87fa93a8 Tobias Stoeckmann)
  o Protect min_heap_push_ against integer overflow. (0b46bb8c Tobias\
 Stoeckmann)
  o le-proxy: initiate use of the Winsock DLL (2a1e1530 linxiaohui)
  o Fix leaks in error path of the bufferevent_init_common_() (bb0f8fe7 Azat\
 Khuzhin)
  o buffer: make evbuffer_prepend() of zero-length array no-op (61fa7b7d Azat\
 Khuzhin)
  o Merge branch 'evbuffer-empty-chain-handling' (6a3dd717 Azat Khuzhin)
  o Don't loose top error in SSL (3d1a7a1d Yury Korzhetsky)
  o Remove needless check for arc4_seeded_ok (6602a97d Seong-Joong Kim)
  o Merge pull request #769 from sungjungk/fix-return-handling (91084140\
 Nathan French)

 build:
  o Define `_GNU_SOURCE` properly/consistently per autoconf (00ba9fa2 Enji\
 Cooper)
  o signal: guard __cdecl definition with #ifdef (d89045a6 Azat Khuzhin)
  o Link test/regress with event_core/event_extra over event (22380996 Azat\
 Khuzhin)

 tests:
  o Use kill() over raise() for raising the signal (fixes osx 10.14 with
    kqueue) (3db5296b, a45f6733 Azat Khuzhin)
  o tinytest: implement per-test timeout (via alarm() under !win32 only)
    (b64dbfb6, 75d7e1ff Azat Khuzhin)

Changes in version 2.1.9-beta (10 February 2019)

 This changelog will differs from other releases in the next few clauses:
 - contains only highlighted changes (so now it will not contains a lot of
   patches that fixes some stuff in regression tests, typos, leaks fixes in
   samples and so forth)
 - no authors (since merge commits breaks them anyway, but AUTHORS sections in
   README will be kept up to date)
 - group name trimmed from commit subjects trimmed
 - it's been 2 years since the previoius release, so it is pretty huge

 And I think that this is more useful, so from now on it will always has the
 same look (until there will too many objections of course).

 To view full changelog please use git:
   git log --format='  o %s (%h %aN)' release-2.1.8-stable...release-2.1.9-be\
ta


 dist archive:
  o Add cmake rules into dist archive (bf3a67cf)
  o Add missing print-winsock-errors.c into dist archive (822d6462)
  o Include openssl-compat.h into dist archive (08658136)

 core:
  o Merge branch 'check-O_NONBLOCK-in-debug' (a39898f3, a8155c62)
  o Merge branch 'event-ET-#636-v2' (ca4b6404)
  o Fix visibility issues under (mostly on win32)
    (349081e1g, 802be13ag, a1f28e2f)
  o Define __EXT_POSIX2 for QNX (a2176f2c)
  o Cleanup __func__ detection (b3af7bdd)
  o Add convenience macros for user-triggered events (06ec5de6)
  o Notify event base if there are no more events, so it can exit without\
 delay (d9d1c09e)
  o Fix base unlocking in event_del() if event_base_set() runned in another\
 thread (4f0f40e3)
  o If precise_time is false, we should not set EVENT_BASE_FLAG_PRECISE_TIMER\
 (27dee54d)
  o Fix race in access to ev_res from event loop with event_active()\
 (43d92a6d)
  o Return from event_del() after the last event callback termination\
 (876c7ac7)

 http:
  o Merge branch 'http-EVHTTP_CON_READ_ON_WRITE_ERROR-fixes-v2' (eb7b472b)
  o Preserve socket error from listen across closesocket cleanup (2ccd00a6)
  o fix connection retries when there more then one request for connection\
 (d30e7bba)
  o improve error path for bufferevent_{setfd,enable,disable}() (a8cc449e)
  o Fix conceivable UAF of the bufferevent in evhttp_connection_free()\
 (6ac2ec25)
  o Merge branch 'http-request-line-parsing' (cdcfbafe)
  o Fix evhttp_connection_get_addr() fox incomming http connections (4215c003)
  o fix leaks in evhttp_uriencode() (123362e9)
  o CONNECT method only takes an authority (7d1ffe64)
  o Allow bodies for GET/DELETE/OPTIONS/CONNECT (23eb38b9)
  o Do not crash when evhttp_send_reply_start() is called after a timeout.\
 (826f1134)
  o Fix crashing http server when callback do not reply in place (5b40744d,\
 b2581380)
  o fix handling of close_notify (ssl) in http with openssl bufferevents\
 (7e91622b)

 evrpc:
  o use *_new_with_arg() to match function prototype (a95cc9e3)
  o avoid NULL dereference on request is not EVHTTP_REQ_POST (e05136c7)

 regression tests:
  o Merge branch 'TT_RETRIABLE' (6ea1ec68, f9b592aa)

 bufferevent:
  o Merge branch 'iocp-fixes' (6bfac964)
  o Merge branch 'be-wm-overrun-v2' (3f692fff)
  o bufferevent_socket_connect{,_hostname}() missing event callback and use\
 ret code (1dde74ef)
  o don't fail be_null_filter if bytes are copied (b92b0792)
  o Call underlying bev ctrl GET_FD on filtered bufferevents (ebfac517)

 bufferevent_openssl/openssl:
  o Merge branch 'ssl_bufferevent_wm_filter-fix' (30020a35)
  o be_openssl: avoid leaking of SSL structure (e86ccfe5)
  o Fix build with LibreSSL 2.7 (894ca48a)
  o Add missing includes into openssl-compat.h (01bc36c1)
  o Explicitly call SSL_clear when reseting the fd. (29b7a516)
  o Unbreak build with LibreSSL after openssl 1.1 support added (230af9f0)

 samples:
  o Merge branch 'sample-http-server' (b6309bcc)
  o sample/https-client: use host SSL certificate store by default (5c0132f3)

 listener:
  o ipv6only socket bind support (ba148796)
  o Merge branch 'listener-immediate-close' (df2ed13f)
  o Merge branch 'evconnlistener-do-not-close-client-fd' (42e851bb)

 evdns:
  o evdns: handle NULL filename explicitly (0033f5cc)
  o Merge branch 'evdns_getaddrinfo-race-fix' (3237d697)
  o Generating evdns_base_config_windows_nameservers docs on all platforms\
 (3bd2ce43)

 utils:
  o Merge branch 'evutil_found_ifaddr-dev' (b07e43e6)
  o Avoid possible SEGVs in select() (in unit tests) (8818c86c)
  o Port `event_rpcgen.py` and `test/check-dumpevents.py` to Python 3.\
 (532a8cc3)

 buffer:
  o Fix assert() condition in evbuffer_drain() for IOCP (d6326104)
  o fix incorrect unlock of the buffer mutex (for deferred callbacks)\
 (2b4d127d)
  o Fix wrong assert in evbuffer_drain() (9f4d0dce)

 cmake:
  o fix checking of devpoll backend (like in autotools, by devpoll.h\
 existence) (7f161902)
  o support static runtime (MSVC) (c8b3ec17, 61fb055a)
  o do not build both (SHARED and STATIC) for MSVC/win32 (bc7f2fd9)
  o introduce EVENT__LIBRARY_TYPE option (eb10a738)
  o ensure windows dll's are installed as well as lib files (29590718)
  o Fix generation of LibeventConfig.cmake for the installation tree\
 (7fa08c4b)
  o fix pkgconfig generation (copy-paste typo) (cc554d87)
  o Merge branch 'cmake-missing-bits' (9806b126)
  o Fix detection of timerfd_create() in CMake. (e50af331)
  o Merge branch 'cmake-configure-fixes-v2' (a0bfe2c4)
  o Do not add epoll_sub (syscall wrappers) for epoll in cmake (cea61de6)
  o Fix RPATH for APPLE (45b1f379)

 autotools:
  o include win32 specific headers for socklen_t detection on win32/mingw\
 (d7579fb9)
  o Ignore evconfig-private.h for autotools (37423849)
  o config.h can't be prefixed unconditionally (63a054f8)
  o Merge branch 'pull-628' (7e56c8b2)
  o Provide Makefile variables LIBEVENT_{CFLAGS,CPPFLAGS,LDFLAGS} (2f060c5f)
  o confirm openssl is working before using (b39ccf8e)
  o pass $(OPENSSL_INCS) for samples (FTBFS macOS) (c2495265)
  o Add configure check for midipix (d433201e)
  o Fix tests with detached builds (c46ff439)

 build:
  o Fix arc4random_addrandom() detecting and fallback (regression) (303d6d77)
  o Merge branch 'win32-fixes' (ebd12e6d)
  o Merge branch 'fix-openssl-linking' (e7bd9e03)
  o Merge branch 'fix-struct-linger' (8567f2f5)

 CI:
  o travis-ci/appveyor now uses fast_finish+allow_failures
    (5e97b6e6, dd472e7d, dfb5fc167)
  o Merge branch 'travis-ci-osx-fixes' (9f02b39c)
  o Merge branch 'win64-fixes' (aee0fcd5)


Changes in version 2.1.8-stable (22 January 2017)

 Libevent 2.1.8-stable, it contains openssl fixes for resetting fd and using
 bufferevent_openssl_filter_new(). vagrant fixes, some build fixes, increased
 timeout for some tests (to reduce number of failures due to timing issues),
 date in RFC1123 format and running tests in parallel.

 There are highlighted changes above.

 Build fixes:
  o Fix _FILE_OFFSET_BITS redinition (solaris/autotools) (336f3b11 Azat\
 Khuzhin)
  o util-internal: fix __func__ redefinition (netbsd) (253e7fa9 Azat Khuzhin)
  o Fix signedness differ for iov_base (solaris) (2c62062e Azat Khuzhin)
  o evutil_time: include <unistd.h> when there is only sleep()/usleep()\
 (3e75194c Azat Khuzhin)
  o http: fix formatter for pritnf for req->ntoread (osx) (1cbf26f6 Azat\
 Khuzhin)
 Testing environment:
  o Merge branch 'automake-tests-parallel-v4' (*includes ci bits also*)\
 (59e217df Azat Khuzhin)
 Vagrant env fixes:
  o vagrant/netbsd: missing libtool (9c9be399 Azat Khuzhin)
  o vagrant/netbsd: more reliable way of installing packages (36da6877 Azat\
 Khuzhin)
  o vagrant/osx: use make instead of gmake (there is no gmake) (f7c70aef Azat\
 Khuzhin)
  o vagrant: add centos box (ca591c5b Azat Khuzhin)
 Tests:
  o test/dns: replace servname since solaris does not have "http" (d6bafbbe\
 Azat Khuzhin)
  o test/thread: netbsd is too slow, increase timeout for conditions_simple\
 (3c7422fc Azat Khuzhin)
  o test/dns: run async resolving after sync one (to avoid timeouts)\
 (07862531 Azat Khuzhin)
  o test/http: turn off some tests that based on backlog filling (falky)\
 (26f416c1 Azat Khuzhin)
 Bugfixes:
  o Merge branch 'openssl-filter-fixes-v4' (83e0f43b Azat Khuzhin)
  o Merge branch 'date-rfc1123' (68def435,4798de6c,4545807d Azat Khuzhin)
  o Merge branch 'be-openssl-fd-reset-fix-v2' (86fa0070,32adf434 Azat Khuzhin)
  o Merge branch 'openssl-1.1-init-fixes-v2' (18a161f0 Azat Khuzhin)
  o Fix incorrect MIME type (23f9a20e johnsonlee)
 Trivial fixes:
 Documentation updates:
  o Update README.md (3821cca1 Breaker)


Changes in version 2.1.7-rc (2 Novemer 2016)

 Libevent 2.1.7-rc contains openssl 1.1 support, build fixes, CI improvements
 and plus Vagrantfile for testing under multiple OS'es.


 Continious Integration:
  o Use coveralls.io via travis (9ac000c Azat Khuzhin)
  o travis-ci: use container-based infrastructure (7e12e96 Azat Khuzhin)
  o travis-ci/osx: fix compiling/linking openssl libraries (9d2f8d4 Azat\
 Khuzhin)
  o travis-ci: use gcc-5 (fixes osx|gcc failures) (d7ceae5 Azat Khuzhin)
  o Testing with vagrant for 6 OS and cmake+autoconf (9585338 Azat Khuzhin)
  o travis-ci/osx: install lcov (e4e099b Azat Khuzhin)

 Build Improvements/Fixes:
  o Fix cmake -DEVENT__COVERAGE=ON (40fbffc Azat Khuzhin)
  o autogen.sh: learn about gmake (9376ac4 Azat Khuzhin)
  o autogen.sh: remove all autoconf/automake caches, if any (69cce25 Azat\
 Khuzhin)
  o cmake: fix finding python2, and check that it is really 2 (3453c08 Azat\
 Khuzhin)
  o cmake: fix CheckFunctionExistsEx/CheckPrototypeDefinition (CMP0054)\
 (43b69b2 Azat Khuzhin)
  o cmake: cleanup (dc624ad Zonr Chang)
  o cmake/win32: fix running regress, but fixing finding python2 interpreter\
 (bcb990a Azat Khuzhin)
  o cmake: use PYTHON_EXECUTABLE to find python2 (a4d044c Azat Khuzhin)
  o Merge branch 'force-disable-clockgettime' (83c7cdf Azat Khuzhin)

 Code Improvements (core)
  o use ev_uint16_t instead of unsigned short for port (e983712 Thomas\
 Bernard)
  o Merge branch 'contrib-guide-v2' (b9c5077 Azat Khuzhin)
  o poll: Prevent libevent from spinning if POLLNVAL occurs (675974c Tim\
 Hentenaar)

 Testing:
  o test/regress: cover a polling of invalid fd (cb0df5c Tim Hentenaar)

 Code Improvements (bufferevent_openssl)
  o Make it build using OpenSSL 1.1.0 (3e9e0a0 Kurt Roeckx)
  o Don't call BIO_number_{read|written} on NULL BIOs. (6702da1 Adam Langley)
  o Switch from a 512 to 2048-bit RSA key. (f9803a6 Adam Langley)

 Trivial fixes:
  o Ignore temporary configure files (8fb08ae Azat Khuzhin)
  o README.md: fix typo: ar -> are (2361616 Simone Basso)
  o be: just a simple mistake, reinclude the <errno.h> (7521664 Seven)

Changes in version 2.1.6-beta (4 July 2016)

 Libevent 2.1.6-beta contains mostly bug fixes (evbuffers, evthread, evdns,
 bufferevents, core, http, samples), improvements but mostly to fix some
 possible issues (EVHTTP_CON_LINGERING_CLOSE), a lot of new unit tests and new
 appveyor integration.

 Security Fixes (utils)
   o evutil_parse_sockaddr_port(): fix buffer overflow (329acc1 Azat Khuzhin)

 Security Fixes (evdns)
   o evdns: name_parse(): fix remote stack overread (96f64a0 Azat Khuzhin)
   o evdns: fix searching empty hostnames (ec65c42 Azat Khuzhin)

 New APIs (evdns)
   o New function to get address for nameserver. (537177d Nick Mathewson)

 New APIs (bufferevents)
   o expose bufferevent_incref/decref (with fewer modifications) (1ed6718\
 Mark Ellzey)

 New APIs (internal)
   o evdns: export cancel via callbacks in util (like async lib core/extra\
 issues) (8cbe65d Azat Khuzhin)

 New APIs/Improvements (http)
   o http: take EVHTTP_CON_LINGERING_CLOSE into account for "Expect:\
 100-Continue" (ac448a7 Azat Khuzhin)
   o http: lingering close (like nginx have) for entity-too-large (9fde518\
 Azat Khuzhin)
   o http: read server response even after server closed the connection\
 (680742e Azat Khuzhin)
   o http: export evhttp_connection_set_family() (714fc70 Azat Khuzhin)
   o http: reuse connected address only with EVHTTP_CON_REUSE_CONNECTED_ADDR\
 (a50f5f0 Azat Khuzhin)
   o http: use IP address that we got before (if any) during retrying\
 (54c887d Azat Khuzhin)

 Bugfixes (core)
   o Fix getaddrinfo under solaris (for multiprotocol case) (40730ae Azat\
 Khuzhin)
   o Check for Mac OS X 10.4 kqueue bug properly (df6f99e Mark Mentovai)
   o event_reinit: make signals works after fork() without evsig_add()\
 (88640aa Nicholas Marriott)
   o event_reinit: always re-init signal's socketpair (ad0c237 Nicholas\
 Marriott)
   o Free event queues even for recursive finalizers (7c8d015 Azat Khuzhin)
   o Fix checking for make_base_notifiable() (f337296 Azat Khuzhin)
   o Set correct socklen for PF_INET6 sockaddr len (3499ad9 Mark Ellzey)
   o Fix garbage value in socketpair util function, stdint? (043ae74 Mark\
 Ellzey)
   o fix the return value of event_deferred_cb_schedule_ (38cef64 Greg Hazel)
   o event_free_debug_globals_locks(): disable lock debugging (e5c87d1 Azat\
 Khuzhin)
   o event: call event_disable_debug_mode() in libevent_global_shutdown()\
 (941faae Azat Khuzhin)
   o ht-internal: don't reset hth_table_length explicitly in name_##HT_CLEAR\
 (597c7b2 Azat Khuzhin)

 Bugfixes (evthread)
   o evthread: fix evthread_setup_global_lock_() for debug-lock with a\
 real-lock case (e4556fc Azat Khuzhin)
   o evthread: evthreadimpl_disable_lock_debugging_() for libevent_global_shu\
tdown() (ccc5593 Azat Khuzhin)

 Bugfixes (evdns)
   o evdns: avoid double-free in evdns_base_free() for probing requests\
 (4db15e0 Azat Khuzhin)
   o evdns: evdns_base_free(): fix UAF of evdns_base with @fail_requests\
 (00313c5 Azat Khuzhin)
   o evdns: evdns_base_free(): free requests before namservers (14f84bb Azat\
 Khuzhin)
   o evdns: fix randomize-case by make case-insensitive as required (9c238de\
 Azat Khuzhin)

 Bugfixes (bufferevents)
   o be_sock: handle readv() returns ECONNREFUSED (freebsd 9.2) (3189eb0 Azat\
 Khuzhin)
   o be_filter: avoid data stuck under active watermarks (b627ad8 Eduardo\
 Panisset)
   o Fix bufferevent_pair to properly set BEV_EVENT_{READING,WRITING} on\
 flush. (2851889 David Paschich)
   o be_openssl: clear all pending errors before SSL_*() calls (38e0f4a Azat\
 Khuzhin)
   o be_sock: cancel in-progress dns requests (86dfd2c Azat Khuzhin)
   o be_sock: unfreeze buffers on fd changing (255525d Azat Khuzhin)
   o be_sock: bufferevent_socket_connect_hostname(): make it thread-safe\
 (809bb39 Azat Khuzhin)
   o be_openssl: don't call do_write() directly from outbuf_cb (da52933 Azat\
 Khuzhin)
   o be_openssl: use bufferevent_enable() instead of bufferevent_add_event_()\
 (0c66d32 Azat Khuzhin)
   o be_openssl: don't add events during bev creation (like be_sock) (f4b6284\
 Azat Khuzhin)
   o Fix lock leak in be_pair_flush() if flush type is BEV_NORMAL (f45d39d\
 Bill Vaughan)
   o be_openssl: don't use *_auto() in do_handshake() we can't have fd == -1\
 there (877280d Azat Khuzhin)
   o be_openssl: don't call set_open_callbacks() if fd == -1 (e8a2da9 Azat\
 Khuzhin)
   o be_openssl: get rid off hackish "fd_is_set", to fix some corner cases\
 (40b0379 Azat Khuzhin)
   o be: we don't need to use getpeername() we we have conn_address (2c271e2\
 Azat Khuzhin)
   o Call underlying bev ctrl SET_FD on filtered bufferevents (c2aa7dc Mark\
 Ellzey)
   o be_pair: release shared lock with the latest of bufferevent_pair\
 (92a359e Azat Khuzhin)

 Bugfixes (http)
   o [Issue #313] set method to ASCII "NULL" if evhttp_method() returns NULL\
 (17cc636 Mark Ellzey)
   o evhttp_have_expect(): fix -Wlogical-not-parentheses (24b5214 Azat\
 Khuzhin)
   o http: set fd to -1 unconditioally, to avoid leaking of DNS requests\
 (7a4b472 Azat Khuzhin)
   o http: avoid leaking of fd in evhttp_connection_free() (f0e1341 Azat\
 Khuzhin)
   o http: get fd from be layer during connection reset (4a53c54 Azat Khuzhin)
   o http: fix EVHTTP_CON_READ_ON_WRITE_ERROR when it doesn't supported by OS\
 (2ff164a Azat Khuzhin)
   o http: do not do function calls under EVUTIL_ASSERT() to fix NDEBUG\
 builds (7c89999 Azat Khuzhin)
   o http: fix leaking of response_code_line (8f18a62 Azat Khuzhin)
   o http: fix "Expect: 100-continue" client side (0b46b39 Azat Khuzhin)
   o http: fix conflicts EVHTTP_CON_AUTOFREE and EVHTTP_CON_REUSE_CONNECTED_A\
DDR (4dc0979 Azat Khuzhin)
   o http: avoid epoll_ctl() on already closed fd (triggers by\
 http/chunk_out) (ab3bc69 Azat Khuzhin)
   o http: install timeout for read too during connect for ssl (040000d Azat\
 Khuzhin)
   o http: fix evhttp_request_own() by checking EVHTTP_USER_OWNED in more\
 cases (b0d3964 Azat Khuzhin)
   o http: fix detecting EOF without write (7ed02ac Azat Khuzhin)
   o evhttp: Fix failure to send all output data for POST/PUT requests\
 (24eea0d John Ohl)
   o Fix evhttp_uriencode() regression. (c6b1ec1 Mark Ellzey)
   o removed unused vars (e94250c Mark Ellzey)
   o pointer overflow checks for evhttp_uriencode (72afe4c Zonr Chang)

 Bugfixes (evbuffers)
   o buffer: fix overflow check in evbuffer_expand_singlechain() (a3f4ccd\
 Azat Khuzhin)
   o buffer: evbuffer_add_buffer(): clean empty chains from destination\
 buffer (26fd932 Azat Khuzhin)
   o Fix n_add_for_cb in evbuffer_prepend() in case of new buffer required\
 (0abd039 Azat Khuzhin)
   o be_filter: actually disable output_filter during processing output\
 (c031215 Simon Perreault)
   o evbuffer_add: Use last_with_datap if set, not last. (a8769ef Marcus\
 Sundberg)
   o EVBUFFER_PTR_SET -> EVBUFFER_PTR_ADD (8674e4f jer-gentoo)

 Bugfixes (evconnlistener)
   o listener: unlock lev on error in listener_read_cb() (2a71b33 Azat\
 Khuzhin)
   o Fix potential fd leak in listener_read_cb() (a695a72 Mark Ellzey)

 Testing
   o tests: use waitpid(..., WNOWAIT) to fix failing of main/fork under\
 solaris (43eb56c Azat Khuzhin)
   o test: replace sleeping with syncing pair in main/fork (16d220c Azat\
 Khuzhin)
   o test/http: do not run tests that based on backlog filling (freebsd)\
 (500b6b7 Azat Khuzhin)
   o test/bufferevent/iocp: fix test name for "bufferevent_connect_fail_event\
cb" (4410e9d Azat Khuzhin)
   o test/ssl: use send()/recv()/EVUTIL_ERR_RW_RETRIABLE()/EVUTIL_SOCKET_ERRO\
R() to fix win32 (a9e8cd6 Azat Khuzhin)
   o test/https_basic: increase timeout for complete write (fixes win32)\
 (d5a2f2f Azat Khuzhin)
   o test: fix building with --disable-thread-support under win32 (a487706\
 Azat Khuzhin)
   o test/buffer: evbuffer_add_buffer() with empty chains (a272bc4 Azat\
 Khuzhin)
   o test/buffer: evbuffer_remove_buffer() with empty chains (prepend)\
 (f0cfa14 Azat Khuzhin)
   o test/buffer: evbuffer_remove_buffer() with empty chains\
 (evbuffer_add_buffer()) (2880ce6 Azat Khuzhin)
   o test/buffer: cover evbuffer_expand() for overflow (48dab7a Azat Khuzhin)
   o test/be_filter: creating test case for data stuck with active watermarks\
 (766194b Eduardo Panisset)
   o test/http: avoid using conditionals with omitted operands (fixes VS2015)\
 (2a4bf29 Azat Khuzhin)
   o test/http: don't mix declarations and code (fixes -Wdeclaration-after-st\
atement) (aabf1c2 Azat Khuzhin)
   o test/buffer: fix leak in test_evbuffer_prepend() (c08d90b Azat Khuzhin)
   o test/buffer: avoid errors with --no-fork (reinitialize static vars)\
 (e7d1e39 Azat Khuzhin)
   o test/buffer: cover n_add_for_cb when evbuffer_prepend() need to allocate\
 buffer (e77ff41 Azat Khuzhin)
   o test/tinytest_macros: add new one tt_nstr_op() (bd19a28 Azat Khuzhin)
   o test/bufferevent: check that output_filter disabled during processing\
 output (ae28812 Azat Khuzhin)
   o test/listener: regression for missing unlock in listener_read_cb()\
 (7d85651 Azat Khuzhin)
   o test/regress: add tests for evbuffer_add() breakage on empty last chain\
 (d5ee739 Marcus Sundberg)
   o test/http: fix running some tests sequential (with --no-fork) (bddad71\
 Azat Khuzhin)
   o test/http: localize evhttp server structure (cbc3209 Azat Khuzhin)
   o test/dns: regression for empty hostname (d7348ba Azat Khuzhin)
   o test/http: fix SERVER_TIMEOUT tests under win32 (d49a658 Azat Khuzhin)
   o test/http: add a helper for creating timedout/failed request (376f107\
 Azat Khuzhin)
   o test/http: adopt for C90 (mixed code and declarations) (d02a285 Azat\
 Khuzhin)
   o test/http: cover NS timed out during request cancellations separatelly\
 (0c343af Azat Khuzhin)
   o test/http: request cancellation with resolving/{conn,write}-timeouts in\
 progress (334340d Azat Khuzhin)
   o test/http: exit from the loop in the errorcb to wait cancellation\
 (927ab33 Azat Khuzhin)
   o regress_clean_dnsserver(): reset global port vars (351207f Azat Khuzhin)
   o test/http: read_on_write_error: fix it for win32 (3b58169 Azat Khuzhin)
   o test/http: separate coverage for EVHTTP_CON_READ_ON_WRITE_ERROR (5c2b4c1\
 Azat Khuzhin)
   o test/http: cover "Expect: 100-continue" client-server interaction\
 (31d8116 Azat Khuzhin)
   o test/http: *lingering tests shouldn't have "Expect: 100-continue"\
 (ed469ab Azat Khuzhin)
   o test: use EVUTIL_SHUT_WR (04fc82f Azat Khuzhin)
   o test/http: avoid huge stack allocations to fix win32 builds (3166765\
 Azat Khuzhin)
   o test: http/lingering_close: cover EVHTTP_SERVER_LINGERING_CLOSE (e122ca1\
 Azat Khuzhin)
   o test: http/non_lingering_close: cover ~EVHTTP_SERVER_LINGERING_CLOSE\
 (f41e1b0 Azat Khuzhin)
   o test: http/*: update expected HTTP codes for body exceeds\
 `max_body_size` (addf2b9 Azat Khuzhin)
   o test: http/data_length_constrains: set EVHTTP_CON_READ_ON_WRITE_ERROR\
 (d38a723 Azat Khuzhin)
   o test: increase buffer size for http/data_length_constraints to trigger\
 EPIPE (0792e1e Azat Khuzhin)
   o test/tinytest_demo: include <windows.h> for win32 to fix tdm-gcc\
 (f062bbe Azat Khuzhin)
   o test/regress: cover event_del() waiting mechanism (5b58b70 Azat Khuzhin)
   o test/regress: cover existing signal callbacks and fork() +\
 event_reinit() (ceddc60 Azat Khuzhin)
   o test/regress: cover signals after fork() + event_reinit() (b075b81 Azat\
 Khuzhin)
   o test/regress: main/fork: rewrite assertions by just removing event in\
 callback (088d8b3 Azat Khuzhin)
   o test/dns: check exit code of evdns_getaddrinfo() (0b9d432 Azat Khuzhin)
   o test/dns: cover evdns_getaddrinfo() and evdns_base_free() with\
 @fail_requests (4ad3483 Azat Khuzhin)
   o test/dns: cover @fail_requests for evdns_base_free() (d6c6fb4 Azat\
 Khuzhin)
   o test/dns: more graceful coverage of @fail_requests (123d372 Azat Khuzhin)
   o test/ssl: cover busy-loop (i.e. {read,write}-blocked-on-{write,read}\
 stuff) (da0ea7a Azat Khuzhin)
   o test/http: write_during_read for https (23c77b6 Azat Khuzhin)
   o test/http: connection_fail for https (7ea26f7 Azat Khuzhin)
   o test/http: stream_out for https (ac04968 Azat Khuzhin)
   o test/http: chunk_out for https (a71ffb9 Azat Khuzhin)
   o test/regress: fix ssl-less builds (need to make this prettier) (3160716\
 Azat Khuzhin)
   o test/http: allow dirty shutdown for ssl to fix https_incomplete (1ede326\
 Azat Khuzhin)
   o test/http: https basic (59714b4 Azat Khuzhin)
   o test/http: incomplete{,_timeout} for https (615490d Azat Khuzhin)
   o test/http: add simplest test for http/https/https_dirty_shutdown\
 (93b19dc Azat Khuzhin)
   o test/http: https: retry coverage (7c2d24a Azat Khuzhin)
   o test/http: https server support (plus some helpers) (a7088ad Azat\
 Khuzhin)
   o test/http: more sanity checks (a27c53c Azat Khuzhin)
   o test/ssl: export getkey()/getcert()/get_ssl_ctx()/init_ssl() for https\
 (0c4c387 Azat Khuzhin)
   o test/regress_be: basic coverage bufferevent_flush() for pair/sock layers\
 (ad52602 Azat Khuzhin)
   o test/regress_be: socket_filter_inactive: check bufferevent after\
 creation (f8081af Azat Khuzhin)
   o test/regress_be: cover finalizers from inactive to active queue (337684b\
 Azat Khuzhin)
   o test/regress_buffer: fix clang compilation warnings (d8fd4c0 Azat\
 Khuzhin)
   o test/regress_http: fix compilation warnings (-Wmissing-field-initializer\
s) (cd422e0 Azat Khuzhin)
   o test/regress_dns: fix compilation warnings (-Wmissing-field-initializers\
/for) (f55db98 Azat Khuzhin)
   o tests/regress_dns: cover that randomize-case works case-insensitive\
 (1e8bfbc Azat Khuzhin)
   o test: fix bufferevent/bufferevent_pair_release_lock in debug mode\
 (3f749e9 Azat Khuzhin)
   o test: fix bufferevent/bufferevent_pair_release_lock for freebsd (79f9ace\
 Azat Khuzhin)
   o test/regress_be: bufferevent_enable() shouldn't call eventcb by it's own\
 (a0f308d Azat Khuzhin)
   o test/regress_be: introduce fake_listener_create() (37dc9e0 Azat Khuzhin)
   o test/regress_http: cover evhttp_request_own() (6f6fa0d Azat Khuzhin)
   o test/regress_http: cover write during read (3d15aeb Azat Khuzhin)
   o test/regress_http: verify that closecb will be called without multiple\
 write (4be6c70 Azat Khuzhin)
   o test/regress: fix bufferevent_pair_release_lock with EVENT_DEBUG_MODE\
 (6ea6655 Azat Khuzhin)
   o test/regress_ssl: check events fd/pending after timeout triggered\
 (cdafdf0 Azat Khuzhin)
   o test/regress_ssl: cover case when server didn't up (failed with timeout)\
 (74845f1 Azat Khuzhin)
   o test/regress_ssl: covert that we can't change fd with underlying\
 (df507af Azat Khuzhin)
   o test/regress_ssl: cover that events (read/write) at finish not pending\
 (762edb4 Azat Khuzhin)
   o test/regress_ssl: cover fd manipulations (b78a829 Azat Khuzhin)
   o test/regress_ssl: convert open_ssl_bufevs() to mask (46bba73 Azat\
 Khuzhin)
   o test/regress_ssl: convert client/server to mask too (3455991 Azat\
 Khuzhin)
   o test/regress_ssl: cover "allow_dirty_shutdown" (0430327 Azat Khuzhin)
   o test/regress_ssl: convert regress_bufferevent_openssl() to bitmask\
 (342e116 Azat Khuzhin)
   o tests/regress_ssl: drop duplicated assert (25e56fd Azat Khuzhin)
   o test/regress_http: initialize "dns_base" to avoid reading trash (9f0bff3\
 Azat Khuzhin)
   o test/http: cover retrying with saved conn_address by shutting down dns\
 server (f4874d8 Azat Khuzhin)
   o be_pair/regress: cover use of shared lock (lock/unlock/free) (a558fcd\
 Azat Khuzhin)
   o regress_dns: drop hack for event_debug_map_HT_GROW in leak tests\
 (3540a19 Azat Khuzhin)

 Sample code
   o Fix memory leak in signal-test.c (666db91 basavesh.as)
   o sample/hello-world: exAmple, not eXMple (2d3cd35 kirillDanshin)
   o dns-example: allow to set ns from args (df19a97 Azat Khuzhin)
   o dns-example: convert to getopt() (32f8592 Azat Khuzhin)
   o http-connect: make it win32 compilable (1bf7595 Azat Khuzhin)
   o sample/https-client: allow to change path to ca-certificates (fdf713a\
 Azat Khuzhin)
   o sample/https-client: check for ERR_remove_thread_state() existence\
 (c4e9d9b Azat Khuzhin)
   o sample/https-client: replace ERR_remove_state() by ERR_remove_thread_sta\
te() (77ad68a Azat Khuzhin)
   o sample/https-client: add -timeout option (4637aa8 Azat Khuzhin)
   o sample/https-client: don't try to free uninitialized SSL (f3d7ff5 Azat\
 Khuzhin)
   o sample/https-client: graceful exit with freeing memory (to make valgrind\
 happy) (24a1f25 Azat Khuzhin)
   o https-client: correctly handle URLs with no path (like\
 "https://host:port") (29a0482 Andrey Skriabin)
   o sample/http-connect: don't use assert() to make it work with NDEBUG\
 (6dc71e7 Azat Khuzhin)
   o sample/http-connect: made it compatible with C90 (f976d43 Azat Khuzhin)
   o sample: add HTTP CONNECT tunnelling example using libevent http layer\
 (1d34498 Azat Khuzhin)
   o Update dns-example. (620ff24 Mark Ellzey)

 Documentation
   o Update README.md (b8ec70c Mark Ellzey)
   o Update README.md (80faee9 Mark Ellzey)
   o Update README.md (ad4a897 Mark Ellzey)
   o Update README.md (a2b2e1e Mark Ellzey)
   o Update README.md (0dfa5dc Mark Ellzey)

 Code Improvements (evthread)
   o evthread: add evthread_get_{lock,condition}_callbacks() helpers (c0b34f6\
 Azat Khuzhin)

 Code Improvements (core)
   o util: make @sa const for evutil_socket_connect_() (a8d32c2 Azat Khuzhin)

 Code Improvements (http)
   o http: assert's that evbuffer_drain() success on connection reset\
 (2185e63 Azat Khuzhin)
   o http: introduce evhttp_request_free_() helper (22061ac Azat Khuzhin)
   o http: introduce evhttp_is_request_connection_close() helper (6540da3\
 Azat Khuzhin)

 Code Improvements (bufferevents)
   o be_sock: bufferevent_socket_set_conn_address(): assert instead of silent\
 no-op (0ab88c2 Azat Khuzhin)
   o be_sock: sanity check in bufferevent_socket_set_conn_address() (eedbeff\
 Azat Khuzhin)
   o be: replace sockaddr_storage with sockaddr_in6 for conn_address (3889612\
 Azat Khuzhin)
   o be: replace conn_address by full struct instead of pointer (e5615aa Azat\
 Khuzhin)
   o bufferevent: move conn_address out from http into bufferevent (8bb3842\
 Azat Khuzhin)
   o be: make @sa const for bufferevent_socket_connect() (dc33c78 Azat\
 Khuzhin)

 Cleanups (core)
   o Refactoring conditional directives that break parts of statements.\
 (4b41eeb lzmths)
   o epoll: introduce PRINT_CHANGES() macro to avoid copy-pasting (a1b142b\
 Azat Khuzhin)
   o tab (6e7a580 Greg Hazel)

 Cleanups (evbuffers)
   o buffer_compat: fix comment -- we have EVBUFFER_EOL_ANY not EOL_STYLE_ANY\
 (575ff67 Azat Khuzhin)

 Cleanups (bufferevents)
   o be_sock: evutil_getaddrinfo_async_() always return 0 (dbff101 Azat\
 Khuzhin)
   o be_sock: drop be_sock_add() macro (useless and debug unfriendly)\
 (fad5fe2 Azat Khuzhin)
   o be: introduce bufferevent_generic_adj_existing_timeouts_() (3c1f58f Azat\
 Khuzhin)
   o be: add_event: use evutil_timerisset() (a96b73b Azat Khuzhin)
   o be_openssl: introduce be_openssl_auto_fd() helper (2a8a711 Azat Khuzhin)
   o be_openssl: introduce set_open_callbacks_auto() (510da71 Azat Khuzhin)

 Cleanups (http)
   o http: make fallback for EVHTTP_CON_READ_ON_WRITE_ERROR more cleaner\
 (d405492 Azat Khuzhin)
   o http: coding style issue (365f181 Azat Khuzhin)

 Cleanups (evdns)
   o evnds: inline TEST_NAME macro to make debuggin easier (0c615f4 Azat\
 Khuzhin)

 Portability Fixes
   o [#372] check for errno.h (3031617 Mark Ellzey)
   o Fixed Unicode issue in error messages. (e8b7895 Mattes D)
   o Assume that ke_udata is an integer type on CloudABI. (5602e45 Ed\
 Schouten)
   o Add missing include of <netinet/in.h>. (b2c68bc Ed Schouten)
   o Include <sys/ioctl.h>, <sys/resource.h> and <sys/wait.h> optionally.\
 (c1404b5 Ed Schouten)
   o Test against SO_REUSEADDR (along with _WIN32). (ce1776c Ed Schouten)
   o Always define missing TAILQ functions from sys/queue.h (2828bdb\
 Christopher Wiley)
   o Don't use BSD u_* types. (fd36647 Ed Schouten)
   o Remove BSD-ism: TIMEVAL_TO_TIMESPEC(). (193c7de Ed Schouten)
   o be: include all variations of headers for sockaddr_in6 struct (c212291\
 Azat Khuzhin)
   o be: fix sockaddr_in6 type definition for win32 (c42bc6b Azat Khuzhin)

 Continious Integration:
   o travis: split long lines, and make it cleaner (685a6a1 Azat Khuzhin)
   o travis: fix autotools on osx by reinstalling libtool (088ea5e Azat\
 Khuzhin)
   o appveyor/autotools: link with openssl by passing LDFLAGS/CFLAGS (6fcfa25\
 Azat Khuzhin)
   o appveyor: image already had openssl installed (4634b85 Azat Khuzhin)
   o appveyor: check -DUNICODE -D_UNICODE according to ReleaseChecklist\
 (cmake only) (e9acc44 Azat Khuzhin)
   o appveyor: ignore failure of mingw-get (1810857 Azat Khuzhin)
   o appveyor: drop shallow_clone, since we use tags for detecting version in\
 cmake (ac90133 Azat Khuzhin)
   o appveyor: support cmake & autotools using build matrix (like travis-ci\
 has) (8f95015 Azat Khuzhin)
   o travis-ci/osx: relink gcc/g++ instead of clang (481481d Azat Khuzhin)
   o travis-ci: enable multi-os mode (osx, linux) (79917e4 Azat Khuzhin)
   o travis-ci: increase matrix (--disable-foo) (59649f7 Azat Khuzhin)
   o travis-ci: adjust alignment (c8be339 Azat Khuzhin)
   o travis: add builds without debug mode into matrix (3e56da2 Azat Khuzhin)
   o test: run regress with EVENT_DEBUG_MODE=1 and without (cf2cf2a Azat\
 Khuzhin)
   o Update travis config for status updates (37453ab Mark Ellzey)
   o Use autotools for appveyor until cmake is fixed. (1cc2e29 Mark Ellzey)
   o Fix the link for appveyor OpenSSL installer (WIN32) (107d565 Mark Ellzey)
   o Forgot to install OpenSSL for appveyor (26164a5 Joakim Söderberg)
   o Add support for appveyor.com windows CI (5f89c37 Joakim Söderberg)

 Build Improvements/Fixes:
   o evutil: mark ai_find_protocol() static (prototype-less) (5a157c8 Azat\
 Khuzhin)
   o cmake/solaris: set CMAKE_REQUIRED_LIBRARIES to fix functions detections\
 (dc95823 Azat Khuzhin)
   o cmake/solaris: fix building (link with socket,nsl) (050bfc7 Azat Khuzhin)
   o cmake: check for ZLIB_INCLUDE_DIR, since we can have only library\
 without headers (c4dfb93 Azat Khuzhin)
   o autotools/win32: fix searching ssl library (671a24f Azat Khuzhin)
   o cmake/win32: do not compile regress_thread on -DEVENT__DISABLE_THREAD_SU\
PPORT=ON (de0c196 Azat Khuzhin)
   o cmake/win32: do not compile evthread_win32 on -DEVENT__DISABLE_THREAD_SU\
PPORT=ON (ecb0ec8 Azat Khuzhin)
   o cmake: fix -DEVENT__ENABLE_VERBOSE_DEBUG (typo on -DUSE_DEBUG) (e35f224\
 Azat Khuzhin)
   o cmake: do not use stderr for notifications/version-info (38716c6 Azat\
 Khuzhin)
   o autoconf: fix --disable-thread-support build under win32 (bb09535 Azat\
 Khuzhin)
   o buffer: don't mix code and declarations (8892f4c Azat Khuzhin)
   o Update gitignore file to ignore cscope gen'ed files (0aaa4fb Neeraj\
 Badlani)
   o For non GCC/clang on OSX the -Wno-deprecated-declarations may not be\
 valid (b5ca365 Rainer Keller)
   o automake: define serial-tests only if automake have this option (61179de\
 Azat Khuzhin)
   o test/automake: don't use paralell test harness (since automake 1.12)\
 (44d755e Azat Khuzhin)
   o Ignore all pkgconfig generated stuff (ce38993 Azat Khuzhin)
   o libevent_core and libevent_extra also deserve a pkgconfig file (b8d7c62\
 Jan Heylen)
   o Ignore verify_tests.bat (win32 version) (0f2de10 Azat Khuzhin)
   o cmake: require 3.1 only for win32 to make it work under ubunty precise\
 (87f7238 Azat Khuzhin)
   o cmake: require at least 3.1 for target_sources() (c46ead5 Azat Khuzhin)
   o cmake: fix adding of compiler flags, and now it will (36588e1 Azat\
 Khuzhin)
   o Replace -Wswitch-enum with -Wswitch, and add it into cmake rules too\
 (f29f59e Azat Khuzhin)
   o test/regress_ssl: Fix compile problems for win32 (73d0360 Trond Norbye)
   o util: fix "%zu" format on TDM-gcc/MinGW-w64 (79b69d8 Azat Khuzhin)
   o cmake: don't define EVENT__NEED_DLLIMPORT always (fixes VS2013 static\
 build) (49bd790 Azat Khuzhin)
   o Add missing return statement to del_wait_thread so libevent can build.\
 (4f778ab Nick Mathewson)
   o cmake: fix building dns-example under win32 (missing getopt) (a1609a8\
 Azat Khuzhin)
   o visibility: align it to make it more readable (bb6b53d Azat Khuzhin)
   o cmake: Fix detection of ssize_t/SSIZE_T (7707f6b Azat Khuzhin)
   o Ignore more configure stuff (configure.lineno) (8d34302 Azat Khuzhin)
   o Fixed issue with cmake version generation (d56efd9 Mark Ellzey)
   o Cmake is now officially working. (7f9646d Mark Ellzey)
   o More cmake updates, lot's of missing definitions (49a5381 Mark Ellzey)
   o CMake syntax fixes fo .in files (6aad23d Mark Ellzey)
   o Revert "The Windows socket type is defined as SOCKET." (a264da8 Mark\
 Ellzey)
   o CMAKE CMAKE CMAKE CLEANUPS (a9db46a Mark Ellzey)
   o Lot's of cmake updates (8b228e2 Mark Ellzey)
   o Provide a mechanism for building the library on Windows with different\
 compiler flags. Add a batch file that builds it for the M[DT][d] options and\
 performs a hunt and gather of the different output libraries. (ded8086\
 billsegall)
   o The Windows socket type is defined as SOCKET. (c9e6c3d billsegall)
   o autotools: fix getservbyname() detection (959a4c2 Azat Khuzhin)
   o Add missing <string.h> for openssl_hostname_validation module (3316a21\
 Azat Khuzhin)
   o make test/regress_ssl.c compile without warnings (9f02a44 Thomas Bernard)
   o test/regress_be: drop debug __asm__(int3) to fix arm build (8240379 Azat\
 Khuzhin)
   o event_debug_created_threadable_ctx_: fix compilation without debug mode\
 (a068f2e Azat Khuzhin)
   o Add a prototype for event_disable_debug_mode() (bfcedee Sebastian Hahn)
   o http: eliminate warning about "socklen" in evhttp_connection_connect_()\
 (dfad1a4 Azat Khuzhin)
   o Updated gitignore (1dbb55d Mark Ellzey)
   o Update bench_httpclient.c (cb96931 Seungmo Koo)
   o *fix: bench_httpclient to support win32 (4e9325e zeliard)
   o Commented out a WIN32 threading / timing test for now (e84e269 Mark\
 Ellzey)
   o Fix mixed declarations and code (forbidden by ISO C90) (0c7f217 Thomas\
 Bernard)
   o Fix "function declaration isn’t a prototype" (746d2c5 Thomas Bernard)
   o This fixes a bug introduced in 27bd9faf498b91923296cc91643e03ec4055c230\
 (19ba454 Joakim Söderberg)
   o changed strtotimeval signature as per #211 (bdbc823 Xiao Bao Clark)
   o Added cmake-generated files to ignore list. (6c12bfe Matyas Dolak)
   o Ignore `make dist` generated files (8a2c6c7 Azat Khuzhin)

  Debugging
   o Debug mode option to error on evthread init AFTER other event calls.\
 (dcfb19a Mark Ellzey)



Changes in version 2.1.5-beta (5 January 2015)

 Security Fixes (evbuffers)
   o Avoid integer overflow bugs in evbuffer_add() and related functions. \
 See CVE-2014-6272 advisory for more information. (d49bc0e88b81a5812116074dc0\
07f1db0ca1eecd)

 New APIs (evconnlistener)
   o Provide support for SO_REUSEPORT through LEV_OPT_REUSABLE_PORT (b625361\
 Maciej Soltysiak)

 Bugfixes (core)
    o Fix use-after-free error in EV_CLOSURE_EVENT callback (3cc0eac John Ohl)
    o Fix race caused by event_active (3c7d6fc vjpai)

 Bugfixes (evbuffer)
   o Fix evbuffer_peek() with len==-1 and start_at non-NULL. (ba59923)
   o Consistently check for failure from evbuffer_pullup() (60f8f72)
   o Fix evbuffer_peek() with len==-1 and start_at non-NULL. (fb7e76a)

 Bugfixes (windows, IOCP)
   o be async: avoid double close() (f133b86 Azat Khuzhin)

 Bugfixes (bufferevents)
   o Fix issue #127, double free for filterevents that use\
 BEV_OPT_CLOSE_ON_FREE (2c82aa0 John Ohl)
   o make bufferevent_getwatermark api more robust (a21e510 ufo2243)
   o [Bugfix] fix bufferevent setwatermark suspend_read (b34e4ac ufo2243)
   o bufferevent_openssl: reset fd_is_set when setfd with -1 is called\
 (3da84c2 Azat Khuzhin)
   o Fix compilation for older OpenSSL versions. (5c7282f Joakim Soderberg)

 New APIs (evhttp)
   o Add evhttp_connection_set_family() to set addrinfo->family for DNS\
 requests (12c29b0 Azat Khuzhin)
   o Implement interface that provides the ability to have an outbound\
 evhttp_connection free itself once all requests have completed\
 (2b9ec4c,10fe4f John Ohl)

 New APIs (core)
   o Implement new/free for struct evutil_monotonic_timer and export\
 monotonic time functions (f2645f8 Andrea Shepard)

 Bugfixes (evdns)
   o Load hosts file on Windows. (a0b247c Vilmos Nebehaj)
   o Don't truncate hosts file path on Windows. (d0dc861 Vilmos Nebehaj)
   o Fix a crash in evdns related to shutting down evdns (9f39c88,e8fe749)
   o evdns: avoid read-after-free in evdns_request_timeout_callback()\
 (61262a0 Azat Khuzhin)
   o Correctly handle allocation failures in evdns_getaddrinfo (6a53d15)
   o evdns: fix EVDNS_BASE_DISABLE_WHEN_INACTIVE in case retransmit/retry\
 (74d0eee Azat Khuzhin)
   o evdns: add retry/reissue tests for EVDNS_BASE_DISABLE_WHEN_INACTIVE\
 (3ca9d43 Azat Khuzhin)
   o evdns: fail ns after we are failing/retrasmitting request (97c750d Azat\
 Khuzhin)

 Bugfixes (evhttp)
   o http: reset connection before installing retry timer (fix http retries\
 handling) (bc79cc5 Azat Khuzhin)


 Testing
   o regress_dns: fix leaks in getaddrinfo_async{,_cancel_stress} tests\
 (2fdc5f2 Azat Khuzhin)
   o test: add family argument for http_connection_test_() (177b8a7 Azat\
 Khuzhin)
   o test: add regress for evhttp_connection_set_family() with AF_INET and\
 AF_UNSPEC (42aefeb Azat Khuzhin)
   o test/http: add regress test for set family to AF_INET6 (3fbf3cc Azat\
 Khuzhin)
   o Update to a more recent tinytest_macros. (8da5a18)
   o test/regress: add simplestsignal: to track reorder bugs separately\
 (b897bef Azat Khuzhin)
   o test/evbuffer_peek: add regress in case we have first buffer greater\
 (e2d139d Azat Khuzhin)
   o More evbuffer_peek() test cases (154006a)
   o use correct tt macro for pointer compare (08c88ea)
   o regress_buffer: fix 'memcmp' compare size (79800df Maks Naumov)
   o Fix a use-after-free in unit tests. CID 752027 (3739057)
   o Fix a dead-code warning in unit tests. CID 1193548 (c119f24)
   o Use evutil_weakrand() in unit tests. (a677b72, 364c110)
   o Use a more precise calculation for max in time-ratelim.c (ca5b5c7)
   o Make a buffer larger in the tests to avoid a scary evbuffer_copyout_from\
() (fb57b8b)
   o Fix several memory leaks in the unit tests. (89c1a3b)
   o Add test for evhttp_connection_free_on_completion (b0e9924 John Ohl)
   o Fix annoying heisenbug in test-time.c (cb73704)

 Sample code
   o Make http-server.c output into good html5 (6d72bdc)
   o Use FindClose for handle from FindFirstFile in http-server.c (6466e88)
   o https-client: add -retries argument, for connection retries (d9da844\
 Azat Khuzhin)

 Bugfixes (build)
   o Add missing headerfile for cmake (15d90cc Trond Norbye)
   o ignore one more test binary (b6593aa Michael Richardson)
   o ignore config.cache/test-driver files (c83f333 Mike Frysinger)
   o add a --disable-samples configure flag (0c492b3 Mike Frysinger)
   o Add a few files created by "make verify" to .gitignore. (1a8295a Pierre\
 Phaneuf)
   o updates in cmake build (27bd9fa Sergey Nikulov)
   o Fix cmake error when the Module path has more than one entry. (befbd13\
 Acer Yang)
   o Fix CMake shared library build (e69d910 Nobuaki Sukegawa)
   o Fix warnings when compiling with clang 3.5 (f5b4765 John Ohl)
   o Fix mixed declarations and code (forbidden by ISO C90) (8afbdbc Thomas\
 Bernard)

 Bugfixes (miscellaneous)
   o tree.h: drop duplicated content of tree.h (6193187 Azat Khuzhin)
   o evdns: disable probing with EVDNS_BASE_DISABLE_WHEN_INACTIVE\
 (610410b,ad0493e,fea86a6,d83b337,5ca9e97 Azat Khuzhin)
   o [Bugfix] fix grammer error (3a4d249 ufo2243)
   o Change return type of evutil_load_windows_system_library_ to HMODULE\
 (f691389)
   o Fix a c90 warning (76643dd)
   o Fix a typo in a doxygen comment. Reported by 亦得. (be1aeff)
   o remove trailing comma from enum (b361b8a Jean-Philippe Ouellet)

 Bugfixes (FreeBSD)
   o Handle ENOTCAPABLE from FreeBSD - this is returned if an event in the\
 changelist is for an FD that has been closed. (6fd7394 Adrian Chadd)



Changes in version 2.1.4-alpha (21 Mar 2014)

 Libevent 2.1.4-alpha adds a number of new miscellaneous APIs to make
 Libevent more useful, including support for early close detection with
 epoll via EPOLLRDHUP, triggering bufferevent callbacks, adding more
 evhttp callbacks, and more. There are also numerous bugfixes, including
 a number for finalize-related issues from 2.1.3-alpha; and an
 alternative (non-primary!) cmake-based build mechanism.

 New APIs (core)
   o Added event_base_get_num_events() (0fa107d Mobai Zhang)
   o New event_base_active_by_fd API (865a142 Greg Hazel, 5c9da9a, 87fa2b0)
   o Add event_base_active_by_signal by analogy (4865943)
   o Add access to max event count stats (5173bef, efbd3dc, 26230a2
     Andrew Sweeney)
   o Implemented EV_CLOSED event for epoll backend
     (EPOLLRDHUP). (b1b69ac Diego Giagio, 53d2793, 43ffcf6, dfe1e52
     Marcin Juszkiewicz, ff26633 Joakim Soderberg, 3908a5e)

 New APIs (evutil_secure_rng)
   o Add evutil_secure_rng_set_urandom_device_file (2bbb5d7)

 New APIs (bufferevents)
   o Add function to fetch underlying ratelimit cfg (4b3d5af Mark Ellzey)
   o Pass and return const for bufferevent_get_token_bucket_cfg (1c77fbb
     Mark Ellzey)
   o Add watermark introspection (4ce242b Ondřej Kuzník)
   o Add an option to trigger bufferevent I/O callbacks (61ee18b Ondřej\
 Kuzník)
   o Add an option to trigger bufferevent event callbacks (a7384c7
     Ondřej Kuzník)
   o Clarifications in response to merge req. comments (bd41947 Ondřej
     Kuzník)
   o Minor optimizations on bufferevent_trigger options (a3172a4)

 New APIs (evhttp)
   o Add evhttp_connection_get_server(). (a7f82a3 Maxime Henrion)
   o add a http default content type option (5a5acd9 Nicolas Martyanoff)
   o http: implement new evhttp_connection_get_addr() api. (0c7f040 Azat
     Khuzhin)
   o Add a variant of evhttp_send_reply_chunk() with a callback on
     evhttp_write_buffer() (8d8decf Julien BLACHE)
   o Allow registering callback for parsing HTTP headers (b0bd7fe Balint\
 Reczey)
   o Provide on request complete callback facility (b083ca0 Andrew Sweeney)
   o evhttp_request_set_on_complete_cb to be more specific about what
     the function actually does and usage (da86dda Andrew Sweeney)
   o Update unit test to make sure that the callback happens after the
     output data is written (b85f398 Andrew Sweeney)

 Features (evdns)
   o bug fix for issues #293 evdns_base_load_hosts doesn't remove
     outdated addresses (954d2f9, f03d353, 45eba6f Kuldeep Gupta)

 Features: (cmake build support)
   o Initial CMake commit. (e415196 Joakim Soderberg)
   o Add all tests and benchmarks to CMake project. (e9fc014 Joakim Soderberg)
   o More work on adding tests to CMake project (99c1dc3 Joakim Soderberg)
   o Generate a dummy evconfig-private.h so things build
     properly. (ce14def Joakim Soderberg)
   o Link libm on unix platforms. (58fcd42 Joakim Soderberg)
   o Added some GCC specific options. (19222e5 Joakim Soderberg)
   o Use evutil_closesocket instead. (dbf2b51 Joakim Soderberg)
   o Add copyright and licensing files for CMake modules. (c259d53
     Joakim Soderberg)
   o Only include WIN32 getopt where it is used. (9bbce0b Joakim Soderberg)
   o Fix bench_cascade program on Windows. (78da644 Joakim Soderberg)
   o Don't segfault on no found event backend. (8f2af50 Joakim Soderberg)
   o Only test the event backends available on the system. (7ea4159
     Joakim Soderberg)
   o Added a "make verify" target. (e053c4f Joakim Soderberg)
   o Fix the make "verify" target on Windows. (67e5d74 Joakim Soderberg)
   o Get rid of deprecation warnings for OpenSSL on OSX 10.7+ (69c3516
     Joakim Söderberg)
   o Fix kqueue support. (a831f2f Joakim Söderberg)
   o Added a test for testing if kqueue works with pipes. (2799b35
     Joakim Söderberg)
   o Change the BSD license from 4 to 3-clause. (86df3ed Joakim Soderberg)
   o Minimum required python version is 2.4. (968e97b Joakim Soderberg)
   o Get rid of unknown pragma warnings. (0ef1d04 Joakim Soderberg)
   o Add a "make verify_coverage" target generation coverage
     info. (f2483f8 Joakim Soderberg)
   o Fix the "make verify" target on NetBSD (4ac086a Joakim Soderberg)
   o Only look for ZLib when it is used (if tests are
     included). (f780593 Joakim Soderberg)
   o Added EVENT__ENABLE_GCC_WARNINGS, turns all warnings into
     errors. (dd413bd Joakim Soderberg)
   o Add CMake config and install targets. (f3446ed Joakim Soderberg)
   o Fix typo (4b754df Joakim Soderberg)
   o Some work on making it possible to simply do add_subdirectory() on
     the project. (49ab363 Joakim Soderberg)
   o Set USE_DEBUG=1 on EVENT__ENABLE_VERBOSE_DEBUG (fd42e70 Joakim Soderberg)
   o Fix so that old nmake project still builds. (24d6466 Joakim
     Soderberg)
   o Rename README to README.md and use markdown to format. (d2bc39a
     Joakim Soderberg)
   o Update README with CMake build instructions. (604b8cc Joakim Soderberg)
   o Clean up the README some. (8d4cb35 JoakimSoderberg)
   o Forgotten headers for old nmake project compatability. (8697b99
     Joakim Soderberg)
   o Change all uses of WIN32 to _WIN32 (4e14395 Joakim Söderberg)
   o Fix include bug. (2024467 Joakim Söderberg)
   o Check if we're on OSX before disabling deprecation in le-proxy
     (8b40a5b Joakim Söderberg)
   o Fix broken autotools build. (ae1bd82 Joakim Söderberg)
   o Disclaimerize cmake a little in the README (d03b5bf)
   o Fix CMake compile when OpenSSL is disabled. (e423d42 Joakim
     Söderberg)
   o CMake: Get rid of python not found warning when regress tests
     turned off. (d38d798 Joakim Söderberg)
   o Fix https-client compilation on Windows. (d7be788 Joakim Soderberg)
   o Guard against EVENT_NOWIN32 being set during testing. (f1715b4
     Joakim Soderberg)
   o Check for OSX when checking for clang. (e212c54 Joakim Soderberg)
   o Added a Travis-CI configuration file. (8c0f0a9 Joakim Soderberg)
   o Added -Qunused-arguments for clang on macosx (ed99d92 Trond Norbye)
   o Rename event_extras to event_extra (a0dd5df Trond Norbye)
   o Add option to build shared library (4545fa9 Trond Norbye)
   o Add -Qunused-arguments for clang on macos (b56611d Trond Norbye)
   o Add cmake-related files to .gitignore (e061321 Trond Norbye)
   o Export event_extra not event_extras. (2b41bcf Joakim Söderberg)

 Bugfixes (core)
   o If evsel->del() fails, don't leave the evmap in an inconsistent
     state (9b5a527 Maxime Henrion)
   o Move event_debug_note_teardown_ before mm_free. (69b5c64)
   o Check CLOCK_MONOTONIC_* at runtime if needed. (911abf3)
   o Fix reinit of fds with EV_WRITE but not EV_READ. (ebfd8a8 maksqwe)
   o Tweaked callbacks to prevent race condition
     (https://github.com/libevent/libevent/issues/104) (40830f1, 2ea15ed
     John Ohl)
   o Move assert(ev) to before we use ev in EV_CLOSURE_EVENT_FINALIZE
     case (9805972)

 Bugfixes (evhttp)
   o Fix a double close() bug in evhttp when the underlying bufferevent uses
     BEV_OPT_CLOSE_ON_FREE. (31db8a0 Maxime Henrion)
   o Fix an unlikely but possible error case for http connections (f22049e)
   o Avoid racy bufferevent activation (5eb1788 Nate Rosenblum)

 Bugfixes on 2.0 (Windows)
   o Use windows vsnprintf fixup logic on all windows environments (e826f19)
   o libevent/win32_dealloc() : fix sizeof(pointer) vs sizeof(*pointer)
    (b8f5980 Frank Denis)

 Bugfixes (evutil_secure_rng)
   o When we seed from /proc/sys/kernel/random/uuid, count it as success
     (e35b540)
   o We should return after arc4random_buf() (1ea1f26 Makoto Kato)
   o Avoid other RNG initialization FS reads when urandom file is
     specified (9695e9c)
   o Really remove RNG seeds from the stack (f5ced88)
   o Fix another arc4random_buf-related warning (e64a2b0)

 Bugfixes (bufferevents)
   o Initialize async bufferevent timeout CBs unconditionally (af9b2a7)

 Bugfixes (evdns)
   o Checking request nameserver for NULL, before using it. (5c710c0
     Belobrov Andrey)
   o Fix SEGFAULT after evdns_base_resume if no nameservers
     installed. (14971a8 Azat Khuzhin)
   o Actually use the log facility for reporting evdns problems. (e1766a1)
   o Fix SEGFAULT after evdns_base_resume if no nameservers
     installed. (f8d7df8 Azat Khuzhin)
   o fix for ServFail from RIPE Atlas release (62f596b Antony Antony)

 Bugfixes (compilation)
   o Fix test compilation with nmake: add the gdi.lib dependency (5ba8ab7)
   o Whoops. It is gdi.lib, not gdi32.lib. (github issue #61) (8ab612e)
   o Don't use return since return type is void and build error occurs
     using clang (838161d Makoto Kato)
   o Use void casts to suppress some "unchecked return value" warns (7080d55)
   o rpcgen: Generate regress.gen.[c,h] in build rather than src dir
     (243386c Ross Lagerwall)
   o Fix a compiler warning when checking for arc4random_buf linker
     breakage. (5cb3865)
   o Fix 'make distcheck' by adding regress.gen.[ch] to DISTCLEANFILES
    (239d834)

   o Fix a c90 warning (c207682)
   o Fix consts in WIN32-Code/getopt*.[ch] (57abb35)

 Bugfixes (locks, synchronization)
   o Missed lock acquire/release in event_base_cancel_single_callback_()
     (d3d999a Azat Khuzhin)
   o Fix locking in bufferevent_get_options_(). (dbc9cd4 Maxime Henrion)

 Bugfixes (leaks)
   o Avoid leaking segment mappings when offset is not a page multiple\
 (d409514)

 Testing
   o Add tests for evdns_base_resume(). (1cd9ff5 Azat Khuzhin)
   o Fix dns/leak_resume_send_err test. (7e876df Azat Khuzhin)
   o Add checks for evhttp_connection_get_server() in unit
     tests. (fbc323b Maxime Henrion)
   o Fix a (failure-only) null dereference in the unit tests (1104d0b)
   o Fix a logic error in test_evbuffer_freeze (7765884)
   o Add missing check to test_evbuffer_file_segment_add_cleanup_cb (eba4506)
   o Fix some crash-on-fail cases in DNS regression tests (87cd6f0)
   o DNS tests: add a missing check (f314900)
   o Finalize tests: add a missing check (82b6956)
   o test_evutil_rtrim: add another missing check. (e193c95)
   o regress_main: logging all if env EVENT_DEBUG_LOGGING_ALL isset
     (611e28b Azat Khuzhin)
   o regress_http: add tests for evhttp_connection_get_addr() (4dd500c
     Azat Khuzhin)
   o Update to the latest version of tinytest (7a80476)
   o Heap-allocate zlib data structure in regress_zlib tests (4947c18)

 Performance tweaks (core)
   o Avoid redundant syscall to make a nonblocking socket nonblocking
     (42c03da Maxime Henrion)
   o Avoid redundant syscall if making a socket cloexec twice (1f29b18)
   o Avoid redundant invocations of init_extension_functions for IOCP\
 (3b77d62)

 Documentation
   o Document that arc4random is not a great cryptographic PRNG. (6e49696)
   o Small doxygen tweaks (6e67b51)
   o Try another doxygen tweak (ccf432b)
   o Clarify event_base_loop exit conditions (031a803)
   o Fix a typo (be7bf2c Ondřej Kuzník)
   o Document deferred eventcb behaviour (13a9a02 Ondřej Kuzník)
   o Typo fixes from Linus Nordberg (cec62cb, 8cd695b)
   o Fix duplicate paragraph in evbuffer_ptr documentation (58408ee)

 Code Improvements (coverity)
   o Fix a pile of coverity warnings in the unit tests (867f401)
   o Fix coverity warnings in benchmark tools. (ff7f739)
   o Whoops; fix compilation in bench.c (544cf88)
   o Remove spurious checks in evrpc.c error cases (coverity) (991b362)
   o Fix a couple of compilation warnings in regress_http.c (860767e)
   o Fix even more coverity warnings. (d240328)
   o Stop checking for inet_aton; we don't use it. (f665d5c)
   o Add an include to evrpc-internal to fix openbsd compilation warning
     (5e161c6)

 Cleanups
   o Remove an unreachable return statement in minheap-internal.h (e639a9e)
   o Refactor evmap_{io,signal}_active_() to tolerate bad inputs (974c60e)
   o Fix needless bufferevent includes in evdns.c (254c04e)
   o Fix a couple of "#ifdef WIN32" instances (88ecda3)
   o Remove unneeded declaration in bufferevent-internal.h (4c8ebcd)

 Sample code
   o le-proxy: Fail more gracefully if opening listener fails (44b2491)
   o http-server: drop uri_root from base_url in http-server. (6171e1c Azat\
 Khuzhin)
   o https-client: POST supported, args supported (c5887f7 Alexey Ozeritsky)
   o https-client: code cleanup (29af65e Alexey Ozeritsky)
   o https-client: Small tweaks to https-client.c (90786eb)
   o https-client: Set hostname for SNI extension (by f69m) (d1976f8)
   o https-client: add a cast to https-client.c (462e6b6)



Changes in version 2.1.3-alpha (1 May 2013)

 Libevent 2.1.3-alpha fixes various bugs, adds new unit tests, and cleans
 up the code in a couple of places. It has a new callback in evhttp for
 reporting errors during a request, a new feature for allowing evdns to
 not keep the event_base looping when there are no requests inflight, and
 example code for writing an https client.

 Libevent 2.1.3-alpha also has an important new (experimental) event
 finalization feature to allow safe event teardown in multithreaded
 programs. This ought to fix the longstanding bug with deadlocks in
 multithreaded use of SSL-based bufferevents that some people have been
 experiencing since Libevent 2.0.


 Core (event finalization)
   o Implement event_finalize() and related functions to avoid certain
     deadlocks (8eedeab)
   o Use finalization feature so bufferevents can avoid deadlocks (02fbf68)
   o Always run pending finalizers when event_base_free() is called (e9ebef8)
   o Remove bufferevent_del_generic_timeout_cbs as now unused (4ea4c6a)
   o More documentation for finalization feature (a800b91)
   o Make the event_finalize* functions return an error code (5d11f4f)
   o Mark the finalize stuff as experiemental in case it needs to
     change (23e2e29)

 Evdns
   o evdns: New flag to make evdns not prevent the event loop from
     exiting (6b7fa62 Azat Khuzhin)

 Bugfixes (Core)
   o Make event_remove_timer behave correctly with persistent timers (5623e80)
   o Unit test for event_remove_timer with EV_PERSIST. (96150dd)
   o Double-check next timeout when adding events (9443868 Nate Rosenblum)
   o event_base_update_cache_time should be a no-op if the loop isn't
     running (5e6fa2a)

 Bugfixes (evhttp, crash fix, from 2.0)
   o fix #73 and fix http_connection_fail_test to catch it (b618204 Greg\
 Hazel)

 Bugfixes (compilation and portability, from 2.0)
   o Fix compilation with WIN32_HAVE_CONDITION_VARIABLES enabled (7e45739)
   o Fix missing AC_PROG_SED on older Autoconfs (9ab2b3f Tay Ray Chuan)
   o Backport libevent to vanilla Autoconf 2.59 (as used in RHEL5)
     (74d4c44 Kevin Bowling)
   o Use AC_CONFIG_HEADERS in place of AM_CONFIG_HEADERS for autmake
     1.13 compat (817ea36)
   o Rename configure.in to configure.ac to appease newer autoconfs (0c79787)
   o Avoid using top_srcdir in TESTS: new automakes do not like this (a55514e)

 Bugfixes (resource leaks/lock errors on error, from 2.0)
   o Avoid leaking fds on evconnlistener with no callback set (69db261)
   o Avoid double-close on getsockname error in evutil_ersatz_socketpair
     (0a822a6)
   o Fix a locking error in bufferevent_socket_get_dns_error. (0a5eb2e)

 Documentation Fixes (from 2.0)
   o Fix a mistake in evbuffer_remove() arguments in example http server code
     (c322c20 Gyepi Sam)
   o Fix a typo in a comment in buffer.h. Spotted by Alt_F4 (773b0a5)

 Documentation Fixes
   o minor documentation typos (809586a Patrick Pelletier)
   o Fix cut-and-paste err in whatsnew-2.1 (49905ac)
   o Fix comment to refer to sample/include.am correctly (9e8cdf3 Sebastian
     Hahn)
   o Fix typo : Dispatching instead of Dispaching (0c2bacc Volker Lendecke)
   o fix some hinky indentation in evhttp_make_request (80e220e Patrick
     Pelletier)
   o "buffer" spelling (a452811 Patrick Pelletier)
   o Specify return behavior in header for evbuffer_pullup() in corner case
     (cf8d1cd Dan Petro)
   o Clarify an important point about event_base_foreach_event() (920a5e6)

 Compilation Fixes/Tool Support
   o avoid valgrind false positive by zeroing epoll_event (1258614 Patrick
     Pelletier)
   o Fix harmless clang enum warning (b452a43 Sebastian Hahn)
   o remove all exes on "make clean", not just regress.exe (974bfa0 Patrick
     Pelletier)
   o Make --disable-libevent-regress work again (787fd74)
   o Do not build strlcpy.c when it will have no code. (4914620)

 Portability Fixes
   o When EWOULDBLOCK is not EAGAIN, treat it as equivalent to it (bf7a0ff)
   o Preliminary changes for Minix3. (0dda56a Nicholas Heath)
   o Use AC_CONFIG_HEADERS in place of AM_CONFIG_HEADERS for autmake 1.13
     compat (bf278b)
   o Avoid using $(top_srcdir) in TESTS. (2863c83)
   o build test/test-script.sh on systems with a less-featureful $< (f935e21)
   o Implement EVUTIL_ERR_IS_EAGAIN on windows. (42aaf4d)

 Evhttp changes:
   o Fix ipv6 support for http. When URL contain domain, not IP
     address. (71e709c Azat Khuzhin)
   o uri decode: fix for warning "use of uninitialised value" (64b6ece Azat
     Khuzhin)
   o uri decode: changed the test for the existence of the next character
     (e1903e3 Azat Khuzhin)
   o Move prototype of evhttp_decode_uri_internal() to http-internal.h
     (de8101a Azat Khuzhin)
   o Test: decoding just part of string with evhttp_decode_uri_internal()
     (1367653 Azat Khuzhin)
   o Add new error_cb for actual reporting of HTTP request errors. (7b07719
     Azat Khuzhin)
   o Add test for EVREQ_HTTP_REQUEST_CANCEL into http_cancel_test() (862c217
     Azat Khuzhin)
   o Drop extra header http_struct.h from regress_http.c (54cc800 Azat\
 Khuzhin)

 Testing
   o Add regress test ipv6_for_domain. (9ec88bd Azat Khuzhin)
   o Add an environment variable (EVENT_DEBUG_MODE) to run unit tests in debug
     mode (2fad0f3)
   o Add a test with an active_later event at event_base_free time. (1c3147f)
   o Make all tests pass under EVENT_DEBUG_MODE=1 (b1b054f)
   o Add some verbose notes to bufferevent unit tests (9d893c9)
   o New test for active_later->active transition on event_active (a153874)
   o New tests for event_base_foreach_event() (0b096ef)
   o Unit tests for event_base_gettimeofday_cached() and
     event_base_update_cache_time() (30ea291)
   o A test for event_get_assignment() (f09629e)
   o More unit tests for initializing common timeouts. (d596739)
   o Fix a bug in the new main/event_foreach test (702c9aa)

 Windows:
   o use FormatMessage for winsock errors (0c6ec5d, 2078e9b, 4ccdd53, c9ad3af
     Patrick Pelletier)
   o a program to print out the error strings for winsock errors (7296512
     Patrick Pelletier)
   o Fix a warning introduced in 0c6ec5d8 (eeb700c)
   o Fix another warning introduced in 0c6ec5d8 (ed26561)

 Examples (http)
   o Add sample/https-client.c, an example of stacking evhttp as a client on
     top of bufferevent_ssl. (be46c99 Catalin Patulea)
   o use ${OPENSSL_LIBS} instead of -lssl -lcrypto (bf31fa5 Patrick Pelletier)
   o https-client was putting newlines at 256-byte boundaries (42d7441 Patrick
     Pelletier)
   o better handling of OpenSSL errors (5754d96 Patrick Pelletier)
   o use Debian's default root certificate location (aacd674 Patrick\
 Pelletier)
   o use iSECPartners code to validate hostname in certificate (64d9f16
     Patrick Pelletier)
   o avoid sign mismatch warning in openssl_hostname_validation.c (6021cb5
     Patrick Pelletier)
   o pull in wildcard matching code from cURL (4db9da6 Patrick Pelletier)
   o Another tweak to https-client.c (95acdaa)
   o Remove http_struct.h usage in sample/https-client.c (8a90a85)



Changes in version 2.1.2-alpha (18 Nov 2012)

 Libevent 2.1.2-alpha includes more portable for monotonic timers,
 refactors much of Libevent's internal and external infrastructure,
 closes some longstanding gaps in the interface, makde other
 improvements.  Ths log below tries to organize features by rough area of
 effect.  It omits a few commits which were pure bugfixes on other commits
 listed below.  For more detail, see the git changelogs.  For more
 insight, see the "whatsnew-2.1.txt" document included in the Libevent
 2.1.2-alpha distribution.

 Libevent 2.1.2-alpha also includes all changes made in 2.0.19-stable
 through 2.0.21-stable inclusive.

 Performance (core):
   o Replace pipe-based notification with EVFILT_USER where possible. This
     should make multithreaded programs on OSX and *BSD alert the main thread\
 a
     little faster. (53a07fe)
   o Make th_base_lock nonrecursive. (9cd5acb)

 New/Changed API Functions:
   o New event_get_priority() function to return an event's priority (f90e255)
   o Add a bufferevent_get_priority() function (bd39554)
   o Add an event_base_loopcontinue() to tell Libevent to rescan for more
     events right away (7d6aa5e)
   o Add a new callback to get called on evbuffer_file_segment free
     (e9f8feb yangacer, 64051b9)
   o Expose event_base_foreach_event() as a public API. (84fd6d7 Roman
      Puls, 232055e, ffe1643)
   o Add an event_remove_timer() to remove timer on an event without
     deleting it (e3b2e08)
   o Make bufferevent_set_timeouts(bev, NULL, NULL) have plausible
     semantics (9dee36b)
   o Rename event_enable_lock_debuging() to ..._debugging(). (The old name
     should still work.) (07e132e)
   o Add missing implementation for event_enable_debug_logging (3b3e21d)

 PORTABLE MONOTONIC TIMERS:

   Libevent 2.1.2 includes internal support for monotonic timers on
   (nearly) all supported platforms, including Windows, and OSX.  Libevent
   applications should now be more resilient to jumps forwards or backwards
   in the system clock.  Also, on Linux systems with epoll, we now
   optionally support microsecond-level timeouts (whereas epoll only
   supports millisecond-precision timeouts).

   o Use mach_absolute_time() for monotonic clock support on OSX. (b8fd6f9)
   o Do not track use_monotonic field when is no monotonic clock (cb653a0)
   o EVENT_BASE_FLAG_PRECISE_TIMER indicates we want fine timer precision
     (ddd69d3)
   o On Linux, use CLOCK_MONOTONIC_COARSE by default (55780a7)
   o Implement a GetTickCount-based monotonic timer for Windows (d5e1d5a)
   o Refactor monotonic timer handling into a new type and set of
     functions; add a gettimeofday-based ratcheting implementation (f5e4eb0)
   o Add EVENT_PRECISE_TIMER environment var for selecting precise-but-slow
     timer (a2598ec)
   o Implement fast/precise monotonic clocks on Windows (2c47045)
   o Simple unit tests for monotonic timers (630f077)
   o Improve the monotonic-time unit test: make it check the step size\
 (7428c78)
   o When PRECISE_TIMERS is set with epoll, use timerfd for microsecond
     precision (26c7582)
   o Split out time-related evutil functions into a new evutil_time.c\
 (c419485)
   o Split out time-related prototypes into time-internal.h (71bca50)
   o Add evutil_time.obj to Makefile.nmake (0ba0683)
   o Avoid giving a spurious warning when timerfd support is unavailable
     (1aaf9f0 Dave Hart)
   o Make test_evutil_monotonic a little more tolerant (def3b83)
   o Avoid unused-var warning on systems with clock_gettime but without
     CLOCK_MONOTONIC_COARSE (9be5468)

EVENT_BASE_ONCE LEAKS:
   If a callback added by event_base_once() is never invoked, Libevent no
   longer leaks internal memory.

   o Free dangling event_once objects on event_base_free() (c17dd59)
   o Add a unit test in which an event is created with event_base_once()
     but never fires (4343edf)

TESTING SUPPORT, FIXES AND IMPROVEMENTS:

   Libevent now disables by default its unit tests that would touch the
   network, or that tend to fail on heavily-loaded systems.  To re-enable
   them, invoke the ./test/regress program with the @all alias.

   o Simplify test.sh code significantly. (9b856fd Ross Lagerwall)
   o Make all tests that hit the network disabled by default (f2cea87)
   o Avoid a resource leak on error in http client benchmark (ea92fba)
   o Update to latest tinytest (911b4f0349377) (ef7c4f7)
   o Avoid (unlikely) overflow in bench_httpclient.c (5671033)
   o Shave 700 msec off the persistent_timeout_jump test (21205b8)
   o Check return value of write() in regress.c (c8009d2)
   o Make load-dependent monotonic timer tests off-by-default (2b6fe8b)
   o Add deferred_cb_skew to list of timing-dependent tests (34c8f31)
   o Avoid test -e; older shs don't have one. (f1bd938)
   o Fix renegotiation test to work around openssl 1.0.1 bug (c2f3086)
   o Fix a couple of compile warnings in the unit tests (5a9a014)

MISC:
   o Change evutil_weakrand_() to avoid platform random() (e86af4b Nicholas
     Marriott, 3aa4415)

INFRASTRUCTURE (Active-later events):
   As a simplification and optimization to Libevent's "deferred callback"
   logic (introduced in 2.0 to avoid callback recursion), Libevent now
   treats all of its deferrable callback types using the same logic it uses
   for active events.  Now deferred events no longer cause priority
   inversion, no longer require special code to cancel them, and so on.

   o Refactor the callback part of an event into its own event_callback
     type (cba59e5)
   o Add "active later" event_callbacks to supersede deferred (745a63d)
   o event_base_assert_ok: check value of event_active_count for
     correctness (fec8bae)
   o Replace deferred_cbs with event_callback-based implementation. (ae2b84b)
   o Replace more deferred_cb names with event_callback (a4079aa)
   o Give event_base_process_active a single exit path (581b5be)
   o Restore our priority-inversion-prevention code with deferreds (c0e425a)
   o Refactor event_persist_closure: raise and extract some common logic
     (bec22b4)
   o Remove the unused bits from EVLIST_ALL (9889a3d)
||||||| merged common ancestors
Changes in version 2.0.22-stable (?? Dec 2013)

 (As of 3b77d62829c4393bda6f9105a5d3b73b48a64b71.)

BUGFIXES (evhttp)
 o fix #73 and fix http_connection_fail_test to catch it (crash fix) (b618204\
 Greg Hazel)
 o Avoid racy bufferevent activation (5eb1788 Nate Rosenblum)

BUGFIXES (compilation and portability)
 o Fix compilation with WIN32_HAVE_CONDITION_VARIABLES enabled (7e45739)
 o Fix missing AC_PROG_SED on older Autoconfs (9ab2b3f Tay Ray Chuan)
 o Backport libevent to vanilla Autoconf 2.59 (as used in RHEL5) (74d4c44\
 Kevin Bowling)
 o Use AC_CONFIG_HEADERS in place of AM_CONFIG_HEADERS for autmake 1.13\
 compat (817ea36)
 o Rename configure.in to configure.ac to appease newer autoconfs (0c79787)
 o Avoid using top_srcdir in TESTS: new automakes do not like this (a55514e)
 o Use windows vsnprintf fixup logic on all windows environments (e826f19)
 o Fix a compiler warning when checking for arc4random_buf linker breakage.\
 (5cb3865)
 o Fix another arc4random_buf-related warning (e64a2b0)

BUGFIXES (resource leaks/lock errors on error)
 o Avoid leaking fds on evconnlistener with no callback set (69db261)
 o Avoid double-close on getsockname error in evutil_ersatz_socketpair\
 (0a822a6)
 o Fix a locking error in bufferevent_socket_get_dns_error. (0a5eb2e)
 o libevent/win32_dealloc() : fix sizeof(pointer) vs sizeof(*pointer)\
 (b8f5980 Frank Denis)

BUGFIXES (miscellaneous)
 o Avoid other RNG initialization FS reads when urandom file is specified\
 (9695e9c, bb52471)
 o Avoid redundant invocations of init_extension_functions for IOCP (3b77d62)

BUFGIXES (evdns)
 o Checking request nameserver for NULL, before using it. (5c710c0 Belobrov\
 Andrey)
 o Fix SEGFAULT after evdns_base_resume if no nameservers installed. (f8d7df8\
 Azat Khuzhin)

BUGFIXES (evutil_secure_random)
 o When we seed from /proc/sys/kernel/random/uuid, count it as success\
 (e35b540)
 o Document that arc4random is not a great cryptographic PRNG. (6e49696)
 o Add evutil_secure_rng_set_urandom_device_file (2bbb5d7)
 o Really remove RNG seeds from the stack (f5ced88)


DOCUMENTATION FIXES
 o Fix a mistake in evbuffer_remove() arguments in example http server code\
 (c322c20 Gyepi Sam)
 o Fix a typo in a comment in buffer.h. Spotted by Alt_F4 (773b0a5)



Changes in version 2.0.21-stable (18 Nov 2012)
BUGFIXES:
 o ssl: Don't discard SSL read event when timeout and read come close\
 together (576b29f)
 o ssl: Stop looping in "consider_reading" if reading is suspended. (f719b8a\
 Joachim Bauch)
 o ssl: No need to reserve space if reading is suspended. (1acf2eb Joachim\
 Bauch)
 o dns: Avoid a memory-leak on OOM in evdns. (73e85dd, f2bff75 George Danchev)
 o build: Use python2 rather than python (0eb0109 Ross Lagerwall)
 o build: Compile without warnings on mingw64 (94866c2)
 o build: Fix compilation on mingw64 with -DUSE_DEBUG (62bd2c4)
 o build: Make rpcgen_wrapper.sh work on systems without a "python2" binary\
 (f3009e4)
 o iocp: Close IOCP listener socket on free when LEV_OPT_CLOSE_ON_FREE is set\
 (cb853ea Juan Pablo Fernandez)
 o core: Avoid crash when event_pending() called with no event_base set on\
 event (e3cccf3)
 o misc: remove stray 'x' so print_err will compile when uncommented (ac35650\
 Patrick Pelletier)
 o tests: Fix renegotiation test to work around openssl 1.0.1 bug (c2f3086)
 o tests: Warn when openssl version in unit test mismatches compiled version.\
 (ac009f9)


Changes in version 2.0.20-stable (23 Aug 2012)
BUGFIXES:
 o core: Make event_pending() threadsafe. (be7a95c Simon Liu)
 o win32: avoid crash when waiting forever on zero fds. (160e58b)
 o evhttp: Fix a memory leak on error in evhttp_uriencode (11c8b31)
 o evbuffer: Avoid possible needless call to writev. Found by coverity.\
 (6a4ec5c)
 o evdns: memset sockaddr_in before using it. Found by coverity. (a1a0e67)
 o evhttp: Check more setsockopt return values when binding sockets. Found by\
 coverity (a0912e3)
 o evdns: Avoid segfault on weird timeout during name lookup. (dc32077 Greg\
 Hazel)
 o bufferevent_ssl: Correctly invoke callbacks when a SSL bufferevent reads\
 some and then blocks. (606ac43)


PORTABILITY FIXES:
 o check for arc4random_buf at runtime, on OS X (bff5f94 Greg Hazel)
 o Correctly check for arc4random_buf (fcec3e8 Sebastian Hahn)
 o Add explicit AC_PROG_SED to configure.in so all autoconfs will expose\
 $(SED) (ca80ea6)

BUILD FIXES:
 o Add GCC annotations so that the vsprintf functions get checked properly\
 (117e327)
 o Fix an unused variable warning on *BSD. (c0720c1)

UNIT TEST FIXES:
 o Fix a couple of memory leaks (found with Valgrind). (3b2529a Ross\
 Lagerwall)
 o Remove deadcode in http regression tests. Found by coverity. (5553346)
 o Fix possible uninitialized read in dns regression tests. Found by\
 coverity. (2259777)
 o Set umask before calling mkstemp in unit tests. Found by coverity (f1ce15d)
 o Fix various check-after-dereference issues in unit tests: found by\
 coverity (4f3732d)
 o Fix resource leaks in the unit tests; found by coverity (270f279)
 o Add some missing null checks to unit tests; found by coverity (f021c3d)
 o Avoid more crashes/bad calls in unit tests; found by coverity (3cde5bf)
 o Remove unused variable; spotted by coverity (6355b2a)
 o Add checks to various return values in unit tests. Found by coverity\
 (b9e7329)
 o Move assignment outside tt_assert in ssl unit tests. Appeases coverity.\
 (a2006c0)



Changes in version 2.0.19-stable (3 May 2012)
BUGFIXES (CORE):
 o Refactor event_persist_closure: raise and extract some common logic\
 (bec22b4)
 o If time has jumped so we'd reschedule a periodic event in the past,\
 schedule it for the future instead (dfd808c)
 o If a higher-priority event becomes active, don't continue running events\
 of the current priority. (2bfda40)

BUGFIXES (SSL):
 o Fixed potential double-readcb execution with openssl bufferevents.\
 (4e62cd1 Mark Ellzey)

BUGFIXES (DNS):
 o Cancel a probe request when the server is freed, and ignore cancelled\
 probe callbacks (94d2336 Greg Hazel)
 o Remove redundant DNS_ERR_CANCEL check, move comment (46b8060 Greg Hazel)
 o When retransmitting a timed-out DNS request, pick a fresh nameserver.\
 (3d9e52a)

DOCUMENTATION FIXES:
 o Fix a typo in the bufferevent documentation (98e9119)
 o Add missing ) to changelog; spotted by rransom (4c7ee6b)
 o Fix the website URL in the readme (f775521)

COMPILATION FIXES:
 o Fix a compilation error with MSVC 2005 due to use of mode_t (336dcae)
 o Configure with gcc older than 2.95 (4a6fd43 Sebastian Hahn)
 o Generate event-config.h with a single sed script (30b6f88 Zack Weinberg)

FORWARD-COMPATIBILITY:
 o Backport: provide EVENT_LOG_* names, and deprecate _EVENT_LOG_* (d1a03b2)

TESTING/DEBUGGING SUPPORT:
 o dns-example.c can now take a resolv.conf file on the commandline (6610fa5)
 o Make some evdns.c debug logs more verbose (d873d67)
 o Work-around a stupid gcov-breaking bug in OSX 10.6 (b3887cd)



Changes in version 2.0.18-stable (22 Mar 2012)
BUGFIXES (core):
 o Make uses of open() close-on-exec safe by introducing an internal\
 evutil_open_closeonexec. (d2b5f72 Ross Lagerwall, 03dce42)

BUGFIXES (kqueue):
 o Properly zero the kevent in kq_setup_kevent() (c2c7b39 Sebastian Hahn)

BUILD FIXES:
 o Added OPENSSL_LDFLAGS env variable which is appended to SSL checks.\
 (9278196 Mark Ellzey)
 o Changed OPENSSL_LDFLAGS to OPENSSL_LIBADD (2d67b63 Mark Ellzey)
 o Don't do clang version detection when disabling some flags (083296b\
 Sebastian Hahn)

BUGFIXES (dns):
 o Stop crashing in evdns when nameserver probes give a weird error (bec5068)


Changes in version 2.0.17-stable (10 Feb 2012)

BUGFIXES (core):
 o Be absolutely sure to clear pncalls before leaving event_signal_closure\
 (11f36a5)
 o check for sysctl before we use it (358c745 Mike Frysinger)
 o Remove bogus casts of socket to int before calling ev_callback (f032516)
 o Make evconnlistener work around bug in older Linux when getting nmapped\
 (ecfc720)
 o Fix a list corruption bug when using event_reinit() with signals present\
 (6e41cdc)
 o Fix a fd leak in event_reinit() (3f18ad1)
 o Do a memberwise comparison of threading function tables (c94a5f2 Nate R)
 o Use C-style comments in C source files (for compatibility with compilers\
 such as xlc on AIX). (d84d917 Greg Hewgill)
 o Avoid crash when freeing event_iocp and using event_set_mem_functions\
 (19715a6)
 o In the kqueue backend, do not report EBADF as an EV_READ (5d7bfa1 Nicholas\
 Marriott)

BUGFIXES (evbuffer and bufferevents):
 o Fix behavior of evbuffer_peek(buf,-1,NULL,NULL,0) (c986f23 Zack Weinberg)
 o Loop on filtering SSL reads until we are blocked or exhausted. (5b4b812)

BUGFIXES (evhttp):
 o Force strict validation of HTTP version in response. (790f6b3 Catalin\
 Patulea)

BUGFIXES (evdns):
 o evdns: fix a bug in circular-queue implementation (d6094b1)

BUILD FIXES:
 o Fix a silly compilation error with the sun compiler (1927776 Colin Watt)
 o Suppress a gcc warning from ignoring fwrite return in http-sample.c\
 (7206e8c)

DOCUMENTATION FIXES:
 o Slightly clarify evbuffer_peek documentation (7bbf6ca)
 o Update copyright notices to 2012 (e49e289)

NEW APIS:
 o Backport evhttp_connection_get_bufferevent to Libevent 2.0 (da70fa7 Arno\
 Bakker)

TESTS AND TEST FIXES:
 o Fix a race condition in the dns/bufferevent_connect_hostname test.\
 (cba48c7)
 o Add function to check referential integrity of an event_base (27737d5)
 o Check event_base correctness at end of each unit test (3312b02)
 o Workaround in the unit tests for an apparent epoll bug in Linux 3.2\
 (dab9187)
 o Better workaround for Linux 3.2 edge-triggered epoll bug (9f9e259)

Changes in version 2.0.16-stable (18 Nov 2011)
BUGFIXES (core):
 o More detailed message in case of libevent self-debugging failure. (9e6a4ef\
 Leonid Evdokimov)
 o epoll: close fd on alloc fail at initialization (1aee718 Jamie Iles)
 o Fix compile warning from saying event2/*.h inside a comment (447b0ba)
 o Warn when unable to construct base because of failing make_base_notifiable\
 (4e797f3)
 o Don't try to make notifiable event_base when no threading fns are\
 configured (e787413)

BUGFIXES (evbuffer):
 o unit test for remove_buffer bug (90bd620 Greg Hazel)
 o Fix an evbuffer crash in evbuffer_remove_buffer() (c37069c)

BUGFIXES (bufferevent_openssl):
 o Refactor amount-to-read calculations in buffervent_ssl consider_reading()\
 (a186e73 Mark Ellzey)
 o Move SSL rate-limit enforcement into bytes_to_read() (96c562f)
 o Avoid spinning on OpenSSL reads (2aa036f Mark Ellzey)

BUGFIXES (dns)
 o Empty DNS reply with OK status is another way to say NODATA. (21a08d6\
 Leonid Evdokimov)

TESTING:
 o Tests for 94fba5b and f72e8f6 (d58c15e Leonid Evdokimov)
 o Test for commit aff6ba1 (f7841bf Leonid Evdokimov)
 o Style and comment tweaks for dns/leak* tests (5e42202)
 o improve test to remove at least one buffer from src (7eb52eb Greg Hazel)

DOCUMENTATION:
 o Add note about evhttp_send_reply_end to its doxygen (724bfb5)
 o Update copyright dates to 2011. (3c824bd)
 o Fix typo in whatsnew-2.0.txt (674bc6a Mansour Moufid)
 o Improve win32 behavior of dns-sample.c code (a3f320e Gisle Vanem)



Changes in version 2.0.15-stable (12 Oct 2011)
BUGFIXES (DNS):
 o DNS: add ttl for negative answers using RFC 2308 idea. (f72e8f6 Leonid\
 Evdokimov)
 o Add DNS_ERR_NODATA error code to handle empty replies. (94fba5b Leonid\
 Evdokimov)

BUFGIXES (bufferevents and evbuffers):
 o Make evbuffer callbacks get the right n_added value after evbuffer_add\
 (1ef1f68 Alex)
 o Prefer mmap to sendfile unless a DRAINS_TO_FD flag is set. Allows add_file\
 to work with SSL. (0ba0af9)

BUGFIXES (event loop):
 o When a signal callback is activated to run multiple times, allow\
 event_base_loopbreak to work even before they all have run. (4e8eb6a)

DOCUMENTATION FIXES:
 o Fix docstring in dns.h (2b6eae5 Leonid Evdokimov)
 o refer to non-deprecated evdns functions in comments (ba5c27d Greg Hazel)

BUILD AND TESTING FIXES:
 o le-proxy and regress depend on openssl directly (9ae061a Sergey Avseyev)
 o Use _SOURCES, not _sources, in sample/Makefile.am (7f82382)
 o Fixed compiler warnings for unchecked read/write calls. (c3b62fd Mark\
 Ellzey)
 o Make write-checking fixes use tt_fail_perror (2b76847)
 o Fix some "value never used" warnings with gcc 4.6.1 (39c0cf7)



Changes in version 2.0.14-stable (31 Aug 2011)
BUGFIXES (bufferevents and evbuffers):
 o Propagate errors on the underlying bufferevent to the user. (4a34394\
 Joachim Bauch)
 o Ignore OpenSSL deprecation warnings on OS X (5d1b255 Sebastian Hahn)
 o Fix handling of group rate limits under 64 bytes of burst (6d5440e)
 o Solaris sendfile: correctly detect amount of data sent (643922e Michael\
 Herf)
 o Make rate limiting work with common_timeout logic (5b18f13)
 o clear read watermark on underlying bufferevent when creating filtering bev\
 to fix potentially failing fragmented ssl handshakes (54f7e61 Joachim Bauch)

BUGFIXES (IOCP):
 o IOCP: don't launch reads or writes on an unconnected socket (495c227)
 o Make IOCP rate-limiting group support stricter and less surprising.\
 (a98da7b)
 o Have test-ratelim.c support IOCP (0ff2c5a)
 o Make overlapped reads result in evbuffer callbacks getting invoked\
 (6acfbdd)
 o Correctly terminate IO on an async bufferevent on bufferevent_free\
 (e6af35d)

BUGFIXES (other):
 o Fix evsig_dealloc memory leak with debugging turned on. (9b724b2 Leonid\
 Evdokimov)
 o Fix request_finished memory leak with debugging turned on. (aff6ba1 Leonid\
 Evdokimov)

BUILD AND TESTING FIXES:
 o Allow OS-neutral builds for platforms where some versions have\
 arc4random_buf (b442302 Mitchell Livingston)
 o Try to fix 'make distcheck' errors when building out-of-tree (04656ea Dave\
 Hart)
 o Clean up some problems identified by Coverity. (7c11e51 Harlan Stenn)


Changes in version 2.0.13-stable (18 Jul 2011)
BUGFIXES
 o Avoid race-condition when initializing global locks (b683cae)
 o Fix bug in SSL bufferevents backed by a bev with a write high-watermarks\
 (e050703 Joachim Bauch)
 o Speed up invoke_callbacks on evbuffers when there are no callbacks\
 (f87f568 Mark Ellzey)
 o Avoid a segfault when all methods are disabled or broken (27ce38b)
 o Fix incorrect results from evbuffer_search_eol(EOL_LF) (4461f1a)
 o Add some missing checks for mm_calloc failures (89d5e09)
 o Replace an assertion for event_base_free(NULL) with a check-and-warn\
 (09fe97d)
 o Report kqueue ebadf, epipe, and eperm as EV_READ events (1fd34ab)
 o Check if the `evhttp_new_object' function in `http.c' returns NULL.\
 (446cc7a Mansour Moufid)
 o Use the correct printf args when formatting size_t (3203f88)
 o Complain if the caller tries to change threading cbs after setting them\
 (cb6ecee)

DOCUMENTATION FIXES AND IMPROVEMENTS
 o Revise the event/evbuffer/bufferevent doxygen for clarity and accuracy\
 (2888fac)
 o Update Doxyfile to produce more useful output (aea0555)

TEST FIXES
 o Fix up test_evutil_snprintf (caf695a)
 o Fix tinytest invocation from windows shell (57def34 Ed Day)

BUILD FIXES
 o Use AM_CPPFLAGS in sample/Makefile.am, not AM_CFLAGS (4a5c82d)
 o Fix select.c compilation on systems with no NFDBITS (49d1136)
 o Fix a few warnings on OpenBSD (8ee9f9c Nicholas Marriott)
 o Don't break when building tests from git without python installed (b031adf)
 o Don't install event_rpcgen.py when --disable-libevent-install is used\
 (e23cda3 Harlan Stenn)
 o Fix AIX build issue with TAILQ_FOREACH definition (e934096)


Changes in version 2.0.12-stable (4 Jun 2011)
BUGFIXES
 o Fix a warn-and-fail bug in kqueue by providing kevent() room to report\
 errors (28317a0)
 o Fix an assert-inducing fencepost bug in the select backend (d90149d)
 o Fix failing http assertion introducd in commit 0d6622e (0848814 Kevin Ko)
 o Fix a bug that prevented us from configuring IPv6 nameservers. (74760f1)
 o Prevent size_t overflow in evhttp_htmlescape. (06c51cd Mansour Moufid)
 o Added several checks for under/overflow conditions in evhttp_handle_chunke\
d_read (a279272 Mark Ellzey)
 o Added overflow checks in evhttp_read_body and evhttp_get_body (84560fc\
 Mark Ellzey)

DOCUMENTATION:
 o Add missing words to EVLOOP_NONBLOCK documentation (9556a7d)

BUILD FIXES
 o libssl depends on libcrypto, not the other way around. (274dd03 Peter\
 Rosin)
 o Libtool brings in the dependencies of libevent_openssl.la automatically\
 (7b819f2 Peter Rosin)
 o Use OPENSSL_LIBS in Makefile.am (292092e Sebastian Hahn)
 o Move the win32 detection in configure.in (ceb03b9 Sebastian Hahn)
 o Correctly detect openssl on windows (6619385 Sebastian Hahn)
 o Fix a compile warning with zlib 1.2.4 and 1.2.5 (5786b91 Sebastian Hahn)
 o Fix compilation with GCC 2, which had no __builtin_expect (09d39a1 Dave\
 Hart)
 o Fix new warnings from GCC 4.6 (06a714f)
 o Link with -lshell32 and -ladvapi32 on Win32. (86090ee Peter Rosin)
 o Make the tests build when OpenSSL is not available. (07c41be Peter Rosin)
 o Bring in the compile script from automake, if needed. (f3c7a4c Peter Rosin)
 o MSVC does not provide S_ISDIR, so provide it manually. (70be7d1 Peter\
 Rosin)
 o unistd.h and sys/time.h might not exist. (fe93022 Peter Rosin)
 o Make sure TINYTEST_LOCAL is defined when building tinytest.c (8fa030c\
 Peter Rosin)
 o Fix winsock2.h #include issues with MSVC (3d768dc Peter Rosin)
 o Use evutil_gettimeofday instead of relying on the system gettimeofday.\
 (0de87fe Peter Rosin)
 o Always use evutil_snprintf, even if OS provides it (d1b2d11 Sebastian Hahn)
 o InitializeCriticalSectionAndSpinCount requires _WIN32_WINNT >= 0x0403.\
 (816115a Peter Rosin)
 o cygwin: make it possible to build DLLs (d54d3fc)



Changes in version 2.0.11-stable (27 Apr 2011)
  [Autogenerated from the Git log, sorted and cleaned by hand.]
BUGFIXES:
 o Fix evport handling of POLLHUP and POLLERR (b42ce4b)
 o Fix compilation on Windows with NDEBUG (cb8059d)
 o Check for POLLERR, POLLHUP and POLLNVAL for Solaris event ports (0144886\
 Trond Norbye)
 o Detect and handle more allocation failures. (666b096 Jardel Weyrich)
 o Use event_err() only if the failure is truly unrecoverable. (3f8d22a\
 Jardel Weyrich)
 o Handle resize failures in the select backend better. (83e805a)
 o Correctly free selectop fields when select_resize fails in select_init\
 (0c0ec0b)
 o Make --enable-gcc-warnings a no-op if not using gcc (3267703)
 o Fix a type error in our (unused) arc4random_stir() (f736198)
 o Correctly detect and stop non-chunked http requests when the body is too\
 long (63a715e)
 o Have event_base_gettimeofday_cached() always return wall-clock time\
 (a459ef7)
 o Workaround for http crash bug 3078187 (5dc5662 Tomash Brechko)
 o Fix incorrect assertions and possible use-after-free in evrpc_free()\
 (4b8f02f Christophe Fillot)
 o Reset outgoing http connection when read data in idle state. (272823f\
 Tomash Brechko)
 o Fix subtle recursion in evhttp_connection_cb_cleanup(). (218cf19 Tomash\
 Brechko)
 o Fix the case when failed evhttp_make_request() leaved request in the\
 queue. (0d6622e Tomash Brechko)
 o Fix a crash bug in evdns server circular list code (00e91b3)
 o Handle calloc failure in evdns. (Found by Dave Hart) (364291e)
 o Fix a memory leak on win32 socket->event map. (b4f89f0)
 o Add a forgotten NULL check to evhttp_parse_headers (12311ff Sebastian Hahn)
 o Fix possible NULL-deref in evdns_cancel_request (5208544 Sebastian Hahn)

PORTABILITY:
 o Fall back to sscanf if we have no other way to implement strtoll (453317b)
 o Build correctly on platforms without sockaddr_storage (9184563)
 o Try to build correctly on platforms with no IPv6 support (713c254)
 o Build on systems without AI_PASSIVE (cb92113)
 o Fix http unit test on non-windows platforms without getaddrinfo (6092f12)
 o Do not check for gethostbyname_r versions if we have getaddrinfo (c1260b0)
 o Include arpa/inet.h as needed on HPUX (10c834c Harlan Stenn)
 o Include util-internal.h as needed to build on platforms with no\
 sockaddr_storage (bbf5515 Harlan Stenn)
 o Check for getservbyname even if not on win32. (af08a94 Harlan Stenn)
 o Add -D_OSF_SOURCE to fix hpux builds (0b33479 Harlan Stenn)
 o Check for allocation failures in apply_socktype_protocol_hack (637d17a)
 o Fix the check for multicast or broadcast addresses in evutil_check_interfa\
ces (1a21d7b)
 o Avoid a free(NULL) if out-of-memory in evdns_getaddrinfo. Found by Dave\
 Hart (3417f68)

DEFENSIVE PROGRAMMING:
 o Add compile-time check for AF_UNSPEC==PF_UNSPEC (3c8f4e7)

BUGS IN TESTS:
 o Fix test.sh output on solaris (b4f89b6 Dave Hart)
 o Make test-eof fail with a timeout if we never get an eof. (05a2c22 Harlan\
 Stenn)
 o Use %s with printf in test.sh (039b9bd)
 o Add an assert to appease clang's static analyzer (b0ff7eb Sebastian Hahn)
 o Add a forgotten return value check in the unit tests (3819b62 Sebastian\
 Hahn)
 o Actually send NULL request in http_bad_request_test (b693c32 Sebastian\
 Hahn)
 o add some (void) casts for unused variables (65707d7 Sebastian Hahn)
 o Refactor test_getaddrinfo_async_cancel_stress() (48c44a6 Sebastian Hahn)
 o Be nice and "handle" error return values in sample code (4bac793 Sebastian\
 Hahn)
 o Check return value of evbuffer_add_cb in tests (93a1abb Sebastian Hahn)
 o Remote some dead code from dns-example.c (744c745 Sebastian Hahn)
 o Zero a struct sockaddr_in before using it (646f9fe Sebastian Hahn)

BUILD FIXES:
 o Fix warnings about AC_LANG_PROGRAM usage (f663112 Sebastian Hahn)
 o Skip check for zlib if we have no zlib.h (a317c06 Harlan Stenn)
 o Fix autoconf bracket issues; make check for getaddrinfo include netdb.h\
 (833e5e9 Harlan Stenn)
 o Correct an AM_CFLAGS to an AM_CPPFLAGS in test/Makefile.am (9c469db Dave\
 Hart)
 o Fix make distcheck & installation of libevent 1 headers (b5a1f9f Dave Hart)
 o Fix compilation under LLVM/clang with --enable-gcc-warnings (ad9ff58\
 Sebastian Hahn)

FEATURES:
 o Make URI parser able to tolerate nonconformant URIs. (95060b5)

DOCUMENTATION:
 o Clarify event_set_mem_functions doc (926f816)
 o Correct evhttp_del_accept_socket documentation on whether socket is closed\
 (f665924)
 o fix spelling mistake in whatsnew-2.0.txt (deb2f73)
 o Fix sample/http-server ipv6 fixes (eb692be)
 o Comment internal headers used in sample code. (4eb281c)
 o Be explicit about how long event loops run in event.h documentation\
 (f95bafb)
 o Add comment to configure.in to explain gc-sections test logic (c621359)
 o Fix a couple of memory leaks in samples/http-server.c. Found by Dave Hart.\
 (2e9f665)



BUILD IMPROVEMENTS:
 Libevent 2.1.2-alpha modernizes Libevent's use of autotools, and makes
 numerous other build system. Parallel builds should be faster, and all
 builds should be quieter.

   o Split long lists in Makefile.am into one-item-per-line (2711cda)
   o Remove unnecessary code in configure.in. (e65914f Ross Lagerwall)
   o attempt to support OpenSSL in Makefile.nmake (eba0eb2 Patrick Pelletier)
   o Use newer syntax for autoconf/automake init (7d60ba8)
   o Enable silent build rules by default. Override with V=1 (7b18e5c)
   o Switch to non-recursive makefiles (7092f3b)
   o Rename subordinate Makefile.ams to include.am (6cdfeeb)
   o Make quiet build even quieter (371a123)
   o New --quiet option for event_rpcgen.py (aa59c1e)
   o Be quiet when making regress.gen.[ch] (607a8ff)
   o Fix handling of no-python case for nonrecursive make (1e3123d)
   o We now require automake 1.9 or later. Modernize! (b7f6e89)
   o Rename configure.in to configure.ac. (b3fea67 Ross Lagerwall)
   o Use correct openssl libs and includes in pkgconfig file (d70af27)
   o Use the same CFLAGS for openssl when building unit tests as with
     libevent (1d9d511)

DOCUMENTATION
   o Note that make_base_notifiable should not be necessary (26ee5f9)
   o Be more clear that LEV_OPT_DEFERRED_ACCEPT has tricky prereqs (371efeb)
   o Add caveat to docs about bufferevent_free() with data in outbuf (6fab9ee)
   o Make it more clear that NOLOCK means "I promise, no multithreading"
    (9444524)
   o Fix a comment in test-fdleak after 077c7e949. (3881d8f Ross Lagerwall)
   o Make the Makefile.nmake warning slightly less dire (e7bf4c8)
   o Fix typo : events instead of evets (05f1aca Azat Khuzhin)
   o Additional comments about OPENSSL_DIR variable, prompted by Dave Hart
     (6bde2ef Patrick Pelletier)

EVHTTP:
   o ignore LWS after field-content in headers (370a2c0 Artem Germanov)
   o Clean up rtrim implementation (aa59d80)
   o Remove trailing tabs in HTTP headers as well. (ac42519)
   o Remove internal ws from multiline http headers correctly (c6ff381)
   o Move evutil_rtrim_lws_ to evutil.c where it belongs (61b93af)
   o add evhttp_request_get_response_code_line (4f4d0c9 Jay R. Wren)
   o Use EVUTIL_SOCKET_ERROR() wrapper to save/restore errno in
     evhttp_connection_fail_ (7afbd60)
   o preserve errno in evhttp_connection_fail_ for inspection by the
     callback (36d0ee5 Patrick Pelletier)

BUGFIXES:
   o Correctly handle running on a system where accept4 doesn't work.\
 (9fbfe9b)
   o Avoid double-free on error in evbuffer_add_file. Found by
     coverity. (6a81b1f)
   o Fix another possible uninitialized read in dns regression tests. Found
     by coverity. (13525c5)
   o Add checks for functions in test-ratelim.c; found by Coverity (aa501e1)
   o Avoid memory leak in test_event_calloc unit test; found by coverity
     (92817a1)
   o Fix a shadowed variable in addfile_test_readcb; found by coverity
     (225344c)
   o Check return value when using LEV_OPT_DEFERRED_ACCEPT. Found by
     coverity (6487f63)
   o Prevent reference leak of bufferevent if getaddrinfo fails. (b757786
     Joachim Bauch)
   o Make event_base_getnpriorities work with old "implicit base" code
     (c46cb9c)
   o Simplify and correct evutil_open_closeonexec_ (0de587f)
   o Fix event_dlist definition when sys/queue not included (81b6209
     Derrick Pallas)



Changes in version 2.1.1-alpha (4 Apr 2012)

 Libevent 2.1.1-alpha includes a number of new features and performance
 improvements.  The log below tries to organize them by rough area of
 effect.  It omits some commits which were pure bugfixes on other commits
 listed below.  For more detail, see the git changelogs.  For more
 insight, see the "whatsnew-2.1.txt" document included in the Libevent
 2.1.1-alpha distribution.

 Performance: Core
   o Replace several TAILQ users with LIST. LIST can be a little faster than
     TAILQ for cases where we don't need queue-like behavior. (f9db33d,
     6494772, d313c29, 974d004)
   o Disabled code to optimize the case where we reinsert an existing
     timeout (e47042f, 09cbc3d)
   o Remove a needless base-notify when rescheduling the first timeout\
 (77a96fd)
   o Save a needless comparison when removing/adjusting timeouts (dd5189b)
   o Possible optimization: split event_queue_insert/remove into
     separate functions. needs testing (efc4dc5)
   o Make event_count maintenance branchless at the expense of an
     extra shift. Needs benchmarking (d1cee3b)
   o In the 2.1 branch, let's try out lazy gettimeofday/clock_gettime
     comparison (2a83ecc)
   o Optimization in event_process_active(): ignore maxcb & endtime
     for highest priority events. (a9866aa Alexander Drozdov)
   o Bypass event_add when using event_base_once() for a 0-sec timeout\
 (35c5c95)
   o Remove the eventqueue list and the ev_next pointers. (604569b 066775e)

 Performance: Evbuffers
   o Roughly 20% speed increase when line-draining a buffer using
     EVBUFFER_EOL_CRLF (5dde0f0 Mina Naguib)
   o Try to squeeze a little more speed out of EVBUFFER_EOL_CRLF (7b9d139)
   o Fix a bug in the improved EOL_CRLF code (d927965)
   o Remove a needless branch in evbuffer_drain() (d19a326)

 Performance: Linux
   o Infrastructure for using faster/fewer syscalls when creating
     sockets (a1c042b)
   o Minimize syscalls during socket creation in listener.c (7e9e289)
   o Use a wrapper function to create the notification
     pipe/socketpair/eventfd (ca76cd9)
   o Use pipes for telling signals to main thread when possible (a35f396)
   o Save syscalls when constructing listener sockets for evhttp (af6c9d8)
   o Save some syscalls when creating evdns sockets (713e570)
   o Save some syscalls when constructing a socket for a bufferevent (33fca62)
   o Prefer epoll_create1 on Linuxen that have it (bac906c)

 Performance: Epoll backend
   o Use current event set rather than current pending change when
     deciding whether to no-op a del (04ba27e Mike Smellie)
   o Replace big chain of if/thens in epoll.c with a table lookup (8c83eb6)
   o Clean up error handling in epoll_apply_one_change() a little (2d55a19)

 Performance: Evport backend
   o evport: use evmap_io to track fdinfo status. Should save time and
     RAM. (4687ce4)
   o evport: Remove a linear search over recent events when
     reactivating them (0f77efe)
   o evport: Use portev_user to remember fdinfo struct (276ec0e)
   o evport: don't scan more events in ed_pending than needed (849a5cf)
   o evport: Remove artificial low limit on max events per getn call (c04d927)
   o Reenable main/many_events_slow_add for evport in 2.1 (e903db3)

 Performance: Windows
   o Use GetSystemTimeAsFileTime to implement gettimeofday on
     win32. It's faster and more accurate than our old
     approach. (b8b8aa5)

 New functions and features: debugging
   o Add event_enable_debug_logging() to control use of debug logs (e30a82f)

 New functions and features: core
   o Add event_config function to limit time/callbacks between calls
     to dispatch (fd4de1e, 9fa56bd, a37a0c0, 3c63edd)
   o New EVLOOP_NO_EXIT_ON_EMPTY option to keep looping even when no
     events are pending (084e68f)
   o Add event_base_get_npriorities() function. (ee3a4ee Alexander Drozdov)
   o Make evbase_priority_init() and evbase_get_npriorities()
     threadsafe (3c55b5e)
   o New event_base_update_cache_time() to set cached_tv to current
     time (212533e Abel Mathew)
   o Add event_self_cbarg() to be used in conjunction with
     event_new(). (ed36e6a Ross Lagerwall, fa931bb, 09a1906, 1338e6c,
     33e43ef)
   o Add a new libevent_global_shutdown() to free all globals before
     exiting. (041ca00 Mark Ellzey, f98c158, 15296d0, 55e991b)
   o Use getifaddrs to detect our interfaces if possible (7085a45)
   o Add event_base_get_running_event() to get the event* whose cb we
     are in (c5732fd, 13dad99)

 New functions and features: building
   o Implement --enable-gcc-hardening configure option (7550267 Sebastian\
 Hahn)

 New functions and features: evbuffers
   o Add evbuffer_add_file_segment() so one fd can be used efficiently
     in more than one evbuffer_add_file at a time (e72afae, c2d9884,
     3f405d2, 0aad014)
   o Fix windows file segment mappings (8254de7)
   o Allow evbuffer_ptr_set to yield a point just after the end of the
     buffer. (e6fe1da)
   o Allow evbuffer_ptr to point to position 0 in an empty evbuffer
     (7aeb2fd Nir Soffer)
   o Set the special "not found" evbuffer_ptr consistently. (e3e97ae Nir\
 Soffer)
   o support adding buffers to other buffers non-destructively
     (9d7368a Joachim Bauch)
   o prevent nested multicast references, reworked locking (26041a8
     Joachim Bauch)
   o New EVBUFFER_EOL_NUL to read NUL-terminated strings from an
     evbuffer (d7a8b36 Andrea Montefusco, 54142c9)
   o Make evbuffer_file_segment_types adaptable (c6bbbf1)
   o Added evbuffer_add_iovec and unit tests. (aaec5ac Mark Ellzey, 27b5398)
   o Add evbuffer_copyout_from to copy data from the middle of a
     buffer (27e2225)

 New functions and features: bufferevents
   o Allow users to set allow_dirty_shutdown (099d27d Catalin Patulea)
   o Tweak allow_dirty_shutdown documentation (a44cd2b)
   o Fix two issues in the allow_dirty_shutdown code. (f3b89de)
   o Add a bufferevent_getcb() to find a bufferevent's current
     callbacks (a650394)
   o bufferevent: Add functions to set/get max_single_read/write
     values. (998c813 Alexander Drozdov)
   o bev_ssl: Be more specific in event callbacks. evhttp in particular gets
     confused without at least one of BEV_EVENT_{READING|WRITING}. (f7eb69a
     Catalin Patulea)

 New functions and features: evconnlisteners
   o Support TCP_DEFER_ACCEPT sockopts for listeners (5880e4a Mark Ellzey,
     a270728)
   o Add another caveat to the TCP_DEFER_ACCEPT documentation (a270728)
   o Allow evconnlistener to be created in disabled state. (9593a33
     Alexander Drozdov)
   o The LEV_OPT_CLOSE_ON_EXEC flag now applies to accepted listener
     sockets too (4970329)

 Evhttp:
   o Add new evhttp_{connection_}set_timeout_tv() functions to set
     finger-grained http timeouts (6350e6c Constantine Verutin)
   o Performance tweak to evhttp_parse_request_line. (aee1a97 Mark Ellzey)
   o Add missing break to evhttp_parse_request_line (0fcc536)
   o Add evhttp callback for bufferevent creation; this lets evhttp
     support SSL. (8d3a850)
   o Remove calls to deprecated bufferevent functions from evhttp.c (4d63758)
   o evhttp: Add evhttp_foreach_bound_socket. (a2c48e3 Samy Al Bahra)

 Build improvements:
   o Add AC_USE_SYSTEM_EXTENSIONS to configure.in. Requires follow on
     patches for correctness and robustness. (1fa7dbe Kevin Bowling)
   o Filter '# define' statements from autoconf and generate
     event-private.h (321b558 Kevin Bowling)
   o Remove internal usage of _GNU_SOURCE (3b26541 Kevin Bowling)
   o Eliminate a couple more manual internal _GNU_SOURCE defines (c51ef93
     Kevin Bowling)
   o Add AC_GNU_SOURCE to the fallback case. (ea8fa4c Kevin Bowling)
   o Use a Configuration Header Template for evconfig-private.h (868f888
     Kevin Bowling)
   o Fix a comment warning and add evconfig-private.h to .gitignore
     (f6d66bc Kevin Bowling)
   o Include evconfig-private.h in internal files for great good. (0915ca0
     Kevin Bowling)
   o Backport libevent to vanilla Autoconf 2.59 (as used in RHEL5)
     (ad03952 Kevin Bowling)
   o Prefer the ./configure evconfig-private.h in MinGW, just in
     case. (f964b72 Kevin Bowling)
   o Shell hack for weird mkdir -p commands (fd7b5a8 Kevin Bowling)
   o Add evconfig-private to remaining files (ded0a09 Kevin Bowling)
   o Allow use of --enable-silent-rules for quieter compilation with
     automake 1.11 (f1f8514 Dave Hart)
   o Use "_WIN32", not WIN32: it's standard and we don't need to fake it
     (9f560b)
   o In configure, test for _WIN32 not WIN32. (85078b1 Peter Rosin)
   o Do not define WIN32 in Makefile.nmake (d41f3ea Peter Rosin)
   o Provide the autoconf m4 macros for the new OpenSSL via pkg-config
     stuff. (674dc3d Harlan Stenn)
   o Use pkg-config (if available) to handle OpenSSL. (1c63860 Harlan Stenn)
   o We need AM_CPPFLAGS when compiling bufferevent_openssl.c (6d2613b
     Harlan Stenn)
   o Fix OSX build: $(OPENSSL_INCS) needs to be after
     $(AM_CPPFLAGS). (46f1769 Zack Weinberg)
   o Make gcc warnings on by default, and --enable-gcc-warnings only add
     -Werror (d46517e Sebastian Hahn)
   o Split up extra-long AC_CHECK_FUNCS/HEADERS lines in configure.in\
 (88a30ad)
   o Move libevent 1.x headers to include/, to put all public headers in
     one place. (bbea8d6)
   o Put #ifdef around some files to support alternate build
     systems. (76d4c92 Ross Lagerwall)
   o Also make win32select.c conditional for IDE users (bf2c5a7)

 Debugging:
   o Add a magic number to debug_locks to better catch lock-coding
     errors. (b4a29c0 Dave Hart)
   o munge the debug_lock signature before freeing it: it might help us
     catch use-after-free (f28084d)
   o Added --enable-event-debugging in configure (bc7b4e4, a9c2c9a Mark\
 Ellzey)
   o Debug addition for printing usec on TIMEOUT debugging. (ac43ce0 Mark\
 Ellzey)
   o Added usec debug in another area for debug (3baab0d Mark Ellzey)
   o added timeout debug logs to include event ptr. (4b7d298 Mark Ellzey)
   o more event dbg updates (6727543 Mark Ellzey)
   o Clarify event_enable_debug_logging a little (6207826)
   o Make --enable-verbose-debug option match its help text (10c3450)
   o Add argument checks to some memory functions in `event.c'. (c8953d1
     Mansour Moufid)

 Testing:
   o More abstraction in test.sh (cd74c4e)
   o Add failing test for evbuffer_search_range. (8e26154 Nir Soffer)
   o Tweaks to return types with end-of-buf ptrs (9ab8ab8)
   o Add an (internal) usleep function for use by unit tests (f25d9d3)
   o Synchronize with upstream tinytest (6c81be7)
   o Make test-changelist faster (7622d26)
   o Reduce the timeout in the main/fork test. (ab14f7c)
   o New evhttp function to adjust initial retry timeout (350a3c4)
   o Make regression tests run over 3x faster. (67a1763)
   o Use test_timeval_diff_eq more consistently (b77b43f)
   o Allow more slop in deferred_cb_skew test; freebsd needs it (b9f7e5f)
   o When including an -internal.h header outside the main tree, do so
     early (95e2455)
   o Add a new test: test-fdleak which tests for fd leaks by creating many
     sockets. (2ef9278 Ross Lagerwall, f7af194, 1c4288f, etc)
   o Add a unit test for event_base_dump_events() (7afe48a, 8d08cce)
   o Test more bufferevent_ratelim features (c24f91a)

 Documentation:
   o Improve evbuffer_ptr documentation (261ba63)
   o added comments to describe refcounting of multicast chains (ba24f61
     Joachim Bauch)
   o Add doxygen for event_base_dump_events (cad5753)

 OSX:
   o Use "unlimited select" on OSX so that we can have more than
     FD_SETSIZE fds (1fb5cc6)

 KQueue:
   o Use SIG_IGN instead of a do-nothing handler for signal events with
     kqueue (148458e Zack Weinberg)

 evprc:
   o event_rpcgen.py now prints status information to stdout and errors to
     stderr. (ffb0ba0 Ross Lagerwall)

 Code improvement and refactoring:
   o Make event_reinit() more robust and maintainable (272033e)
   o Restore fast-path event_reinit() for slower backends (2c4b5de)
   o Check changelist as part of checking representational integrity (39b3f38)
   o Fix a compile warning in event_reinit (e4a56ed Sebastian Hahn)
   o Refactor the functions that run over every event. (c89b4e6)
   o Remove the last vestiges of _EVENT_USE_EVENTLIST (a3cec90)
   o Make event-config.h depend on Makefile.am (2958a5c)

 Build fixes:
   o Don't do clang version detection when disabling some flags (083296b
     Sebastian Hahn)

 C standards conformance:
   o Check for NULL return on win32 mm_calloc, and set ENOMEM. (af7ba69)
   o Convert event-config.h macros to avoid reserved identifiers (68120d9)
   o Generate event-config.h using the correct macros. (f82c57e)
   o Convert include-guard macro convention to avoid reserved identifiers
     (3f8c7cd)
   o Make event_rpcgen.py output conform to identifier conventions (372bff1)
   o Stop referring to an obsolete include guard in bench_http.h (5c0f7e0)
   o Make the generated event-config.h use correct include guards (639383a)
   o Fix all identifiers with names beginning with underscore. (cb9da0b)
   o Make event_rpcgen.py output conform to identifier conventions, more
     (bcefd24)
   o Fix some problems introduced by automated identifier cleanup script
     (c963534)
   o Have all visible internal function names end with an underscore.\
 (8ac3c4c)
   o Apply the naming convention to our EVUTIL_IS* functions (c7848fa)
   o Clean up lingering _identifiers. (946b584)
   o Fix doxygen to use new macro conventions (da455e9)

 Bugfixes:
   o Do not use system EAI/AI values if we are not using the system
     getaddrinfo. (7bcac07)

 Sample Code:
   o Fix up sample/event-test.c to use newer interfaces and make it
     actually work. (19bab4f Ross Lagerwall)
   o On Unix, remove event.fifo left by sample/event-test.c. (c0dacd2 Ross
     Lagerwall)
   o Rename event-test.c to event-read-fifo.c. (a5b370a Ross Lagerwall)
   o event-read-fifo: Use EV_PERSIST appropriately (24dab0b)





\
changes:
\
Changes in version 2.0.21-stable (18 Nov 2012)
BUGFIXES:
 o ssl: Don't discard SSL read event when timeout and read come close\
 together (576b29f)
 o ssl: Stop looping in "consider_reading" if reading is suspended. (f719b8a\
 Joachim Bauch)
 o ssl: No need to reserve space if reading is suspended. (1acf2eb Joachim\
 Bauch)
 o dns: Avoid a memory-leak on OOM in evdns. (73e85dd, f2bff75 George Danchev)
 o build: Use python2 rather than python (0eb0109 Ross Lagerwall)
 o build: Compile without warnings on mingw64 (94866c2)
 o build: Fix compilation on mingw64 with -DUSE_DEBUG (62bd2c4)
 o build: Make rpcgen_wrapper.sh work on systems without a "python2" binary\
 (f3009e4)
 o iocp: Close IOCP listener socket on free when LEV_OPT_CLOSE_ON_FREE is set\
 (cb853ea Juan Pablo Fernandez)
 o core: Avoid crash when event_pending() called with no event_base set on\
 event (e3cccf3)
 o misc: remove stray 'x' so print_err will compile when uncommented (ac35650\
 Patrick Pelletier)
 o tests: Fix renegotiation test to work around openssl 1.0.1 bug (c2f3086)
 o tests: Warn when openssl version in unit test mismatches compiled version.\
 (ac009f9)


Changes in version 2.0.20-stable (23 Aug 2012)
BUGFIXES:
 o core: Make event_pending() threadsafe. (be7a95c Simon Liu)
 o win32: avoid crash when waiting forever on zero fds. (160e58b)
 o evhttp: Fix a memory leak on error in evhttp_uriencode (11c8b31)
 o evbuffer: Avoid possible needless call to writev. Found by coverity.\
 (6a4ec5c)
 o evdns: memset sockaddr_in before using it. Found by coverity. (a1a0e67)
 o evhttp: Check more setsockopt return values when binding sockets. Found by\
 coverity (a0912e3)
 o evdns: Avoid segfault on weird timeout during name lookup. (dc32077 Greg\
 Hazel)
 o bufferevent_ssl: Correctly invoke callbacks when a SSL bufferevent reads\
 some and then blocks. (606ac43)


PORTABILITY FIXES:
 o check for arc4random_buf at runtime, on OS X (bff5f94 Greg Hazel)
 o Correctly check for arc4random_buf (fcec3e8 Sebastian Hahn)
 o Add explicit AC_PROG_SED to configure.in so all autoconfs will expose\
 $(SED) (ca80ea6)

BUILD FIXES:
 o Add GCC annotations so that the vsprintf functions get checked properly\
 (117e327)
 o Fix an unused variable warning on *BSD. (c0720c1)

UNIT TEST FIXES:
 o Fix a couple of memory leaks (found with Valgrind). (3b2529a Ross\
 Lagerwall)
 o Remove deadcode in http regression tests. Found by coverity. (5553346)
 o Fix possible uninitialized read in dns regression tests. Found by\
 coverity. (2259777)
 o Set umask before calling mkstemp in unit tests. Found by coverity (f1ce15d)
 o Fix various check-after-dereference issues in unit tests: found by\
 coverity (4f3732d)
 o Fix resource leaks in the unit tests; found by coverity (270f279)
 o Add some missing null checks to unit tests; found by coverity (f021c3d)
 o Avoid more crashes/bad calls in unit tests; found by coverity (3cde5bf)
 o Remove unused variable; spotted by coverity (6355b2a)
 o Add checks to various return values in unit tests. Found by coverity\
 (b9e7329)
 o Move assignment outside tt_assert in ssl unit tests. Appeases coverity.\
 (a2006c0)



Changes in version 2.0.19-stable (3 May 2012)
BUGFIXES (CORE):
 o Refactor event_persist_closure: raise and extract some common logic\
 (bec22b4)
 o If time has jumped so we'd reschedule a periodic event in the past,\
 schedule it for the future instead (dfd808c)
 o If a higher-priority event becomes active, don't continue running events\
 of the current priority. (2bfda40)

BUGFIXES (SSL):
 o Fixed potential double-readcb execution with openssl bufferevents.\
 (4e62cd1 Mark Ellzey)

BUGFIXES (DNS):
 o Cancel a probe request when the server is freed, and ignore cancelled\
 probe callbacks (94d2336 Greg Hazel)
 o Remove redundant DNS_ERR_CANCEL check, move comment (46b8060 Greg Hazel)
 o When retransmitting a timed-out DNS request, pick a fresh nameserver.\
 (3d9e52a)

DOCUMENTATION FIXES:
 o Fix a typo in the bufferevent documentation (98e9119)
 o Add missing ) to changelog; spotted by rransom (4c7ee6b)
 o Fix the website URL in the readme (f775521)

COMPILATION FIXES:
 o Fix a compilation error with MSVC 2005 due to use of mode_t (336dcae)
 o Configure with gcc older than 2.95 (4a6fd43 Sebastian Hahn)
 o Generate event-config.h with a single sed script (30b6f88 Zack Weinberg)

FORWARD-COMPATIBILITY:
 o Backport: provide EVENT_LOG_* names, and deprecate _EVENT_LOG_* (d1a03b2)

TESTING/DEBUGGING SUPPORT:
 o dns-example.c can now take a resolv.conf file on the commandline (6610fa5)
 o Make some evdns.c debug logs more verbose (d873d67)
 o Work-around a stupid gcov-breaking bug in OSX 10.6 (b3887cd)



Changes in version 2.0.18-stable (22 Mar 2012)
BUGFIXES (core):
 o Make uses of open() close-on-exec safe by introducing an internal\
 evutil_open_closeonexec. (d2b5f72 Ross Lagerwall, 03dce42)

BUGFIXES (kqueue):
 o Properly zero the kevent in kq_setup_kevent() (c2c7b39 Sebastian Hahn)

BUILD FIXES:
 o Added OPENSSL_LDFLAGS env variable which is appended to SSL checks.\
 (9278196 Mark Ellzey)
 o Changed OPENSSL_LDFLAGS to OPENSSL_LIBADD (2d67b63 Mark Ellzey)
 o Don't do clang version detection when disabling some flags (083296b\
 Sebastian Hahn)

BUGFIXES (dns):
 o Stop crashing in evdns when nameserver probes give a weird error (bec5068)


Changes in version 2.0.17-stable (10 Feb 2012)

BUGFIXES (core):
 o Be absolutely sure to clear pncalls before leaving event_signal_closure\
 (11f36a5)
 o check for sysctl before we use it (358c745 Mike Frysinger)
 o Remove bogus casts of socket to int before calling ev_callback (f032516)
 o Make evconnlistener work around bug in older Linux when getting nmapped\
 (ecfc720)
 o Fix a list corruption bug when using event_reinit() with signals present\
 (6e41cdc)
 o Fix a fd leak in event_reinit() (3f18ad1)
 o Do a memberwise comparison of threading function tables (c94a5f2 Nate R)
 o Use C-style comments in C source files (for compatibility with compilers\
 such as xlc on AIX). (d84d917 Greg Hewgill)
 o Avoid crash when freeing event_iocp and using event_set_mem_functions\
 (19715a6)
 o In the kqueue backend, do not report EBADF as an EV_READ (5d7bfa1 Nicholas\
 Marriott)

BUGFIXES (evbuffer and bufferevents):
 o Fix behavior of evbuffer_peek(buf,-1,NULL,NULL,0) (c986f23 Zack Weinberg)
 o Loop on filtering SSL reads until we are blocked or exhausted. (5b4b812)

BUGFIXES (evhttp):
 o Force strict validation of HTTP version in response. (790f6b3 Catalin\
 Patulea)

BUGFIXES (evdns):
 o evdns: fix a bug in circular-queue implementation (d6094b1)

BUILD FIXES:
 o Fix a silly compilation error with the sun compiler (1927776 Colin Watt)
 o Suppress a gcc warning from ignoring fwrite return in http-sample.c\
 (7206e8c)

DOCUMENTATION FIXES:
 o Slightly clarify evbuffer_peek documentation (7bbf6ca)
 o Update copyright notices to 2012 (e49e289)

NEW APIS:
 o Backport evhttp_connection_get_bufferevent to Libevent 2.0 (da70fa7 Arno\
 Bakker)

TESTS AND TEST FIXES:
 o Fix a race condition in the dns/bufferevent_connect_hostname test.\
 (cba48c7)
 o Add function to check referential integrity of an event_base (27737d5)
 o Check event_base correctness at end of each unit test (3312b02)
 o Workaround in the unit tests for an apparent epoll bug in Linux 3.2\
 (dab9187)
 o Better workaround for Linux 3.2 edge-triggered epoll bug (9f9e259)

Changes in version 2.0.16-stable (18 Nov 2011)
BUGFIXES (core):
 o More detailed message in case of libevent self-debugging failure. (9e6a4ef\
 Leonid Evdokimov)
 o epoll: close fd on alloc fail at initialization (1aee718 Jamie Iles)
 o Fix compile warning from saying event2/*.h inside a comment (447b0ba)
 o Warn when unable to construct base because of failing make_base_notifiable\
 (4e797f3)
 o Don't try to make notifiable event_base when no threading fns are\
 configured (e787413)

BUGFIXES (evbuffer):
 o unit test for remove_buffer bug (90bd620 Greg Hazel)
 o Fix an evbuffer crash in evbuffer_remove_buffer() (c37069c)

BUGFIXES (bufferevent_openssl):
 o Refactor amount-to-read calculations in buffervent_ssl consider_reading()\
 (a186e73 Mark Ellzey)
 o Move SSL rate-limit enforcement into bytes_to_read() (96c562f)
 o Avoid spinning on OpenSSL reads (2aa036f Mark Ellzey)

BUGFIXES (dns)
 o Empty DNS reply with OK status is another way to say NODATA. (21a08d6\
 Leonid Evdokimov)

TESTING:
 o Tests for 94fba5b and f72e8f6 (d58c15e Leonid Evdokimov)
 o Test for commit aff6ba1 (f7841bf Leonid Evdokimov)
 o Style and comment tweaks for dns/leak* tests (5e42202)
 o improve test to remove at least one buffer from src (7eb52eb Greg Hazel)

DOCUMENTATION:
 o Add note about evhttp_send_reply_end to its doxygen (724bfb5)
 o Update copyright dates to 2011. (3c824bd)
 o Fix typo in whatsnew-2.0.txt (674bc6a Mansour Moufid)
 o Improve win32 behavior of dns-sample.c code (a3f320e Gisle Vanem)



Changes in version 2.0.15-stable (12 Oct 2011)
BUGFIXES (DNS):
 o DNS: add ttl for negative answers using RFC 2308 idea. (f72e8f6 Leonid\
 Evdokimov)
 o Add DNS_ERR_NODATA error code to handle empty replies. (94fba5b Leonid\
 Evdokimov)

BUFGIXES (bufferevents and evbuffers):
 o Make evbuffer callbacks get the right n_added value after evbuffer_add\
 (1ef1f68 Alex)
 o Prefer mmap to sendfile unless a DRAINS_TO_FD flag is set. Allows add_file\
 to work with SSL. (0ba0af9)

BUGFIXES (event loop):
 o When a signal callback is activated to run multiple times, allow\
 event_base_loopbreak to work even before they all have run. (4e8eb6a)

DOCUMENTATION FIXES:
 o Fix docstring in dns.h (2b6eae5 Leonid Evdokimov)
 o refer to non-deprecated evdns functions in comments (ba5c27d Greg Hazel)

BUILD AND TESTING FIXES:
 o le-proxy and regress depend on openssl directly (9ae061a Sergey Avseyev)
 o Use _SOURCES, not _sources, in sample/Makefile.am (7f82382)
 o Fixed compiler warnings for unchecked read/write calls. (c3b62fd Mark\
 Ellzey)
 o Make write-checking fixes use tt_fail_perror (2b76847)
 o Fix some "value never used" warnings with gcc 4.6.1 (39c0cf7)



Changes in version 2.0.14-stable (31 Aug 2011)
BUGFIXES (bufferevents and evbuffers):
 o Propagate errors on the underlying bufferevent to the user. (4a34394\
 Joachim Bauch)
 o Ignore OpenSSL deprecation warnings on OS X (5d1b255 Sebastian Hahn)
 o Fix handling of group rate limits under 64 bytes of burst (6d5440e)
 o Solaris sendfile: correctly detect amount of data sent (643922e Michael\
 Herf)
 o Make rate limiting work with common_timeout logic (5b18f13)
 o clear read watermark on underlying bufferevent when creating filtering bev\
 to fix potentially failing fragmented ssl handshakes (54f7e61 Joachim Bauch)

BUGFIXES (IOCP):
 o IOCP: don't launch reads or writes on an unconnected socket (495c227)
 o Make IOCP rate-limiting group support stricter and less surprising.\
 (a98da7b)
 o Have test-ratelim.c support IOCP (0ff2c5a)
 o Make overlapped reads result in evbuffer callbacks getting invoked\
 (6acfbdd)
 o Correctly terminate IO on an async bufferevent on bufferevent_free\
 (e6af35d)

BUGFIXES (other):
 o Fix evsig_dealloc memory leak with debugging turned on. (9b724b2 Leonid\
 Evdokimov)
 o Fix request_finished memory leak with debugging turned on. (aff6ba1 Leonid\
 Evdokimov)

BUILD AND TESTING FIXES:
 o Allow OS-neutral builds for platforms where some versions have\
 arc4random_buf (b442302 Mitchell Livingston)
 o Try to fix 'make distcheck' errors when building out-of-tree (04656ea Dave\
 Hart)
 o Clean up some problems identified by Coverity. (7c11e51 Harlan Stenn)


Changes in version 2.0.13-stable (18 Jul 2011)
BUGFIXES
 o Avoid race-condition when initializing global locks (b683cae)
 o Fix bug in SSL bufferevents backed by a bev with a write high-watermarks\
 (e050703 Joachim Bauch)
 o Speed up invoke_callbacks on evbuffers when there are no callbacks\
 (f87f568 Mark Ellzey)
 o Avoid a segfault when all methods are disabled or broken (27ce38b)
 o Fix incorrect results from evbuffer_search_eol(EOL_LF) (4461f1a)
 o Add some missing checks for mm_calloc failures (89d5e09)
 o Replace an assertion for event_base_free(NULL) with a check-and-warn\
 (09fe97d)
 o Report kqueue ebadf, epipe, and eperm as EV_READ events (1fd34ab)
 o Check if the `evhttp_new_object' function in `http.c' returns NULL.\
 (446cc7a Mansour Moufid)
 o Use the correct printf args when formatting size_t (3203f88)
 o Complain if the caller tries to change threading cbs after setting them\
 (cb6ecee)

DOCUMENTATION FIXES AND IMPROVEMENTS
 o Revise the event/evbuffer/bufferevent doxygen for clarity and accuracy\
 (2888fac)
 o Update Doxyfile to produce more useful output (aea0555)

TEST FIXES
 o Fix up test_evutil_snprintf (caf695a)
 o Fix tinytest invocation from windows shell (57def34 Ed Day)

BUILD FIXES
 o Use AM_CPPFLAGS in sample/Makefile.am, not AM_CFLAGS (4a5c82d)
 o Fix select.c compilation on systems with no NFDBITS (49d1136)
 o Fix a few warnings on OpenBSD (8ee9f9c Nicholas Marriott)
 o Don't break when building tests from git without python installed (b031adf)
 o Don't install event_rpcgen.py when --disable-libevent-install is used\
 (e23cda3 Harlan Stenn)
 o Fix AIX build issue with TAILQ_FOREACH definition (e934096)


Changes in version 2.0.12-stable (4 Jun 2011)
BUGFIXES
 o Fix a warn-and-fail bug in kqueue by providing kevent() room to report\
 errors (28317a0)
 o Fix an assert-inducing fencepost bug in the select backend (d90149d)
 o Fix failing http assertion introducd in commit 0d6622e (0848814 Kevin Ko)
 o Fix a bug that prevented us from configuring IPv6 nameservers. (74760f1)
 o Prevent size_t overflow in evhttp_htmlescape. (06c51cd Mansour Moufid)
 o Added several checks for under/overflow conditions in evhttp_handle_chunke\
d_read (a279272 Mark Ellzey)
 o Added overflow checks in evhttp_read_body and evhttp_get_body (84560fc\
 Mark Ellzey)

DOCUMENTATION:
 o Add missing words to EVLOOP_NONBLOCK documentation (9556a7d)

BUILD FIXES
 o libssl depends on libcrypto, not the other way around. (274dd03 Peter\
 Rosin)
 o Libtool brings in the dependencies of libevent_openssl.la automatically\
 (7b819f2 Peter Rosin)
 o Use OPENSSL_LIBS in Makefile.am (292092e Sebastian Hahn)
 o Move the win32 detection in configure.in (ceb03b9 Sebastian Hahn)
 o Correctly detect openssl on windows (6619385 Sebastian Hahn)
 o Fix a compile warning with zlib 1.2.4 and 1.2.5 (5786b91 Sebastian Hahn)
 o Fix compilation with GCC 2, which had no __builtin_expect (09d39a1 Dave\
 Hart)
 o Fix new warnings from GCC 4.6 (06a714f)
 o Link with -lshell32 and -ladvapi32 on Win32. (86090ee Peter Rosin)
 o Make the tests build when OpenSSL is not available. (07c41be Peter Rosin)
 o Bring in the compile script from automake, if needed. (f3c7a4c Peter Rosin)
 o MSVC does not provide S_ISDIR, so provide it manually. (70be7d1 Peter\
 Rosin)
 o unistd.h and sys/time.h might not exist. (fe93022 Peter Rosin)
 o Make sure TINYTEST_LOCAL is defined when building tinytest.c (8fa030c\
 Peter Rosin)
 o Fix winsock2.h #include issues with MSVC (3d768dc Peter Rosin)
 o Use evutil_gettimeofday instead of relying on the system gettimeofday.\
 (0de87fe Peter Rosin)
 o Always use evutil_snprintf, even if OS provides it (d1b2d11 Sebastian Hahn)
 o InitializeCriticalSectionAndSpinCount requires _WIN32_WINNT >= 0x0403.\
 (816115a Peter Rosin)
 o cygwin: make it possible to build DLLs (d54d3fc)



Changes in version 2.0.11-stable (27 Apr 2011)
  [Autogenerated from the Git log, sorted and cleaned by hand.]
BUGFIXES:
 o Fix evport handling of POLLHUP and POLLERR (b42ce4b)
 o Fix compilation on Windows with NDEBUG (cb8059d)
 o Check for POLLERR, POLLHUP and POLLNVAL for Solaris event ports (0144886\
 Trond Norbye)
 o Detect and handle more allocation failures. (666b096 Jardel Weyrich)
 o Use event_err() only if the failure is truly unrecoverable. (3f8d22a\
 Jardel Weyrich)
 o Handle resize failures in the select backend better. (83e805a)
 o Correctly free selectop fields when select_resize fails in select_init\
 (0c0ec0b)
 o Make --enable-gcc-warnings a no-op if not using gcc (3267703)
 o Fix a type error in our (unused) arc4random_stir() (f736198)
 o Correctly detect and stop non-chunked http requests when the body is too\
 long (63a715e)
 o Have event_base_gettimeofday_cached() always return wall-clock time\
 (a459ef7)
 o Workaround for http crash bug 3078187 (5dc5662 Tomash Brechko)
 o Fix incorrect assertions and possible use-after-free in evrpc_free()\
 (4b8f02f Christophe Fillot)
 o Reset outgoing http connection when read data in idle state. (272823f\
 Tomash Brechko)
 o Fix subtle recursion in evhttp_connection_cb_cleanup(). (218cf19 Tomash\
 Brechko)
 o Fix the case when failed evhttp_make_request() leaved request in the\
 queue. (0d6622e Tomash Brechko)
 o Fix a crash bug in evdns server circular list code (00e91b3)
 o Handle calloc failure in evdns. (Found by Dave Hart) (364291e)
 o Fix a memory leak on win32 socket->event map. (b4f89f0)
 o Add a forgotten NULL check to evhttp_parse_headers (12311ff Sebastian Hahn)
 o Fix possible NULL-deref in evdns_cancel_request (5208544 Sebastian Hahn)

PORTABILITY:
 o Fall back to sscanf if we have no other way to implement strtoll (453317b)
 o Build correctly on platforms without sockaddr_storage (9184563)
 o Try to build correctly on platforms with no IPv6 support (713c254)
 o Build on systems without AI_PASSIVE (cb92113)
 o Fix http unit test on non-windows platforms without getaddrinfo (6092f12)
 o Do not check for gethostbyname_r versions if we have getaddrinfo (c1260b0)
 o Include arpa/inet.h as needed on HPUX (10c834c Harlan Stenn)
 o Include util-internal.h as needed to build on platforms with no\
 sockaddr_storage (bbf5515 Harlan Stenn)
 o Check for getservbyname even if not on win32. (af08a94 Harlan Stenn)
 o Add -D_OSF_SOURCE to fix hpux builds (0b33479 Harlan Stenn)
 o Check for allocation failures in apply_socktype_protocol_hack (637d17a)
 o Fix the check for multicast or broadcast addresses in evutil_check_interfa\
ces (1a21d7b)
 o Avoid a free(NULL) if out-of-memory in evdns_getaddrinfo. Found by Dave\
 Hart (3417f68)

DEFENSIVE PROGRAMMING:
 o Add compile-time check for AF_UNSPEC==PF_UNSPEC (3c8f4e7)

BUGS IN TESTS:
 o Fix test.sh output on solaris (b4f89b6 Dave Hart)
 o Make test-eof fail with a timeout if we never get an eof. (05a2c22 Harlan\
 Stenn)
 o Use %s with printf in test.sh (039b9bd)
 o Add an assert to appease clang's static analyzer (b0ff7eb Sebastian Hahn)
 o Add a forgotten return value check in the unit tests (3819b62 Sebastian\
 Hahn)
 o Actually send NULL request in http_bad_request_test (b693c32 Sebastian\
 Hahn)
 o add some (void) casts for unused variables (65707d7 Sebastian Hahn)
 o Refactor test_getaddrinfo_async_cancel_stress() (48c44a6 Sebastian Hahn)
 o Be nice and "handle" error return values in sample code (4bac793 Sebastian\
 Hahn)
 o Check return value of evbuffer_add_cb in tests (93a1abb Sebastian Hahn)
 o Remote some dead code from dns-example.c (744c745 Sebastian Hahn)
 o Zero a struct sockaddr_in before using it (646f9fe Sebastian Hahn)

BUILD FIXES:
 o Fix warnings about AC_LANG_PROGRAM usage (f663112 Sebastian Hahn)
 o Skip check for zlib if we have no zlib.h (a317c06 Harlan Stenn)
 o Fix autoconf bracket issues; make check for getaddrinfo include netdb.h\
 (833e5e9 Harlan Stenn)
 o Correct an AM_CFLAGS to an AM_CPPFLAGS in test/Makefile.am (9c469db Dave\
 Hart)
 o Fix make distcheck & installation of libevent 1 headers (b5a1f9f Dave Hart)
 o Fix compilation under LLVM/clang with --enable-gcc-warnings (ad9ff58\
 Sebastian Hahn)

FEATURES:
 o Make URI parser able to tolerate nonconformant URIs. (95060b5)

DOCUMENTATION:
 o Clarify event_set_mem_functions doc (926f816)
 o Correct evhttp_del_accept_socket documentation on whether socket is closed\
 (f665924)
 o fix spelling mistake in whatsnew-2.0.txt (deb2f73)
 o Fix sample/http-server ipv6 fixes (eb692be)
 o Comment internal headers used in sample code. (4eb281c)
 o Be explicit about how long event loops run in event.h documentation\
 (f95bafb)
 o Add comment to configure.in to explain gc-sections test logic (c621359)
 o Fix a couple of memory leaks in samples/http-server.c. Found by Dave Hart.\
 (2e9f665)

BUILD IMPROVEMENTS:
 o Use the gcc -ffunction-segments feature to allow gc when linking with\
 static libevent (0965c56 Dave Hart)
 o Add configure options to disable installation, regression tests (49e9bb7\
 Dave Hart)



Changes in version 2.0.10-stable (16 Dec 2010)
  [Autogenerated from the Git log, sorted and cleaned by hand.]
BUGFIXES
 o Minor fix for IOCP shutdown handling fix (2599b2d Kelly Brock)
 o Correctly notify the main thread when activating an event from a subthread\
 (5beeec9)
 o Reject overlong http requests early when Expect:100-continue is set\
 (d23839f Constantine Verutin)
 o EVUTIL_ASSERT: Use sizeof() to avoid "unused variable" warnings with\
 -DNDEBUG. (b63ab17 Evan Jones)

CODE CLEANUPS
 o bufferevent-internal.h: Use the new event2/util.h header, not evutil.h\
 (ef5e65a Evan Jones)
 o Use relative includes instead of system includes consistently. (fbe64f2\
 Evan Jones)
 o Make whitespace more consistent

TESTING
 o tests: Use new event2 headers instead of old compatibility headers.\
 (4f33209 Evan Jones)

DOCUMENTATION
 o Document that the cpu_hint is only used on Windows with IOCP for now\
 (57689c4)
 o Add stuff to "whats new in 2.0" based on reading include changes since\
 August. (18adc3f)


Changes in 2.0.9-rc (30 Nov 2010):
  [Autogenerated from the Git log, sorted and cleaned by hand.]
NEW AND MODIFIED APIs
 o Add a function to change a listener's callback. (46ee061)
 o Make evbuffer_add_file take ev_off_t, not off_t (ac7e52d)
 o Make rate-limits go up to SIZE_MAX/EV_SSIZE_MAX, not just INT32_MAX\
 (2cbb1a1)
 o Add a bufferevent_get_base function (aab49b6)

MAJOR BUGFIXES
 o Disable changelist for epoll by default because of Linux dup() bug; add an\
 option and/or an envvar to reenable it for speed. (9531763)
 o Fix a 100%-CPU bug where an SSL connection would sometimes never stop\
 trying to write (1213d3d)
 o Fix a nasty bug related to use of dup() with epoll on Linux (c281aba)
 o Fix bugs in posix thread-id calculation when sizeof(pthread_t) !=\
 sizeof(long) (fbaf077)
 o Fix some ints to evutil_socket_t; make tests pass on win64. (f817bfa\
 Dimitre Piskyulev)
 o Set _EVENT_SIZEOF_VOID_P correctly on win32 and win64 (1ae82cd Dimitre\
 Piskyulev)
 o Avoid double-invocation of user callback with EVUTIL_EAI_CANCEL (abf01ed)
 o Set SO_UPDATE_ACCEPT_CONTEXT on sockets from AcceptEx so that shutdown()\
 can work (52aa419)
 o When closing a filtering bufferevent, clear callbacks on the underlying\
 bufferevent (fc7b1b0)

NEW AND MODIFIED HTTP APIs
 o Add evhttp_parse_query_str to be used with evhttp_uri_parse. (2075fbc)
 o Add evhttp_response_code to remove one more reason to include\
 http_struct.h (22e0a9b)
 o Define enumerators for all HTTP methods, including PATCH from RFC5789\
 (75a7341 Felix Nawothnig)
 o Functions to actually use evhttp_bound_socket with/as evconnlistener.\
 (006efa7)
 o Add evhttp_request_get_command so code can tell GET from POST without\
 peeking at the struct. (49f4bf7)
 o Introduce absolute URI parsing helpers. (86dd720 Pavel Plesov)
 o Revise evhttp_uri_parse implementation to handle more of RFC3986 (eaa5f1d)
 o Add evhttp_connection_get_base() to get the event_base from an http\
 connection (cd00079)
 o Let evhttp_parse_query return -1 on failure (b1756d0)
 o New evhttp_uri(encode|decode) functions to handle + and NUL characters\
 right (a8148ce)
 o Add evhttp_response_code to remove one more reason to include\
 http_struct.h (22e0a9b)
 o Tweak interface for allowed methods (f5b391e)
 o Add evhttp server alias interface, correct flagging of proxy requests.\
 (aab8c38 Christopher Davis)

HTTP BUGFIXES
 o Add some comments to http.c and make a few functions static. (90b3ed5)
 o Fix Content-Length when trying send more than 100GB of data (!) on an\
 evhttp. (525da3e)
 o Fix a bug where we would read too much data in HTTP bodies or requests.\
 (58a1cc6)
 o Correctly count req->body_size on http usage without Content-Length\
 (8e342e5)
 o Avoid missed-request bug when entire http request arrives before data is\
 flushed (74c0e86)
 o reset "chunked" flag when sending non-chunked reply (aa5f55f Joachim Bauch)
 o evhttp_encode_uri encodes all reserved characters, including !$'()*+,/:=@\
 (2e63a60)
 o Replace exact-version checks for HTTP/1.1 with >= or < checks (647e094)
 o evhttp: Return 501 when we get an unrecognized method, not 400. (536311a)
 o Don't disable reading from the HTTP connection after sending the request\
 to be notified of connection-close in time (c76640b Felix Nawothnig)
 o Never call evhttp_readcb while writing. (0512487)
 o Try to fix an assertion failure related to close detection (0faaa39)
 o Correctly detect timeouts during http connects (04861d5)
 o Preliminary support for Continue expectation in evhttp. (fa9305f\
 Christopher Davis)

OTHER BUGFIXES
 o Correct logic for realigning a chain in evbuffer_add (e4f34e8)
 o Fix a minor syntax error that most compilers didn't care about (e56ff65)
 o Fix some uses of int for socket in regress (5d389dc)
 o Check return value for ioctlsocket on win32 (f5ad31c Trond Norbye)
 o Fix som event_warns that should have been event_warnx (19c71e7)
 o Fix signal handler types for win64. (b81217f)
 o Try to clear up more size_t vs int/long issues. (598d133)
 o Make sure IOCP evconnlistener uses virtual events. (7b40a00 Christopher\
 Davis)
 o Don't free evdns_request handles until after the callback is invoked\
 (9ed30de)
 o Fix some more cancel-related bugs in getaddrinfo_async (c7cfbcf)
 o Make evdns_getaddrinfo_cancel threadsafe (d51b2fc)
 o Only clear underlying callbacks when the user hasn't reset them. (1ac5b23)
 o Fix bug in bufferevent_connect on an openssl bufferevent that already had\
 an fd (4f228a1)
 o Resolve an evport bug in the thread/forking test (3a67d0b)
 o Make sure the CLOEXEC flag is set on fds we open for base notification\
 (3ab578f)
 o Fix IRIX build.  sa_family collides with a #define in sys/socket.h on\
 IRIX. (e874982 Kevin Bowling)
 o If not WIN32, include <sys/socket.h> in event2/util.h. (1cd45e5 Kevin\
 Bowling)
 o Fix some C99-style comments to work with the xlC compiler. (c2e5e22 Kevin\
 Bowling)
 o Add some checks since lack of TAILQ_FOREACH doesn't imply lack of FIRST,\
 END, NEXT, or INSERT_BEFORE.  Quiet some warnings in XL C. (c4dc335 Kevin\
 Bowling)
 o Reworked AIX __ss_family workaround to use AC_STRUCT_MEMBER. (2e2a3d7\
 Kevin Bowling)
 o Take select from <sys/select.h> when testing in autoconf.  AIX build fix.\
 (a3a9f6b Kevin Bowling)
 o Fix snprintf related failures on IRIX. (3239073 Kevin Bowling)
 o Remove _event_initialized(); make event_initialized() a function(); make\
 it consistent on windows and non-windows (652024b)
 o Do not let EVLOOP_ONCE exit the loop until all deferred callbacks have run\
 (2d5e1bd)
 o Make EVLOOP_ONCE ignore internal events (0617a81)
 o Possible crash fix when freeing an underlying bufferevent of an openssl\
 bufferevent (29f7623)

HTTP CLEANUPS
 o Stop using Libevent-1 headers in regress_http (1f507d7)
 o Modernize header usage in bench_http.c (e587069)
 o fix signed/unsigned warnings in http.c (74a91e5)
 o Update the HTTP regression tests to use Libevent2 apis for non-http stuff\
 (d9ffa89)
 o Start porting http tests to not use legacy interfaces (8505a74)
 o Convert the rest of the http tests to be non-legacy unit tests. (9bb8239)
 o Rename the confusing "base" static variable in regress_http.c (353402a)
 o Stop accessing http request struct directly from in the unit tests.\
 (0b137f4)
 o Refactor http version parsing into a single function (a38140b)

TESTING
 o Improvements to tinytest_macros.h (ad923a1)
 o Add a huge pile of tests for the new URI functions, and make them pass.\
 (a5a76e6)
 o Unit tests for evhttp_uri_set* (bc98f5e)
 o Increase the skew tolerance to 2 seconds in thread/deferred_cb_skew\
 (f806476 Christopher Davis)
 o Reorder backends in test.sh to match preference order in event.c (ece974f)
 o Add a stress test for getaddrinfo_cancel (da1bf52)
 o Units test for unexpected evhttp methods. (75e3320)

DOCUMENTATION
 o Document behavior of URI parsing more thoroughly. (3a33462)
 o Document that two bufferevent functions only work on socket bufferevents\
 (70e1b60)
 o add a requested docstring for event_rpcgen.CommandLine.__init__ (f1250eb)
 o Fix a mistake in http documentation found by Julien Blache (229714d)
 o Add a basic example of how to write a static HTTP server. (4e794d5)
 o Document event_get_assignment (88be27d)
 o Note that reentrant calls to libevent from logging cbs may fail badly\
 (e431bcd)
 o Clarify EVLOOP_* documentation to be more precise. (057a514)

CLEANUPS
 o Simplify the logic for choosing EPOLL_CTL_ADD vs EPOLL_CTL_MOD (2c66983)
 o Rename "size" variables in win32select that were really fd counts.\
 (b6a158c)
 o Fix even more win64 warnings (7484df6)
 o Fix even more win64 warnings: buffer, event_tagging, http, evdns, evrpc\
 (545a611)
 o Fix more wn64 warnings. (34b84b9 Christopher Davis)
 o Use the label_len local variable in evdns instead of recalculating it over\
 and over (ba01456)
 o Fix some irix compilation warnings spotted by Kevin Bowling (7bcace2)



Changes in 2.0.8-rc (14 Oct 2010):
 [Autogenerated from the Git log, sorted and cleaned by hand.]
NEW APIS
 o Add error callback to evconnlistener (c4be8d8 Simon Perreault)
 o Add a LEV_OPT_THREADSAFE option for threadsafe evconnlisteners (127d4f2)

CHANGED BEHAVIOR
 o Correct logic on disabling underlying bufferevents when disabling a filter\
 (ac27eb8)

BUGFIXES
 o Obey enabled status when unsuspending (040a019 Simon Perreault)
 o Warn when using the error-prone EV_SIGNAL interface in an error-prone way.\
  Also, fix a couple of race conditions in signal.c (720bd93)
 O Make default signal backend fully threadsafe (95a7d41)
 o Put internal events at highest priority (90651b3)
 o Fix warnings in the main codebase flagged by -Wsigned-compare (9c8db0,\
 5e4bafb, 5c214a, 6be589a, e06f514)
 o Fix compile in kqueue.c (b395392 Sebastian Hahn)
 o Do not search outside of the system directory for windows DLLs (d49b5e3)
 o Fix a spurious-call bug on epoll.c (0faaee0)
 o Send a shutdown(SHUT_WR) before closing an http connection (e0fd870\
 Christopher Davis)
 o Fix warnings on mingw with gcc 4.5 (5b7a370)
 o Fix an EINVAL on evbuffer_write_iovec on OpenSolaris. (fdc640b)
 o Fix allocation error for IOCP listeners. Probably harmless, since struct\
 event is big (481ef92)
 o Make iocp/listener/error work; don't accept again if lev is disabled.\
 (62b429a Christopher Davis)
 o Handle rate-limiting for reading on OpenSSL bufferevents correctly.\
 (819b171)
 o Fix serious bugs in per-bufferevent rate-limiting code (34d64f8)
 o Avoid spurious reads from just-created open openssl bufferevents (223ee40)
 o Fix a case where an ssl bufferevent with CLOSE_ON_FREE didn't close its fd\
 (93bb7d8)
 o The corrected bufferevent filter semantics let us fix our openssl tests\
 (34331e4)

TESTING
 o Make SSL tests cover enabling/disabling EV_READ. (a5ce9ad)
 o Bump to the latest version of tinytest (f0bd83e)
 o Unit tests for listener error callbacks (045eef4)
 o New unit test for ssl bufferevents starting with connected SSLs. (02f6259)

DEBUGGABILITY
 o Make debugging output for epoll backend more comprehensive (ec2b05e)
 o Make event.c debugging messages report fds (e119899)
 o Make the --enable-gcc-warnings option include signed comparison warnings\
 (d3b096c)

DEADCODE REMOVAL
 o Remove the now-useless evsig_caught and evsig_process (4858b79)
 o Remove event_base.evsigbase; nothing used it. (38d0960)



Changes in 2.0.7-rc (9 Sep 2010):
 [Autogenerated from the Git log, sorted and cleaned by hand.]
NEW APIS
 o Expose a evdns_base_nameserver_sockaddr_add() function to add a nameserver\
 by sockaddr (1952143)
 o Add event_config_set_num_cpus_hint() for tuning win32 IOCP thread pools,\
 etc. (2447fe8 Christopher Davis)

BUGFIXES
 o Fix a nasty dangling-event bug when using rate-limiting groups (0bffe43)
 o Clean up syntax on TAILQ_ENTRY() usage to build correctly with recent MSVC\
 (60433a0 Gilad Benjamini)
 o Make definition of WIN32_LEAN_AND_MEAN in event.h conditional (3920172\
 Gilad Benjamini)
 o Correctly detect failure to delete bufferevent read-timeout event (da6e7cd)
 o Set close-on-exec bit for filedescriptors created by dns subsystem\
 (d0b8843)
 o Fix kqueue correctness test on x84_64 (6123d12)
 o Detect events with no ev_base; warn instead of crashing (f1074b7)
 o Fix an issue with forking and signal socketpairs in select/poll backends\
 (d61b2f3)
 o Stop using global arrays to implement the EVUTIL_ctype functions (1fdec20)
 o On windows, make lock/thread function tables static (5de2bcb)
 o Close th_notify_fds and open a new pair on reinit (495ed66)
 o Declare signal handler function as "__cdecl" on Windows (f0056d0)
 o Use the _func() replacements for open, fstat, etc in evutil.c on win32\
 (e50c0fc)
 o Only process up to MAX_DEFERRED deferred_cbs at a time (17a14f1\
 Christopher Davis)

THREADING BUGFIXES
 o Avoid deadlock when activating signals (970e6ad)
 o Add a condition variable backend, with implementations for pthreads and\
 win32 (d4977b5)
 o Use conditions instead of current_event_lock to fix a deadlock (e0972c2)
 o Fix logic error in win32 TRY_LOCK that caused problems with rate-limiting\
 (4c32b9d)
 o Avoid needlessly calling evthread_notify_base() when the loop is not\
 running (c7a06bf)
 o Minimize calls to base_notify implementation functions, thereby avoiding\
 needless syscalls (4632b78)

IOCP BUGFIXES
 o IOCP-related evbuffer fixes (03afa20 Christopher Davis)
 o Stop IOCP when freeing the event_base (d844242 Christopher Davis)
 o Some IOCP bufferevent tweaks (76f7e7a Christopher Davis)

TESTS
 o Make the regress_pthread.c tests work on windows with current test APIs\
 (d74ae38)
 o Add a unit test for conditions (5fb1095)
 o Allow more than one copy of regression tests to run at once (a97320a)
 o Fix event_del(0) instance in bench.c (b0f284c Shuo Chen)
 o Fix a few memory leaks in the tests (1115366)
 o IOCP-related unit test tweaks (499452f Christopher Davis)
 o Improve testing of when thread-notification occurs (ce85280)

BUILD AND DISTRIBUTION
 o Add pkgconfig files for libevent_{openssl,pthreads} (ebcb1f0)
 o Change include order in Makefile.nmake (4022b28)
 o Make include/event2/event-config.h not included in source dist (a4af9be)
 o Honor NDEBUG; build without warnings with NDEBUG; make NDEBUG always-off\
 in unit test code (743f866)
 o Declare evkeyvalq and event_list even if event_struct.h comes before\
 sys/queue.h (d3ceca8)
 o Move evkeyvalq into a separate header for evhttp_parse_query users\
 (ca9048f)
 o Prefer autoreconf -ivf to manual autogen.sh (7ea8e89)

CLEANUP
 o Completely remove the (mostly-removed) obsolete thread functions (3808168)
 o Rename regress_pthread.c to regress_thread.c (041989f)
 o Make defer-internal.h use lock macros, not direct calls to lock fns\
 (5218d2a)

DOCUMENTATION
 o Document that DNS_NO_SEARCH is an obsolete alias for DNS_QUERY_NO_SEARCH\
 (33200e7)
 o Update the whatsnew-2.0.txt document (4991669)



Changes in 2.0.6-rc (6 Aug 2010):
 [Autogenerated from the Git log, sorted by hand.]
DOCUMENTATION
 o Document a change in the semantics of event_get_struct_event_size()\
 (e21f5d1)
 o Add a comment to describe our plan for library versioning (9659ece)
 o Fix sentence fragment in docs for event_get_struct_event_size() (7b259b6)

NEW FEATURES AND INTERFACE CHANGES
 o Remove the obsolete evthread interfaces (c5bab56)
 o Let evhttp_send_error infer the right error reasons (3990669)
 o Add a function to retrieve the other side of a bufferevent pair (17a8e2d)
 o Add bufferevent_lock()/bufferevent_unlock() (215e629)
 o Stop asserting when asked for a (unsupported) TCP dns port. Just return\
 NULL. (7e87a59)
 o Replace (unused,always 0) is_tcp argument to evdns_add_server_port*() with\
 flags (e1c1167)
 o Constify a couple of arguments to evdns_server_request_add_*_reply\
 (cc2379d)
 o Add an interface to expose min_share in ratelimiting groups (6ae53d6)

BUGFIXES
 o Avoid event_del on uninitialized event in event_base_free (6d19510)
 o Add some missing includes to fix Linux build again (75701e8)
 o Avoid close of uninitialized socket in evbuffer unit test (bda21e7)
 o Correctly recognize .255 addresses as link-local when looking for\
 interfaces (8c3452b)
 o If no evdns request can be launched, return NULL, not a handle (b14f151)
 o Use generic win32 interfaces, not ASCII-only ones, where possible.\
 (899b0a3)
 o Fix the default HTTP error template (06bd056 Felix Nawothnig)
 o Close the file in evutil_read_file whether there's an error or not.\
 (0798dd1 Pierre Phaneuf)
 o Fix possible nullptr dereference in evhttp_send_reply_end() (29b2e23 Felix\
 Nawothnig)
 o never let bufferevent_rlim functions return negative (0859870)
 o Make sample/hello_world work on windows (d89fdba)
 o Fix a deadlock related to event-base notification.  Diagnosed by Zhou Li,\
 Avi Bab, and Scott Lamb. (17522d2)
 o Possible fix to 100% cpu usage with epoll and openssl (cf249e7 Mike\
 Smellie)
 o Don't race when calling event_active/event_add on a running signal event\
 (fc5e0a2)
 o Suppress a spurious EPERM warning in epoll.c (e73cbde)
 o Fix wrong size calculation of iovec buffers when exact=1 (65abdc2 niks)
 o Change bufferevent_openssl::do_write so it doesn't call SSL_write with a 0\
 length buffer (c991317 Mike Smellie)
 o Fixed compilation of sample/le-proxy.c on win32 (13b912e Trond Norbye)
 o Fix rate-limit calculation on openssl bufferevents. (009f300)
 o Remember to initialize timeout events for bufferevent_async (de1f5d6\
 Christopher Davis)

BUILD AND DISTRIBUTION CHANGES
 o Test the unlocked-deferred callback case of bufferevents (dfb75ab)
 o Remove the now-unusable EVTHREAD_LOCK/UNLOCK constants (fdfc3fc)
 o Use -Wlogical-op on gcc 4.5 or higher (d14bb92)
 o Add the libtool-generated /m4/* stuff to .gitignore (c21c663)
 o Remove some automake-generated files from version control. (9b14911)
 o Have autogen.sh pass --force-missing to automake (8a44062)
 o Set library version for libevent_pthreads correctly (b2d7440)
 o Really only add libevent_core.la to LIBADD on mingw (1425003 Sebastian\
 Hahn)
 o Build more cleanly with NetBSDs that dislike toupper(char) (42a8c71)
 o Fix unit tests with -DUSE_DEBUG enabled (28f31a4)
 o Fix evdns build with -DUNICODE (5fa30d2)
 o Move event-config.h to include/event2 (ec347b9)

TESTING
 o Add options to test-ratelim.c to check its results (2b44dcc)
 o Make test-ratelim clean up after itself better. (b5bfc44)
 o Remove the now-obsolete setup_test() and cleanup_test() functions (e73f1d7)
 o Remove all non-error prints from test/regress.c (8bc1e3d)
 o Make test.sh exit with nonzero status if tests fail (faf2a04)
 o Have the unit tests report errors from test.sh (3689bd2)
 o Fix logic in correcting high values from FIONREAD (3467f2f)
 o Add test for behavior on remote socket close (44d57ee)
 o Unit test for event_get_struct_event_size() (7510aac)
 o Make test/test.sh call test-changelist (7c92691)
 o Fix badly-behaved subtest of dns/bufferevent_connect_hostname (840a72f\
 Joachim Bauch)
 o Add option to test-ratelim to test min_share (42f6b62)
 o Fix an assertion bug in test-ratelim (b2c6202)
 o Make tests quieter on local dns resolver failure (e996b3d)
 o Increase the tolerance in our unit tests for sloppy clocks. (170ffd2)
 o Use AF_INET socketpair to test sendfile on Solaris (9b60209)
 o Make test-changelist count cpu usage right on win32 (ea1ea3d)

INTERNALS, PERFORMANCE, AND CODE CLEANUPS
 o Mark the event_err() functions as __attribute__((noreturn)) (33bbbed)
 o Do not check that event_base is set in EVBASE_ACQUIRE_LOCK (218a3c3)
 o Replace (safe) use of strcpy with memcpy to appease OpenBSD (caca2f4)
 o Remove some dead assignments (47c5dfb)
 o Fix a pedantic gcc 4.4 warning in event2/event.h (276e7ee)
 o Drain th_notify_fd[0] more bytes at a time. (a5bc15b)
 o Tidy up the code in evthread_make_base_notifiable a little (61e1eee)
 o Pass flags to fcntl(F_SETFL) and fcntl(F_SETFD) as int, not long (7c2dea1)
 o Remove unused variables in test/test-changelist.c (b00d4c0)
 o Fix whitespace. (cb927a5)
 o Improve error message for failed epoll to make debugging easier. (9e725f7)
 o Turn our socketpair() replacement into its own function (57b30cd)



Changes in 2.0.5-beta (10 May 2010):
 [Autogenerated from the Git log, sorted by hand.]
DOCUMENTATION
 o Update all our copyright notices to say "2010" (17efc1c)
 o Add Christopher Clark and Maxim Yegorushkin to the LICENSE file (38b7b57)
 o Clarify Christopher Clark's status as writer of original ht code. (78772c3)
 o Try to comment some of the event code more (cdd4c49)
 o Add a few more evmap/changelist comments (c247adc)
 o Add a comment to explain why evdns_request is now separte from request\
 (ceefbe8)
 o Document evutil_secure_rng_init() and evutil_secure_rng_add_bytes()\
 (a5bf43a)
 o Stop distributing and installing manpages: they were too inaccurate\
 (7731ec8)

NEW FEATURES AND INTERFACE CHANGES
 o Remove signal_assign() and signal_new() macros. (2fac0f7)
 o Make evdns use the regular logging system by default (b2f2be6)
 o Allow evbuffer_read() to split across more than 2 iovecs (e470ad3)
 o Functions to manipulate existing rate limiting groups. (ee41aca)
 o Functions to track the total bytes sent over a rate limit group. (fb366c1)
 o Detect and refuse reentrant event_base_loop() calls (b557b17)
 o Limit the maximum number of events on each socket to 65535 (819f949)
 o Add evbuffer_copyout to copy data from an evbuffer without draining\
 (eb86c8c)
 o Expose the request and reply members of rpc_req_generic() (07edf78 Shuo\
 Chen)
 o Add void* arguments to request_new and reply_new evrpc hooks (755fbf1 Shuo\
 Chen)
 o Seed the RNG using sysctl() as well as /dev/urandom (71fc3eb)
 o Make evutil_secure_rng_init() work even with builtin arc4random (f980716)
 o Report DNS error when lookup fails during bufferevent_socket_connect_hostn\
ame. (0ef4070 Christopher Davis)
 o Release locks on bufferevents while executing callbacks (a5208fe Joachim\
 Bauch) o Make debug mode catch mixed ET and non-ET events on an fd (cb67074)
 o Catch attempts to enable debug_mode too late (9ecf0d4)
 o Refuse null keys in evhttp_parse_query() (953e229 Frank Denis)

BUGFIXES
 o Avoid a spurious close(-1) on Linux (70a44b6)
 o Do not close(-1) when freeing an uninitialized socket bufferevent (b34abf3)
 o Free evdns_base->req_heads on evdns_base_free (859af67)
 o Avoid an (untriggerable so far) crash bug in bufferevent_free() (0cf1431)
 o Set mem_offset for every bufferevent type (657d1b6)
 o Fix infrequent memory leak in bufferevent_init_common(). (8398641 Jardel\
 Weyrich)
 o Make evutil_signal_active() match declaration. (e1e703d Patrick Galbraith)
 o Fix minheap code to use replacement malloc functions (a527618)
 o Fix a free(NULL) in minheap-internal.h (6f20492)
 o Fix critical bug in evbuffer_write when writev is not available (cda56ab)
 o Make the no_iovecs case of write_atmost compile (8e227b0)
 o Fix a memory leak when appending/prepending to a buffer with unused space.\
 (45068a3)
 o Clean up a mistake in pointer manipulation in evbuffer_remove (28bfed4\
 Christopher Davis)
 o Always round up when there's a fractional number of msecs. (8f9e60c\
 Christopher Davis)
 o Fix compiler warnings under WIN32 (d469c50 Giuseppe Scrivano)
 o Clean up properly when adding a signal handler fails. (b84b598 Gilad\
 Benjamini) o Ensure that evdns_request is a persistent handle. (15bb82d\
 Christopher Davis)
 o Free search state when finished searching to avoid an infinite loop.\
 (a625840 Christopher Davis)
 o Assert for valid requests as necessary. (67072f3 Christopher Davis)
 o do not leak the request object on persistent connections (9d8edf2)
 o Make evdns logging threadsafe (b1c7950)
 o Fix a couple of bugs in the BSD sysctl arc4seed logic (a47a4b7)
 o Remove one last bug in last_with_datap logic. Found with valgrind (d49b92a)
 o fix a leak when unpausing evrpc requests (94ee125)
 o Fix a memory leak when unmarshalling RPC object arrays (f6ab2a2)
 o Fix compilation when openssl support is disabled (40c301b)
 o Allow empty reason line in HTTP status (739e688 Pierre Phaneuf)
 o Fix a compile warning introduced in 739e688 (bd1ed5f Sebastian Hahn)
 o Fix nonstandard TAILQ_FOREACH_REVERSE() definition (71afc52 Frank Denis)
 o Try /proc on Linux as entropy fallback; use sysctl as last resort (20fda29)
 o Fix symbol conflict between mm_*() macros and libmm (99e50e9)
 o Fix some crazy macro mistakes in arc4random.c (90d4225)
 o Make evbuffer_add_file() work on windows (dcdae6b)
 o Fix unused-variable warning when building with threads disabled (ad811cd)
 o Numerous opensolaris compilation fixes (c44de06)
 o Fix getaddrinfo with protocol unset on Solaris 9. Found by Dagobert\
 Michelsen (2cf2a28)
 o Fix another nasty solaris getaddrinfo() behavior (3557071)
 o Define _REENTRANT as needed on Solaris, elsewhere (c1cd32a)
 o Fix some autoconf issues on OpenBSD (7c519df)

BUILD AND DISTRIBUTION CHANGES
 o Distribute libevent.pc.in, not libevent.pc (22aff04)
 o Avoid errors in evutil.c when building with _UNICODE defined (b677032\
 Brodie Thiesfield)
 o Avoid errors in http.c when building with VC 2003 .NET (13e4f3b Brodie\
 Thiesfield)
 o Support the standard 'make check' target in place of 'make verify'\
 (426c8fb)
 o Remove redundant stuff from EXTRA_DIST (b660edf)
 o Switch to using AM conditionals in place of AC_LIBOBJ (2e898f5)
 o Remove an orphaned RELEASE flag in Makefile.am (0794b0d)
 o Give a better warning for bad automake versions. (77c917d)
 o Use dist_bin_SCRIPTS, not EXTRA_DIST, to distribute scripts (9eb2fd7)
 o Never test for select() on windows (3eb044d Trond Norbye)
 o Do not inhibit automake dependencies generation (10c4c90 Giuseppe Scrivano)
 o Create shared libraries under Windows (3cbca86 Giuseppe Scrivano)
 o Add ctags/etags files to .gitignore (0861d17)
 o Only specify -no-undefined on mingw (25433b9)
 o Only add libevent_core.la to LIBADD on mingw (fdc6297)

TESTING
 o Get bench_http to work on Windows; add a switch to enable IOCP. (4ac38a5\
 Christopher Davis)
 o VC has no getopt(), so do without in bench_http. (1273d2f Christopher\
 Davis)
 o Fix an obnoxious typo in the bufferevent_timeout_filter test (0d047c3)
 o Fix a write of uninitialized RAM in regression tests (68dc742)
 o Fix some memory leaks in the unit tests (274a7bd)
 o Make 'main/many_events' test 70 fds, not 64. (33874b0)
 o Unit-test every evbuffer_add_file() implementation. (06a4443)
 o Add more unit tests for evbuffer_expand (8c83e99)
 o Test another case of evbuffer_prepend (1234b95)
 o Fix a possible double-free bug in SSL bufferevents with CLOSE_ON_FREE\
 (7501895) o Add dns/search_cancel unit test. (39b870b Christopher Davis)
 o Make http_base_test stop leaking an event_base. (96730d3)
 o Detect broken unsetenv at unit-test runtime (f37cd4c)
 o Implement regress_make_tempfile on win32 to test evbuffer_add_file\
 (b4f12a1)
 o add more (currently skipped) add_file tests on win32 (05de45d)
 o Fix bench_http build on win32. (384d124)
 o Make unit test for add_file able to tell "error" from "done" (88a543f)
 o Make test for bufferevent_connect_hostname system-neutral (f89168e)
 o Make test.sh support mingw/msys on win32 (0ee6f6c)
 o Fix test.sh on freebsd (3d9e05b)

INTERNALS, PERFORMANCE, AND AND CODE CLEANUPS
 o Improve the speed of evbuffer_readln() (cc1600a)
 o more whitespace normalization (2c2618d)
 o Revise evbuffer to add last_with_data (2a6d2a1)
 o Use last_with_data in place of previous_to_last (c8ac57f)
 o Remove previous_to_last from evbuffer (6f47bd1)
 o Fix last_with_data compilation on windows (1e7b986)
 o Add some glass-box tests for the last_with_data code. (17da042)
 o Improve robustness for refcounting (f1bc125)
 o Remove a needless min_heap_shift_up_() call (7204b91)
 o Increase MIN_BUFFER_SIZE to 512 (1024 on 64-bit) (2014ae4)
 o Do not use evbuffer_expand() to add the first chain to a buffer (5c0ebb3)
 o Make evbuffer_prepend handle empty buffers better (c87272b)
 o Replace last_with_data with a slightly smarter version (b7442f8)
 o Turn the increasingly complex *_CHAIN() macros into functions (96865c4)
 o Rewrite evbuffer_expand and its users (d5ebcf3)
 o Add evutil_tv_to_msec for safe conversion of timevals to milliseconds.\
 (850c3ff Christopher Davis)
 o Initialize last_with_datap correctly in evbuffer_overlapped (a0983b6)
 o Replace EVUTIL_CLOSESOCKET macro with a function (899c1dc Sebastian\
 Sjöberg)
 o Move domain search state to evdns_request. (beaa14a Christopher Davis)
 o Remove redundant checks for lock!=NULL before calling EVLOCK_LOCK (50ec59f)
 o Rename current_base symbol to event_global_current_base_ (c16e684)
 o Fix whitespace in evutil.c (935e150)
 o Replace users of "int fd" with "evutil_socket_t fd" in portable code\
 (c7cf6f0)



Changes in 2.0.4-alpha (28 Feb 2010):
 [Autogenerated from the Git log, sorted by hand.]
DOCUMENTATION
 o Add stub header for 2.0.4-alpha changelog. (94d0065)
 o Improve the README with more information and links. (0b42726)
 o Add more people who wrote patches to the acknowledgments (0af10d5)
 o Add a warning about the use of event_initialized. (f32b575)
 o Add a LICENSE file so people can find our license easily (7067006)
 o Add a new "hello world" sample program (becb9f9)
 o Clarify status of example programs (d60a1bd)
 o Update time-test.c to use event2 (f4190bf)
 o Add the arc4random.c license to the LICENSE file. (e15e1e9)

NEW FEATURES AND INTERFACE CHANGES
 o Improved optional lock debugging. (0cd3bb9)
 o Rate-limiting for bufferevents; group and individual limits are supported.\
 (737c9cd)
 o Testing code for bufferevent rate-limiting. (f0c0124)
 o Make the initial nameserver probe timeout configurable. (1e56a32)
 o Revise the locking API: deprecate the old locking callbacks and add\
 trylock. (347952f)
 o Do not make bufferevent_setfd implicitly disable EV_READ and EV_WRITE.\
 (8274379)
 o Do not ignore bufferevent_enable(EV_READ) before bufferevent_connect().\
 (4a5b534)
 o Introduced evutil_make_socket_closeonexec() to preserve fd flags for\
 F_SETFD. (d0939d2 Jardel Weyrich)
 o evdns_getaddrinfo() now supports the /etc/hosts file. (72dd666)
 o Look at the proper /etc/hosts file on windows. (66c02c7)
 o Allow http connections to use evdns for hostname looksups. (c698b77)
 o Changelist code to defer event changes until just before dispatch (27308aa)
 o do not use a function to assign the evdns base; instead assign it via\
 evhttp_connection_base_new() which is a new function introduced in 2.0\
 (5032e52)
 o Functions to access more fields of struct event. (0683950)
 o Make kqueue use changelists. (45e5ae3)
 o Remove kqueue->pend_changes. (3225dfb)
 o Minimize epoll_ctl calls by using changelist (c8c6a89)
 o Add support for a "debug mode" to try to catch common errors. (cd17c3a)
 o Note a missing ratelim function (361da8f)
 o Add ev_[u]intptr_t to include/event2/util.h (1fa4c81)
 o const-ify a few more functions in event.h (d38a7a1)
 o Deprecate EVENT_FD and EVENT_SIGNAL. (f6b2694)
 o Remove EVUTIL_CHECK_FMT. (6c21c89)
 o Add EV_*_MAX macros to event2/util.h to expose limits for ev_* types.\
 (aba1fff) o Functions to view and manipulate rate-limiting buckets. (85047a6)
 o Add the rest of the integer limits, and add a test for them. (60742d5)
 o Remove the 'flags' argument from evdns_base_set_option() (1dd7e6d)
 o Add an arc4random implementation for use by evdns (d4de062)
 o Use off_t for the length parameter of evbuffer_add_file (3fe60fd)
 o Construct Windows locks using InitializeCriticalSectionAndSpinCount\
 (32c6f1b)
 o Expose view of current rate limit as constrained by group limit (162ce8a)
 o Provide consistent, tested semantics for bufferevent timeouts (d328829)

BUGFIXES AND TESTS
 o Tolerate code that returns from a fatal_cb. (91fe23f)
 o Parenthesize macro arguments more aggressively (07e9e9b)
 o Fix memory-leak of signal handler array with kqueue. (e1ffbb8)
 o Stop passing EVTHREAD_READ and EVTHREAD_WRITE to non-rw locks. (76cd2b7)
 o Fix two use-after-free bugs in unit tests spoted by lock debugging\
 (d84d838)
 o Fix a locking bug in event_base_loop() (da1718b)
 o Fix an evdns lock violation. (2df1f82 Zhuang Yuyao)
 o Valgrind fix: Clear struct kevent before checking for OSX bug. (56771a3\
 William Ahern)
 o Fix up evthread compilation on windows (bd6f1ba Roman Puls)
 o Fix regress_iocp.c usage of old lock allocation macros. (31687b4 unknown)
 o Update nmake makefile to build evthread.c (b62d979 unknown)
 o Fix a crash when reading badly formatted resolve.conf; from Yasuoka\
 Masahiko (6c7c579 Yasuoka Masahiko)
 o Fix a snow leopard compile warning in the unit tests. (7ae9445)
 o Fix compile on Snow Leopard with gcc warnings enabled (70cdfe4 Sebastian\
 Hahn)
 o Only define _GNU_SOURCE if it is not already defined. (ea6b1df Joachim\
 Bauch)
 o Update sample/signal-test.c to use newer APIs and not leak. (f6430ac Evan\
 Jones)
 o Fix a segfault when writing a very fragmented evbuffer onto an SSL\
 (a6adeca Joachim Bauch)
 o Fix a segfault when freeing SSL bufferevents in an unusual order (a773df5\
 Joachim Bauch)
 o Drop install-sh from our git repo: a mismatched version could break "make\
 dist" (6799527)
 o Set all instances of the version number correctly. (5a112d3)
 o Fix a few locking issues on windows. (c51bb3c unknown)
 o Use evutil_socket_t, not int, when logging socket errors. (292467c)
 o Fix up behavior of never-defered callbacks a little (390e056)
 o Replace some cases of uint32_t with ev_uint32_t. (a47d88d)
 o Fix compilation of devpoll.c by adding missing thread includes. (fee2c77\
 Dagobert Michelsen)
 o Make evutil_make_socket_nonblocking() leave any other flags alone.\
 (4c8b7cd Jardel Weyrich)
 o Fix an fd leak in evconnlistener_new_bind(). (24fb502 Jardel Weyrich)
 o Fix a bogus free in evutil_new_addrinfo() (0d64051 Jardel Weyrich)
 o Adjusted fcntl() retval comparison on evutil_make_socket_nonblocking().\
 (4df7dbc Jardel Weyrich)
 o Fix the code that allowed DNS options to not end with : (ee4953f)
 o Fix crash bugs when a bufferevent's eventcb is not set. (2e8eeea)
 o Fix test-ratelim compilation on Linux. (885b427)
 o Fix compilation of rate-limiting code on win32. (165d30e)
 o Eradicated the last free() call. Let mm_free() take care of deallocation.\
 (0546ce1 Jardel Weyrich)
 o Fix byte counts when mixing deferred and non-deferred evbuffer callbacks.\
 (29151e6)
 o Fixed a memory leak on windows threads implementation. The\
 CRITICAL_SECTION was not being free'd in evthread_win32_lock_free().\
 (2f33e00 Jardel Weyrich)
 o Fixed a fd leak in start_accepting(), plus cosmetic changes (4367a33\
 Jardel Weyrich)
 o Improved error handling in evconnlistener_new_async(). Also keeping the fd\
 open because it is not opened by this function, so the caller is responsible\
 for closing it. Additionally, since evconnlistener_new_bind() creates a\
 socket and passes it to the function above, it required error checking to\
 close the same socket. (fec66f9 Jardel Weyrich)
 o Don't use a bind address for nameservers on loopback (8d4aaf9)
 o Fix compilation of rate-limit code when threading support is disabled\
 (97a8c79)
 o Detect setenv/unsetenv; skip main/base_environ test if we can't fake them.\
 (7296971)
 o Check more internal event_add() calls for failure (ff3f6cd)
 o Fix windows and msvc build (5c7a7bc)
 o Call event_debug_unassign on internal events (a19b4a0)
 o Try to fix a warning in hash_debug_entry (137f2c6)
 o Fix a dumb typo in ev_intptr_t definitions. (27c9a40)
 o do not fail while sending on http connections the client closed. (93d7369)
 o make evhttp_send() safe against terminated connections, too (3978180)
 o Make Libevent 1.4.12 build on win32 with Unicode enabled. (000a33e Brodie\
 Thiesfield)
 o Fix some additional -DUNICODE issues on win32. (a7a9431)
 o Add a check to make soure our EVUTIL_AI flags do not conflict with the\
 native ones (c18490e)
 o Always use our own gai_strerror() replacement. (6810bdb)
 o Make RNG work when we have arc4random() but not arc4random_buf() (4ec8fea)
 o validate close cb on server when client connection closes (2f782af)
 o Fix two unlocked reads in evbuffer. (7116bf2)
 o When working without a current event base, don't try to use IOCP listeners\
 (cb52838)
 o Fix getpid() usage on Windows (ff2a134)
 o Add a unit test for secure rng. (48a29b6)
 o Add some headers to fix freebsd compilation (b72be50)
 o When connect() succeeds immediately, don't invoke the callback\
 immediately. (7515de9)
 o Suspend read/write on bufferevents during hostname lookup (db08f64)
 o Make bufferevent_free() clear all callbacks immediately. (b2fbeb3)
 o Fix some race conditions in persistent events and event_reinit (e2642f0)
 o Fix a bug in resetting timeouts on persistent events when IO triggers.\
 (38ec0a7)
 o Add a test for timeouts on filtering bufferevents. (c02bfe1)
 o Add test for periodic timers that get activated for other reasons (8fcb7a1)
 o Use new timeval diff comparison function in bufferevent test (f3dfe46)
 o Delete stack-alloced event in new unit test before returning. (7ffd387)
 o Fix mingw compilation (23170a6)
 o Try to define a sane _EVENT_SIZEOF_SIZE_T for msvc compilation (1e14f82)
 o Fix arc4random compilation on MSVC. (98edb89)
 o deal with connect() failing immediately (7bc48bf)
 o Small cleanups on freebsd-connect-refused patch. (57b7248)

BUILD AND DISTRIBUTION CHANGES
 o Remove the contents of WIN32-Prj as unmaintained. (c69d5a5)
 o Allow the user to redirect the verbose output of test/test.sh to a file\
 (c382de6)
 o Allow test.sh to be run as ./test/test.sh (7dfbe94)
 o Never believe that we have pthreads on win32, even if gcc thinks we do.\
 (78ed097)
 o Make it compile under gcc --std=c89. (e2ca403)
 o Fix a number of warnings from gcc -pedantic (918e9c5)
 o Add the msvc-generated .lib files to .gitignore. (e244a2e)
 o Add the "compile" script to gitignore. (1ba6bed)

INTERNALS AND CODE CLEANUPS
 o Add a .gitignore file. (ba34071)
 o New EVTHREAD_TRY_LOCK function to try to grab a lock. (689fc09)
 o Add the abilitity to mark some buffer callbacks as never-deferred.\
 (438f9ed)
 o Refactor our 'suspend operation' logic on bufferevents. (0d744aa)
 o Simplify the read high-watermark checking. (5846bf6)
 o Improve readability of evutil_unparse_protoname() (5a43df8 Jardel Weyrich)
 o Expose our cached gettimeofday value with a new interface (47854a8)
 o Whitespace fixes in test.sh (0b151a9)
 o Enable branch-prediction hints with EVUTIL_UNLIKELY. (eaaf27f)
 o Refactor code from evdns into a new internal "read a file" function.\
 (0f7144f)
 o Comestic changes in evconnlistener_new(), new_accepting_socket(),\
 accepted_socket_invoke_user_cb() and iocp_listener_enable(). (510ab6b Jardel\
 Weyrich)
 o Add unit-test for bad_request bug fixed in 1.4 recently. (6cc79c6 Pavel\
 Plesov) o Add a comment on evthread_enable_lock_debuging. (b9f43b2)
 o Fix test.sh on shells without echo -n (94131e9)
 o More unit tests for getaddrinfo_async: v4timeout and cancel. (a334b31)
 o Make http use evconnlistener. (ec34533)
 o move dns utility functions into a separate file so that we can use them\
 for http testing (b822639)
 o add a test for evhttp_connection_base_new with a dns_base (26714ca)
 o forgot to add void to test function (78a50fe)
 o Add a forgotten header (changelist-internal.h) (4b9f307)
 o Remove some commented-out code in evutil (26e1b6f)
 o Remove a needless include of rpc_compat.h (70a4a3e)
 o Use less memory for each entry in a hashtable (a66e947)
 o Try to untangle the logic in server_port_flush(). (439aea0)
 o Use ev_[u]intptr_t types in place of [u]intptr_t (cef61a2)
 o Reduce windows header includes in our own headers. (da6135e)
 o clean up terminate_chunked test (e8a9782)
 o Increment the submicro version number. (63e868e)
 o Update event-config.h version number to match configure.in (aae7db5)
 o Clean up formatting: Disallow space-before-tab. (8fdf09c)
 o Clean up formatting: use tabs, not 8-spaces, to indent. (e5bbd40)
 o Clean up formatting: remove trailing spaces (e5cf987)
 o Clean up formatting: function/keyword spacing consistency. (4faeaea)



Changes in 2.0.3-alpha (20 Nov 2009):
 o Add a new code to support SSL/TLS on bufferevents, using the OpenSSL\
 library (where available).
 o Fix a bug where we didn't allocate enough memory in event_get_supported_me\
thods().
 o Avoid segfault during failed allocation of locked evdns_base. (Found by\
 Rocco Carbone.)
 o Export new evutil_ascii_* functions to perform locale-independent\
 character type operations.
 o Try to compile better with MSVC: patches from Brodie Thiesfield
 o New evconnlistener_get_fd function to expose a listener's associated\
 socket.
 o Expose an ev_socklen_t type for consistent use across platforms.
 o Make bufferevent_socket_connect() work when the original fd was -1.
 o Fix a bug in bufferevent_socket_connect() when the connection succeeds too\
 quickly.
 o Export an evutil_sockaddr_cmp() to compare to sockaddr objects for\
 equality.
 o Add a bufferevent_get_enabled() to tell what a bufferevent has been\
 configured to do.
 o Add an evbuffer_search_eol() function to locate the end of a line\
 nondestructively.
 o Add an evbuffer_search_range() function to search a bounded range of a\
 buffer.
 o Fix a rare crash bug in evdns.
 o Have bufferevent_socket_connect() with no arguments put a bufferevent into\
 connecting mode.
 o Support sendfile on Solaris: patch from Caitlin Mercer.
 o New functions to explicitly reference a socket used by an evhttp object.\
 Patches from David Reiss.
 o When we send a BEV_EVENT_CONNECTED to indicate connected status, we no\
 longer invoke the write callback as well unless we actually wrote data too.
 o If the kernel tells us that there are a negative number of bytes to read\
 from a socket, do not believe it.  Fixes bug 2841177; found by Alexander\
 Pronchenkov.
 o Do not detect whether we have monotonic clock support every time a new\
 event base is created: instead do it only once.  Patch taken from Chromium.
 o Do not allocate the maximum event queue for the epoll backend at startup. \
 Instead, start out accepting 32 events at a time, and double the queue's\
 size when it seems that the OS is generating events faster than we're\
 requesting them.  Saves up to 374K per epoll-based event_base.  Resolves bug\
 2839240.
 o Treat an event with a negative fd as valid but untriggerable by Libevent. \
 This is useful for applications that want to manually activate events.
 o Fix compilation on Android, which forgot to define fd_mask in its\
 sys/select.h
 o Do not drop data from evbuffer when out of memory; reported by Jacek\
 Masiulaniec
 o New event_base_got_exit() and event_base_got_break() functions to tell\
 whether an event loop exited because of an event_base_loopexit() or an\
 event_base_loopbreak().  Patch from Ka-Hing Cheung.
 o When adding or deleting an event from a non-main thread, only wake up the\
 main thread when its behavior actually needs to change.
 o Fix some bugs when using the old evdns interfaces to initialize the evdns\
 module.
 o Detect errors during bufferevent_connect().  Patch from Christopher Davis.
 o Fix compilation for listener.h for C++ - missing extern "C".  Patch from\
 Ferenc Szalai.
 o Make the event_base_loop() family of functions respect thread-safety\
 better.  This should clear up a few hard-to-debug race conditions.
 o Fix a bug when using a specialized memory allocator on win32.
 o Have the win32 select() backend label TCP-socket-connected events as\
 EV_WRITE, not EV_READ.  This should bring it in line with the other\
 backends, and improve portability.  Patch from Christopher Davis.
 o Stop using enums as arguments or return values when what we mean is a\
 bitfield of enum values.  C++ doesn't believe that you can OR two enum\
 values together and get another enum, and C++ takes its typing seriously. \
 Patch from Christopher Davis.
 o Add an API to replace all fatal calls to exit() with a user-provided panic\
 function.
 o Replace all assert() calls with a variant that is aware of the\
 user-provided logging and panic functions.
 o Add a return value to event_assign so that it can fail rather than\
 asserting when the user gives it bad input.  event_set still dies on bad\
 input.
 o The event_base_new() and event_base_new_with_config() functions now never\
 call exit() on failure.  For backward "compatibility", event_init() still\
 does, but more consistently.
 o Remove compat/sys/_time.h.  It interfered with system headers on HPUX, and\
 its functionality has been subsumed by event2/util.h and util-internal.h.
 o Add a new bufferevent_socket_connect_hostname() to encapsulate the\
 resolve-then-connect operation.
 o Build kqueue.c correctly on GNU/kFreeBSD platforms. Patch pulled upstream\
 from Debian.
 o Alternative queue-based timeout algorithm for programs that use a large\
 number of timeouts with the same value.
 o New event_base_config option to disable the timeval cache entirely.
 o Make EV_PERSIST timeouts more accurate: schedule the next event based on\
 the scheduled time of the previous event, not based on the current time.
 o Allow http.c to handle cases where getaddrinfo returns an IPv6 address. \
 Patch from Ryan Phillips.
 o Fix a problem with excessive memory allocation when using multiple event\
 priorities.
 o Default to using arc4random for DNS transaction IDs on systems that have\
 it; from OpenBSD.
 o Never check the environment when we're running setuid or setgid; from\
 OpenBSD.
 o Options passed to evdns_set_option() no longer need to end with a colon.
 o Add an evutil_getaddrinfo() function to clone getaddrinfo on platforms\
 that don't have it.
 o Add an evdns_getaddrinfo() function to provide a nonblocking getaddrinfo\
 using evdns, so programs can perform useful hostname lookup.
 o Finally expose the IOCP-based bufferevent backend.  It passes its unit\
 tests, but probably still has some bugs remaining.  Code by Nick Mathewson\
 and Christopher Davis.
 o Numerous other bugfixes.
 o On FreeBSD and other OSes, connect can return ECONREFUSED immediately;\
 instead of failing the function call, pretend with faileld in the callback.
 o Fix a race condition in the pthreads test case; found by Nick Mathewson
 o Remove most calls to event_err() in http and deal with memory errors\
 instead



Changes in 2.0.2-alpha (25 Jul 2009):
 o Add a new flag to bufferevents to make all callbacks automatically\
 deferred.
 o Make evdns functionality locked, and automatically defer dns callbacks.
 o Fix a possible free(NULL) when freeing an event_base with no signals.
 o Add a flag to disable checking environment varibles when making an\
 event_base
 o Disallow setting less than 1 priority.
 o Fix a bug when removing a timeout from the heap. [Patch from Marko Kreen]
 o Use signal.h, not sys/signal.h. [Patch from mmadia]
 o Try harder to build with certain older c99 compilers.
 o Make sure that an event_config's flags field is always initialized to 0.\
 [Bug report from Victor Goya]
 o Avoid data corruption when reading data entirely into the second-to-last\
 chain of an evbuffer. [Bug report from Victor Goya]
 o Make sendfile work on FreeBSD
 o Do not use vararg macros for accessing evrpc structures; this is not\
 backwards compatible, but we did not promise any backwards compatibility for\
 the rpc code.
 o Actually define the event_config_set_flag() function.
 o Try harder to compile with Visual C++.
 o Move event_set() and its allies to event2/event_compat.h where they belong.
 o Remove the event_gotsig code, which has long been deprecated and unused.
 o Add an event_get_base() function to return the base assigned to an event.
 o New function to automate connecting on a socket-based bufferevent.
 o New functions to automate listening for incoming TCP connections.
 o Do case-insensitive checks with a locale-independent comparison function.
 o Rename the evbuffercb and everrorcb callbacks to bufferevent_data_cb and\
 bufferevent_event_cb respectively.  The old names are available in\
 bufferevent_compat.h.
 o Rename the EVBUFFER_* codes used by bufferevent event callbacks to\
 BEV_EVENT_*, to avoid namespace collision with evbuffer flags.  The old\
 names are available in bufferevent_compat.h.
 o Move the EVBUFFER_INPUT and EVBUFFER_OUTPUT macros to bufferevent_compat.h
 o Add a bufferevent_getfd() function to mirror bufferevent_setfd()
 o Make bufferevent_setfd() return an error code if the operation is not\
 successful.
 o Shave 22 bytes off struct event on 32-bit platforms by shrinking and\
 re-ordering fields.  The savings on 64-bit platforms is likely higher.
 o Cap the maximum number of priorities at 256.
 o Change the semantics of evbuffer_cb_set_flags() to be set-flag only; add a\
 new evbuffer_cb_clear_flags() to remove set flags.
 o Change the interface of evbuffer_add_reference so that the cleanup\
 callback gets more information
 o Revise the new evbuffer_reserve_space/evbuffer_commit_space() interfaces\
 so that you can use them without causing extraneous copies or leaving gaps\
 in the evbuffer.
 o Add a new evbuffer_peek() interface to inspect data in an evbuffer without\
 removing it.
 o Fix a deadlock when suspending reads in a bufferevent due to a full\
 buffer. (Spotted by Joachim Bauch.)
 o Fix a memory error when freeing a thread-enabled event base with\
 registered events. (Spotted by Joachim Bauch.)
 o Try to contain degree of failure when running on a win32 version so\
 heavily firewalled that we can't fake a socketpair.
 o Activate fd events in a pseudorandom order with O(N) backends, so that we\
 don't systematically favor low fds (select) or earlier-added fds (poll,\
 win32).
 o Replace some read()/write() instances with send()/recv() to work properly\
 on win32.
 o Set truncated flag correctly in evdns server replies.
 o Raise RpcGenError in event_rpcgen.py; from jmanison and Zack Weinberg
 o Fix preamble of rpcgen-generated files to rely on event2 includes; based\
 on work by jmansion; patch from Zack Weinberg.
 o Allow specifying the output filename for rpcgen; based on work by\
 jmansion; patch from Zack Weinberg.
 o Allow C identifiers as struct names; allow multiple comments in .rpc\
 files; from Zack Weinberg
 o Mitigate a race condition when using socket bufferevents in multiple\
 threads.
 o Use AC_SEARCH_LIBS, not AC_CHECK_LIB to avoid needless library use.
 o Do not allow event_del(ev) to return while that event's callback is\
 executing in another thread.  This fixes a nasty race condition.
 o event_get_supported_methods() now lists methods that have been disabled\
 with the EVENT_NO* environment options.
 o Rename encode_int[64] to evtag_encode_int[64] to avoid polluting the\
 global namespace.  The old method names are still available as macros in\
 event2/tag_compat.h.



Changes in 2.0.1-alpha (17 Apr 2009):
 o free minheap on event_base_free(); from Christopher Layne
 o debug cleanups in signal.c; from Christopher Layne
 o provide event_base_new() that does not set the current_base global
 o bufferevent_write now uses a const source argument; report from Charles\
 Kerr
 o improve documentation on event_base_loopexit; patch from Scott Lamb
 o New function, event_{base_}loopbreak.  Like event_loopexit, it makes an\
 event loop stop executing and return.  Unlike event_loopexit, it keeps\
 subsequent pending events from getting executed.  Patch from Scott Lamb
 o Check return value of event_add in signal.c
 o provide event_reinit() to reintialize an event_base after fork
 o New function event_set_mem_functinons.  It allows the user to give\
 libevent replacement functions to use for memory management in place of\
 malloc(), free(), etc.  This should be generally useful for memory\
 instrumentation, specialized allocators, and so on.
 o The kqueue implementation now catches signals that are raised after\
 event_add() is called but before the event_loop() call.  This makes it match\
 the other implementations.
 o The kqueue implementation now restores original signal handlers correctly\
 when its signal events are removed.
 o Check return value of event_add in signal.c
 o Add a more powerful evbuffer_readln as a replacement for\
 evbuffer_readline.  The new function handles more newline styles, and is\
 more useful with buffers that may contain a nul characters.
 o Do not mangle socket handles on 64-bit windows.
 o The configure script now takes an --enable-gcc-warnings option that turns\
 on many optional gcc warnings.  (Nick has been building with these for a\
 while, but they might be useful to other developers.)
 o move EV_PERSIST handling out of the event backends
 o small improvements to evhttp documentation
 o always generate Date and Content-Length headers for HTTP/1.1 replies
 o set the correct event base for HTTP close events
 o When building with GCC, use the "format" attribute to verify type\
 correctness of calls to printf-like functions.
 o Rewrite win32.c backend to be O(n lg n) rather than O(n^2).
 o Removed obsoleted recalc code
 o support for 32-bit tag numbers in rpc structures; this is wire compatible,\
 but changes the API slightly.
 o pull setters/getters out of RPC structures into a base class to which we\
 just need to store a pointer; this reduces the memory footprint of these\
 structures.
 o prefix {encode,decode}_tag functions with evtag to avoid collisions
 o fix a bug with event_rpcgen for integers
 o Correctly handle DNS replies with no answers set (Fixes bug 1846282)
 o add -Wstrict-aliasing to warnings and more cleanup
 o removed linger from http server socket; reported by Ilya Martynov
 o event_rpcgen now allows creating integer arrays
 o support string arrays in event_rpcgen
 o change evrpc hooking to allow pausing of RPCs; this will make it possible\
 for the hook to do some meaning ful work; this is not backwards compatible.
 o allow an http request callback to take ownership of a request structure
 o allow association of meta data with RPC requests for hook processing
 o associate more context for hooks to query such as the connection object
 o remove pending timeouts on event_base_free()
 o also check EAGAIN for Solaris' event ports; from W.C.A. Wijngaards
 o devpoll and evport need reinit; tested by W.C.A Wijngaards
 o event_base_get_method; from Springande Ulv
 o Send CRLF after each chunk in HTTP output, for compliance with RFC2626. \
 Patch from "propanbutan".  Fixes bug 1894184.
 o Add a int64_t parsing function, with unit tests, so we can apply Scott\
 Lamb's fix to allow large HTTP values.
 o Use a 64-bit field to hold HTTP content-lengths.  Patch from Scott Lamb.
 o Allow regression code to build even without Python installed
 o remove NDEBUG ifdefs from evdns.c
 o detect integer types properly on platforms without stdint.h
 o udpate documentation of event_loop and event_base_loop; from Tani Hosokawa.
 o simplify evbuffer by removing orig_buffer
 o do not insert event into list when evsel->add fails
 o add support for PUT/DELETE requests; from Josh Rotenberg
 o introduce evhttp_accept_socket() to accept from an already created socket
 o include Content-Length in reply for HTTP/1.0 requests with keep-alive
 o increase listen queue for http sockets to 128; if that is not enough the\
 evhttp_accpet_socket() api can be used with a prepared socket.
 o Patch from Tani Hosokawa: make some functions in http.c threadsafe.
 o test support for PUT/DELETE requests; from Josh Rotenberg
 o rewrite of the evbuffer code to reduce memory copies
 o Some older Solaris versions demand that _REENTRANT be defined to get\
 strtok_r(); do so.
 o Do not free the kqop file descriptor in other processes, also allow it to\
 be 0; from Andrei Nigmatulin
 o Provide OpenSSL style support for multiple threads accessing the same\
 event_base
 o make event_rpcgen.py generate code include event-config.h; reported by Sam\
 Banks.
 o switch thread support so that locks get allocated as they are needed.
 o make event methods static so that they are not exported; from Andrei\
 Nigmatulin
 o make RPC replies use application/octet-stream as mime type
 o do not delete uninitialized timeout event in evdns
 o Correct the documentation on buffer printf functions.
 o Don't warn on unimplemented epoll_create(): this isn't a problem, just a\
 reason to fall back to poll or select.
 o Correctly handle timeouts larger than 35 minutes on Linux with epoll.c. \
 This is probably a kernel defect, but we'll have to support old kernels\
 anyway even if it gets fixed.
 o Make name_from_addr() threadsafe in http.c
 o Add new thread-safe interfaces to evdns functions.
 o Make all event_tagging interfaces threadsafe.
 o Rename internal memory management functions.
 o New functions (event_assign, event_new, event_free) for use by apps that\
 want to be safely threadsafe, or want to remain ignorant of the contents of\
 struct event.
 o introduce bufferevent_read_buffer; allows reading without memory copy.
 o expose bufferevent_setwatermark via header files and fix high watermark on\
 read
 o fix a bug in buffrevent read water marks and add a test for them
 o fix a bug in which bufferevent_write_buffer would not schedule a write\
 event
 o provide bufferevent_input and bufferevent_output without requiring\
 knowledge of the structure
 o introduce bufferevent_setcb and bufferevent_setfd to allow better\
 manipulation of bufferevents
 o convert evhttp_connection to use bufferevents.
 o use libevent's internal timercmp on all platforms, to avoid bugs on old\
 platforms where timercmp(a,b,<=) is buggy.
 o Remove the never-exported, never-used evhttp_hostportfile function.
 o Support input/output filters for bufferevents; somewhat similar to libio's\
 model.  This will allow us to implement SSL, compression, etc, transparently\
 to users of bufferevents such as the http layer.
 o allow connections to be removed from an rpc pool
 o add new evtimer_assign, signal_assign, evtimer_new, and signal_new\
 functions to manipulate timer and signal events, analagous to the\
 now-recommended event_assign and event_new
 o switch internal uses of event_set over to use event_assign.
 o introduce evbuffer_contiguous_space() api that tells a user how much data\
 is available in the first buffer chain
 o introduce evbuffer_reserve_space() and evbuffer_commit_space() to make\
 processing in filters more efficient.
 o reduce system calls for getting current time by caching it.
 o separate signal events from io events; making the code less complex.
 o support for periodic timeouts
 o support for virtual HTTP hosts.
 o turn event_initialized() into a function, and add function equivalents to\
 EVENT_SIGNAL and EVENT_FD so that people don't need to include event_struct.h
 o Build test directory correctly with CPPFLAGS set.
 o Provide an API for retrieving the supported event mechanisms.
 o event_base_new_with_config() and corresponding config APIs.
 o migrate the evhttp header to event2/ but accessors are still missing.
 o deprecate timeout_* event functions by moving them to event_compat.h
 o Move	windows gettimeofday replacement into a new evutil_gettimeofday().
 o Make configure script work on IRIX.
 o provide a method for canceling ongoing http requests.
 o Make vsnprintf() returns consistent on win32.
 o Fix connection keep-alive behavior for HTTP/1.0
 o Fix use of freed memory in event_reinit; pointed out by Peter Postma
 o constify struct timeval * where possible
 o make event_get_supported_methods obey environment variables
 o support for edge-triggered events on epoll and kqueue backends: patch from\
 Valery Kholodkov
 o support for selecting event backends by their features, and for querying\
 the features of a backend.
 o change failing behavior of event_base_new_with_config: if a config is\
 provided and no backend is selected, return NULL instead of aborting.
 o deliver partial data to request callbacks when chunked callback is set\
 even if there is no chunking on the http level; allows cancelation of\
 requests from within the chunked callback; from Scott Lamb.
 o allow min_heap_erase to be called on removed members; from liusifan.
 o Rename INPUT and OUTPUT to EVRPC_INPUT and EVRPC_OUTPUT.  Retain\
 INPUT/OUTPUT aliases on on-win32 platforms for backwards compatibility.
 o Do not use SO_REUSEADDR when connecting
 o Support 64-bit integers in RPC structs
 o Correct handling of trailing headers in chunked replies; from Scott Lamb.
 o Support multi-line HTTP headers; based on a patch from Moshe Litvin
 o Reject negative Content-Length headers; anonymous bug report
 o Detect CLOCK_MONOTONIC at runtime for evdns; anonymous bug report	
 o Various HTTP correctness fixes from Scott Lamb
 o Fix a bug where deleting signals with the kqueue backend would cause\
 subsequent adds to fail
 o Support multiple events listening on the same signal; make signals regular\
 events that go on the same event queue; problem report by Alexander Drozdov.
 o Fix a problem with epoll() and reinit; problem report by Alexander\
 Drozdov.	
 o Fix off-by-one errors in devpoll; from Ian Bell
 o Make event_add not change any state if it fails; reported by Ian Bell.
 o Fix a bug where headers arriving in multiple packets were not parsed; fix\
 from Jiang Hong; test by me.
 o Match the query in DNS replies to the query in the request; from Vsevolod\
 Stakhov.
 o Add new utility functions to correctly observe and log winsock errors.
 o Do not remove Accept-Encoding header
 o Clear the timer cache on entering the event loop; reported by Victor Chang
 o Only bind the socket on connect when a local address has been provided;\
 reported by Alejo Sanchez
 o Allow setting of local port for evhttp connections to support millions of\
 connections from a single system; from Richard Jones.
 o Clear the timer cache when leaving the event loop; reported by Robin\
 Haberkorn
 o Fix a typo in setting the global event base; reported by lance.
 o Set the 0x20 bit on outgoing alphabetic characters in DNS requests\
 randomly, and insist on a match in replies.  This helps resist DNS poisoning\
 attacks.
 o Make the http connection close detection work properly with bufferevents\
 and fix a potential memory leak associated with it.
 o Restructure the event backends so that they do not need to keep track of\
 events themselves, as a side effect multiple events can use the same fd or\
 signal.
 o Add generic implementations for parsing and emiting IPv6 addresses on\
 platforms that do not have inet_ntop and/or inet_pton.
 o Allow DNS servers that have IPv6 addresses.
 o Add an evbuffer_write_atmost() function to write a limited number of bytes\
 to an fd.
 o Refactor internal notify-main-thread logic to prefer eventfd to pipe, then\
 pipe to socketpair, and only use socketpairs as a last resort.
 o Try harder to pack all evbuffer reads into as few chains as possible,\
 using readv/WSARecv as appropriate.
 o New evthread_use_windows_threads() and evthread_use_pthreads() functions\
 to set up the evthread callbacks with reasonable defaults.
 o Change the semantics of timeouts in conjunction with EV_PERSIST; timeouts\
 in that case will now repeat until deleted.
 o sendfile, mmap and memory reference support for evbuffers.
 o New evutil_make_listen_socket_reuseable() to abstract SO_REUSEADDR.
 o New bind-to option to allow DNS clients to bind to an arbitrary port for\
 outgoing requests.
 o evbuffers can now be "frozen" to prevent operations at one or both ends.
 o Bufferevents now notice external attempts to add data to an inbuf or\
 remove it from an outbuf, and stop them.
 o Fix parsing of queries where the encoded queries contained \r, \n or +
 o Do not allow internal events to starve lower-priority events.


\
changes:
\
Changes in 1.4.14b-stable
 o Set the VERSION_INFO correctly for 1.4.14

Changes in 1.4.14-stable
 o Add a .gitignore file for the 1.4 branch. (d014edb)
 o Backport evbuffer_readln(). (b04cc60 Nicholas Marriott)
 o Make the evbuffer_readln backport follow the current API (c545485)
 o Valgrind fix: Clear struct kevent before checking for OSX bug. (5713d5d\
 William Ahern)
 o Fix a crash when reading badly formatted resolve.conf (5b10d00 Yasuoka\
 Masahiko)
 o Fix memory-leak of signal handler array with kqueue. [backport] (01f3775)
 o Update sample/signal-test.c to use newer APIs and not leak. (891765c Evan\
 Jones)
 o Correct all versions in 1.4 branch (ac0d213)
 o Make evutil_make_socket_nonblocking() leave any other flags alone.\
 (81c26ba Jardel Weyrich)
 o Adjusted fcntl() retval comparison on evutil_make_socket_nonblocking().\
 (5f2e250 Jardel Weyrich)
 o Correct a debug message in evhttp_parse_request_line (35df59e)
 o Merge branch 'readln-backport' into patches-1.4 (8771d5b)
 o Do not send an HTTP error when we've already closed or responded. (4fd2dd9\
 Pavel Plesov)
 o Re-add event_siglcb; some old code _was_ still using it. :( (bd03d06)
 o Make Libevent 1.4 build on win32 with Unicode enabled. (bce58d6 Brodie\
 Thiesfield)
 o Distribute nmake makefile for 1.4 (20d706d)
 o do not fail while sending on http connections the client closed. (5c8b446)
 o make evhttp_send() safe against terminated connections, too (01ea0c5)
 o Fix a free(NULL) in min_heap.h (2458934)
 o Fix memory leak when setting up priorities; reported by Alexander Drozdov\
 (cb1a722)
 o Clean up properly when adding a signal handler fails. (ae6ece0 Gilad\
 Benjamini)
 o Do not abort HTTP requests missing a reason string. (29d7b32 Pierre\
 Phaneuf)
 o Fix compile warning in http.c (906d573)
 o Define _REENTRANT as needed on Solaris, elsewhere (6cbea13)


Changes in 1.4.13-stable:
 o If the kernel tells us that there are a negative number of bytes to read\
 from a socket, do not believe it.  Fixes bug 2841177; found by Alexander\
 Pronchenkov.
 o Do not allocate the maximum event queue and fd array for the epoll backend\
 at startup.  Instead, start out accepting 32 events at a time, and double\
 the queue's size when it seems that the OS is generating events faster than\
 we're requesting them.  Saves up to 512K per epoll-based event_base. \
 Resolves bug 2839240.
 o Fix compilation on Android, which forgot to define fd_mask in its\
 sys/select.h
 o Do not drop data from evbuffer when out of memory; reported by Jacek\
 Masiulaniec
 o Rename our replacement compat/sys/_time.h header to avoid build a conflict\
 on HPUX; reported by Kathryn Hogg.
 o Build kqueue.c correctly on GNU/kFreeBSD platforms. Patch pulled upstream\
 from Debian.
 o Fix a problem with excessive memory allocation when using multiple event\
 priorities.
 o When running set[ug]id, don't check the environment. Based on a patch from\
 OpenBSD.


Changes in 1.4.12-stable:
 o Try to contain degree of failure when running on a win32 version so\
 heavily firewalled that we can't fake a socketpair.
 o Fix an obscure timing-dependent, allocator-dependent crash in the evdns\
 code.
 o Use __VA_ARGS__ syntax for varargs macros in event_rpcgen when compiler is\
 not GCC.
 o Activate fd events in a pseudorandom order with O(N) backends, so that we\
 don't systematically favor low fds (select) or earlier-added fds (poll,\
 win32).
 o Fix another pair of fencepost bugs in epoll.c.  [Patch from Adam Langley.]
 o Do not break evdns connections to nameservers when our IP changes.
 o Set truncated flag correctly in evdns server replies.
 o Disable strict aliasing with GCC: our code is not compliant with it.

Changes in 1.4.11-stable:
 o Fix a bug when removing a timeout from the heap. [Patch from Marko Kreen]
 o Remove the limit on size of HTTP headers by removing static buffers.
 o Fix a nasty dangling pointer bug in epoll.c that could occur after\
 epoll_recalc(). [Patch from Kevin Springborn]
 o Distribute Win32-Code/event-config.h, not ./event-config.h

Changes in 1.4.10-stable:
 o clean up buffered http connection data on reset; reported by Brian O'Kelley
 o bug fix and potential race condition in signal handling; from Alexander\
 Drozdov
 o rename the Solaris event ports backend to evport
 o support compilation on Haiku
 o fix signal processing when a signal callback delivers a signal; from\
 Alexander Drozdov
 o const-ify some arguments to evdns functions.
 o off-by-one error in epoll_recalc; reported by Victor Goya
 o include Doxyfile in tar ball; from Jeff Garzik
 o correctly parse queries with encoded \r, \n or + characters

Changes in 1.4.9-stable:
 o event_add would not return error for some backends; from Dean McNamee
 o Clear the timer cache on entering the event loop; reported by Victor Chang
 o Only bind the socket on connect when a local address has been provided;\
 reported by Alejo Sanchez
 o Allow setting of local port for evhttp connections to support millions of\
 connections from a single system; from Richard Jones.
 o Clear the timer cache when leaving the event loop; reported by Robin\
 Haberkorn
 o Fix a typo in setting the global event base; reported by lance.
 o Fix a memory leak when reading multi-line headers
 o Fix a memory leak by not running explicit close detection for server\
 connections

Changes in 1.4.8-stable:
 o Match the query in DNS replies to the query in the request; from Vsevolod\
 Stakhov.
 o Fix a merge problem in which name_from_addr returned pointers to the\
 stack; found by Jiang Hong.
 o Do not remove Accept-Encoding header
	
Changes in 1.4.7-stable:
 o Fix a bug where headers arriving in multiple packets were not parsed; fix\
 from Jiang Hong; test by me.
	
Changes in 1.4.6-stable:
 o evutil.h now includes <stdarg.h> directly
 o switch all uses of [v]snprintf over to evutil
 o Correct handling of trailing headers in chunked replies; from Scott Lamb.
 o Support multi-line HTTP headers; based on a patch from Moshe Litvin
 o Reject negative Content-Length headers; anonymous bug report
 o Detect CLOCK_MONOTONIC at runtime for evdns; anonymous bug report	
 o Fix a bug where deleting signals with the kqueue backend would cause\
 subsequent adds to fail
 o Support multiple events listening on the same signal; make signals regular\
 events that go on the same event queue; problem report by Alexander Drozdov.
 o Deal with evbuffer_read() returning -1 on EINTR|EAGAIN; from Adam Langley.
 o Fix a bug in which the DNS server would incorrectly set the type of a\
 cname reply to a.
 o Fix a bug where setting the timeout on a bufferevent would take not effect\
 if the event was already pending.
 o Fix a memory leak when using signals for some event bases; reported by\
 Alexander Drozdov.
 o Add libevent.vcproj file to distribution to help with Windows build.
 o Fix a problem with epoll() and reinit; problem report by Alexander\
 Drozdov.	
 o Fix off-by-one errors in devpoll; from Ian Bell
 o Make event_add not change any state if it fails; reported by Ian Bell.
 o Do not warn on accept when errno is either EAGAIN or EINTR

Changes in 1.4.5-stable:
 o Fix connection keep-alive behavior for HTTP/1.0
 o Fix use of freed memory in event_reinit; pointed out by Peter Postma
 o Constify struct timeval * where possible; pointed out by Forest Wilkinson
 o allow min_heap_erase to be called on removed members; from liusifan.
 o Rename INPUT and OUTPUT to EVRPC_INPUT and EVRPC_OUTPUT.  Retain\
 INPUT/OUTPUT aliases on on-win32 platforms for backwards compatibility.
 o Do not use SO_REUSEADDR when connecting
 o Fix Windows build
 o Fix a bug in event_rpcgen when generated fixed-sized entries

Changes in 1.4.4-stable:
 o Correct the documentation on buffer printf functions.
 o Don't warn on unimplemented epoll_create(): this isn't a problem, just a\
 reason to fall back to poll or select.
 o Correctly handle timeouts larger than 35 minutes on Linux with epoll.c. \
 This is probably a kernel defect, but we'll have to support old kernels\
 anyway even if it gets fixed.
 o Fix a potential stack corruption bug in tagging on 64-bit CPUs.
 o expose bufferevent_setwatermark via header files and fix high watermark on\
 read
 o fix a bug in bufferevent read water marks and add a test for them
 o introduce bufferevent_setcb and bufferevent_setfd to allow better\
 manipulation of bufferevents
 o use libevent's internal timercmp on all platforms, to avoid bugs on old\
 platforms where timercmp(a,b,<=) is buggy.
 o reduce system calls for getting current time by caching it.
 o fix evhttp_bind_socket() so that multiple sockets can be bound by the same\
 http server.
 o Build test directory correctly with CPPFLAGS set.
 o Fix build under Visual C++ 2005.
 o Expose evhttp_accept_socket() API.
 o Merge windows gettimeofday() replacement into a new evutil_gettimeofday()\
 function.
 o Fix autoconf script behavior on IRIX.
 o Make sure winsock2.h include always comes before windows.h include.

Changes in 1.4.3-stable:
 o include Content-Length in reply for HTTP/1.0 requests with keep-alive
 o Patch from Tani Hosokawa: make some functions in http.c threadsafe.
 o Do not free the kqop file descriptor in other processes, also allow it to\
 be 0; from Andrei Nigmatulin
 o make event_rpcgen.py generate code include event-config.h; reported by Sam\
 Banks.
 o make event methods static so that they are not exported; from Andrei\
 Nigmatulin
 o make RPC replies use application/octet-stream as mime type
 o do not delete uninitialized timeout event in evdns

Changes in 1.4.2-rc:
 o remove pending timeouts on event_base_free()
 o also check EAGAIN for Solaris' event ports; from W.C.A. Wijngaards
 o devpoll and evport need reinit; tested by W.C.A Wijngaards
 o event_base_get_method; from Springande Ulv
 o Send CRLF after each chunk in HTTP output, for compliance with RFC2626. \
 Patch from "propanbutan".  Fixes bug 1894184.
 o Add a int64_t parsing function, with unit tests, so we can apply Scott\
 Lamb's fix to allow large HTTP values.
 o Use a 64-bit field to hold HTTP content-lengths.  Patch from Scott Lamb.
 o Allow regression code to build even without Python installed
 o remove NDEBUG ifdefs from evdns.c
 o update documentation of event_loop and event_base_loop; from Tani Hosokawa.
 o detect integer types properly on platforms without stdint.h
 o Remove "AM_MAINTAINER_MODE" declaration in configure.in: now makefiles and\
 configure should get re-generated automatically when Makefile.am or\
 configure.in chanes.
 o do not insert event into list when evsel->add fails

Changes in 1.4.1-beta:
 o free minheap on event_base_free(); from Christopher Layne
 o debug cleanups in signal.c; from Christopher Layne
 o provide event_base_new() that does not set the current_base global
 o bufferevent_write now uses a const source argument; report from Charles\
 Kerr
 o better documentation for event_base_loopexit; from Scott Lamb.
 o Make kqueue have the same behavior as other backends when a signal is\
 caught between event_add() and event_loop().  Previously, it would catch and\
 ignore such signals.
 o Make kqueue restore signal handlers correctly when event_del() is called.
 o provide event_reinit() to reintialize an event_base after fork
 o small improvements to evhttp documentation
 o always generate Date and Content-Length headers for HTTP/1.1 replies
 o set the correct event base for HTTP close events
 o New function, event_{base_}loopbreak.  Like event_loopexit, it makes an\
 event loop stop executing and return.  Unlike event_loopexit, it keeps\
 subsequent pending events from getting executed.  Patch from Scott Lamb
 o Removed obsoleted recalc code
 o pull setters/getters out of RPC structures into a base class to which we\
 just need to store a pointer; this reduces the memory footprint of these\
 structures.
 o fix a bug with event_rpcgen for integers
 o move EV_PERSIST handling out of the event backends
 o support for 32-bit tag numbers in rpc structures; this is wire compatible,\
 but changes the API slightly.
 o prefix {encode,decode}_tag functions with evtag to avoid collisions
 o Correctly handle DNS replies with no answers set (Fixes bug 1846282)
 o The configure script now takes an --enable-gcc-warnings option that turns\
 on many optional gcc warnings.  (Nick has been building with these for a\
 while, but they might be useful to other developers.)
 o When building with GCC, use the "format" attribute to verify type\
 correctness of calls to printf-like functions.
 o removed linger from http server socket; reported by Ilya Martynov
 o allow \r or \n individually to separate HTTP headers instead of the\
 standard "\r\n"; from Charles Kerr.
 o demote most http warnings to debug messages
 o Fix Solaris compilation; from Magne Mahre
 o Add a "Date" header to HTTP responses, as required by HTTP 1.1.
 o Support specifying the local address of an evhttp_connection using\
 set_local_address
 o Fix a memory leak in which failed HTTP connections would not free the\
 request object
 o Make adding of array members in event_rpcgen more efficient, but doubling\
 memory allocation
 o Fix a memory leak in the DNS server
 o Fix compilation when DNS_USE_OPENSSL_FOR_ID is enabled
 o Fix buffer size and string generation in evdns_resolve_reverse_ipv6().
 o Respond to nonstandard DNS queries with "NOTIMPL" rather than by ignoring\
 them.
 o In DNS responses, the CD flag should be preserved, not the TC flag.
 o Fix http.c to compile properly with USE_DEBUG; from Christopher Layne
 o Handle NULL timeouts correctly on Solaris; from Trond Norbye
 o Recalculate pending events properly when reallocating event array on\
 Solaris; from Trond Norbye
 o Add Doxygen documentation to header files; from Mark Heily
 o Add a evdns_set_transaction_id_fn() function to override the default
   transaction ID generation code.
 o Add an evutil module (with header evutil.h) to implement our standard\
 cross-platform hacks, on the theory that somebody else would like to use\
 them too.
 o Fix signals implementation on windows.
 o Fix http module on windows to close sockets properly.
 o Make autogen.sh script run correctly on systems where /bin/sh isn't bash.\
 (Patch from Trond Norbye, rewritten by Hagne Mahre and then Hannah\
 Schroeter.)
 o Skip calling gettime() in timeout_process if we are not in fact waiting\
 for any events. (Patch from Trond Norbye)
 o Make test subdirectory compile under mingw.
 o Fix win32 buffer.c behavior so that it is correct for sockets (which do\
 not like ReadFile and WriteFile).
 o Make the test.sh script run unit tests for the evpoll method.
 o Make the entire evdns.h header enclosed in "extern C" as appropriate.
 o Fix implementation of strsep on platforms that lack it
 o Fix implementation of getaddrinfo on platforms that lack it; mainly, this\
 will make Windows http.c work better.  Original patch by Lubomir Marinov.
 o Fix evport implementation: port_disassociate called on unassociated events\
 resulting in bogus errors; more efficient memory management; from Trond\
 Norbye and Prakash Sangappa
 o support for hooks on rpc input and output; can be used to implement rpc\
 independent processing such as compression or authentication.
 o use a min heap instead of a red-black tree for timeouts; as a result\
 finding the min is a O(1) operation now; from Maxim Yegorushkin
 o associate an event base with an rpc pool
 o added two additional libraries: libevent_core and libevent_extra in\
 addition to the regular libevent.  libevent_core contains only the event\
 core whereas libevent_extra contains dns, http and rpc support
 o Begin using libtool's library versioning support correctly.  If we don't\
 mess up, this will more or less guarantee binaries linked against old\
 versions of libevent continue working when we make changes to libevent that\
 do not break backward compatibility.
 o Fix evhttp.h compilation when TAILQ_ENTRY is not defined.
 o Small code cleanups in epoll_dispatch().
 o Increase the maximum number of addresses read from a packet in evdns to 32.
 o Remove support for the rtsig method: it hasn't compiled for a while, and\
 nobody seems to miss it very much.  Let us know if there's a good reason to\
 put it back in.
 o Rename the "class" field in evdns_server_request to dns_question_class, so\
 that it won't break compilation under C++.  Use a macro so that old code\
 won't break.  Mark the macro as deprecated.
 o Fix DNS unit tests so that having a DNS server with broken IPv6 support is\
 no longer cause for aborting the unit tests.
 o Make event_base_free() succeed even if there are pending non-internal\
 events on a base.  This may still leak memory and fds, but at least it no\
 longer crashes.
 o Post-process the config.h file into a new, installed event-config.h file\
 that we can install, and whose macros will be safe to include in header\
 files.
 o Remove the long-deprecated acconfig.h file.
 o Do not require #include <sys/types.h> before #include <event.h>.
 o Add new evutil_timer* functions to wrap (or replace) the regular timeval\
 manipulation functions.
 o Fix many build issues when using the Microsoft C compiler.
 o Remove a bash-ism in autogen.sh
 o When calling event_del on a signal, restore the signal handler's previous\
 value rather than setting it to SIG_DFL. Patch from Christopher Layne.
 o Make the logic for active events work better with internal events; patch\
 from Christopher Layne.
 o We do not need to specially remove a timeout before calling event_del;\
 patch from Christopher Layne.

\
changes-type: text/plain
url: https://libevent.org
src-url: https://github.com/libevent/libevent
package-url: https://github.com/build2-packaging/libevent
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libssl >= 1.1.1 ? ($config.libevent.openssl)
depends: libcrypto >= 1.1.1 ? ($config.libevent.openssl)
builds: all
extras-build-config:
\
config.libevent.extra=true
config.libevent.openssl=true
config.libevent.pthreads=true
;
Test the extra, openssl, and pthreads libraries.
\
bootstrap-build:
\
project = libevent

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

config [bool] config.libevent.develop ?= false

# If true, build with EVENT__DISABLE_DEBUG_MODE=0.
#
config [bool] config.libevent.debug ?= false

# If these variables are true, enable the corresponding library (and its
# dependencies).
#
config [bool] config.libevent.extra    ?= false
config [bool] config.libevent.openssl  ?= false
config [bool] config.libevent.pthreads ?= false

\
location: libevent/libevent-2.1.12+1.tar.gz
sha256sum: 5317e82285e62e8392cd76cc26f27d86187499a1a88eefd2faec2bef5f8f5513
:
name: libexpat
version: 2.1.0+8
project: expat
summary: Stream-oriented XML parsing C library
license: MIT
topics: Expat, C, XML parser, streaming
description:
\
Expat is a stream-oriented XML parsing C library. This means that you register
handlers with the parser before starting the parse. These handlers are called
when the parser discovers the associated structures (start tag, etc) in the
document being parsed. For more information see:

https://libexpat.github.io/

This package contains the original libexpat library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://github.com/libexpat/libexpat/issues. Send build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of Expat for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/expat/

\
description-type: text/plain
url: https://libexpat.github.io/
doc-url: https://libexpat.github.io/doc/
src-url: https://git.build2.org/cgit/packaging/expat/expat/tree/libexpat/
package-url: https://git.build2.org/cgit/packaging/expat/
email: packaging@build2.org; Report issues at https://github.com/libexpat/lib\
expat/issues.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying COPYING file

project = libexpat

using version
using config
using dist
using test
using install

# The Expat version has the <major>.<minor>.<micro> form and follows the
# semver semantics, according to the documentation in expat/lib/expat.h
# present in the latest library version (2.2.9 at the time of this writing).
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (LIBCURRENT, LIBREVISION, and LIBAGE in expat/configure.in). As it follows
# from the comment in expat/configure.in, the major version (current - age) is
# incremented for backwards-incompatible ABI changes.
#
if ($version.major == 2 && $version.minor == 1 && $version.patch == 0)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.6.0" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: expat/libexpat-2.1.0+8.tar.gz
sha256sum: 7d330fb2d5d1f74b6d7ff260da9c44e6dc65002a8556bbd17788d4148b35a1fd
:
name: libexpat
version: 2.2.9
project: expat
summary: Stream-oriented XML parsing C library
license: MIT
topics: Expat, C, XML parser, streaming
description:
\
Expat is a stream-oriented XML parsing C library. This means that you register
handlers with the parser before starting the parse. These handlers are called
when the parser discovers the associated structures (start tag, etc) in the
document being parsed. For more information see:

https://libexpat.github.io/

This package contains the original libexpat library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://github.com/libexpat/libexpat/issues. Send build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of Expat for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/expat/

\
description-type: text/plain
url: https://libexpat.github.io/
doc-url: https://libexpat.github.io/doc/
src-url: https://git.build2.org/cgit/packaging/expat/expat/tree/libexpat/
package-url: https://git.build2.org/cgit/packaging/expat/
email: packaging@build2.org; Report issues at https://github.com/libexpat/lib\
expat/issues.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying COPYING file

project = libexpat

using version
using config
using dist
using test
using install

# The Expat version has the <major>.<minor>.<micro> form and follows the
# semver semantics, according to the documentation in expat/lib/expat.h.
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (LIBCURRENT, LIBREVISION, and LIBAGE in expat/configure.ac). As it follows
# from the comment in expat/configure.ac, the major version (current - age) is
# incremented for backwards-incompatible ABI changes.
#
if ($version.major == 2 && $version.minor == 2 && $version.patch == 9)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.6.11" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: expat/libexpat-2.2.9.tar.gz
sha256sum: 505bbf2381e127902f27ae9e1752921051ecde3788113ff8a906857d67f068b4
:
name: libexpat
version: 2.4.6
project: expat
priority: security
summary: Stream-oriented XML parsing C library
license: MIT
topics: Expat, C, XML parser, streaming
description:
\
Expat is a stream-oriented XML parsing C library. This means that you register
handlers with the parser before starting the parse. These handlers are called
when the parser discovers the associated structures (start tag, etc) in the
document being parsed. For more information see:

https://libexpat.github.io/

This package contains the original libexpat library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://github.com/libexpat/libexpat/issues. Send build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of Expat for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/expat/

\
description-type: text/plain
url: https://libexpat.github.io/
doc-url: https://libexpat.github.io/doc/
src-url: https://git.build2.org/cgit/packaging/expat/expat/tree/libexpat/
package-url: https://git.build2.org/cgit/packaging/expat/
email: packaging@build2.org; Report issues at https://github.com/libexpat/lib\
expat/issues.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying COPYING file

project = libexpat

using version
using config
using dist
using test
using install

# The Expat version has the <major>.<minor>.<micro> form and follows the
# semver semantics, according to the documentation in expat/lib/expat.h.
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (LIBCURRENT, LIBREVISION, and LIBAGE in expat/configure.ac). As it follows
# from the comment in expat/configure.ac, the major version (current - age) is
# incremented for backwards-incompatible ABI changes.
#
if ($version.major == 2 && $version.minor == 4 && $version.patch == 6)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.8.6" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# All exe{} in unit-tests/ are, well, tests. Also don't link whole archives
# by default there.
#
unit-tests/exe{*}: test = true
unit-tests/{libue libul}{*}: bin.whole = false

# Specify the test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: expat/libexpat-2.4.6.tar.gz
sha256sum: f6ffc1bf9c00b425c093e93c0aa1d46003cdab52ab25fcca7df0cb0211bce265
:
name: libexpat
version: 2.4.7
project: expat
priority: security
summary: Stream-oriented XML parsing C library
license: MIT
topics: Expat, C, XML parser, streaming
description:
\
Expat is a stream-oriented XML parsing C library. This means that you register
handlers with the parser before starting the parse. These handlers are called
when the parser discovers the associated structures (start tag, etc) in the
document being parsed. For more information see:

https://libexpat.github.io/

This package contains the original libexpat library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://github.com/libexpat/libexpat/issues. Send build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of Expat for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/expat/

\
description-type: text/plain
url: https://libexpat.github.io/
doc-url: https://libexpat.github.io/doc/
src-url: https://git.build2.org/cgit/packaging/expat/expat/tree/libexpat/
package-url: https://git.build2.org/cgit/packaging/expat/
email: packaging@build2.org; Report issues at https://github.com/libexpat/lib\
expat/issues.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying COPYING file

project = libexpat

using version
using config
using dist
using test
using install

# The Expat version has the <major>.<minor>.<micro> form and follows the
# semver semantics, according to the documentation in expat/lib/expat.h.
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (LIBCURRENT, LIBREVISION, and LIBAGE in expat/configure.ac). As it follows
# from the comment in expat/configure.ac, the major version (current - age) is
# incremented for backwards-incompatible ABI changes.
#
if ($version.major == 2 && $version.minor == 4 && $version.patch == 7)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.8.7" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying COPYING file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# All exe{} in unit-tests/ are, well, tests. Also don't link whole archives
# by default there.
#
unit-tests/exe{*}: test = true
unit-tests/{libue libul}{*}: bin.whole = false

# Specify the test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: expat/libexpat-2.4.7.tar.gz
sha256sum: 2ce104484f6bdefe14995301e6f6abaf9dfb583b590e1eaa3d796479bce2b650
:
name: libexpat
version: 2.4.9
project: expat
priority: security
summary: Stream-oriented XML parsing C library
license: MIT
topics: Expat, C, XML parser, streaming
description:
\
Expat is a stream-oriented XML parsing C library. This means that you register
handlers with the parser before starting the parse. These handlers are called
when the parser discovers the associated structures (start tag, etc) in the
document being parsed. For more information see:

https://libexpat.github.io/

This package contains the original libexpat library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://github.com/libexpat/libexpat/issues. Send build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of Expat for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/expat/

\
description-type: text/plain
url: https://libexpat.github.io/
doc-url: https://libexpat.github.io/doc/
src-url: https://git.build2.org/cgit/packaging/expat/expat/tree/libexpat/
package-url: https://git.build2.org/cgit/packaging/expat/
email: packaging@build2.org; Report issues at https://github.com/libexpat/lib\
expat/issues.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying COPYING file

project = libexpat

using version
using config
using dist
using test
using install

# The Expat version has the <major>.<minor>.<micro> form and follows the
# semver semantics, according to the documentation in expat/lib/expat.h.
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (LIBCURRENT, LIBREVISION, and LIBAGE in expat/configure.ac). As it follows
# from the comment in expat/configure.ac, the major version (current - age) is
# incremented for backwards-incompatible ABI changes.
#
if ($version.major == 2 && $version.minor == 4 && $version.patch == 9)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.8.9" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# All exe{} in unit-tests/ are, well, tests. Also don't link whole archives
# by default there.
#
unit-tests/exe{*}: test = true
unit-tests/{libue libul}{*}: bin.whole = false

# Specify the test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: expat/libexpat-2.4.9.tar.gz
sha256sum: 14770873fad4c8853217d37aaf90c23cb36d068c50cf903989c48b43a973a37b
:
name: libexpat
version: 2.5.0+1
project: expat
priority: security
summary: Stream-oriented XML parsing C library
license: MIT
topics: Expat, C, XML parser, streaming
description:
\
Expat is a stream-oriented XML parsing C library. This means that you register
handlers with the parser before starting the parse. These handlers are called
when the parser discovers the associated structures (start tag, etc) in the
document being parsed. For more information see:

https://libexpat.github.io/

This package contains the original libexpat library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://github.com/libexpat/libexpat/issues. Send build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of Expat for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/expat/

\
description-type: text/plain
url: https://libexpat.github.io/
doc-url: https://libexpat.github.io/doc/
src-url: https://git.build2.org/cgit/packaging/expat/expat/tree/libexpat/
package-url: https://git.build2.org/cgit/packaging/expat/
email: packaging@build2.org; Report issues at https://github.com/libexpat/lib\
expat/issues.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying COPYING file

project = libexpat

using version
using config
using dist
using test
using install

# The Expat version has the <major>.<minor>.<micro> form and follows the
# semver semantics, according to the documentation in expat/lib/expat.h.
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (LIBCURRENT, LIBREVISION, and LIBAGE in expat/configure.ac). As it follows
# from the comment in expat/configure.ac, the major version (current - age) is
# incremented for backwards-incompatible ABI changes.
#
if ($version.major == 2 && $version.minor == 5 && $version.patch == 0)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.8.10" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying COPYING file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# All exe{} in unit-tests/ are, well, tests. Also don't link whole archives
# by default there.
#
unit-tests/exe{*}: test = true
unit-tests/{libue libul}{*}: bin.whole = false

# Specify the test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
debian-name: libexpat1-dev
location: expat/libexpat-2.5.0+1.tar.gz
sha256sum: bee3525b76c13ce9020fffc04b20b5b4d6042bab33c5b51fe2c114507d165a8d
:
name: libexpat
version: 2.6.3
project: expat
priority: security
summary: Stream-oriented XML parsing C library
license: MIT
topics: Expat, C, XML parser, streaming
description:
\
Expat is a stream-oriented XML parsing C library. This means that you register
handlers with the parser before starting the parse. These handlers are called
when the parser discovers the associated structures (start tag, etc) in the
document being parsed. For more information see:

https://libexpat.github.io/

This package contains the original libexpat library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://github.com/libexpat/libexpat/issues. Send build system and
packaging-related feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of Expat for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/expat/

\
description-type: text/plain
url: https://libexpat.github.io/
doc-url: https://libexpat.github.io/doc/
src-url: https://git.build2.org/cgit/packaging/expat/expat/tree/libexpat/
package-url: https://git.build2.org/cgit/packaging/expat/
email: packaging@build2.org; Report issues at https://github.com/libexpat/lib\
expat/issues.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying COPYING file

project = libexpat

using version
using config
using dist
using test
using install

# The Expat version has the <major>.<minor>.<micro> form and follows the
# semver semantics, according to the documentation in expat/lib/expat.h.
#
# The ABI version doesn't correlate with the release version and is assigned
# via the libtool's -version-info <current>:<revision>:<age> option
# (LIBCURRENT, LIBREVISION, and LIBAGE in expat/configure.ac). As it follows
# from the comment in expat/configure.ac, the major version (current - age) is
# incremented for backwards-incompatible ABI changes.
#
if ($version.major == 2 && $version.minor == 6 && $version.patch == 3)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.9.3" # <current - age>.<age>.<revision>
}
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying COPYING file

using in

# Note that the unit tests use the 'for' loop initial declarations, which may
# require an explicit specification of C99 standard for older GCC versions
# (4.9, etc). That's probably ok, since the upstream declares itself in it's
# README.md as a 'C99 library for parsing XML'.
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# All exe{} in unit-tests/ are, well, tests. Also don't link whole archives
# by default there.
#
unit-tests/exe{*}: test = true
unit-tests/{libue libul}{*}: bin.whole = false

# Specify the test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
debian-name: libexpat1-dev
location: expat/libexpat-2.6.3.tar.gz
sha256sum: 734669ca15b2dfa1050fa58be298cf3fddc813196cb6b051547d68d8cc2e460f
:
name: libfineftp-server
version: 1.3.4
project: fineftp-server
summary: C++ FTP server library
license: MIT
description:
\
[![Windows](https://github.com/eclipse-ecal/fineftp-server/actions/workflows/\
build-windows.yml/badge.svg)](https://github.com/eclipse-ecal/fineftp-server/\
actions/workflows/build-windows.yml) [![Ubuntu](https://github.com/eclipse-ec\
al/fineftp-server/actions/workflows/build-ubuntu.yml/badge.svg)](https://gith\
ub.com/eclipse-ecal/fineftp-server/actions/workflows/build-ubuntu.yml)\
 [![macOS](https://github.com/eclipse-ecal/fineftp-server/actions/workflows/b\
uild-macos.yml/badge.svg)](https://github.com/eclipse-ecal/fineftp-server/act\
ions/workflows/build-macos.yml)

# fineFTP Server

FineFTP is a minimal FTP server library for Windows and Unix flavors. The\
 project is CMake based and only depends on asio, which is integrated as git\
 submodule. No boost is required.

You can easily embed this library into your own project in order to create an\
 embedded FTP Server. It was developed and tested on Windows 10 (Visual\
 Studio 2015 / 2019, MinGW) and Ubuntu 16.04 - 21.10 (gcc 5.4.0 - 11.2.0).

## Features

- FTP Passive mode (the only mode you need nowadays)
- Listing directories
- Uploading and downloading files
- Creating and removing files and directories
- User authentication (and anonymous user without authentication)
- Individual local home path for each user
- Access control on a per-user-basis
- UTF8 support (On Windows MSVC only)

*fineFTP does not support any kind of encryption. You should only use fineFTP\
 in trusted networks.*

## Example

Using fineFTP in your application is simple. Just create an FtpServer object,\
 add one or multiple users and start the server.

```cpp
#include <fineftp/server.h>
#include <thread>
 
int main() {
  // Create an FTP Server on port 2121. We use 2121 instead of the default\
 port
  // 21, as your application would need root privileges to open port 21.
  fineftp::FtpServer ftp_server(2121);
 
  // Add the well known anonymous user. Clients can log in using username
  // "anonymous" or "ftp" with any password. The user will be able to access
  // your C:\ drive and upload, download, create or delete files. On Linux\
 just
  // replace "C:\\" with any valid path. FineFTP is designed to be\
 cross-platform.
  ftp_server.addUserAnonymous("C:\\", fineftp::Permission::All);
  
  // Start the FTP Server with a thread-pool size of 4.
  ftp_server.start(4);
 
  // Prevent the application from exiting immediately
  for (;;) std::this_thread::sleep_for(std::chrono::milliseconds(100));
  return 0;
}
```

## How to checkout and build

There is an example project provided that will create an FTP Server at `C:\`\
 (Windows) or `/` (Unix).

1. Install cmake and git / git-for-windows

2. Checkout this repo and the asio submodule
	```console
	git clone https://github.com/eclipse-ecal/fineftp-server.git
	cd fineftp-server
	git submodule init
	git submodule update
	```

3. CMake the project *(Building as debug will add some debug output that is\
 helpful so see if everything is working)*
	```console
	mkdir _build
	cd _build
	cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=_install
	```

4. Build the project
	- Linux: `make`
	- Windows: Open `_build\fineftp.sln` with Visual Studio and build the\
 example project

5. Start `fineftp_example` / `fineftp_example.exe` and connect with your\
 favorite FTP Client (e.g. FileZilla) on port 2121 *(This port is used so you\
 don't need root privileges to start the FTP server)*


## Contribute

Awesome, you want to contribute to FineFTP? Here is how you can do that!

- Leave us a star ⭐️ (That's GitHub money!)
- Create an issue and write about a feature you would like or a bug you have\
 found (maybe we will find some spare time to implement it 😉)
- Fork this repository, implement the feature yourself and create a pull\
 request

\
description-type: text/markdown;variant=GFM
url: https://github.com/eclipse-ecal/fineftp-server
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libboost-asio ^1.78.0
bootstrap-build:
\
project = libfineftp-server

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: fineftp-server/libfineftp-server-1.3.4.tar.gz
sha256sum: 55e9757c313b0788a12679d35a5c0f99085a8eb9016c657f0f5122228ef24f30
:
name: libfineftp-server
version: 1.3.5+1
project: fineftp-server
summary: FineFTP is a minimal FTP server library for Windows and Unix flavors.
license: MIT
description:
\
[![Windows](https://github.com/eclipse-ecal/fineftp-server/actions/workflows/\
build-windows.yml/badge.svg)](https://github.com/eclipse-ecal/fineftp-server/\
actions/workflows/build-windows.yml) [![Ubuntu](https://github.com/eclipse-ec\
al/fineftp-server/actions/workflows/build-ubuntu.yml/badge.svg)](https://gith\
ub.com/eclipse-ecal/fineftp-server/actions/workflows/build-ubuntu.yml)\
 [![macOS](https://github.com/eclipse-ecal/fineftp-server/actions/workflows/b\
uild-macos.yml/badge.svg)](https://github.com/eclipse-ecal/fineftp-server/act\
ions/workflows/build-macos.yml)

# fineFTP Server

FineFTP is a minimal FTP server library for Windows and Unix flavors. The\
 project is CMake based and only depends on asio, which is integrated as git\
 submodule. No boost is required.

You can easily embed this library into your own project in order to create an\
 embedded FTP Server. It was developed and tested on Windows 10 (Visual\
 Studio 2015 / 2019, MinGW) and Ubuntu 16.04 - 21.10 (gcc 5.4.0 - 11.2.0).

## Features

- FTP Passive mode (the only mode you need nowadays)
- Listing directories
- Uploading and downloading files
- Creating and removing files and directories
- User authentication (and anonymous user without authentication)
- Individual local home path for each user
- Access control on a per-user-basis
- UTF8 support (On Windows MSVC only)

*fineFTP does not support any kind of encryption. You should only use fineFTP\
 in trusted networks.*

## Example

Using fineFTP in your application is simple. Just create an FtpServer object,\
 add one or multiple users and start the server.

```cpp
#include <fineftp/server.h>
#include <thread>
 
int main() {
  // Create an FTP Server on port 2121. We use 2121 instead of the default\
 port
  // 21, as your application would need root privileges to open port 21.
  fineftp::FtpServer ftp_server(2121);
 
  // Add the well known anonymous user. Clients can log in using username
  // "anonymous" or "ftp" with any password. The user will be able to access
  // your C:\ drive and upload, download, create or delete files. On Linux\
 just
  // replace "C:\\" with any valid path. FineFTP is designed to be\
 cross-platform.
  ftp_server.addUserAnonymous("C:\\", fineftp::Permission::All);
  
  // Start the FTP Server with a thread-pool size of 4.
  ftp_server.start(4);
 
  // Prevent the application from exiting immediately
  for (;;) std::this_thread::sleep_for(std::chrono::milliseconds(100));
  return 0;
}
```

## How to checkout and build

There is an example project provided that will create an FTP Server at `C:\`\
 (Windows) or `/` (Unix).

1. Install cmake and git / git-for-windows

2. Checkout this repo and the asio submodule
	```console
	git clone https://github.com/eclipse-ecal/fineftp-server.git
	cd fineftp-server
	git submodule init
	git submodule update
	```

3. CMake the project *(Building as debug will add some debug output that is\
 helpful so see if everything is working)*
	```console
	mkdir _build
	cd _build
	cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=_install
	```

4. Build the project
	- Linux: `make`
	- Windows: Open `_build\fineftp.sln` with Visual Studio and build the\
 example project

5. Start `fineftp_example` / `fineftp_example.exe` and connect with your\
 favorite FTP Client (e.g. FileZilla) on port 2121 *(This port is used so you\
 don't need root privileges to start the FTP server)*


## Contribute

Awesome, you want to contribute to FineFTP? Here is how you can do that!

- Leave us a star ⭐️ (That's GitHub money!)
- Create an issue and write about a feature you would like or a bug you have\
 found (maybe we will find some spare time to implement it 😉)
- Fork this repository, implement the feature yourself and create a pull\
 request

\
description-type: text/markdown;variant=GFM
package-description:
\
# fineFTP Server

This project builds and defines the build2 package for the [fineFTP\
 Server](https://github.com/eclipse-ecal/fineftp-server) library.

The packaging code is licensed under the MIT License, the upstream artifacts\
 are licensed under the terms and conditions of fineFTP Server.

## Usage

You can simply add this package as dependency to your project by specifying\
 it in your `manifest`:

```
depends: libfineftp-server ^1.3.4
```

Then just pick the targets that you need:

```
import libs  = libfineftp-server%lib{fineftp-server}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/eclipse-ecal/fineftp-server
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.28.0
bootstrap-build:
\
project = libfineftp-server

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: fineftp-server/libfineftp-server-1.3.5+1.tar.gz
sha256sum: 234ffb28ad1ecdc7d46842100a4247b51b514e03a71855a6a21e9f7e2e70057f
:
name: libfreetype
version: 2.11.1
project: freetype
summary: FreeType font rendering C library
license: FTL; Freetype project license
license: GPL-2.0-or-later
description:
\
FreeType 2.11.1
===============

Homepage: https://www.freetype.org

FreeType is a freely available software library to render fonts.

It  is  written  in  C,   designed  to  be  small,  efficient,  highly
customizable,  and portable  while capable  of producing  high-quality
output (glyph images) of most vector and bitmap font formats.

Please   read  the   `docs/CHANGES`   file,   it  contains   IMPORTANT
INFORMATION.

Read the files `docs/INSTALL*`  for installation instructions; see the
file `docs/LICENSE.TXT` for the available licenses.

For using FreeType's git repository  instead of a distribution bundle,
please read file `README.git`.

The FreeType 2 API reference is located in directory `docs/reference`;
use the file  `index.html` as the top entry point.   [Please note that
currently  the search  function  for  locally installed  documentation
doesn't work due to cross-site scripting issues.]

Additional documentation is  available as a separate  package from our
sites.  Go to

  https://download.savannah.gnu.org/releases/freetype/

and download one of the following files.

  freetype-doc-2.11.1.tar.xz
  freetype-doc-2.11.1.tar.gz
  ftdoc2111.zip

To view the documentation online, go to

  https://www.freetype.org/freetype2/docs/


Mailing Lists
-------------

The preferred  way of  communication with the  FreeType team  is using
e-mail lists.

  general use and discussion:      freetype@nongnu.org
  engine internals, porting, etc.: freetype-devel@nongnu.org
  announcements:                   freetype-announce@nongnu.org
  git repository tracker:          freetype-commit@nongnu.org

The lists are moderated; see

  https://www.freetype.org/contact.html

how to subscribe.


Bugs
----

Please submit bug reports at

  https://gitlab.freedesktop.org/freetype/freetype/-/issues

Alternatively,    you    might    report    bugs    by    e-mail    to
`freetype-devel@nongnu.org`.    Don't  forget   to  send   a  detailed
explanation of the problem -- there  is nothing worse than receiving a
terse message that only says 'it doesn't work'.


Patches
-------

For larger changes please provide merge requests at

  https://gitlab.freedesktop.org/freetype/freetype/-/merge_requests

Alternatively, you can send patches to the `freetype-devel@nongnu.org`
mailing list  -- and thank you  in advance for your  work on improving
FreeType!

Details on the process can be found here:

  https://www.freetype.org/developer.html#patches


Enjoy!

  The FreeType Team

----------------------------------------------------------------------

Copyright (C) 2006-2021 by
David Turner, Robert Wilhelm, and Werner Lemberg.

This  file is  part of  the FreeType  project, and  may only  be used,
modified,  and distributed  under the  terms of  the  FreeType project
license,  LICENSE.TXT.  By  continuing to  use, modify,  or distribute
this file you  indicate that you have read  the license and understand
and accept it fully.


--- end of README ---

\
description-type: text/plain
url: https://freetype.org
src-url: https://gitlab.freedesktop.org/freetype/freetype
package-url: https://github.com/build2-packaging/libfreetype
email: freetype@nongnu.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libbrotli ^1.0.9
depends: libpng ^1.6.37
depends: libz ^1.2.1100
bootstrap-build:
\
project = libfreetype

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: freetype/libfreetype-2.11.1.tar.gz
sha256sum: 8072093d795459a2ac7422283e319fa368ec690efadbf90ad0832d0c3639eac2
:
name: libftxui
version: 3.0.0+2
project: FTXUI
summary: Functional Terminal (X) User interface - A simple C++ library for\
 terminal based user interfaces!
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.com/FTXUI/examples\
/?file=component/menu_underline_animated_gallery), [Demo 2](https://arthurson\
zogni.com/FTXUI/examples/?file=component/button_style)
 * Support for drawing. [Demo](https://arthursonzogni.com/FTXUI/examples/?fil\
e=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.com/FTXUI/examples/)
- [Build using CMake](https://github.com/ArthurSonzogni/FTXUI/blob/master/doc\
/mainpage.md#using-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.com/FTXUI/examples/?file=comp\
onent/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `blink`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.co\
m/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/LightsRound.v.0.1.0.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v2.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkg.info/port/ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libftxui-tests == 3.0.0
examples: libftxui-examples == 3.0.0
builds: default
build-exclude: linux_*-clang_15*_libc++**; Hangs the compiler.
bootstrap-build:
\
project = libftxui

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

config [bool] config.libftxui.use_ms_terminal_fallback ?= true

# This library officially only support static builds,
# but we will prevent them only on Windows.
if($cxx.target.class == 'windows')
{
    bin.lib = static
}

\
location: FTXUI/libftxui-3.0.0+2.tar.gz
sha256sum: b642d9f9cf2fe5848668e5b04222eebcd7afe444d4ab19ebff6ea23b8c789b77
:
name: libftxui
version: 4.0.0
project: FTXUI
summary: Functional Terminal (X) User interface - A simple C++ library for\
 terminal based user interfaces!
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/ex\
amples/?file=component/menu_underline_animated_gallery), [Demo\
 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_st\
yle)
 * Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/example\
s/?file=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.github.io/FTXUI/examples/)
- [Build using CMake](https://arthursonzogni.github.io/FTXUI/#build-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.github.io/FTXUI/examples/?fil\
e=component/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `underlinedDouble`
  - `blink`
  - `strikethrough`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.gi\
thub.io/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)
- [beagle-config](https://github.com/SAtacker/beagle-config)
- [turing_cmd](https://github.com/DanArmor/turing_cmd)
- [StartUp](https://github.com/StubbornVegeta/StartUp)
- [eCAL monitor](https://github.com/eclipse-ecal/ecal)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/DisarmSelfDestruct.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v3.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkgx.com/details.html?package=ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libftxui-tests == 4.0.0
examples: libftxui-examples == 4.0.0
builds: default
bootstrap-build:
\
project = libftxui

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

config [bool] config.libftxui.use_ms_terminal_fallback ?= true

# This library officially only support static builds,
# but we will prevent them only on Windows.
if($cxx.target.class == 'windows')
{
    bin.lib = static
}

\
location: FTXUI/libftxui-4.0.0.tar.gz
sha256sum: e9907765d606538a19c2aac325e6ead1977afec448f3954f8125cea5e407b53d
:
name: libftxui
version: 4.1.1
project: FTXUI
summary: Functional Terminal (X) User interface - A simple C++ library for\
 terminal based user interfaces!
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/ex\
amples/?file=component/menu_underline_animated_gallery), [Demo\
 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_st\
yle)
 * Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/example\
s/?file=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.github.io/FTXUI/examples/)
- [Build using CMake](https://arthursonzogni.github.io/FTXUI/#build-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.github.io/FTXUI/examples/?fil\
e=component/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `underlinedDouble`
  - `blink`
  - `strikethrough`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.gi\
thub.io/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)
- [beagle-config](https://github.com/SAtacker/beagle-config)
- [turing_cmd](https://github.com/DanArmor/turing_cmd)
- [StartUp](https://github.com/StubbornVegeta/StartUp)
- [eCAL monitor](https://github.com/eclipse-ecal/ecal)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/DisarmSelfDestruct.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v3.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkgx.com/details.html?package=ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libftxui-tests == 4.1.1
examples: libftxui-examples == 4.1.1
builds: default
bootstrap-build:
\
project = libftxui

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

config [bool] config.libftxui.use_ms_terminal_fallback ?= true

# This library officially only support static builds,
# but we will prevent them only on Windows.
if($cxx.target.class == 'windows')
{
    bin.lib = static
}

\
location: FTXUI/libftxui-4.1.1.tar.gz
sha256sum: 9600b998753eda454aff913b6faad8793bdbe88dadea614c6156b2f2cdef3a93
:
name: libftxui-examples
version: 3.0.0+2
project: FTXUI
summary: Examples for the FTXUI library.
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.com/FTXUI/examples\
/?file=component/menu_underline_animated_gallery), [Demo 2](https://arthurson\
zogni.com/FTXUI/examples/?file=component/button_style)
 * Support for drawing. [Demo](https://arthursonzogni.com/FTXUI/examples/?fil\
e=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.com/FTXUI/examples/)
- [Build using CMake](https://github.com/ArthurSonzogni/FTXUI/blob/master/doc\
/mainpage.md#using-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.com/FTXUI/examples/?file=comp\
onent/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `blink`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.co\
m/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/LightsRound.v.0.1.0.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v2.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkg.info/port/ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: default
bootstrap-build:
\
project = libftxui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = ipp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

\
location: FTXUI/libftxui-examples-3.0.0+2.tar.gz
sha256sum: 344116bee1b23cc5e22ae63523e1d507075e510f0918893b07f4de7d589bee64
:
name: libftxui-examples
version: 4.0.0
project: FTXUI
summary: Examples for the FTXUI library.
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/ex\
amples/?file=component/menu_underline_animated_gallery), [Demo\
 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_st\
yle)
 * Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/example\
s/?file=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.github.io/FTXUI/examples/)
- [Build using CMake](https://arthursonzogni.github.io/FTXUI/#build-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.github.io/FTXUI/examples/?fil\
e=component/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `underlinedDouble`
  - `blink`
  - `strikethrough`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.gi\
thub.io/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)
- [beagle-config](https://github.com/SAtacker/beagle-config)
- [turing_cmd](https://github.com/DanArmor/turing_cmd)
- [StartUp](https://github.com/StubbornVegeta/StartUp)
- [eCAL monitor](https://github.com/eclipse-ecal/ecal)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/DisarmSelfDestruct.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v3.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkgx.com/details.html?package=ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: default
bootstrap-build:
\
project = libftxui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = ipp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

\
location: FTXUI/libftxui-examples-4.0.0.tar.gz
sha256sum: 62fb293b1e88b673fc22c2c36b62d2c46a787cdd9ec9a731dc8d3c2a79324ba5
:
name: libftxui-examples
version: 4.1.1
project: FTXUI
summary: Examples for the FTXUI library.
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/ex\
amples/?file=component/menu_underline_animated_gallery), [Demo\
 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_st\
yle)
 * Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/example\
s/?file=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.github.io/FTXUI/examples/)
- [Build using CMake](https://arthursonzogni.github.io/FTXUI/#build-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.github.io/FTXUI/examples/?fil\
e=component/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `underlinedDouble`
  - `blink`
  - `strikethrough`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.gi\
thub.io/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)
- [beagle-config](https://github.com/SAtacker/beagle-config)
- [turing_cmd](https://github.com/DanArmor/turing_cmd)
- [StartUp](https://github.com/StubbornVegeta/StartUp)
- [eCAL monitor](https://github.com/eclipse-ecal/ecal)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/DisarmSelfDestruct.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v3.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkgx.com/details.html?package=ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: default
bootstrap-build:
\
project = libftxui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = ipp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

\
location: FTXUI/libftxui-examples-4.1.1.tar.gz
sha256sum: 632f2cb34b473649666b799b902d8fafc925eb4a5ab76b0fa617d63728efdab2
:
name: libftxui-tests
version: 3.0.0+2
project: FTXUI
summary: Tests for the FTXUI library.
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.com/FTXUI/examples\
/?file=component/menu_underline_animated_gallery), [Demo 2](https://arthurson\
zogni.com/FTXUI/examples/?file=component/button_style)
 * Support for drawing. [Demo](https://arthursonzogni.com/FTXUI/examples/?fil\
e=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.com/FTXUI/examples/)
- [Build using CMake](https://github.com/ArthurSonzogni/FTXUI/blob/master/doc\
/mainpage.md#using-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.com/FTXUI/examples/?file=comp\
onent/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `blink`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.co\
m/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/LightsRound.v.0.1.0.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v2.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkg.info/port/ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: gtest ^1.11.0
builds: default
bootstrap-build:
\
project = libftxui-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = ipp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

exe{*}: test = true

\
location: FTXUI/libftxui-tests-3.0.0+2.tar.gz
sha256sum: 738404c948e01dc5f32e9c9ef962d4dbaac99ec6b0cb328a2c7b947aa7345697
:
name: libftxui-tests
version: 4.0.0
project: FTXUI
summary: Tests for the FTXUI library.
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/ex\
amples/?file=component/menu_underline_animated_gallery), [Demo\
 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_st\
yle)
 * Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/example\
s/?file=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.github.io/FTXUI/examples/)
- [Build using CMake](https://arthursonzogni.github.io/FTXUI/#build-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.github.io/FTXUI/examples/?fil\
e=component/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `underlinedDouble`
  - `blink`
  - `strikethrough`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.gi\
thub.io/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)
- [beagle-config](https://github.com/SAtacker/beagle-config)
- [turing_cmd](https://github.com/DanArmor/turing_cmd)
- [StartUp](https://github.com/StubbornVegeta/StartUp)
- [eCAL monitor](https://github.com/eclipse-ecal/ecal)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/DisarmSelfDestruct.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v3.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkgx.com/details.html?package=ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: gtest ^1.11.0
builds: default
bootstrap-build:
\
project = libftxui-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = ipp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

exe{*}: test = true

\
location: FTXUI/libftxui-tests-4.0.0.tar.gz
sha256sum: 8ecedfbf9cc7ae1a636a34b27d1de5261a42d4a9647069370d4179e7933fa666
:
name: libftxui-tests
version: 4.1.1
project: FTXUI
summary: Tests for the FTXUI library.
license: MIT
topics: C++
description:
\
<p align="center">
  <img src="./examples/component/homescreen.gif" alt="Demo image"></img>
  <br/>
  <a href="#"><img src="https://img.shields.io/badge/c++-%2300599C.svg?style=\
flat&logo=c%2B%2B&logoColor=white"></img></a>
  <a href="http://opensource.org/licenses/MIT"><img src="https://img.shields.\
io/github/license/arthursonzogni/FTXUI?color=black"></img></a>
  <a href="#"><img src="https://img.shields.io/github/stars/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/forks/ArthurSonzogni/FT\
XUI"></img></a>
  <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogn\
i/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img\
 src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
  <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img\
 src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=b\
lue"></img></a>
  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/\
badge.svg?token=C41FdRpNVA"/>
  </a>

  
  <br/>
  <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Report a Bug</a> ·
  <a href="https://arthursonzogni.github.io/FTXUI/examples.html">Examples</a>\
 .
  <a href="https://github.com/ArthurSonzogni/FTXUI/issues">Request\
 Feature</a> ·
  <a href="https://github.com/ArthurSonzogni/FTXUI/pulls">Send a Pull\
 Request</a>

</p>

## FTXUI

<i>Functional Terminal (X) User interface</i>

A simple C++ library for terminal based user interfaces!

## Feature
 * Functional style. Inspired by
   [[1]](https://hackernoon.com/building-reactive-terminal-interfaces-in-c-d3\
92ce34e649?gi=d9fb9ce35901)
   and [React](https://reactjs.org/)
 * Simple and elegant syntax (in my opinion)
 * Keyboard & mouse navigation.
 * Support for [UTF8](https://en.wikipedia.org/wiki/UTF-8) and [fullwidth\
 chars](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) (→\
 测试)
 * Support for animations. [Demo 1](https://arthursonzogni.github.io/FTXUI/ex\
amples/?file=component/menu_underline_animated_gallery), [Demo\
 2](https://arthursonzogni.github.io/FTXUI/examples/?file=component/button_st\
yle)
 * Support for drawing. [Demo](https://arthursonzogni.github.io/FTXUI/example\
s/?file=component/canvas_animated)
 * No dependencies
 * Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to\
 contributors!).
 * Learn by [examples](#documentation), and [tutorials](#documentation)
 * Multiple packages: CMake [FetchContent](https://bewagner.net/programming/2\
020/05/02/cmake-fetchcontent/) (preferred), vcpkg, pkgbuild, conan.
 * Good practises: documentation, tests, fuzzers, performance tests,\
 automated CI, automated packaging, etc...

## Documentation

- [Starter example project](https://github.com/ArthurSonzogni/ftxui-starter)
- [Documentation](https://arthursonzogni.github.io/FTXUI/)
- [Examples (WebAssembly)](https://arthursonzogni.github.io/FTXUI/examples/)
- [Build using CMake](https://arthursonzogni.github.io/FTXUI/#build-cmake)

## Operating systems

This is expected to be cross platform. This supports / tests:
- WebAssembly
- Linux
- MacOS
- Windows

## Example
~~~cpp
  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
~~~

~~~bash
┌────┐┌───────────────────────────────────────────────────────────────┐┌─────\
┐
│left││middle                                                        \
 ││right│
└────┘└───────────────────────────────────────────────────────────────┘└─────\
┘
┌────────────────────────────────────────────────────────────────────────────\
┐
│██████████████████████████████████████                                     \
 │
└────────────────────────────────────────────────────────────────────────────\
┘
~~~

## Short gallery

#### DOM

This module defines a hierarchical set of Element. An element manages layout\
 and can be responsive to the terminal dimensions.

They are declared in [<ftxui/dom/elements.hpp>](https://arthursonzogni.github\
.io/FTXUI/elements_8hpp_source.html
)
  
<details><summary>Layout</summary>

Element can be arranged together:
  - horizontally with `hbox`
  - vertically with `vbox`
  - inside a grid with `gridbox`
  - wrap along one direction using the `flexbox`.
  
Element can become flexible using the the `flex` decorator.
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2vbox_hbox_8cp\
p-example.html) using `hbox`, `vbox` and `filler`.

![image](https://user-images.githubusercontent.com/4759106/147242524-7103b5d9\
-1a92-4e2d-ac70-b3d6740061e3.png)
  
  
[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2gridbox_8cpp-\
example.htmlp) using gridbox:

![image](https://user-images.githubusercontent.com/4759106/147242972-0db1f2e9\
-0790-496f-86e6-ed2c604f7a73.png)

[Example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples/dom/hf\
low.cpp) using flexbox:

![image](https://user-images.githubusercontent.com/4759106/147243064-780ac7cc\
-605b-475f-94b8-cf7c4aed03a5.png)

[See](https://arthursonzogni.github.io/FTXUI/examples_2dom_2hflow_8cpp-exampl\
e.html) also this [demo](https://arthursonzogni.github.io/FTXUI/examples/?fil\
e=component/flexbox).

</details>

<details><summary>Style</summary>

An element can be decorated using the functions:
  - `bold`
  - `dim`
  - `inverted`
  - `underlined`
  - `underlinedDouble`
  - `blink`
  - `strikethrough`
  - `color`
  - `bgcolor`

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2style_gallery\
_8cpp-example.html)

![image](https://user-images.githubusercontent.com/4759106/147244118-380bf834\
-9e33-40df-9ff0-07c10f2598ef.png)
  
FTXUI supports the pipe operator. It means: `decorator1(decorator2(element))`\
 and `element | decorator1 | decorator2` can be used.
  
</details>

<details><summary>Colors</summary>

FTXUI support every color palette:

Color [gallery](https://arthursonzogni.github.io/FTXUI/examples_2dom_2color_g\
allery_8cpp-example.html):
![image](https://user-images.githubusercontent.com/4759106/147248595-04c7245a\
-5b85-4544-809d-a5984fc6f9e7.png)

</details>
  
<details><summary>Border and separator</summary>

Use decorator border and element separator() to subdivide your UI:
  
```cpp
auto document = vbox({
    text("top"),
    separator(),
    text("bottom"),
}) | border;

```

[Demo](https://arthursonzogni.github.io/FTXUI/examples_2dom_2separator_8cpp-e\
xample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147244514-4135f24b\
-fb8e-4067-8896-bc53545583f7.png)
  
</details>

<details><summary>Text and paragraph</summary>

A simple piece of text is represented using `text("content")`.

To support text wrapping following spaces the following functions are\
 provided:
```cpp
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
```
  
[Paragraph example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2par\
agraph_8cpp-example.html)
  
![ezgif com-gif-maker (4)](https://user-images.githubusercontent.com/4759106/\
147251370-983a06e7-6f41-4113-92b8-942f43d34d06.gif)

</details>

<details><summary>Table</summary>

A class to easily style a table of data.

[Example](https://arthursonzogni.github.io/FTXUI/examples_2dom_2table_8cpp-ex\
ample.html):
  
![image](https://user-images.githubusercontent.com/4759106/147250766-77d8ec9e\
-cf2b-486d-9866-1fd9f1bd2e6b.png)

</details>

<details><summary>Canvas</summary>

Drawing can be made on a Canvas, using braille, block, or simple characters:
  
Simple [example](https://github.com/ArthurSonzogni/FTXUI/blob/master/examples\
/dom/canvas.cpp):
  
![image](https://user-images.githubusercontent.com/4759106/147245843-76cc62fb\
-ccb4-421b-aacf-939f9afb42fe.png)

Complex [examples](https://github.com/ArthurSonzogni/FTXUI/blob/master/exampl\
es/component/canvas_animated.cpp):
  
![ezgif com-gif-maker (3)](https://user-images.githubusercontent.com/4759106/\
147250538-783a8246-98e0-4a25-b032-3bd3710549d1.gif)  
</details>

#### Component

The ftxui/component is needed when you want to produce dynamic UI, reactive\
 to the user's input. It defines a set of ftxui::Component. A component\
 reacts to Events (keyboard, mouse, resize, ...) and Render Element (see\
 previous section).

Prebuilt components are declared in [<ftxui/component/component.hpp>](https:/\
/arthursonzogni.github.io/FTXUI/component_8hpp_source.html)

<details><summary>Gallery</summary>

[Gallery](https://arthursonzogni.github.io/FTXUI/examples_2component_2gallery\
_8cpp-example.html) of multiple components. ([demo](https://arthursonzogni.gi\
thub.io/FTXUI/examples/?file=component/gallery))

![image](https://user-images.githubusercontent.com/4759106/147247330-b60beb9f\
-e665-48b4-81c0-4b01ee95bc66.png)

</details>

<details><summary>Radiobox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2radiobo\
x_8cpp-example.html):
  
![image](https://user-images.githubusercontent.com/4759106/147246401-809d14a5\
-6621-4e36-8dd9-a2d75ef2a94e.png)

</details>

<details><summary>Checkbox</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2checkbo\
x_8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147246646-b86926a9\
-1ef9-4efb-af98-48a9b62acd81.png)

</details>

<details><summary>Input</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2input_8\
cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247671-f1d6f606\
-1845-4e94-a4a0-d4273e9ae6bd.png)

</details>

<details><summary>Toggle</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2toggle_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249383-e2201cf1\
-b7b8-4a5a-916f-d761e3e7ae40.png)

</details>


<details><summary>Slider</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2slider_\
8cpp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147249265-7e2cad75\
-082c-436e-affe-44a550c480ab.png)

</details>


<details><summary>Menu</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2menu_8c\
pp-example.html):

![image](https://user-images.githubusercontent.com/4759106/147247822-0035fd6f\
-bb13-4b3a-b057-77eb9291582f.png)

</details>


<details><summary>ResizableSplit</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2resizab\
le_split_8cpp-example.html):

![ezgif com-gif-maker](https://user-images.githubusercontent.com/4759106/1472\
48372-c55512fe-9b96-4b08-a1df-d05cf2cae431.gif)  
</details>


<details><summary>Dropdown</summary>

[Example](https://arthursonzogni.github.io/FTXUI/examples_2component_2dropdow\
n_8cpp-example.html):

![youtube-video-gif (3)](https://user-images.githubusercontent.com/4759106/14\
7246982-1e821751-531c-4e1f-bc37-2fa290e143cd.gif)

</details>

<details><summary>Tab</summary>

[Vertical](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_ve\
rtical_8cpp-example.html):
  
![ezgif com-gif-maker (1)](https://user-images.githubusercontent.com/4759106/\
147250144-22ff044a-4773-4ff7-a49c-12ba4034acb4.gif)

[Horizontal](https://arthursonzogni.github.io/FTXUI/examples_2component_2tab_\
horizontal_8cpp-example.html):
  
  ![ezgif com-gif-maker (2)](https://user-images.githubusercontent.com/475910\
6/147250217-fe447e0f-7a99-4e08-948a-995087d9b40e.gif)

  

</details>





## Project using FTXUI

Feel free to add your projects here:
- [json-tui](https://github.com/ArthurSonzogni/json-tui)
- [git-tui](https://github.com/ArthurSonzogni/git-tui)
- [rgb-tui](https://github.com/ArthurSonzogni/rgb-tui)
- [chrome-log-beautifier](https://github.com/ArthurSonzogni/chrome-log-beauti\
fier)
- [x86-64 CPU Architecture Simulation](https://github.com/AnisBdz/CPU)
- [ltuiny](https://github.com/adrianoviana87/ltuiny)
- [i3-termdialogs](https://github.com/mibli/i3-termdialogs)
- [Just-Fast](https://github.com/GiuseppeCesarano/just-fast)
- [simpPRU](https://github.com/VedantParanjape/simpPRU)
- [Pigeon ROS TUI](https://github.com/PigeonSensei/Pigeon_ros_tui)
- [hastur](https://github.com/robinlinden/hastur)
- [CryptoCalculator](https://github.com/brevis/CryptoCalculator)
- [todoman](https://github.com/aaleino/todoman)
- [TimeAccumulator](https://github.com/asari555/TimeAccumulator)
- [vantage](https://github.com/gokulmaxi/vantage)
- [tabdeeli](https://github.com/typon/tabdeeli)
- [tiles](https://github.com/tusharpm/tiles)
- [cachyos-cli-installer](https://github.com/cachyos/new-cli-installer)
- [beagle-config](https://github.com/SAtacker/beagle-config)
- [turing_cmd](https://github.com/DanArmor/turing_cmd)
- [StartUp](https://github.com/StubbornVegeta/StartUp)
- [eCAL monitor](https://github.com/eclipse-ecal/ecal)

## [cpp-best-practices/game_jam](https://github.com/cpp-best-practices/game_j\
am)

Several games using the FTXUI have been made during the Game Jam:
- [TermBreaker](https://github.com/ArthurSonzogni/termBreaker) [**[Play web\
 version]**](https://arthursonzogni.com/TermBreaker/)
- [Minesweeper Marathon](https://github.com/cpp-best-practices/game_jam/blob/\
main/Jam1_April_2022/minesweeper_marathon.md) [**[Play web\
 version]**](https://barlasgarden.com/minesweeper/index.html)
- [Grand Rounds](https://github.com/cpp-best-practices/game_jam/blob/main/Jam\
1_April_2022/grandrounds.md)
- [LightsRound](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1\
_April_2022/LightsRound.v.0.1.0.md)
- [DanteO](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Apri\
l_2022/danteo.md)
- [Sumo](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April_\
2022/sumo.md)
- [Drag Me aROUND](https://github.com/cpp-best-practices/game_jam/blob/main/J\
am1_April_2022/drag_me_around.md)
- [DisarmSelfDestruct](https://github.com/cpp-best-practices/game_jam/blob/ma\
in/Jam1_April_2022/DisarmSelfDestruct.md)
- [TheWorld](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_Ap\
ril_2022/TheWorld.md)
- [smoothlife](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_\
April_2022/smoothlife.md)
- [Consu](https://github.com/cpp-best-practices/game_jam/blob/main/Jam1_April\
_2022/consu.md)

## External package

It is **highly** recommended to use CMake FetchContent to depend on FTXUI.\
 This
way you can specify which commit you would like to depend on.
```cmake
include(FetchContent)

FetchContent_Declare(ftxui
  GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
  GIT_TAG v3.0.0
)

FetchContent_GetProperties(ftxui)
if(NOT ftxui_POPULATED)
  FetchContent_Populate(ftxui)
  add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
```

If you don't, the following packages have been created:
- [vcpkg](https://vcpkgx.com/details.html?package=ftxui)
- [Arch Linux PKGBUILD](https://aur.archlinux.org/packages/ftxui-git/).
- [conan.io](https://conan.io/center/ftxui)

## Contributors

<a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=ArthurSonzogni/FTXUI" />
</a>

\
description-type: text/markdown;variant=GFM
url: https://arthursonzogni.github.io/FTXUI/
doc-url: https://arthursonzogni.github.io/FTXUI/
src-url: https://github.com/ArthurSonzogni/FTXUI
package-url: https://github.com/build2-packaging/FTXUI
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: gtest ^1.11.0
builds: default
bootstrap-build:
\
project = libftxui-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = ipp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

exe{*}: test = true

\
location: FTXUI/libftxui-tests-4.1.1.tar.gz
sha256sum: 65b02c8e37609a17f62689ce0d670e3220e4afbca9cd8c27c27425d2d06b6902
:
name: libglaze
version: 2.4.0+1
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

Glaze also supports:

- [BEVE](https://github.com/stephenberry/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/jbGKb38a8)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Nearly zero intermediate allocations
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)

- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1078**     | **1081**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1198**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.22**    \
       | **1007**     | **1109**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.88**   \
        | **366**      | **560**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.70**    \
       | **289**      | **441**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.78**    \
       | **198**      | **441**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.49**    \
       | **178**      | **336**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.56**   \
       | **84**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **988**     |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **110** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s);
```

or

```c++
my_struct s{};
std::string buffer{};
glz::write_json(s, buffer);
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

## Compiler/System Support

- Requires C++20
- Only designed and tested for 64bit little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (11+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the names\
 of your member object pointers. However, if you want custom names or you\
 register lambda functions or wrappers that do not provide names for your\
 fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      glz::write_json(obj, out);
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, s);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: syntax_error
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple`
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
glz::write_json(ptr, buffer);
expect(buffer == "null");

glz::read_json(ptr, "5");
expect(*ptr == 5);
buffer.clear();
glz::write_json(ptr, buffer);
expect(buffer == "5");

glz::read_json(ptr, "null");
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Comments may also be included in the `glz::meta` description for your types.\
 These comments can be written out to provide a description of your JSON\
 interface. Calling `write_jsonc` as opposed to `write_json` will write out\
 any comments included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

Simplified prettify definition below, which allows the use of tabs or\
 changing the number of spaces per indent.

```c++
string prettify(auto& in, bool tabs = false, uint32_t indent_size = 3)
```

# Minify JSON

To minify JSON:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
std::string minified = glz::minify(buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
glz::write_json(obj, s);
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data());
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as comments, nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members
  bool error_on_const_read = false; // Error if attempt is made to read into\
 a const value, by 
                                    // default the value is skipped without\
 error
  uint32_t layout = rowwise; // CSV row wise output/input
  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## NDJSON Support

Glaze supports [Newline Delimited JSON](http://ndjson.org) for array-like\
 types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x);
glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/json-rpc.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.4.0
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
tests: libglaze-tests == 2.4.0
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.4.0+1.tar.gz
sha256sum: 3638019c270425ca19141db827e0f587ad6471dc3e069464dca740ae297cd19f
:
name: libglaze
version: 2.5.3
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

Glaze also supports:

- [BEVE](https://github.com/stephenberry/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/jbGKb38a8)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Nearly zero intermediate allocations
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)

- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1078**     | **1081**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1198**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.22**    \
       | **1007**     | **1109**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.88**   \
        | **366**      | **560**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.70**    \
       | **289**      | **441**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.78**    \
       | **198**      | **441**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.49**    \
       | **178**      | **336**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.56**   \
       | **84**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **988**     |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **110** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s);
```

or

```c++
my_struct s{};
std::string buffer{};
glz::write_json(s, buffer);
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

## Compiler/System Support

- Requires C++20
- Only designed and tested for 64bit little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (11+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the names\
 of your member object pointers. However, if you want custom names or you\
 register lambda functions or wrappers that do not provide names for your\
 fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      glz::write_json(obj, out);
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, s);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: syntax_error
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple`
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
glz::write_json(ptr, buffer);
expect(buffer == "null");

glz::read_json(ptr, "5");
expect(*ptr == 5);
buffer.clear();
glz::write_json(ptr, buffer);
expect(buffer == "5");

glz::read_json(ptr, "null");
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Comments may also be included in the `glz::meta` description for your types.\
 These comments can be written out to provide a description of your JSON\
 interface. Calling `write_jsonc` as opposed to `write_json` will write out\
 any comments included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To minify JSON:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
std::string minified = glz::minify_json(buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
glz::write_json(obj, s);
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data());
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as comments, nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members
  bool error_on_const_read = false; // Error if attempt is made to read into\
 a const value, by 
                                    // default the value is skipped without\
 error
  uint32_t layout = rowwise; // CSV row wise output/input
  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## NDJSON Support

Glaze supports [Newline Delimited JSON](http://ndjson.org) for array-like\
 types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x);
glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.5.3
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.5.3.tar.gz
sha256sum: e5baf92764e529235960e83af8bba1c67dd1c0c0e6dd1fe0cae35c1b5a81b944
:
name: libglaze
version: 2.6.1
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

Glaze also supports:

- [BEVE](https://github.com/stephenberry/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/jbGKb38a8)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Nearly zero intermediate allocations
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)

- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s);
```

or

```c++
my_struct s{};
std::string buffer{};
glz::write_json(s, buffer);
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

## Compiler/System Support

- Requires C++20
- Only designed and tested for 64bit little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (11+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the names\
 of your member object pointers. However, if you want custom names or you\
 register lambda functions or wrappers that do not provide names for your\
 fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      glz::write_json(obj, out);
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, s);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple`
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
glz::write_json(ptr, buffer);
expect(buffer == "null");

glz::read_json(ptr, "5");
expect(*ptr == 5);
buffer.clear();
glz::write_json(ptr, buffer);
expect(buffer == "5");

glz::read_json(ptr, "null");
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Comments may also be included in the `glz::meta` description for your types.\
 These comments can be written out to provide a description of your JSON\
 interface. Calling `write_jsonc` as opposed to `write_json` will write out\
 any comments included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To minify JSON:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
// or
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
glz::write_json(obj, s);
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data());
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
      bool comments = false; // Write out comments
      bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
      bool skip_null_members = true; // Skip writing out params in an object\
 if the value is null
      bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
      bool prettify = false; // Write out prettified JSON
      bool minified = false; // Require minified input for JSON, which\
 results in faster read performance
      char indentation_char = ' '; // Prettified JSON indentation char
      uint8_t indentation_width = 3; // Prettified JSON indentation size
      bool new_lines_in_arrays = true; // Whether prettified arrays should\
 have new lines for each element
      bool shrink_to_fit = false; // Shrinks dynamic containers to new size\
 to save memory
      bool write_type_info = true; // Write type info for meta objects in\
 variants
      bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as comments, nan, inf.
      bool error_on_missing_keys = false; // Require all non nullable keys to\
 be present in the object. Use
                                          // skip_null_members = false to\
 require nullable members
      
      bool error_on_const_read =
         false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

      uint32_t layout = rowwise; // CSV row wise output/input

      // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
      float_precision float_max_write_precision{};

      bool quoted_num = false; // treat numbers as quoted or array-like types\
 as having quoted numbers
      bool number = false; // read numbers as strings and write these string\
 as numbers
      bool raw = false; // write out string like values without quotes
      bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
      bool structs_as_arrays = false; // Handle structs (reading/writing)\
 without keys, which applies to reflectable and
      
      // glaze_object_t concepts
      bool partial_read_nested = false; // Rewind forward the partially\
 readed struct to the end of the struct
      bool concatenate = true; // Concatenates ranges of std::pair into\
 single objects when writing

      bool hide_non_invocable =
         true; // Hides non-invocable members from the cli_menu (may be\
 applied elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## NDJSON Support

Glaze supports [Newline Delimited JSON](http://ndjson.org) for array-like\
 types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x);
glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.6.1
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.6.1.tar.gz
sha256sum: 6dca86d5b936dd6bc71dfc30aed8105d2e068ee3d4b8df6334f1380cd304b8d0
:
name: libglaze
version: 2.6.4
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

Glaze also supports:

- [BEVE](https://github.com/stephenberry/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/jbGKb38a8)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Nearly zero intermediate allocations
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)

- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s);
```

or

```c++
my_struct s{};
std::string buffer{};
glz::write_json(s, buffer);
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the names\
 of your member object pointers. However, if you want custom names or you\
 register lambda functions or wrappers that do not provide names for your\
 fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      glz::write_json(obj, out);
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, s);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
glz::write_json(ptr, buffer);
expect(buffer == "null");

glz::read_json(ptr, "5");
expect(*ptr == 5);
buffer.clear();
glz::write_json(ptr, buffer);
expect(buffer == "5");

glz::read_json(ptr, "null");
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Comments may also be included in the `glz::meta` description for your types.\
 These comments can be written out to provide a description of your JSON\
 interface. Calling `write_jsonc` as opposed to `write_json` will write out\
 any comments included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
glz::write_json(obj, s);
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data());
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
      bool comments = false; // Write out comments
      bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
      bool skip_null_members = true; // Skip writing out params in an object\
 if the value is null
      bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
      bool prettify = false; // Write out prettified JSON
      bool minified = false; // Require minified input for JSON, which\
 results in faster read performance
      char indentation_char = ' '; // Prettified JSON indentation char
      uint8_t indentation_width = 3; // Prettified JSON indentation size
      bool new_lines_in_arrays = true; // Whether prettified arrays should\
 have new lines for each element
      bool shrink_to_fit = false; // Shrinks dynamic containers to new size\
 to save memory
      bool write_type_info = true; // Write type info for meta objects in\
 variants
      bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as comments, nan, inf.
      bool error_on_missing_keys = false; // Require all non nullable keys to\
 be present in the object. Use
                                          // skip_null_members = false to\
 require nullable members
      
      bool error_on_const_read =
         false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

      uint32_t layout = rowwise; // CSV row wise output/input

      // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
      float_precision float_max_write_precision{};

      bool quoted_num = false; // treat numbers as quoted or array-like types\
 as having quoted numbers
      bool number = false; // read numbers as strings and write these string\
 as numbers
      bool raw = false; // write out string like values without quotes
      bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
      bool structs_as_arrays = false; // Handle structs (reading/writing)\
 without keys, which applies to reflectable and
      
      // glaze_object_t concepts
      bool partial_read_nested = false; // Rewind forward the partially\
 readed struct to the end of the struct
      bool concatenate = true; // Concatenates ranges of std::pair into\
 single objects when writing

      bool hide_non_invocable =
         true; // Hides non-invocable members from the cli_menu (may be\
 applied elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## NDJSON Support

Glaze supports [Newline Delimited JSON](http://ndjson.org) for array-like\
 types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x);
glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.6.4
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.6.4.tar.gz
sha256sum: 49afc308ad16dd332184e0fa0dfd9aaed5846d664a3da5bd841e9de6b3f71c69
:
name: libglaze
version: 2.6.8
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

Glaze also supports:

- [BEVE](https://github.com/stephenberry/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/jbGKb38a8)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)
- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- Extremely portable, uses carefully optimized SWAR (SIMD Within A Register)\
 for broad compatibility
- [Partial Read](./docs/partial-read.md) and [Partial Write](./docs/partial-w\
rite.md) support
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s);
```

or

```c++
my_struct s{};
std::string buffer{};
glz::write_json(s, buffer);
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems, but should run on 32bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the names\
 of your member object pointers. However, if you want custom names or you\
 register lambda functions or wrappers that do not provide names for your\
 fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      glz::write_json(obj, out);
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, buffer);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
glz::write_json(ptr, buffer);
expect(buffer == "null");

glz::read_json(ptr, "5");
expect(*ptr == 5);
buffer.clear();
glz::write_json(ptr, buffer);
expect(buffer == "5");

glz::read_json(ptr, "null");
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Comments may also be included in the `glz::meta` description for your types.\
 These comments can be written out to provide a description of your JSON\
 interface. Calling `write_jsonc` as opposed to `write_json` will write out\
 any comments included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
glz::write_json(obj, s);
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data());
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  bool minified = false; // Require minified input for JSON, which results in\
 faster read performance
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool new_lines_in_arrays = true; // Whether prettified arrays should have\
 new lines for each element
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as comments, nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members

  bool error_on_const_read =
     false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

  uint32_t layout = rowwise; // CSV row wise output/input

  // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
  float_precision float_max_write_precision{};

  bool bools_as_numbers = false; // Read and write booleans with 1's and 0's

  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
  bool structs_as_arrays = false; // Handle structs (reading/writing) without\
 keys, which applies to reflectable and

  bool partial_read =
     false; // Reads into only existing fields and elements and then exits\
 without parsing the rest of the input

  // glaze_object_t concepts
  bool partial_read_nested = false; // Advance the partially read struct to\
 the end of the struct
  bool concatenate = true; // Concatenates ranges of std::pair into single\
 objects when writing

  bool hide_non_invocable =
     true; // Hides non-invocable members from the cli_menu (may be applied\
 elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## NDJSON Support

Glaze supports [Newline Delimited JSON](http://ndjson.org) for array-like\
 types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x);
glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.6.8
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.6.8.tar.gz
sha256sum: f6920770ef5b43daac1d0535d34ec4feef9d10de8a19ad89e05ee2ee8cc90c25
:
name: libglaze
version: 2.8.0
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

> [!IMPORTANT]
>
> Version 2.8.0 adds write error handling which matches the read API.

Glaze also supports:

- [BEVE](https://github.com/beve-org/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/jbGKb38a8)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)
- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- Extremely portable, uses carefully optimized SWAR (SIMD Within A Register)\
 for broad compatibility
- [Partial Read](./docs/partial-read.md) and [Partial Write](./docs/partial-w\
rite.md) support
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s).value_or("error");
```

or

```c++
my_struct s{};
std::string buffer{};
auto ec = glz::write_json(s, buffer);
if (ec) {
  // handle error
}
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems, but should run on 32bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the names\
 of your member object pointers. However, if you want custom names or you\
 register lambda functions or wrappers that do not provide names for your\
 fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      expect(not glz::write_json(obj, out));
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, buffer);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
expect(not glz::write_json(ptr, buffer));
expect(buffer == "null");

expect(not glz::read_json(ptr, "5"));
expect(*ptr == 5);
buffer.clear();
expect(not glz::write_json(ptr, buffer));
expect(buffer == "5");

expect(not glz::read_json(ptr, "null"));
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Read support for comments is provided with `glz::read_jsonc` or\
 `glz::read<glz::opts{.comments = true}>(...)`.

Comments may be included in the `glz::meta` description for your types. These\
 comments can be written out to provide a description of your JSON interface.\
 Calling `write_jsonc` as opposed to `write_json` will write out any comments\
 included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
auto ec = glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
auto ec = glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
expect(not glz::write_json(obj, s));
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data()).value_or(0);
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out or support reading in JSONC style\
 comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  bool minified = false; // Require minified input for JSON, which results in\
 faster read performance
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool new_lines_in_arrays = true; // Whether prettified arrays should have\
 new lines for each element
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members

  bool error_on_const_read =
     false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

  uint32_t layout = rowwise; // CSV row wise output/input

  // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
  float_precision float_max_write_precision{};

  bool bools_as_numbers = false; // Read and write booleans with 1's and 0's

  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
  bool structs_as_arrays = false; // Handle structs (reading/writing) without\
 keys, which applies to reflectable and

  bool partial_read =
     false; // Reads into only existing fields and elements and then exits\
 without parsing the rest of the input

  // glaze_object_t concepts
  bool partial_read_nested = false; // Advance the partially read struct to\
 the end of the struct
  bool concatenate = true; // Concatenates ranges of std::pair into single\
 objects when writing

  bool hide_non_invocable =
     true; // Hides non-invocable members from the cli_menu (may be applied\
 elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## NDJSON Support

Glaze supports [Newline Delimited JSON](http://ndjson.org) for array-like\
 types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x);
glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.8.0
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.8.0.tar.gz
sha256sum: 2c59bf56ba91d50a05f4ce113a8ed793a55c73d395da324dfe2ed849af934f37
:
name: libglaze
version: 2.8.1
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

> [!IMPORTANT]
>
> Version 2.8.0 adds write error handling which matches the read API. [See\
 v2.8.0 Release notes](https://github.com/stephenberry/glaze/releases/tag/v2.\
8.0)

Glaze also supports:

- [BEVE](https://github.com/beve-org/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/jbGKb38a8)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)
- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- Extremely portable, uses carefully optimized SWAR (SIMD Within A Register)\
 for broad compatibility
- [Partial Read](./docs/partial-read.md) and [Partial Write](./docs/partial-w\
rite.md) support
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s).value_or("error");
```

or

```c++
my_struct s{};
std::string buffer{};
auto ec = glz::write_json(s, buffer);
if (ec) {
  // handle error
}
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems, but should run on 32bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the names\
 of your member object pointers. However, if you want custom names or you\
 register lambda functions or wrappers that do not provide names for your\
 fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      expect(not glz::write_json(obj, out));
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, buffer);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
expect(not glz::write_json(ptr, buffer));
expect(buffer == "null");

expect(not glz::read_json(ptr, "5"));
expect(*ptr == 5);
buffer.clear();
expect(not glz::write_json(ptr, buffer));
expect(buffer == "5");

expect(not glz::read_json(ptr, "null"));
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Read support for comments is provided with `glz::read_jsonc` or\
 `glz::read<glz::opts{.comments = true}>(...)`.

Comments may be included in the `glz::meta` description for your types. These\
 comments can be written out to provide a description of your JSON interface.\
 Calling `write_jsonc` as opposed to `write_json` will write out any comments\
 included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
auto ec = glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
auto ec = glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
expect(not glz::write_json(obj, s));
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data()).value_or(0);
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out or support reading in JSONC style\
 comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  bool minified = false; // Require minified input for JSON, which results in\
 faster read performance
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool new_lines_in_arrays = true; // Whether prettified arrays should have\
 new lines for each element
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members

  bool error_on_const_read =
     false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

  uint32_t layout = rowwise; // CSV row wise output/input

  // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
  float_precision float_max_write_precision{};

  bool bools_as_numbers = false; // Read and write booleans with 1's and 0's

  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
  bool structs_as_arrays = false; // Handle structs (reading/writing) without\
 keys, which applies to reflectable and

  bool partial_read =
     false; // Reads into only existing fields and elements and then exits\
 without parsing the rest of the input

  // glaze_object_t concepts
  bool partial_read_nested = false; // Advance the partially read struct to\
 the end of the struct
  bool concatenate = true; // Concatenates ranges of std::pair into single\
 objects when writing

  bool hide_non_invocable =
     true; // Hides non-invocable members from the cli_menu (may be applied\
 elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## NDJSON Support

Glaze supports [Newline Delimited JSON](http://ndjson.org) for array-like\
 types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x);
glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.8.1
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.8.1.tar.gz
sha256sum: 3f707e61af57de6636a2c100b1ca188571e89d77545647fac11931afeeca4a95
:
name: libglaze
version: 2.9.0
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

> [!IMPORTANT]
>
> Version 2.8.0 adds write error handling which matches the read API. [See\
 v2.8.0 Release notes](https://github.com/stephenberry/glaze/releases/tag/v2.\
8.0)

Glaze also supports:

- [BEVE](https://github.com/beve-org/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/85zKG3a4n)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)
- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- Extremely portable, uses carefully optimized SWAR (SIMD Within A Register)\
 for broad compatibility
- [Partial Read](./docs/partial-read.md) and [Partial Write](./docs/partial-w\
rite.md) support
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s).value_or("error");
```

or

```c++
my_struct s{};
std::string buffer{};
auto ec = glz::write_json(s, buffer);
if (ec) {
  // handle error
}
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems, but should run on 32bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

> Glaze seeks to maintain compatibility with the latest three versions of GCC\
 and Clang, as well as the latest version of MSVC and Apple Clang.

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the\
 non-static names of your member object pointers. However, if you want custom\
 names or you register lambda functions or wrappers that do not provide names\
 for your fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - static constexpr member variables
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      expect(not glz::write_json(obj, out));
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, buffer);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
expect(not glz::write_json(ptr, buffer));
expect(buffer == "null");

expect(not glz::read_json(ptr, "5"));
expect(*ptr == 5);
buffer.clear();
expect(not glz::write_json(ptr, buffer));
expect(buffer == "5");

expect(not glz::read_json(ptr, "null"));
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Read support for comments is provided with `glz::read_jsonc` or\
 `glz::read<glz::opts{.comments = true}>(...)`.

Comments may be included in the `glz::meta` description for your types. These\
 comments can be written out to provide a description of your JSON interface.\
 Calling `write_jsonc` as opposed to `write_json` will write out any comments\
 included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
auto ec = glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
auto ec = glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
expect(not glz::write_json(obj, s));
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data()).value_or(0);
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out or support reading in JSONC style\
 comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  bool minified = false; // Require minified input for JSON, which results in\
 faster read performance
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool new_lines_in_arrays = true; // Whether prettified arrays should have\
 new lines for each element
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members

  bool error_on_const_read =
     false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

  uint32_t layout = rowwise; // CSV row wise output/input

  // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
  float_precision float_max_write_precision{};

  bool bools_as_numbers = false; // Read and write booleans with 1's and 0's

  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
  bool structs_as_arrays = false; // Handle structs (reading/writing) without\
 keys, which applies to reflectable and

  bool partial_read =
     false; // Reads into only existing fields and elements and then exits\
 without parsing the rest of the input

  // glaze_object_t concepts
  bool partial_read_nested = false; // Advance the partially read struct to\
 the end of the struct
  bool concatenate = true; // Concatenates ranges of std::pair into single\
 objects when writing

  bool hide_non_invocable =
     true; // Hides non-invocable members from the cli_menu (may be applied\
 elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## JSON Lines (NDJSON) Support

Glaze supports [JSON Lines](https://jsonlines.org) (or Newline Delimited\
 JSON) for array-like types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x).value_or("error");
auto ec = glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.9.0
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.9.0.tar.gz
sha256sum: 51067059b86fea675bae8ff47bc0046c98b89f8a283694e87461a0079c6523b1
:
name: libglaze
version: 2.9.1
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

> [!IMPORTANT]
>
> Version 2.8.0 adds write error handling which matches the read API. [See\
 v2.8.0 Release notes](https://github.com/stephenberry/glaze/releases/tag/v2.\
8.0)

Glaze also supports:

- [BEVE](https://github.com/beve-org/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/85zKG3a4n)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)
- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- Extremely portable, uses carefully optimized SWAR (SIMD Within A Register)\
 for broad compatibility
- [Partial Read](./docs/partial-read.md) and [Partial Write](./docs/partial-w\
rite.md) support
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s).value_or("error");
```

or

```c++
my_struct s{};
std::string buffer{};
auto ec = glz::write_json(s, buffer);
if (ec) {
  // handle error
}
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems, but should run on 32bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

> Glaze seeks to maintain compatibility with the latest three versions of GCC\
 and Clang, as well as the latest version of MSVC and Apple Clang.

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the\
 non-static names of your member object pointers. However, if you want custom\
 names or you register lambda functions or wrappers that do not provide names\
 for your fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - static constexpr member variables
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      expect(not glz::write_json(obj, out));
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, buffer);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
expect(not glz::write_json(ptr, buffer));
expect(buffer == "null");

expect(not glz::read_json(ptr, "5"));
expect(*ptr == 5);
buffer.clear();
expect(not glz::write_json(ptr, buffer));
expect(buffer == "5");

expect(not glz::read_json(ptr, "null"));
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Read support for comments is provided with `glz::read_jsonc` or\
 `glz::read<glz::opts{.comments = true}>(...)`.

Comments may be included in the `glz::meta` description for your types. These\
 comments can be written out to provide a description of your JSON interface.\
 Calling `write_jsonc` as opposed to `write_json` will write out any comments\
 included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
auto ec = glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
auto ec = glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
expect(not glz::write_json(obj, s));
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data()).value_or(0);
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out or support reading in JSONC style\
 comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  bool minified = false; // Require minified input for JSON, which results in\
 faster read performance
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool new_lines_in_arrays = true; // Whether prettified arrays should have\
 new lines for each element
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members

  bool error_on_const_read =
     false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

  uint32_t layout = rowwise; // CSV row wise output/input

  // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
  float_precision float_max_write_precision{};

  bool bools_as_numbers = false; // Read and write booleans with 1's and 0's

  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
  bool structs_as_arrays = false; // Handle structs (reading/writing) without\
 keys, which applies to reflectable and

  bool partial_read =
     false; // Reads into only existing fields and elements and then exits\
 without parsing the rest of the input

  // glaze_object_t concepts
  bool partial_read_nested = false; // Advance the partially read struct to\
 the end of the struct
  bool concatenate = true; // Concatenates ranges of std::pair into single\
 objects when writing

  bool hide_non_invocable =
     true; // Hides non-invocable members from the cli_menu (may be applied\
 elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## JSON Lines (NDJSON) Support

Glaze supports [JSON Lines](https://jsonlines.org) (or Newline Delimited\
 JSON) for array-like types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x).value_or("error");
auto ec = glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.9.1
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.9.1.tar.gz
sha256sum: 5c468949b7fff253e506a6db0a50082c3c6319a69d92e5b981944de546bc0596
:
name: libglaze
version: 2.9.3
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

> [!IMPORTANT]
>
> Version 2.8.0 adds write error handling which matches the read API. [See\
 v2.8.0 Release notes](https://github.com/stephenberry/glaze/releases/tag/v2.\
8.0)

Glaze also supports:

- [BEVE](https://github.com/beve-org/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/85zKG3a4n)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)
- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- Extremely portable, uses carefully optimized SWAR (SIMD Within A Register)\
 for broad compatibility
- [Partial Read](./docs/partial-read.md) and [Partial Write](./docs/partial-w\
rite.md) support
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s).value_or("error");
```

or

```c++
my_struct s{};
std::string buffer{};
auto ec = glz::write_json(s, buffer);
if (ec) {
  // handle error
}
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems, but should run on 32bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

> Glaze seeks to maintain compatibility with the latest three versions of GCC\
 and Clang, as well as the latest version of MSVC and Apple Clang.

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the\
 non-static names of your member object pointers. However, if you want custom\
 names or you register lambda functions or wrappers that do not provide names\
 for your fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - static constexpr member variables
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      expect(not glz::write_json(obj, out));
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, buffer);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
expect(not glz::write_json(ptr, buffer));
expect(buffer == "null");

expect(not glz::read_json(ptr, "5"));
expect(*ptr == 5);
buffer.clear();
expect(not glz::write_json(ptr, buffer));
expect(buffer == "5");

expect(not glz::read_json(ptr, "null"));
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Read support for comments is provided with `glz::read_jsonc` or\
 `glz::read<glz::opts{.comments = true}>(...)`.

Comments may be included in the `glz::meta` description for your types. These\
 comments can be written out to provide a description of your JSON interface.\
 Calling `write_jsonc` as opposed to `write_json` will write out any comments\
 included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
auto ec = glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
auto ec = glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
expect(not glz::write_json(obj, s));
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data()).value_or(0);
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out or support reading in JSONC style\
 comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  bool minified = false; // Require minified input for JSON, which results in\
 faster read performance
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool new_lines_in_arrays = true; // Whether prettified arrays should have\
 new lines for each element
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members

  bool error_on_const_read =
     false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

  uint32_t layout = rowwise; // CSV row wise output/input

  // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
  float_precision float_max_write_precision{};

  bool bools_as_numbers = false; // Read and write booleans with 1's and 0's

  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
  bool structs_as_arrays = false; // Handle structs (reading/writing) without\
 keys, which applies to reflectable and

  bool partial_read =
     false; // Reads into only existing fields and elements and then exits\
 without parsing the rest of the input

  // glaze_object_t concepts
  bool partial_read_nested = false; // Advance the partially read struct to\
 the end of the struct
  bool concatenate = true; // Concatenates ranges of std::pair into single\
 objects when writing

  bool hide_non_invocable =
     true; // Hides non-invocable members from the cli_menu (may be applied\
 elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## JSON Lines (NDJSON) Support

Glaze supports [JSON Lines](https://jsonlines.org) (or Newline Delimited\
 JSON) for array-like types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x).value_or("error");
auto ec = glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.9.3
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.9.3.tar.gz
sha256sum: 1e5f7a27604e762a2fdfcc6580c6feada1bf80992040c9cd9b9a93338a99414c
:
name: libglaze
version: 2.9.4
type: lib,binless
language: c++
project: glaze
summary: JSON and interface library for C++
license: MIT; MIT License.
topics: json, json rpc 2.0, csv, beve, serialization
description:
\
# Glaze
One of the fastest JSON libraries in the world. Glaze reads and writes from\
 object memory, simplifying interfaces and offering incredible performance.

> [!IMPORTANT]
>
> Version 2.8.0 adds write error handling which matches the read API. [See\
 v2.8.0 Release notes](https://github.com/stephenberry/glaze/releases/tag/v2.\
8.0)

Glaze also supports:

- [BEVE](https://github.com/beve-org/beve) (binary efficient versatile\
 encoding)
- [CSV](./docs/csv.md) (comma separated value)

## With compile time reflection for MSVC, Clang, and GCC!

- Read/write aggregate initializable structs without writing any metadata or\
 macros!
- See [example on Compiler Explorer](https://gcc.godbolt.org/z/85zKG3a4n)

## Highlights

- Pure, compile time reflection for structs
- Standard C++ library support
- Header only
- Direct to memory serialization/deserialization
- Compile time maps with constant time lookups and perfect hashing
- Powerful wrappers to modify read/write behavior ([Wrappers](./docs/wrappers\
.md))
- Use your own custom read/write functions ([Custom Read/Write](#custom-readw\
rite))
- [Handle unknown keys](./docs/unknown-keys.md) in a fast and flexible manner
- Direct memory access through [JSON pointer syntax](./docs/json-pointer-synt\
ax.md)
- [Binary data](./docs/binary.md) through the same API for maximum performance
- No exceptions (compiles with `-fno-exceptions`)
  - If you desire helpers that throw for cleaner syntax see [Glaze\
 Exceptions](./docs/exceptions.md)
- No runtime type information necessary (compiles with `-fno-rtti`)
- Rapid error handling with short circuiting
- [JSON-RPC 2.0 support](./docs/rpc/json-rpc.md)
- [JSON Schema generation](./docs/json-schema.md)
- Extremely portable, uses carefully optimized SWAR (SIMD Within A Register)\
 for broad compatibility
- [Partial Read](./docs/partial-read.md) and [Partial Write](./docs/partial-w\
rite.md) support
- [CSV Reading/Writing](./docs/csv.md)
- [Much more!](#more-features)

See [DOCS](https://github.com/stephenberry/glaze/tree/main/docs) for more\
 documentation.

## Performance

| Library                                                      | Roundtrip\
 Time (s) | Write (MB/s) | Read (MB/s) |
| ------------------------------------------------------------ |\
 ------------------ | ------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1.20**    \
       | **1064**     | **1175**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **N/A** \
           | **N/A**      | **1201**    |
| [**yyjson**](https://github.com/ibireme/yyjson)              | **1.23**    \
       | **996**      | **1108**    |
| [**daw_json_link**](https://github.com/beached/daw_json_link) | **2.90**   \
        | **370**      | **554**     |
| [**RapidJSON**](https://github.com/Tencent/rapidjson)        | **3.63**    \
       | **295**      | **447**     |
| [**Boost.JSON (direct)**](https://boost.org/libs/json)       | **4.66**    \
       | **203**      | **437**     |
| [**json_struct**](https://github.com/jorgen/json_struct)     | **5.47**    \
       | **184**      | **331**     |
| [**nlohmann**](https://github.com/nlohmann/json)             | **15.00**   \
       | **86**       | **82**      |

[Performance test code available here](https://github.com/stephenberry/json_p\
erformance)

*Performance caveats: [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) are great, but they experience\
 major performance losses when the data is not in the expected sequence or\
 any keys are missing (the problem grows as the file size increases, as they\
 must re-iterate through the document).*

*Also, [simdjson](https://github.com/simdjson/simdjson) and\
 [yyjson](https://github.com/ibireme/yyjson) do not support automatic escaped\
 string handling, so if any of the currently non-escaped strings in this\
 benchmark were to contain an escape, the escapes would not be handled.*

[ABC Test](https://github.com/stephenberry/json_performance) shows how\
 simdjson has poor performance when keys are not in the expected sequence:

| Library                                                      | Read (MB/s) |
| ------------------------------------------------------------ | ----------- |
| [**Glaze**](https://github.com/stephenberry/glaze)           | **1426**    |
| [**simdjson (on demand)**](https://github.com/simdjson/simdjson) | **108** \
    |

## Binary Performance

Tagged binary specification: [BEVE](https://github.com/stephenberry/beve)

| Metric                | Roundtrip Time (s) | Write (MB/s) | Read (MB/s) |
| --------------------- | ------------------ | ------------ | ----------- |
| Raw performance       | **0.44**           | **3168**     | **2350**    |
| Equivalent JSON data* | **0.44**           | **3474**     | **2577**    |

JSON size: 670 bytes

BEVE size: 611 bytes

*BEVE packs more efficiently than JSON, so transporting the same data is even\
 faster.

## Example

Your struct will automatically get reflected! No metadata is required by the\
 user.

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
};
```

**JSON** (prettified)

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ],
   "map": {
      "one": 1,
      "two": 2
   }
}
```

**Write JSON**

```c++
my_struct s{};
std::string buffer = glz::write_json(s).value_or("error");
```

or

```c++
my_struct s{};
std::string buffer{};
auto ec = glz::write_json(s, buffer);
if (ec) {
  // handle error
}
```

**Read JSON**

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
auto s = glz::read_json<my_struct>(buffer);
if (s) // check std::expected
{
  s.value(); // s.value() is a my_struct populated from buffer
}
```

or

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
,"map":{"one":1,"two":2}})";
my_struct s{};
auto ec = glz::read_json(s, buffer); // populates s from buffer
if (ec) {
  // handle error
}
```

### Read/Write From File

```c++
auto ec = glz::read_file_json(obj, "./obj.json", std::string{});
auto ec = glz::write_file_json(obj, "./obj.json", std::string{});
```

> [!IMPORTANT]
>
> The file name (2nd argument), must be null terminated.

## Compiler/System Support

- Requires C++20
- Only tested on 64bit systems, but should run on 32bit systems
- Only supports little-endian systems

[Actions](https://github.com/stephenberry/glaze/actions) build and test with\
 [Clang](https://clang.llvm.org) (15+), [MSVC](https://visualstudio.microsoft\
.com/vs/features/cplusplus/) (2022), and [GCC](https://gcc.gnu.org) (12+) on\
 apple, windows, and linux.

![clang build](https://github.com/stephenberry/glaze/actions/workflows/clang.\
yml/badge.svg) ![gcc build](https://github.com/stephenberry/glaze/actions/wor\
kflows/gcc.yml/badge.svg) ![msvc build](https://github.com/stephenberry/glaze\
/actions/workflows/msvc.yml/badge.svg) 

> Glaze seeks to maintain compatibility with the latest three versions of GCC\
 and Clang, as well as the latest version of MSVC and Apple Clang.

## How To Use Glaze

### [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.ht\
ml)
```cmake
include(FetchContent)

FetchContent_Declare(
  glaze
  GIT_REPOSITORY https://github.com/stephenberry/glaze.git
  GIT_TAG main
  GIT_SHALLOW TRUE
)

FetchContent_MakeAvailable(glaze)

target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze)
```

### [Conan](https://conan.io)

- Included in [Conan Center](https://conan.io/center/) ![Conan\
 Center](https://img.shields.io/conan/v/glaze)

```
find_package(glaze REQUIRED)

target_link_libraries(main PRIVATE glaze::glaze)
```

### [build2](https://build2.org)

- Available on [cppget](https://cppget.org/libglaze)

```
import libs = libglaze%lib{glaze}
```

### Arch Linux

- AUR packages: [glaze](https://aur.archlinux.org/packages/glaze) and\
 [glaze-git](https://aur.archlinux.org/packages/glaze-git)

### See this [Example Repository](https://github.com/stephenberry/glaze_examp\
le) for how to use Glaze in a new project

---

## See [FAQ](./docs/FAQ.md) for Frequently Asked Questions

# Explicit Metadata

If you want to specialize your reflection then you can optionally write the\
 code below:

> This metadata is also necessary for non-aggregate initializable structs.

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      &T::i,
      &T::d,
      &T::hello,
      &T::arr,
      &T::map
   );
};
```

## Local Glaze Meta

Glaze also supports metadata provided within its associated class:

```c++
struct my_struct
{
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
  std::array<uint64_t, 3> arr = { 1, 2, 3 };
  std::map<std::string, int> map{{"one", 1}, {"two", 2}};
  
  struct glaze {
     using T = my_struct;
     static constexpr auto value = glz::object(
        &T::i,
        &T::d,
        &T::hello,
        &T::arr,
        &T::map
     );
  };
};
```

## Custom Key Names or Unnamed Types

When you define Glaze metadata, objects will automatically reflect the\
 non-static names of your member object pointers. However, if you want custom\
 names or you register lambda functions or wrappers that do not provide names\
 for your fields, you can optionally add field names in your metadata.

Example of custom names:

```c++
template <>
struct glz::meta<my_struct> {
   using T = my_struct;
   static constexpr auto value = object(
      "integer", &T::i,
      "double", &T::d,
      "string", &T::hello,
      "array", &T::arr,
      "my map", &T::map
   );
};
```

> Each of these strings is optional and can be removed for individual fields\
 if you want the name to be reflected.
>
> Names are required for:
>
> - static constexpr member variables
> - Wrappers
> - Lambda functions

## Custom Read/Write

Custom reading and writing can be achieved through the powerful\
 `to_json`/`from_json` specialization approach, which is described here:\
 [custom-serialization.md](https://github.com/stephenberry/glaze/blob/main/do\
cs/custom-serialization.md). However, this only works for user defined types.

For common use cases or cases where a specific member variable should have\
 special reading and writing, you can use `glz::custom` to register\
 read/write member functions, std::functions, or lambda functions.

See an example:

```c++
struct custom_encoding
{
   uint64_t x{};
   std::string y{};
   std::array<uint32_t, 3> z{};
   
   void read_x(const std::string& s) {
      x = std::stoi(s);
   }
   
   uint64_t write_x() {
      return x;
   }
   
   void read_y(const std::string& s) {
      y = "hello" + s;
   }
   
   auto& write_z() {
      z[0] = 5;
      return z;
   }
};

template <>
struct glz::meta<custom_encoding>
{
   using T = custom_encoding;
   static constexpr auto value = object("x", custom<&T::read_x, &T::write_x>,\
 //
                                        "y", custom<&T::read_y, &T::y>, //
                                        "z", custom<&T::z, &T::write_z>);
};

suite custom_encoding_test = [] {
   "custom_reading"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      expect(obj.x == 3);
      expect(obj.y == "helloworld");
      expect(obj.z == std::array<uint32_t, 3>{1, 2, 3});
   };
   
   "custom_writing"_test = [] {
      custom_encoding obj{};
      std::string s = R"({"x":"3","y":"world","z":[1,2,3]})";
      expect(!glz::read_json(obj, s));
      std::string out{};
      expect(not glz::write_json(obj, out));
      expect(out == R"({"x":3,"y":"helloworld","z":[5,2,3]})");
   };
};
```

## Object Mapping

When using member pointers (e.g. `&T::a`) the C++ class structures must match\
 the JSON interface. It may be desirable to map C++ classes with differing\
 layouts to the same object interface. This is accomplished through\
 registering lambda functions instead of member pointers.

```c++
template <>
struct glz::meta<Thing> {
   static constexpr auto value = object(
      "i", [](auto&& self) -> auto& { return self.subclass.i; }
   );
};
```

The value `self` passed to the lambda function will be a `Thing` object, and\
 the lambda function allows us to make the subclass invisible to the object\
 interface.

Lambda functions by default copy returns, therefore the `auto&` return type\
 is typically required in order for glaze to write to memory.

> Note that remapping can also be achieved through pointers/references, as\
 glaze treats values, pointers, and references in the same manner when\
 writing/reading.

## Value Types

A class can be treated as an underlying value as follows:

```c++
struct S {
  int x{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value{ &S::x };
};
```

or using a lambda:

```c++
template <>
struct glz::meta<S> {
  static constexpr auto value = [](auto& self) -> auto& { return self.x; };
};
```

# Error Handling

Glaze is safe to use with untrusted messages. Errors are returned as error\
 codes, typically within a `glz::expected`, which behaves just like a\
 `std::expected`.

> Glaze works to short circuit error handling, which means the parsing exits\
 very rapidly if an error is encountered.

To generate more helpful error messages, call `format_error`:

```c++
auto pe = glz::read_json(obj, buffer);
if (pe) {
  std::string descriptive_error = glz::format_error(pe, buffer);
}
```

This test case:

```json
{"Hello":"World"x, "color": "red"}
```

Produces this error:

```
1:17: expected_comma
   {"Hello":"World"x, "color": "red"}
                   ^
```

Denoting that x is invalid here.

# Type Support

## Array Types

Array types logically convert to JSON array values. Concepts are used to\
 allow various containers and even user containers if they match standard\
 library interfaces.

- `glz::array` (compile time mixed types)
- `std::tuple` (compile time mixed types)
- `std::array`
- `std::vector`
- `std::deque`
- `std::list`
- `std::forward_list`
- `std::span`
- `std::set`
- `std::unordered_set`

## Object Types

Object types logically convert to JSON object values, such as maps. Like\
 JSON, Glaze treats object definitions as unordered maps. Therefore the order\
 of an object layout does not have to match the same binary sequence in C++.

- `glz::object` (compile time mixed types)
- `std::map`
- `std::unordered_map`
- `std::pair` (enables dynamic keys in stack storage)

> `std::pair` is handled as an object with a single key and value, but when\
 `std::pair` is used in an array, Glaze concatenates the pairs into a single\
 object. `std::vector<std::pair<...>>` will serialize as a single  object. If\
 you don't want this behavior set the compile time option `.concatenate =\
 false`.

## Variants

- `std::variant`

See [Variant Handling](./docs/variant-handling.md) for more information.

## Nullable Types

- `std::unique_ptr`
- `std::shared_ptr`
- `std::optional`

Nullable types may be allocated by valid input or nullified by the `null`\
 keyword.

```c++
std::unique_ptr<int> ptr{};
std::string buffer{};
expect(not glz::write_json(ptr, buffer));
expect(buffer == "null");

expect(not glz::read_json(ptr, "5"));
expect(*ptr == 5);
buffer.clear();
expect(not glz::write_json(ptr, buffer));
expect(buffer == "5");

expect(not glz::read_json(ptr, "null"));
expect(!bool(ptr));
```

## Enums

By default enums will be written and read in integer form. No `glz::meta` is\
 necessary if this is the desired behavior.

However, if you prefer to use enums as strings in JSON, they can be\
 registered in the `glz::meta` as follows:

```c++
enum class Color { Red, Green, Blue };

template <>
struct glz::meta<Color> {
   using enum Color;
   static constexpr auto value = enumerate(Red,
                                           Green,
                                           Blue
   );
};
```

In use:

```c++
Color color = Color::Red;
std::string buffer{};
glz::write_json(color, buffer);
expect(buffer == "\"Red\"");
```

# JSON With Comments (JSONC)

Comments are supported with the specification defined here:\
 [JSONC](https://github.com/stephenberry/JSONC)

Read support for comments is provided with `glz::read_jsonc` or\
 `glz::read<glz::opts{.comments = true}>(...)`.

Comments may be included in the `glz::meta` description for your types. These\
 comments can be written out to provide a description of your JSON interface.\
 Calling `write_jsonc` as opposed to `write_json` will write out any comments\
 included in the `meta` description.

```c++
struct thing {
  double x{5.0};
  int y{7};
};

template <>
struct glz::meta<thing> {
   using T = thing;
   static constexpr auto value = object(
      &T::x, "x is a double"_c,
      &T::y, "y is an int"_c
   );
};
```

Prettified output:

```json
{
  "x": 5 /*x is a double*/,
  "y": 7 /*y is an int*/
}
```

> The `_c` is necessary if member object pointer names are reflected. You can\
 also write `comment("x is a double")`

# Prettify JSON

Formatted JSON can be written out directly via a compile time option:

```c++
auto ec = glz::write<glz::opts{.prettify = true}>(obj, buffer);
```

Or, JSON text can be formatted with the `glz::prettify_json` function:

```c++
std::string buffer = R"({"i":287,"d":3.14,"hello":"Hello World","arr":[1,2,3]\
})");
auto beautiful = glz::prettify_json(buffer);
```

`beautiful` is now:

```json
{
   "i": 287,
   "d": 3.14,
   "hello": "Hello World",
   "arr": [
      1,
      2,
      3
   ]
}
```

# Minify JSON

To write minified JSON:

```c++
auto ec = glz::write_json(obj, buffer); // default is minified
```

To minify JSON text call:

```c++
std::string minified = glz::minify_json(buffer);
```

## Minified JSON Reading

If you wish require minified JSON or know your input will always be minified,\
 then you can gain a little more performance by using the compile time option\
 `.minified = true`.

```c++
auto ec = glz::read<glz::opts{.minified = true}>(obj, buffer);
```

## Boolean Flags

Glaze supports registering a set of boolean flags that behave as an array of\
 string options:

```c++
struct flags_t {
   bool x{ true };
   bool y{};
   bool z{ true };
};

template <>
struct glz::meta<flags_t> {
   using T = flags_t;
   static constexpr auto value = flags("x", &T::x, "y", &T::y, "z", &T::z);
};
```

Example:

```c++
flags_t s{};
expect(glz::write_json(s) == R"(["x","z"])");
```

Only `"x"` and `"z"` are written out, because they are true. Reading in the\
 buffer will set the appropriate booleans.

> When writing BEVE, `flags` only use one bit per boolean (byte aligned).

## Logging JSON

Sometimes you just want to write out JSON structures on the fly as\
 efficiently as possible. Glaze provides tuple-like structures that allow you\
 to stack allocate structures to write out JSON with high speed. These\
 structures are named `glz::obj` for objects and `glz::arr` for arrays.

Below is an example of building an object, which also contains an array, and\
 writing it out.

```c++
auto obj = glz::obj{"pi", 3.14, "happy", true, "name", "Stephen", "arr",\
 glz::arr{"Hello", "World", 2}};

std::string s{};
expect(not glz::write_json(obj, s));
expect(s == R"({"pi":3.14,"happy":true,"name":"Stephen","arr":["Hello","World\
",2]})");
```

> This approach is significantly faster than `glz::json_t` for generic JSON.\
 But, may not be suitable for all contexts.

## Merge

`glz::merge` allows the user to merge multiple JSON object types into a\
 single object.

```c++
glz::obj o{"pi", 3.141};
std::map<std::string_view, int> map = {{"a", 1}, {"b", 2}, {"c", 3}};
auto merged = glz::merge{o, map};
std::string s{};
glz::write_json(merged, s); // will write out a single, merged object
// s is now: {"pi":3.141,"a":0,"b":2,"c":3}
```

> `glz::merge` stores references to lvalues to avoid copies

## Generic JSON

See [Generic JSON](./docs/generic-json.md) for `glz::json_t`.

```c++
glz::json_t json{};
std::string buffer = R"([5,"Hello World",{"pi":3.14}])";
glz::read_json(json, buffer);
assert(json[2]["pi"].get<double>() == 3.14);
```

## Raw Buffer Performance

Glaze is just about as fast writing to a `std::string` as it is writing to a\
 raw char buffer. If you have sufficiently allocated space in your buffer you\
 can write to the raw buffer, as shown below, but it is not recommended.

```
glz::read_json(obj, buffer);
const auto n = glz::write_json(obj, buffer.data()).value_or(0);
buffer.resize(n);
```

## Compile Time Options

The `glz::opts` struct defines compile time optional settings for\
 reading/writing.

Instead of calling `glz::read_json(...)`, you can call `glz::read<glz::opts{}\
>(...)` and customize the options.

For example: `glz::read<glz::opts{.error_on_unknown_keys = false}>(...)` will\
 turn off erroring on unknown keys and simple skip the items.

`glz::opts` can also switch between formats:

- `glz::read<glz::opts{.format = glz::binary}>(...)` -> `glz::read_binary(...\
)`
- `glz::read<glz::opts{.format = glz::json}>(...)` -> `glz::read_json(...)`

## Available Compile Time Options

The struct below shows the available options and the default behavior.

```c++
struct opts {
  uint32_t format = json;
  bool comments = false; // Write out or support reading in JSONC style\
 comments
  bool error_on_unknown_keys = true; // Error when an unknown key is\
 encountered
  bool skip_null_members = true; // Skip writing out params in an object if\
 the value is null
  bool use_hash_comparison = true; // Will replace some string equality\
 checks with hash checks
  bool prettify = false; // Write out prettified JSON
  bool minified = false; // Require minified input for JSON, which results in\
 faster read performance
  char indentation_char = ' '; // Prettified JSON indentation char
  uint8_t indentation_width = 3; // Prettified JSON indentation size
  bool new_lines_in_arrays = true; // Whether prettified arrays should have\
 new lines for each element
  bool shrink_to_fit = false; // Shrinks dynamic containers to new size to\
 save memory
  bool write_type_info = true; // Write type info for meta objects in variants
  bool force_conformance = false; // Do not allow invalid json normally\
 accepted such as nan, inf.
  bool error_on_missing_keys = false; // Require all non nullable keys to be\
 present in the object. Use
                                      // skip_null_members = false to require\
 nullable members

  bool error_on_const_read =
     false; // Error if attempt is made to read into a const value, by\
 default the value is skipped without error

  uint32_t layout = rowwise; // CSV row wise output/input

  // The maximum precision type used for writing floats, higher precision\
 floats will be cast down to this precision
  float_precision float_max_write_precision{};

  bool bools_as_numbers = false; // Read and write booleans with 1's and 0's

  bool quoted_num = false; // treat numbers as quoted or array-like types as\
 having quoted numbers
  bool number = false; // read numbers as strings and write these string as\
 numbers
  bool raw = false; // write out string like values without quotes
  bool raw_string = false; // do not decode/encode escaped characters for\
 strings (improves read/write performance)
  bool structs_as_arrays = false; // Handle structs (reading/writing) without\
 keys, which applies to reflectable and

  bool partial_read =
     false; // Reads into only existing fields and elements and then exits\
 without parsing the rest of the input

  // glaze_object_t concepts
  bool partial_read_nested = false; // Advance the partially read struct to\
 the end of the struct
  bool concatenate = true; // Concatenates ranges of std::pair into single\
 objects when writing

  bool hide_non_invocable =
     true; // Hides non-invocable members from the cli_menu (may be applied\
 elsewhere in the future)
};
```

> Many of these compile time options have wrappers to apply the option to\
 only a single field. See [Wrappers](./docs/wrappers.md) for more details.

## Skip

It can be useful to acknowledge a keys existence in an object to prevent\
 errors, and yet the value may not be needed or exist in C++. These cases are\
 handled by registering a `glz::skip` type with the meta data.

```c++
struct S {
  int i{};
};

template <>
struct glz::meta<S> {
  static constexpr auto value = object("key_to_skip", skip{}, &S::i);
};
```

```c++
std::string buffer = R"({"key_to_skip": [1,2,3], "i": 7})";
S s{};
glz::read_json(s, buffer);
// The value [1,2,3] will be skipped
expect(s.i == 7); // only the value i will be read into
```

## Hide

Glaze is designed to help with building generic APIs. Sometimes a value needs\
 to be exposed to the API, but it is not desirable to read in or write out\
 the value in JSON. This is the use case for `glz::hide`.

`glz::hide` hides the value from JSON output while still allowing API (and\
 JSON pointer) access.

```c++
struct hide_struct {
  int i = 287;
  double d = 3.14;
  std::string hello = "Hello World";
};

template <>
struct glz::meta<hide_struct> {
   using T = hide_struct;
   static constexpr auto value = object(&T::i,  //
                                        &T::d, //
                                        "hello", hide{&T::hello});
};
```

```c++
hide_struct s{};
auto b = glz::write_json(s);
expect(b == R"({"i":287,"d":3.14})"); // notice that "hello" is hidden from\
 the output
```

## Quoted Numbers

You can parse quoted JSON numbers directly to types like `double`, `int`,\
 etc. by utilizing the `glz::quoted` wrapper.

```c++
struct A {
   double x;
   std::vector<uint32_t> y;
};

template <>
struct glz::meta<A> {
   static constexpr auto value = object("x", glz::quoted_num<&A::x>, "y",\
 glz::quoted_num<&A::y>;
};
```

```json
{
  "x": "3.14",
  "y": ["1", "2", "3"]
}
```

The quoted JSON numbers will be parsed directly into the `double` and\
 `std::vector<uint32_t>`. The `glz::quoted` function works for nested objects\
 and arrays as well.

## JSON Lines (NDJSON) Support

Glaze supports [JSON Lines](https://jsonlines.org) (or Newline Delimited\
 JSON) for array-like types (e.g. `std::vector` and `std::tuple`).

```c++
std::vector<std::string> x = { "Hello", "World", "Ice", "Cream" };
std::string s = glz::write_ndjson(x).value_or("error");
auto ec = glz::read_ndjson(x, s);
```

# More Features

### [Data Recorder](./docs/recorder.md)

### [Command Line Interface Menu](./docs/cli-menu.md)

### [JSON Include System](./docs/json-include.md)

### [JSON Pointer Syntax](./docs/json-pointer-syntax.md)

### [JSON-RPC 2.0](./docs/rpc/json-rpc.md)

### [JSON Schema](./docs/json-schema.md)

### [Shared Library API](./docs/glaze-interfaces.md)

### [Tagged Binary Messages](./docs/binary.md)

### [Thread Pool](./docs/thread-pool.md)

### [Time Trace Profiling](./docs/time-trace.md)

- Output performance profiles to JSON and visualize using [Perfetto](https://\
ui.perfetto.dev)

### [Wrappers](./docs/wrappers.md)

# Extensions

See the `ext` directory for extensions.

- [Eigen](https://gitlab.com/libeigen/eigen)
- [JSON-RPC 2.0](./docs/rpc/json-rpc.md)
- [Command Line Interface Menu (cli_menu)](./docs/cli-menu.md)

# License

Glaze is distributed under the MIT license with an exception for embedded\
 forms:

> --- Optional exception to the license ---
>
> As an exception, if, as a result of your compiling your source code,\
 portions of this Software are embedded into a machine-executable object form\
 of such source code, you may redistribute such embedded portions in such\
 object form without including the copyright and permission notices.

\
description-type: text/markdown;variant=GFM
package-description:
\
# libglaze - In memory, JSON and interface library for C++

This is a `build2` package for the [`glaze`](https://github.com/stephenberry/\
glaze)
C++ library. It provides an in memory, JSON and interface library for C++.


## Usage

To start using `libglaze` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libglaze ^2.5.3
```

Then import the library in your `buildfile`:

```
import libs = libglaze%lib{glaze}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libasio ^1.29.0 ? ($config.libglaze.repe_rpc)
tests: libglaze-tests == 2.9.4
bootstrap-build:
\
project = libglaze

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

config [bool] config.libglaze.repe_rpc ?= true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: glaze/libglaze-2.9.4.tar.gz
sha256sum: 70aade7ca4b727b9b3f6edddfe419ffd9175623d6cf189adc5dfe7744571b385
:
name: libglaze-tests
version: 2.4.0+1
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libboost-ext-ut ^2.0.1
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.4.0+1.tar.gz
sha256sum: b8c8a04a14d564b1e344b9dfb082f9b2bbc0c7848c178daabc9db319a911dea6
:
name: libglaze-tests
version: 2.5.3
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libboost-ext-ut ^2.0.1
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.5.3.tar.gz
sha256sum: ddf992e51c37960ce5f898f36d43328dff4616c4cb21132204c92c27fae4973a
:
name: libglaze-tests
version: 2.6.1
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libboost-ext-ut ^2.0.1
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.6.1.tar.gz
sha256sum: dc849aa60c64c22e17945733f739aef432c5247f10e25db898b4f7ae3e468027
:
name: libglaze-tests
version: 2.6.4
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libboost-ext-ut ^2.0.1
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.6.4.tar.gz
sha256sum: d50f5b68fa65c55eb6eb7673a428a3bb23058c09f296f0cc704664d8e75da194
:
name: libglaze-tests
version: 2.6.8
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libboost-ext-ut ^2.0.1
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.6.8.tar.gz
sha256sum: c6e3a2d91a36762c0f53864f2b69fb042057103260aae778fe2b3f78683adc85
:
name: libglaze-tests
version: 2.8.0
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libasio
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.8.0.tar.gz
sha256sum: 2662c7ab743aa3575322805b93f85226a44e2149e182f2012553341c35ebc84f
:
name: libglaze-tests
version: 2.8.1
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libasio
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.8.1.tar.gz
sha256sum: 677faf56173b89ac9de41504ac9abed8c4a4737acbeb0a51ffcc5d93f3e428d8
:
name: libglaze-tests
version: 2.9.0
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libasio
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.9.0.tar.gz
sha256sum: c0a3c16447e6f3c1b9fb70a83a0220a246c40a544987efe4bd248ef484b7793b
:
name: libglaze-tests
version: 2.9.1
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libasio
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.9.1.tar.gz
sha256sum: c03ebf813ec164c346dc548d247b405a54d073ffbfb97fb03c4be81998730c3a
:
name: libglaze-tests
version: 2.9.3
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libasio
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.9.3.tar.gz
sha256sum: 667206c8c29eba03bdcf66e3314c0944e11f93537c50b65fa41c95dd3d575a4e
:
name: libglaze-tests
version: 2.9.4
type: exe
language: c++
project: glaze
summary: JSON and interface library for C++ ; Tests
license: MIT; MIT License.
url: https://github.com/stephenberry/glaze
package-url: https://github.com/build2-packaging/glaze
email: stephenberry.developer@gmail.com
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
depends: libasio
bootstrap-build:
\
project = libglaze-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

exe{*}: test = true

test.target = $cxx.target

\
location: glaze/libglaze-tests-2.9.4.tar.gz
sha256sum: 538d19240ef4c0fccce0286561de9368d6356f37728bec923feeb9f1e96a4e1b
:
name: libharfbuzz
version: 4.2.0
project: harfbuzz
summary: HarfBuzz text shaping engine C/C++ libraries
license: MIT-Modern-Variant
license: MIT
description:
\
[![Linux CI Status](https://github.com/harfbuzz/harfbuzz/workflows/linux-ci/b\
adge.svg)](https://github.com/harfbuzz/harfbuzz/workflows/linux-ci/badge.svg)
[![CircleCI Build Status](https://circleci.com/gh/harfbuzz/harfbuzz/tree/main\
.svg?style=svg)](https://circleci.com/gh/harfbuzz/harfbuzz/tree/main)
[![OSS-Fuzz Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges\
/harfbuzz.svg)](https://oss-fuzz-build-logs.storage.googleapis.com/index.html)
[![Coverity Code Health](https://img.shields.io/coverity/scan/5450.svg)](http\
s://scan.coverity.com/projects/behdad-harfbuzz)
[![Codacy Code Health](https://api.codacy.com/project/badge/Grade/f17f1708783\
c447488bc8dd317150eaa)](https://app.codacy.com/app/behdad/harfbuzz)
[![Codecov Code Coverage](https://codecov.io/gh/harfbuzz/harfbuzz/branch/main\
/graph/badge.svg)](https://codecov.io/gh/harfbuzz/harfbuzz)
[![Coverals Code Coverage](https://img.shields.io/coveralls/harfbuzz/harfbuzz\
.svg)](https://coveralls.io/r/harfbuzz/harfbuzz)
[![Packaging status](https://repology.org/badge/tiny-repos/harfbuzz.svg)](htt\
ps://repology.org/project/harfbuzz/versions)
[ABI Tracker](http://abi-laboratory.pro/tracker/timeline/harfbuzz/)

This is HarfBuzz, a text shaping library.

For bug reports, mailing list, and other information please visit:

  http://harfbuzz.org/

For license information, see [COPYING](COPYING).

For build information, see [BUILD.md](BUILD.md).

For custom configurations, see [CONFIG.md](CONFIG.md).

For test execution, see [TESTING.md](TESTING.md).

Documentation: https://harfbuzz.github.io


<details>
  <summary>Packaging status of HarfBuzz</summary>

[![Packaging status](https://repology.org/badge/vertical-allrepos/harfbuzz.sv\
g?header=harfbuzz)](https://repology.org/project/harfbuzz/versions)

</details>

\
description-type: text/markdown;variant=GFM
changes:
\
Overview of changes leading to 4.2.0
Wednesday, March 30, 2022
====================================
- Source code reorganization, splitting large hb-ot-layout files into smaller,
  per-subtable ones under OT/Layout/*. Code for more tables will follow suit\
 in
  later releases. (Garret Rieger, Behdad Esfahbod)
- Revert Indic shaper change in previous release that broke some fonts and
  instead make per-syllable restriction of “GSUB” application limited to
  script-specific Indic features, while applying them and discretionary
  features in one go. (Behdad Esfahbod)
- Fix decoding of private in gvar table. (Behdad Esfahbod)
- Fix handling of contextual lookups that delete too many glyphs. (Behdad\
 Esfahbod)
- Make “morx” deleted glyphs don’t block “GPOS” application. (Behdad Esfahbod)
- Various build fixes. (Chun-wei Fan, Khaled Hosny)

- New API
+hb_set_next_many() (Andrew John)


Overview of changes leading to 4.1.0
Wednesday, March 23, 2022
====================================
- Various OSS-Fuzz fixes. (Behdad Esfahbod)
- Make fallback vertical-origin match FreeType’s. (Behdad Esfahbod)
- Treat visible viramas like dependent vowels in USE shaper. (David Corbett)
- Apply presentation forms features and discretionary features in one go in
  Indic shaper, which seems to match Uniscribe and CoreText behaviour.
  (Behdad Esfahbod, David Corbett)
- Various bug fixes.

- New API
+hb_set_add_sorted_array() (Andrew John)


Overview of changes leading to 4.0.1
Friday, March 11, 2022
====================================
- Update OpenType to AAT mappings for “hist” and “vrtr” features.
  (Florian Pircher)
- Update IANA Language Subtag Registry to 2022-03-02. (David Corbett)
- Update USE shaper to allow any non-numeric tail in a symbol cluster, and
  remove obsolete data overrides. (David Corbett)
- Fix handling of baseline variations to return correctly scaled values.
  (Matthias Clasen)
- A new experimental hb_subset_repack_or_fail() to repack an array of objects,
  eliminating offset overflows. The API is not available unless HarfBuzz is
  built with experimental APIs enabled. (Qunxin Liu)

- New experimental API
+hb_link_t
+hb_object_t
+hb_subset_repack_or_fail()


Overview of changes leading to 4.0.0
Tuesday, March 1, 2022
====================================
- New public API to create subset plan and gather information on things like
  glyph mappings in the final subset. The plan can then be passed on to\
 perform
  the subsetting operation. (Garret Rieger)
- Draw API for extracting glyph shapes have been extended and finalized and is
  no longer an experimental API. The draw API supports glyf, CFF and CFF2
  glyph outlines tables, and applies variation settings set on the font as\
 well
  as synthetic slant. The new public API is not backward compatible with the
  previous, non-public, experimental API. (Behdad Esfahbod)
- The hb-view tool will use HarfBuzz draw API to render the glyphs instead of
  cairo-ft when compiled with Cairo 1.17.5 or newer, setting HB_DRAW
  environment variable to 1 or 0 will force using or not use the draw API,
  respectively. (Behdad Esfahbod)
- The hb-shape and hb-view tools now default to using HarfBuzz’s own font
  loading functions (ot) instead of FreeType ones (ft). They also have a new
  option, --font-slant, to apply synthetic slant to the font. (Behdad\
 Esfahbod)
- HarfBuzz now supports more than 65535 (the OpenType limit) glyph shapes and
  metrics. See https://github.com/be-fonts/boring-expansion-spec/issues/6 and
  https://github.com/be-fonts/boring-expansion-spec/issues/7 for details.
  (Behdad Esfahbod)
- New API to get the dominant horizontal baseline tag for a given script.
  (Behdad Esfahbod)
- New API to get the baseline positions from the font, and synthesize missing
  ones. As well as new API to get font metrics and synthesize missing ones.
  (Matthias Clasen)
- Improvements to finding dependencies on Windows when building with Visual
  Studio. (Chun-wei Fan)
- New buffer flag, HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT, that must be set
  during shaping for HB_GLYPH_FLAG_UNSAFE_TO_CONCAT flag to be reliably
  produced. This is to limit the performance hit of producing this flag to\
 when
  it is actually needed. (Behdad Esfahbod)
- Documentation improvements. (Matthias Clasen)

- New API
 - General:
   +HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT
   +hb_var_num_t

 - Draw:
   +hb_draw_funcs_t
   +hb_draw_funcs_create()
   +hb_draw_funcs_reference()
   +hb_draw_funcs_destroy()
   +hb_draw_funcs_is_immutable()
   +hb_draw_funcs_make_immutable()
   +hb_draw_move_to_func_t
   +hb_draw_funcs_set_move_to_func()
   +hb_draw_line_to_func_t
   +hb_draw_funcs_set_line_to_func()
   +hb_draw_quadratic_to_func_t
   +hb_draw_funcs_set_quadratic_to_func()
   +hb_draw_cubic_to_func_t
   +hb_draw_funcs_set_cubic_to_func()
   +hb_draw_close_path_func_t
   +hb_draw_funcs_set_close_path_func()
   +hb_draw_state_t
   +HB_DRAW_STATE_DEFAULT
   +hb_draw_move_to()
   +hb_draw_line_to()
   +hb_draw_quadratic_to()
   +hb_draw_cubic_to()
   +hb_draw_close_path()
   +hb_font_get_glyph_shape_func_t
   +hb_font_funcs_set_glyph_shape_func()
   +hb_font_get_glyph_shape()

 - OpenType layout
   +HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL
   +HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL
   +hb_ot_layout_get_horizontal_baseline_tag_for_script()
   +hb_ot_layout_get_baseline_with_fallback()

 - Metrics:
   +hb_ot_metrics_get_position_with_fallback()

 - Subset:
   +hb_subset_plan_t
   +hb_subset_plan_create_or_fail()
   +hb_subset_plan_reference()
   +hb_subset_plan_destroy()
   +hb_subset_plan_set_user_data()
   +hb_subset_plan_get_user_data()
   +hb_subset_plan_execute_or_fail()
   +hb_subset_plan_unicode_to_old_glyph_mapping()
   +hb_subset_plan_new_to_old_glyph_mapping()
   +hb_subset_plan_old_to_new_glyph_mapping()


Overview of changes leading to 3.4.0
Sunday, February 13, 2022
====================================
- Perform sanity checks on shaping results is now part of “harfbuzz” library
  and can be enabled by setting the buffer flag HB_BUFFER_FLAG_VERIFY.
  (Behdad Esfahbod)
- Arabic Mark Transient Reordering Algorithm have been updated to revision 6.
  (Khaled Hosny)
- ISO 15924 code for mathematical notation, ‘Zmth’, now maps to the OpenType
  ‘math’ tag. (Alexis King)
- It is now possible to get at once all math kerning values for a given glyph
  at a given corner. (Alexis King)
- Fix locale_t portability issues on systems the typedef’s it to a void
  pointer. (Behdad Esfahbod)

- New API:
+HB_BUFFER_FLAG_VERIFY
+HB_OT_TAG_MATH_SCRIPT
+HB_SCRIPT_MATH
+hb_ot_math_kern_entry_t
+hb_ot_math_get_glyph_kernings()

- Deprecated API
+HB_OT_MATH_SCRIPT


Overview of changes leading to 3.3.2
Sunday, February 6, 2022
====================================
- Revert splitting of pair positioning values introduced in 3.3.0 as it proved
  problematic. (Behdad Esfahbod)


Overview of changes leading to 3.3.1
Monday, January 31, 2022
====================================
- Fix heap-use-after-free in harfbuzz-subset introduced in previous release.
  (Garret Rieger)


Overview of changes leading to 3.3.0
Monday, January 31, 2022
====================================
- Improved documentation. (Matthias Clasen)
- Internal code cleanup, using C++ standard library more. (Behdad Esfahbod)
- The low 16-bits of face index will be used by hb_face_create() to select a
  face inside a font collection file format, while the high 16-bits will be
  used by hb_font_create() to load the named instance. (Behdad Esfahbod)
- Glyph positions and other font metrics now apply synthetic slant set by
  hb_font_set_synthetic_slant(), for improved positioning for synthetically
  slanted fonts. (Behdad Esfahbod)
- Fixed unintentional locale dependency in hb_variation_to_string() for\
 decimal
  point representation. (Matthias Clasen)
- When applying pair positioning (kerning) the positioning value is split
  between the two sides of the pair for improved cursor positioning between
  such pairs. (Behdad Esfahbod)
- Introduced new HB_GLYPH_FLAG_UNSAFE_TO_CONCAT, to be used in conjunction
  with HB_GLYPH_FLAG_UNSAFE_TO_BREAK for optimizing re-shaping during line
  breaking. Check the documentation for further details. (Behdad Esfahbod)
- Improved handling of macrolanguages when mapping BCP 47 codes to OpenType
  tags. (David Corbett)

- New API:
+HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
+hb_segment_properties_overlay()
+hb_buffer_create_similar()
+hb_font_set_synthetic_slant()
+hb_font_get_synthetic_slant()
+hb_font_get_var_coords_design()


Overview of changes leading to 3.2.0
Friday, November 26, 2021
====================================
“harfbuzz” library improvements:
- Fixed shaping of Apple Color Emoji flags in right-to-left context. (Behdad\
 Esfahbod)
- Fixed positioning of CFF fonts in HB_TINY profile. (Behdad Esfahbod)
- OpenType 1.9 language tags update. (David Corbett)
- Add HB_NO_VERTICAL config option.
- Add HB_CONFIG_OVERRIDE_H for easier configuration. (Behdad Esfahbod)

“harfbuzz-subset” library improvements:
- Improved packing of cmap, loca, and Ligature tables. (Garret Rieger)
- Significantly improved overflow-resolution strategy in the repacker.\
 (Garret Rieger)


Overview of changes leading to 3.1.2
Friday, November 26, 2021
====================================
- hb-shape / hb-view: revert treating text on the commandline as single
  paragraph (was introduced in 3.0.0); add new --single-par to do that.
  (Behdad Esfahbod)
- Subsetter bug fixes. (Garret Rieger, Qunxin Liu, Behdad Esfahbod)


Overview of changes leading to 3.1.1
Wednesday, November 8, 2021
====================================
- Work around GCC cast-align error/warning on some platforms. (Behdad\
 Esfahbod)
- Documentation improvements. (Matthias Clasen)


Overview of changes leading to 3.1.0
Wednesday, November 3, 2021
====================================
- Better offset-overflow handling in the subsetter library. (Garret Rieger)
- Improved Unicode 14 properties in the USE shaper, and various other USE
  shaper fixes. (David Corbett)
- MATH and COLR v1 tables subsetting support, and various other subsetter\
 fixes.
  (Qunxin Liu)
- Support for Pwo Karen / Ason Chin medial la. (Simon Cozens)
- Apply GPOS positioning when substituting with morx table, if kerx is\
 missing.
  (Behdad Esfahbod)
- Apply calt and clig features across syllable boundaries in Indic shaper.
  (Behdad Esfahbod)
- meson option for enabling Graphite 2 has been renamed to graphite2.
- Build and documentation fixes.

- New API:
+hb_buffer_set_not_found_glyph()
+hb_buffer_get_not_found_glyph()


Overview of changes leading to 3.0.0
Friday, September 17, 2021
====================================
- Unicode 14.0 support (David Corbett).
- The hb-subset API and the harfbuzz-subset library's ABI are now declared
  stable. The harfbuzz-subset library would not have been possible without the
  work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work
  of Michiharu Ariza from Adobe.
- The hb-style API is now stable and no longer experimental.

- New API:
+hb_style_tag_t
+hb_style_get_value()
+hb_subset_input_t
+hb_subset_flags_t
+hb_subset_sets_t
+hb_subset_input_create_or_fail()
+hb_subset_input_reference()
+hb_subset_input_destroy()
+hb_subset_input_set_user_data()
+hb_subset_input_get_user_data()
+hb_subset_input_unicode_set()
+hb_subset_input_glyph_set()
+hb_subset_input_set()
+hb_subset_input_get_flags()
+hb_subset_input_set_flags()
+hb_subset_or_fail()

- Removed old unstable harfbuzz-subset API:
-hb_subset_input_nameid_set()
-hb_subset_input_namelangid_set()
-hb_subset_input_layout_features_set()
-hb_subset_input_no_subset_tables_set()
-hb_subset_input_drop_tables_set()
-hb_subset_input_set_drop_hints()
-hb_subset_input_get_drop_hints()
-hb_subset_input_set_desubroutinize()
-hb_subset_input_get_desubroutinize()
-hb_subset_input_set_retain_gids()
-hb_subset_input_get_retain_gids()
-hb_subset_input_set_name_legacy()
-hb_subset_input_get_name_legacy()
-hb_subset_input_set_overlaps_flag()
-hb_subset_input_get_overlaps_flag()
-hb_subset_input_set_notdef_outline()
-hb_subset_input_get_notdef_outline()
-hb_subset_input_set_no_prune_unicode_ranges()
-hb_subset_input_get_no_prune_unicode_ranges()
-hb_subset()


Overview of changes leading to 2.9.1
Tuesday, September 7, 2021
====================================
- Final subset API is in place and if no issues are discovered, it will be the
  stable subset API of HarfBuzz 3.0.0. Old API is kept to ease transition, but
  will be removed in 3.0.0.
- Various fuzzer-found bug fixes.
- hb_buffer_append() now handles the pre- and post-context which previously
  were left unchanged in the destination buffer.
- hb-view / hb-shape now accept following new arguments:
  o --unicodes-before/after: takes a list of hex numbers that represent\
 Unicode
    codepoints.
- Undeprecated API:
  hb_set_invert()


Overview of changes leading to 2.9.0
Wednesday, August 18, 2021
History Repeats Itself (Afghanistan)
====================================
- Subsetter API is being stabilized, with the first stable API to happen in
  3.0.0 release (https://github.com/harfbuzz/harfbuzz/issues/3078).
- Support multiple variation axes with same tag, aka HOI.
- The “coretext” testing shaper now passes font variations to CoreText.
- hb-shape/hb-view does not break line at new lines unless text is read from
  file.
- hb-view and hb-subset has a --batch now, similar to hb-shape.
- The --batch mode now uses ; as argument separator instead of : used\
 previously.
- The --batch in hb-shape does not expect 0th argument anymore. That is, the
  lines read are interpreted as argv[1:], instead of argv[0:].
- The --batch option has been undocumented. We are ready to document it; send
  feedback if you find it useful.
- hb-subset got arguments revamps. Added much-requested --gids-file, --glyphs,
  --glyphs-file, --unicodes-file, supporting ranges in --unicodes.
- Various bug fixes.


Overview of changes leading to 2.8.2
Tuesday, July 8, 2021
====================================
- Shaping LTR digits for RTL scripts now makes the native direction of the
  digits LTR, applying shaping and positioning rules on the same glyph order\
 as
  Uniscribe. (Jonathan Kew, Khaled Hosny).
- Subsetting COLR v1 and CPAL tables is now supported. (Garret Rieger, Qunxin\
 Liu)
- Various fixes and improvements to the subsetter. (Garret Rieger, Qunxin\
 Liu, Behdad)
- When applying morx table, mark glyph widths should not be zeroed. (Jonathan\
 Kew)
- GPOS is preferred over kerx, if GSUB was applied. (Behdad)
- Regional_Indicator pairs are grouped together when clustering. (Behdad)
- New API:
+hb_blob_create_or_fail()
+hb_blob_create_from_file_or_fail()
+hb_set_copy()


Overview of changes leading to 2.8.1
Tuesday, May 4, 2021
====================================
- Subsetter now fully supports GSUB/GPOS/GDEF tables (including variations);\
 as
  such, layout tables are retained by subsetter by default. (Garret Rieger,\
 Qunxin Liu)
- Build scripts no longer check for FontConfig as HarfBuzz does not use it.
- hb-view supports iTerm2 and kitty inline image protocols (Khaled Hosny),
  it can also use Chafa for terminal graphics if available (Hans Petter\
 Jansson).

Overview of changes leading to 2.8.0
Tuesday, March 16, 2021
====================================
- Shape joining scripts other than Arabic/Syriac using the Universal Shaping\
 Engine.
  Previously these were shaped using the generalized Arabic shaper. (David\
 Corbett)
- Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett)
- Update language tags. (David Corbett)
- Variations: reduce error: do not round each interpolated delta. (Just van\
 Rossum) 
- Documentation improvements. (Khaled Hosny, Nathan Willis)
- Subsetter improvements: subsets most, if not all, lookup types now. (Garret\
 Rieger, Qunxin Liu)
- Fuzzer-found fixes and other improvements when memory failures happen.\
 (Behdad)
- Removed most atomic implementations now that we have C++11 atomic impl.\
 (Behdad)
- General codebase upkeep; using more C++11 features: constexpr constructors,\
 etc. (Behdad)


Overview of changes leading to 2.7.4
Sunday, December 27, 2020
====================================
- Fix missing --enable-introspection configure option from previous release
  tarball.
- Documentation updates.


Overview of changes leading to 2.7.3
Wednesday, December 23, 2020
====================================
- Update USE shaper to 2020-08-13 specification, and other improvements.
- Don’t disable liga feature in myanmar shaper, to match Uniscribe.
- Improvements to language and script tags handling.
- Update language system tag registry to OpenType 1.8.4
- Support for serializing and deserializing Unicode buffers. Serialized\
 buffers
  are now delimited with `<>` or `[]` based on whether it is a Unicode or
  glyphs buffer.
- Increase buffer work limits to handle fonts with many complex lookups.
- Handle more shaping operations in trace output.
- Memory access fixes.
- More OOM fixes.
- Improved documentation.
- Build system improvements.
- New API:
+hb_buffer_has_positions()
+hb_buffer_serialize()
+hb_buffer_serialize_unicode()
+hb_buffer_deserialize_unicode()


Overview of changes leading to 2.7.2
Saturday, August 29, 2020
====================================
- Fix a regression in the previous release that caused a crash with Kaithi.
- More OOM fixes.


Overview of changes leading to 2.7.1
Thursday, August 13, 2020
====================================
- ot-funcs now handles variable empty glyphs better when hvar/vvar isn't\
 present.
- Reverted a GDEF processing regression.
- A couple of fixes to handle OOM better.


Overview of changes leading to 2.7.0
Saturday, July 25, 2020
====================================
- Use an implementation for round that always rounds up, some minor\
 fluctuations
  are expected on var font specially when hb-ot callback is used.
- Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN.
- Remove AAT's `lcar` table support from _get_ligature_carets API, not even\
 much
  use on macOS installed fonts (only two files).  GDEF support is the\
 recommended
  one and expected to work properly after issues fixed two releases ago.
- Minor memory fixes to handle OOM better specially in hb-ft.
- Minor .so files versioning scheme change and remove stable/unstable scheme
  differences, was never used in practice (always default to stable scheme).
- We are now suggesting careful packaging of the library using meson,
  https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson
  for more information.
- Distribution package URL is changed, either use GitHub generated tarballs,
  `https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz`
  or, even more preferably use commit hash of the release and git checkouts\
 like,
  `git+https://github.com/harfbuzz/harfbuzz#commit=$commit`


Overview of changes leading to 2.6.8
Monday, June 22, 2020
====================================
- New API to fetch glyph alternates from GSUB table.
- hb-coretext build fix for macOS < 10.10.
- Meson build fixes, cmake port removal is postponed but please prepare for
  it and give us feedback.
  Autotools is still our main build system however please consider
  experimenting with meson also for packaging the library.
- New API:
+hb_ot_layout_lookup_get_glyph_alternates()


Overview of changes leading to 2.6.7
Wednesday, June 3, 2020
====================================
- Update to Unicode 13.0.0.
- Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was
  completely broken for all the other fonts since 2.1.2.
- As a part of our migration to meson, this release will be the last one
  to provide cmake port files but autotools still is our main build system.
  There is a possibility that the next version or the after be released
  using meson.


Overview of changes leading to 2.6.6
Tuesday, May 12, 2020
====================================
- A fix in AAT kerning for Geeza Pro.
- Better support for resource fork fonts on macOS.


Overview of changes leading to 2.6.5
Friday, April 17, 2020
====================================
- Add experimental meson build system.  Autotools is still the primary
  and supported build system.
- AAT is now always preferred for horizontal scripts when both AAT and OT
  layout tables exist at the same time.
- Subsetter improvements.
- New API:
+hb_ft_font_lock_face()
+hb_ft_font_unlock_face()


Overview of changes leading to 2.6.4
Monday, October 29, 2019
====================================
- Small bug fix.
- Build fixes.


Overview of changes leading to 2.6.3
Monday, October 28, 2019
====================================
- Misc small fixes, mostly to build-related issues.
- New API:
+hb_font_get_nominal_glyphs()


Overview of changes leading to 2.6.2
Monday, September 30, 2019
====================================
- Misc small fixes, mostly to build-related issues.


Overview of changes leading to 2.6.1
Thursday, August 22, 2019
====================================
- Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0.
- Change interpretation of font PTEM size / CoreText font size handling.
  See https://github.com/harfbuzz/harfbuzz/pull/1484
- hb-ot-font: Prefer symbol cmap subtable if present.
- Apply 'dist'/'abvm'/'blwm' features to all scripts.
- Drop experimental DirectWrite API.


Overview of changes leading to 2.6.0
Tuesday, August 13, 2019
====================================
- New OpenType metrics, baseline, and metadata table access APIs.
- New API to set font variations to a named-instance.
- New hb-gdi.h header and API for creating hb_face_t from HFONT.
- Amalgam: Provide a single-file harfbuzz.cc file for easier alternate\
 building.
- More size-reduction configurable options, enabled by HB_TINY.
- New API:
+hb_font_set_var_named_instance()
+hb_gdi_face_create()
+hb_ot_layout_baseline_tag_t
+hb_ot_layout_get_baseline()
+hb_ot_meta_tag_t
+hb_ot_meta_get_entry_tags()
+hb_ot_meta_reference_entry()
+hb_ot_metrics_tag_t
+hb_ot_metrics_get_position()
+hb_ot_metrics_get_variation()
+hb_ot_metrics_get_x_variation()
+hb_ot_metrics_get_y_variation()


Overview of changes leading to 2.5.3
Wednesday, June 26, 2019
====================================
- Fix UCD script data for Unicode 10+ scripts.  This was broken since 2.5.0.
- More optimizations for HB_TINY.


Overview of changes leading to 2.5.2
Thursday, June 20, 2019
====================================
- More hb-config.hh facilities to shrink library size, namely when built as
  HB_TINY.
- New documentation of custom configurations in CONFIG.md.
- Fix build on gcc 4.8.  That's supported again.
- Universal Shaping Engine improvements thanks to David Corbett.
- API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft,
  such that Type1 fonts will continue kerning.


Overview of changes leading to 2.5.1
Friday, May 31, 2019
====================================
- Fix build with various versions of Visual Studio.
- Improved documentation, thanks to Nathan Willis.
- Bugfix in subsetting glyf table.
- Improved scripts for cross-compiling for Windows using mingw.
- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTEN\
DER.
  A deprecated macro is added for backwards-compatibility.


Overview of changes leading to 2.5.0
Friday, May 24, 2019
====================================
- This release does not include much functional changes, but includes major\
 internal
  code-base changes.  We now require C++11.  Support for gcc 4.8 and earlier\
 has been
  dropped.
- New hb-config.hh facility for compiling smaller library for embedded and\
 web usecases.
- New Unicode Character Database implementation that is half the size of\
 previously-used
  UCDN.
- Subsetter improvements.
- Improved documentation, thanks to Nathan Willis.
- Misc shaping fixes.


Overview of changes leading to 2.4.0
Monday, March 25, 2019
====================================
- Unicode 12.
- Misc fixes.
- Subsetter improvements.
- New API:
HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
hb_directwrite_face_create()


Overview of changes leading to 2.3.1
Wednesday, January 30, 2019
====================================
- AAT bug fixes.
- Misc internal housekeeping cleanup.


Overview of changes leading to 2.3.0
Thursday, December 20, 2018
====================================
- Fix regression on big-endian architectures.  Ouch!
- Misc bug and build fixes.
- Fix subsetting of simple GSUB/GDEF.
- Merge CFF / CFF2 support contributed by Adobe.  This mostly involves
  the subsetter, but also get_glyph_extents on CFF fonts.

New API in hb-aat.h:
+hb_aat_layout_has_substitution()
+hb_aat_layout_has_positioning()
+hb_aat_layout_has_tracking()


Overview of changes leading to 2.2.0
Thursday, November 29, 2018
====================================
- Misc shaping bug fixes.
- Add font variations named-instance API.
- Deprecate font variations axis enumeration API and add replacement.
- AAT shaping improvements:
  o Fixed 'kern' table Format 2 implementation.
  o Implement 'feat' table API for feature detection.
  o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'.

New API:
+hb_aat_layout_feature_type_t
+hb_aat_layout_feature_selector_t
+hb_aat_layout_get_feature_types()
+hb_aat_layout_feature_type_get_name_id
+hb_aat_layout_feature_selector_info_t
+HB_AAT_LAYOUT_NO_SELECTOR_INDEX
+hb_aat_layout_feature_type_get_selector_infos()
+hb_ot_var_axis_flags_t
+hb_ot_var_axis_info_t
+hb_ot_var_get_axis_infos()
+hb_ot_var_find_axis_info()
+hb_ot_var_get_named_instance_count()
+hb_ot_var_named_instance_get_subfamily_name_id()
+hb_ot_var_named_instance_get_postscript_name_id()
+hb_ot_var_named_instance_get_design_coords()

Deprecated API:
+HB_OT_VAR_NO_AXIS_INDEX
+hb_ot_var_axis_t
+hb_ot_var_get_axes()
+hb_ot_var_find_axis()


Overview of changes leading to 2.1.3
Friday, November 16, 2018
====================================
- Fix AAT 'mort' shaping, which was broken in 2.1.2


Overview of changes leading to 2.1.2
Friday, November 16, 2018
====================================
- Various internal changes.
- AAT shaping improvements:
  o Implement kern table Format 1 state-machine-based kerning.
  o Implement cross-stream kerning (cursive positioning, etc).
  o Ignore emptyish GSUB tables (zero scripts) if morx present.
  o Don't apply GPOS if morx is being applied.  Matches Apple.


-Overview of changes leading to 2.1.1
Monday, November 5, 2018
====================================
- AAT improvements:
  o Implement 'mort' table.
  o Implement 'kern' subtables Format 1 and Format 3.


Overview of changes leading to 2.1.0
Tuesday, October 30, 2018
====================================
- AAT shaping improvements:
  o Allow user controlling AAT features, for whole buffer only currently.
  o Several 'morx' fixes.
  o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default
    San Francisco fonts.
- Support for color fonts:
  o COLR/CPAL API to fetch color layers.
  o SVG table to fetch SVG documents.
  o CBDT/sbix API to fetch PNG images.
- New 'name' table API.
- hb-ot-font now uses 'VORG' table to correctly position CFF glyphs
  in vertical layout.
- Various fuzzer-found bug fixes.

Changed API:

A type and a macro added in 2.0.0 were renamed:

hb_name_id_t -> hb_ot_name_id_t
HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID

New API:

+hb_color_t
+HB_COLOR
+hb_color_get_alpha()
+hb_color_get_red()
+hb_color_get_green()
+hb_color_get_blue()
+hb_ot_color_has_palettes()
+hb_ot_color_palette_get_count()
+hb_ot_color_palette_get_name_id()
+hb_ot_color_palette_color_get_name_id()
+hb_ot_color_palette_flags_t
+hb_ot_color_palette_get_flags()
+hb_ot_color_palette_get_colors()
+hb_ot_color_has_layers()
+hb_ot_color_layer_t
+hb_ot_color_glyph_get_layers()
+hb_ot_color_has_svg()
+hb_ot_color_glyph_reference_svg()
+hb_ot_color_has_png()
+hb_ot_color_glyph_reference_png()

+hb_ot_name_id_t
+HB_OT_NAME_ID_INVALID
+HB_OT_NAME_ID_COPYRIGHT
+HB_OT_NAME_ID_FONT_FAMILY
+HB_OT_NAME_ID_FONT_SUBFAMILY
+HB_OT_NAME_ID_UNIQUE_ID
+HB_OT_NAME_ID_FULL_NAME
+HB_OT_NAME_ID_VERSION_STRING
+HB_OT_NAME_ID_POSTSCRIPT_NAME
+HB_OT_NAME_ID_TRADEMARK
+HB_OT_NAME_ID_MANUFACTURER
+HB_OT_NAME_ID_DESIGNER
+HB_OT_NAME_ID_DESCRIPTION
+HB_OT_NAME_ID_VENDOR_URL
+HB_OT_NAME_ID_DESIGNER_URL
+HB_OT_NAME_ID_LICENSE
+HB_OT_NAME_ID_LICENSE_URL
+HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
+HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
+HB_OT_NAME_ID_MAC_FULL_NAME
+HB_OT_NAME_ID_SAMPLE_TEXT
+HB_OT_NAME_ID_CID_FINDFONT_NAME
+HB_OT_NAME_ID_WWS_FAMILY
+HB_OT_NAME_ID_WWS_SUBFAMILY
+HB_OT_NAME_ID_LIGHT_BACKGROUND
+HB_OT_NAME_ID_DARK_BACKGROUND
+HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
+hb_ot_name_entry_t
+hb_ot_name_list_names()
+hb_ot_name_get_utf8()
+hb_ot_name_get_utf16()
+hb_ot_name_get_utf32()


Overview of changes leading to 2.0.2
Saturday, October 20, 2018
====================================
- Fix two minor memory access issues in AAT tables.


Overview of changes leading to 2.0.1
Friday, October 19, 2018
====================================
- Fix hb-version.h reported release version that went wrong (1.8.0)
  with previous release.
- Fix extrapolation in 'trak' table.
- Fix hb-font infinite-recursion issue with some font funcs and
  subclassed fonts.
- Implement variation-kerning format in kerx table, although without
  variation.
- Fix return value of hb_map_is_empty().


Overview of changes leading to 2.0.0
Thursday, October 18, 2018
====================================
- Added AAT shaping support (morx/kerx/trak).
  Automatically used if GSUB/GPOS are not available respectively.
  Set HB_OPTIONS=aat env var to have morx/kerx preferred over
  GSUB/GPOS.
- Apply TrueType kern table internally, instead of relying on
  hb_font_t callbacks.
- Khmer shaper significantly rewritten to better match Uniscribe.
- Indic3 tags ('dev3', etc) are passed to USE shaper.
- .dfont Mac font containers implemented.
- Script- and language-mapping revamped to better use BCP 47.
- Misc USE and Indic fixes.
- Misc everything fixes.
- Too many things to list.  Biggest release since 0.9.1, with
  over 500 commits in just over 5 weeks!  Didn't intend it to
  be a big release.  Just happened to become.
- hb-ft now locks underlying FT_Face during use.

API changes:

- Newly-created hb_font_t's now have our internal "hb-ot-font"
  callbacks set on them, so they should work out of the box
  without any callbacks set.  If callbacks are set, everything
  is back to what it was before, the fallback callbacks are
  null.  If you to get the internal implementation modified,
  sub_font it.

- New hb_font_funcs_set_nominal_glyphs_func() allows speeding
  up character to glyph mapping.

New API:
+HB_FEATURE_GLOBAL_START
+HB_FEATURE_GLOBAL_END
+hb_buffer_set_invisible_glyph()
+hb_buffer_get_invisible_glyph()
+hb_font_funcs_set_nominal_glyphs_func()
+hb_ot_layout_table_select_script()
+hb_ot_layout_script_select_language()
+hb_ot_layout_feature_get_name_ids()
+hb_ot_layout_feature_get_characters()
+hb_name_id_t
+HB_NAME_ID_INVALID
+HB_OT_MAX_TAGS_PER_SCRIPT
+hb_ot_tags_from_script_and_language()
+hb_ot_tags_to_script_and_language()

Deprecated API:
-hb_font_funcs_set_glyph_func()
-hb_unicode_eastasian_width_func_t
-hb_unicode_funcs_set_eastasian_width_func()
-hb_unicode_eastasian_width()
-hb_unicode_decompose_compatibility_func_t
-HB_UNICODE_MAX_DECOMPOSITION_LEN
-hb_unicode_funcs_set_decompose_compatibility_func()
-hb_unicode_decompose_compatibility()
-hb_font_funcs_set_glyph_h_kerning_func()
-hb_font_funcs_set_glyph_v_kerning_func()
-hb_font_get_glyph_h_kerning()
-hb_font_get_glyph_v_kerning()
-hb_font_get_glyph_kerning_for_direction()
-hb_ot_layout_table_choose_script()
-hb_ot_layout_script_find_language()
-hb_ot_tags_from_script()
-hb_ot_tag_from_language()


Overview of changes leading to 1.9.0
Monday, September 10, 2018
====================================
- Added 'cmap' API to hb_face_t.
- Face-builder API.
- hb-ot-font re-creation should be much leaner now, as the
  font tables it uses are cached on hb_face_t now.
- Internal source header file name changes:
  hb-*-private.hh is renamed to hb-*.hh.

New API:
+HB_UNICODE_MAX
+hb_face_collect_unicodes()
+hb_face_collect_variation_selectors()
+hb_face_collect_variation_unicodes()
+hb_face_builder_create()
+hb_face_builder_add_table()


Overview of changes leading to 1.8.8
Tuesday, August 14, 2018
====================================
- Fix hb-icu crash on architectures where compare_exchange_weak() can
  fail falsely.  This bug was introduced in 1.8.4.
  https://bugs.chromium.org/p/chromium/issues/detail?id=873568
- More internal refactoring of atomic operations and singletons.
- API changes:
  The following functions do NOT reference their return value before
  returning:
  * hb_unicode_funcs_get_default()
  * hb_glib_get_unicode_funcs()
  * hb_icu_get_unicode_funcs()
  This is consistent with their naming ("get", instead of "reference")
  as well as how they are used in the wild (ie. no one calls destroy()
  on their return value.)


Overview of changes leading to 1.8.7
Wednesday, August 8, 2018
====================================
- Fix assertion failure with GDEF-blacklisted fonts.


Overview of changes leading to 1.8.6
Tuesday, August 7, 2018
====================================
- Internal code shuffling.
- New API to speed up getting advance widths for implementations
  that have heavy overhead in get_h_advance callback:
+hb_font_funcs_set_glyph_h_advances_func
+hb_font_funcs_set_glyph_v_advances_func
+hb_font_get_glyph_advances_for_direction
+hb_font_get_glyph_h_advances
+hb_font_get_glyph_h_advances_func_t
+hb_font_get_glyph_v_advances
+hb_font_get_glyph_v_advances_func_t


Overview of changes leading to 1.8.5
Wednesday, August 1, 2018
====================================
- Major Khmer shaper improvements to better match Microsoft.
- Indic bug fixes.
- Internal improvements to atomic operations.


Overview of changes leading to 1.8.4
Tuesday, July 17, 2018
====================================
- Fix build on non-C++11.
- Use C++-style GCC atomics and C++11 atomics.


Overview of changes leading to 1.8.3
Wednesday, July 11, 2018
====================================
- A couple of Indic / USE bug fixes.
- Disable vectorization, as it was causing unaligned access bus error on
  certain 32bit architectures.


Overview of changes leading to 1.8.2
Tuesday, July 3, 2018
====================================
- Fix infinite loop in Khmer shaper.
- Improve hb_blob_create_from_file() for streams.


Overview of changes leading to 1.8.1
Tuesday, June 12, 2018
====================================
- Fix hb-version.h file generation; last two releases went out with wrong\
 ones.
- Add correctness bug in hb_set_t operations, introduced in 1.7.7.
- Remove HB_SUBSET_BUILTIN build option.  Not necessary.


Overview of changes leading to 1.8.0
Tuesday, June 5, 2018
====================================
- Update to Unicode 11.0.0.


Overview of changes leading to 1.7.7
Tuesday, June 5, 2018
====================================
- Lots of internal changes, but not yet exposed externally.
- All HarfBuzz objects are significantly smaller in size now.
- Sinhala: Position repha on top of post-consonant, not base.
  This better matches Windows 10 behavior, which was changed
  from previous Windows versions.
- New build options:
  o New cpp macro HB_NO_ATEXIT
  o New cpp macro HB_SUBSET_BUILTIN
- Significant libharfbuzz-subset changes. API subject to change.
- New API in libharfbuzz:

+hb_blob_create_from_file()
+hb_face_count()

A hashmap implementation:
+hb-map.h
+HB_MAP_VALUE_INVALID
+hb_map_t
+hb_map_create()
+hb_map_get_empty()
+hb_map_reference()
+hb_map_destroy()
+hb_map_set_user_data()
+hb_map_get_user_data()
+hb_map_allocation_successful()
+hb_map_clear()
+hb_map_is_empty()
+hb_map_get_population()
+hb_map_set()
+hb_map_get()
+hb_map_del()
+hb_map_has()


Overview of changes leading to 1.7.6
Wednesday, March 7, 2018
====================================

- Fix to hb_set_t binary operations. Ouch.
- New experimental harfbuzz-subset library. All of hb-subset.h
  is experimental right now and API WILL change.

- New API:
hb_blob_copy_writable_or_fail()
HB_OT_TAG_BASE
hb_set_previous()
hb_set_previous_range()


Overview of changes leading to 1.7.5
Tuesday, January 30, 2018
====================================

- Separate Khmer shaper from Indic.
- First stab at AAT morx. Not hooked up.
- Misc bug fixes.


Overview of changes leading to 1.7.4
Wednesday, December 20, 2017
====================================

- Fix collect_glyphs() regression caused by hb_set_t changes.


Overview of changes leading to 1.7.3
Monday, December 18, 2017
====================================

- hb_set_t performance tuning and optimizations.
- Speed up collect_glyphs() and reject garbage data.
- In hb_coretext_font_create() set font point-size (ptem).
- Misc fixes.


Overview of changes leading to 1.7.2
Monday, December 4, 2017
====================================

- Optimize hb_set_add_range().
- Misc fixes.
- New API:
hb_coretext_font_create()


Overview of changes leading to 1.7.1
Tuesday, November 14, 2017
====================================

- Fix atexit object destruction regression.
- Fix minor integer-overflow.


Overview of changes leading to 1.7.0
Monday, November 13, 2017
====================================

- Minor Indic fixes.
- Implement kerning and glyph names in hb-ot-font.
- Various DSO optimization re .data and .bss sizes.
- Make C++11 optional; build fixes.
- Mark all other backends "unsafe-to-break".
- Graphite fix.


Overview of changes leading to 1.6.3
Thursday, October 26th, 2017
====================================

- Fix hb_set_t some more.  Should be solid now.
- Implement get_glyph_name() for hb-ot-font.
- Misc fixes.


Overview of changes leading to 1.6.2
Monday, October 23nd, 2017
====================================

- Yesterday's release had a bad crasher; don't use it.  That's what
  happens when one works on Sunday...
  https://github.com/harfbuzz/harfbuzz/issues/578
- Build fixes for FreeBSD and Chrome Android.


Overview of changes leading to 1.6.1
Sunday, October 22nd, 2017
====================================

- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc.
  To be refined: https://github.com/harfbuzz/harfbuzz/issues/554
- Faster hb_set_t implementation.
- Don't use deprecated ICU API.
- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0
- Deprecated API:
  hb_set_invert()


Overview of changes leading to 1.6.0
Friday, October the 13th, 2017
====================================

- Update to Unicode 10.

- Various Indic and Universal Shaping Engine fixes as a result of
  HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
  the Igalia offices in A Coruña, Spain.  Thanks Igalia for having
  us!

- Implement Unicode Arabic Mark Ordering Algorithm UTR#53.

- Implement optical sizing / tracking in CoreText backend, using
  new API hb_font_set_ptem().

- Allow notifying hb_font_t that underlying FT_Face changed sizing,
  using new API hb_ft_font_changed().

- More Graphite backend RTL fixes.

- Fix caching of variable font shaping plans.

- hb-view / hb-shape now accept following new arguments:

  o --unicodes: takes a list of hex numbers that represent Unicode
    codepoints.

New API:
+hb_face_get_table_tags()
+hb_font_set_ptem()
+hb_font_get_ptem()
+hb_ft_font_changed()


Overview of changes leading to 1.5.1
Tuesday, September 5, 2017
====================================

- Fix "unsafe-to-break" in fallback shaping and other corner cases.
  All our tests pass with --verify now, meaning unsafe-to-break API
  works as expected.
- Add --unicodes to hb-view / hb-shape.
- [indic] Treat Consonant_With_Stacker as consonant.  This will need
  further tweaking.
- hb_buffer_diff() tweaks.


Overview of changes leading to 1.5.0
Wednesday, August 23, 2017
====================================

- Misc new API, for appending a buffer to another, and for comparing
  contents of two buffers for types of differences.

- New "unsafe-to-break" API.  Can be used to speed up reshaping
  in line-breaking situations.  Essentially, after shaping, it returns
  positions in the input string (some of the cluster boundaries) that
  are "safe to break" in that if the text is segmented at that position
  and two sides reshaped and concatenated, the shaping result is
  exactly the same as shaping the text in one piece.

  hb-view and hb-shape and hb-shape now take --verify, which verifies
  the above property.

  Some corner cases of the implementation are still not quite working.
  Those will be fixed in subsequent releases.

- New API:

hb_buffer_append()

hb_glyph_flags_t
HB_GLYPH_FLAG_UNSAFE_TO_BREAK
HB_GLYPH_FLAG_DEFINED
hb_glyph_info_get_glyph_flags()

HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS

hb_buffer_diff_flags_t
HB_BUFFER_DIFF_FLAG_EQUAL
HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH
HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH
HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT
HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH
HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH
HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH
HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH
hb_buffer_diff


Overview of changes leading to 1.4.8
Tuesday, August 8, 2017
====================================

- Major fix to avar table handling.
- Rename hb-shape --show-message to --trace.
- Build fixes.


Overview of changes leading to 1.4.7
Tuesday, July 18, 2017
====================================

- Multiple Indic, Tibetan, and Cham fixes.
- CoreText: Allow disabling kerning.
- Adjust Arabic feature order again.
- Misc build fixes.


Overview of changes leading to 1.4.6
Sunday, April 23, 2017
====================================

- Graphite2: Fix RTL positioning issue.
- Backlist GDEF of more versions of Padauk and Tahoma.
- New, experimental, cmake alternative build system.


Overview of changes leading to 1.4.5
Friday, March 10, 2017
====================================

- Revert "Fix Context lookup application when moving back after a glyph..."
  This introduced memory access problems.  To be fixed properly soon.


Overview of changes leading to 1.4.4
Sunday, March 5, 2017
====================================

- Fix Context lookup application when moving back after a glyph deletion.
- Fix buffer-overrun in Bengali.


Overview of changes leading to 1.4.3
Saturday, February 25, 2017
====================================

- Route Adlam script to Arabic shaper.
- Misc fixes.
- New API:
  hb_font_set_face()
- Deprecate API:
  hb_graphite2_font_get_gr_font()


Overview of changes leading to 1.4.2
Monday, January 23, 2017
====================================

- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR.
- hb-shape and hb-view now accept --variations.
- New API:

hb_variation_t
hb_variation_from_string()
hb_variation_to_string()

hb_font_set_variations()
hb_font_set_var_coords_design()
hb_font_get_var_coords_normalized()

hb-ot-var.h:
hb_ot_var_axis_t
hb_ot_var_has_data()
hb_ot_var_get_axis_count()
hb_ot_var_get_axes()
hb_ot_var_find_axis()
hb_ot_var_normalize_variations()
hb_ot_var_normalize_coords()

- MVAR to be implemented later.  Access to named instances to be
  implemented later as well.

- Misc fixes.


Overview of changes leading to 1.4.1
Thursday, January 5, 2017
====================================

- Always build and use UCDN for Unicode data by default.
  Reduces dependence on version of Unicode data in glib,
  specially in the Windows bundles we are shipping, which
  have very old glib.


Overview of changes leading to 1.4.0
Thursday, January 5, 2017
====================================

- Merged "OpenType GX" branch which adds core of support for
  OpenType 1.8 Font Variations.  To that extent, the relevant
  new API is:

New API:
hb_font_set_var_coords_normalized()

  with supporting API:

New API:
HB_OT_LAYOUT_NO_VARIATIONS_INDEX
hb_ot_layout_table_find_feature_variations()
hb_ot_layout_feature_with_variations_get_lookups()
hb_shape_plan_create2()
hb_shape_plan_create_cached2()

  Currently variations in GSUB/GPOS/GDEF are fully supported,
  and no other tables are supported.  In particular, fvar/avar
  are NOT supported, hence the hb_font_set_var_coords_normalized()
  taking normalized coordinates.  API to take design coordinates
  will be added in the future.

  HVAR/VVAR/MVAR support will also be added to hb-ot-font in the
  future.

- Fix regression in GDEF glyph class processing.
- Add decompositions for Chakma, Limbu, and Balinese in USE shaper.
- Misc fixes.


Overview of changes leading to 1.3.4
Monday, December 5, 2016
====================================

- Fix vertical glyph origin in hb-ot-font.
- Implement CBDT/CBLC color font glyph extents in hb-ot-font.


Overview of changes leading to 1.3.3
Wednesday, September 28, 2016
====================================

- Implement parsing of OpenType MATH table.
New API:
HB_OT_TAG_MATH
HB_OT_MATH_SCRIPT
hb_ot_math_constant_t
hb_ot_math_kern_t
hb_ot_math_glyph_variant_t
hb_ot_math_glyph_part_flags_t
hb_ot_math_glyph_part_t
hb_ot_math_has_data
hb_ot_math_get_constant
hb_ot_math_get_glyph_italics_correction
hb_ot_math_get_glyph_top_accent_attachment
hb_ot_math_get_glyph_kerning
hb_ot_math_is_glyph_extended_shape
hb_ot_math_get_glyph_variants
hb_ot_math_get_min_connector_overlap
hb_ot_math_get_glyph_assembly


Overview of changes leading to 1.3.2
Wednesday, September 27, 2016
====================================

- Fix build of hb-coretext on older OS X versions.


Overview of changes leading to 1.3.1
Wednesday, September 7, 2016
====================================

- Blacklist bad GDEF of more fonts (Padauk).
- More CoreText backend crash fixes with OS X 10.9.5.
- Misc fixes.


Overview of changes leading to 1.3.0
Thursday, July 21, 2016
====================================

- Update to Unicode 9.0.0
- Move Javanese from Indic shaper to Universal Shaping Engine.
- Allow MultipleSubst to delete a glyph (matching Windows engine).
- Update Universal Shaping Engine to latest draft from Microsoft.
- DirectWrite backend improvements.  Note: this backend is for testing ONLY.
- CoreText backend improvements with unreachable fonts.
- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font.
- Blacklist bad GDEF of more fonts (Tahoma & others).
- Misc fixes.


Overview of changes leading to 1.2.7
Monday, May 2, 2016
====================================

- Blacklist another version of Times New Roman (Bold) Italic from Windows 7.
- Fix Mongolian Free Variation Selectors shaping with certain fonts.
- Fix Tibetan shorthand contractions shaping.
- Improved list of language tag mappings.
- Unbreak build on Windows CE.
- Make 'glyf' table loading lazy in hb-ot-font.


Overview of changes leading to 1.2.6
Friday, April 8, 2016
====================================

- Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
- DirectWrite backend improvements.  Note: DirectWrite backend is
  exclusively for our internal testing and should NOT be used in any
  production system whatsoever.


Overview of changes leading to 1.2.5
Monday, April 4, 2016
====================================

- Fix GDEF mark-filtering-set, which was broken in 1.2.3.


Overview of changes leading to 1.2.4
Thursday, March 17, 2016
====================================

- Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
  I really hope we don't discover broken fonts that shape badly with this
  change.
- Misc build and other minor fixes.
- API changes:
  - Added HB_NDEBUG.  It's fine for production systems to define this to
    disable high-overhead debugging checks.  However, I also reduced the
    overhead of those checks, so it's a non-issue right now.  You can
    forget it.  Just not defining anything at all is fine.


Overview of changes leading to 1.2.3
Thursday, February 25, 2016
====================================

- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
  due to bug in glyph class of ASCII double-quote character.  This should
  address "regression" introduced in 1.2.0 when we switched mark zeroing
  in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
  This fourth release in a week should finally stabilize things...

- hb-ot-font's get_glyph() implementation saw some optimizations.  Though,
  might be really hard to measure in real-world situations.

- Also, two rather small API changes:

We now disable some time-consuming internal bookkeeping if built with NDEBUG
defined.  This is a first time that we use NDEBUG to disable debug code.  If
there exist production systems that do NOT want to enable NDEBUG, please let
me know and I'll add HB_NDEBUG.

Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()

New API:
- hb_font_get_nominal_glyph_func_t
- hb_font_get_variation_glyph_func_t
- hb_font_funcs_set_nominal_glyph_func()
- hb_font_funcs_set_variation_glyph_func()
- hb_font_get_nominal_glyph()
- hb_font_get_variation_glyph()

Deprecated API:
- hb_font_get_glyph_func_t
- hb_font_funcs_set_glyph_func()

Clients that implement their own font-funcs are encouraged to replace
their get_glyph() implementation with a get_nominal_glyph() and
get_variation_glyph() pair.  The variation version can assume that
variation_selector argument is not zero.  Old (deprecated) functions
will continue working indefinitely using internal gymnastics; it is
just more efficient to use the new functions.


Overview of changes leading to 1.2.2
Wednesday, February 24, 2016
====================================

- Fix regression with mark positioning with fonts that have
  non-zero mark advances.  This was introduced in 1.2.0 while
  trying to make mark and cursive attachments to work together.
  I have partially reverted that, so this version is much more
  like what we had before.  All clients who updated to 1.2.0
  should update to this version.


Overview of changes leading to 1.2.1
Tuesday, February 23, 2016
====================================

- CoreText: Fix bug with wrong scale if font scale was changed later.
  https://github.com/libass/libass/issues/212
- CoreText: Drastically speed up font initialization.
- CoreText: Fix tiny leak.
- Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
  https://github.com/harfbuzz/harfbuzz/issues/217
- Add test/shaping/README.md about how to add tests to the suite.


Overview of changes leading to 1.2.0
Friday, February 19, 2016
====================================

- Fix various issues (hangs mostly) in case of memory allocation failure.
- Change mark zeroing types of most shapers from BY_UNICODE_LATE to
  BY_GDEF_LATE.  This seems to be what Uniscribe does.
- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY.  That's
  what Windows does.
- Allow GPOS cursive connection on marks, and fix the interaction with
  mark attachment.  This work resulted in some changes to how mark
  attachments work.  See:
  https://github.com/harfbuzz/harfbuzz/issues/211
  https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401\
dc8b688d2
- Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
- Add nmake-based build system for Windows.
- Minor speedup.
- Misc. improvements.


Overview of changes leading to 1.1.3
Monday, January 11, 2016
====================================

- Ported Indic shaper to Unicode 8.0 data.
- Universal Shaping Engine fixes.
- Speed up CoreText shaper when font fallback happens in CoreText.
- Documentation improvements, thanks to Khaled Hosny.
- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
- Misc bug fixes.
- New API:

  * Font extents:
      hb_font_extents_t
      hb_font_get_font_extents_func_t
      hb_font_get_font_h_extents_func_t
      hb_font_get_font_v_extents_func_t
      hb_font_funcs_set_font_h_extents_func
      hb_font_funcs_set_font_v_extents_func
      hb_font_get_h_extents
      hb_font_get_v_extents
      hb_font_get_extents_for_direction

  * Buffer message (aka debug):
      hb_buffer_message_func_t
      hb_buffer_set_message_func()
    Actual message protocol to be fleshed out later.


Overview of changes leading to 1.1.2
Wednesday, November 26, 2015
====================================

- Fix badly-broken fallback shaper that affected terminology.
  https://github.com/harfbuzz/harfbuzz/issues/187
- Fix y_scaling in Graphite shaper.
- API changes:
  * An unset glyph_h_origin() function in font-funcs now (sensibly)
    implies horizontal origin at 0,0.  Ie, the nil callback returns
    true instead of false.  As such, implementations that have a
    glyph_h_origin() that simply returns true, can remove that function
    with HarfBuzz >= 1.1.2.  This results in a tiny speedup.


Overview of changes leading to 1.1.1
Wednesday, November 24, 2015
====================================

- Build fixes, specially for hb-coretext.


Overview of changes leading to 1.1.0
Wednesday, November 18, 2015
====================================

- Implement 'stch' stretch feature for Syriac Abbreviation Mark.
  https://github.com/harfbuzz/harfbuzz/issues/141
- Disable use of decompose_compatibility() callback.
- Implement "shaping" of various Unicode space characters, even
  if the font does not support them.
  https://github.com/harfbuzz/harfbuzz/issues/153
- If font does not support U+2011 NO-BREAK HYPHEN, fallback to
  U+2010 HYPHEN.
- Changes resulting from libFuzzer continuous fuzzing:
  * Reject font tables that need more than 8 edits,
  * Bound buffer growth during shaping to 32x,
  * Fix assertions and other issues at OOM / buffer max-growth.
- Misc fixes and optimizations.
- API changes:
  * All fonts created with hb_font_create() now inherit from
    (ie. have parent) hb_font_get_empty().


Overview of changes leading to 1.0.6
Thursday, October 15, 2015
====================================

- Reduce max nesting level in OT lookups from 8 to 6.
  Should not affect any real font as far as I know.
- Fix memory access issue in ot-font.
- Revert default load-flags of fonts created using hb_ft_font_create()
  back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING.  This was changed in
  last release (1.0.5), but caused major issues, so revert.
  https://github.com/harfbuzz/harfbuzz/issues/143


Overview of changes leading to 1.0.5
Tuesday, October 13, 2015
====================================

- Fix multiple memory access bugs discovered using libFuzzer.
  https://github.com/harfbuzz/harfbuzz/issues/139
  Everyone should upgrade to this version as soon as possible.
  We now have continuous fuzzing set up, to avoid issues like
  these creeping in again.
- Misc fixes.

- New API:
  * hb_font_set_parent().
  * hb_ft_font_[sg]et_load_flags()
    The default flags for fonts created using hb_ft_font_create()
    has changed to default to FT_LOAD_DEFAULT now.  Previously it
    was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.

- API changes:
  * Fonts now default to units-per-EM as their scale, instead of 0.
  * hb_font_create_sub_font() does NOT make parent font immutable
    anymore.  hb_font_make_immutable() does.


Overview of changes leading to 1.0.4
Wednesday, September 30, 2015
====================================

- Fix minor out-of-bounds read error.


Overview of changes leading to 1.0.3
Tuesday, September 1, 2015
====================================

- Start of user documentation, from Simon Cozens!
- Implement glyph_extents() for TrueType fonts in hb-ot-font.
- Improve GPOS cursive attachments with conflicting lookups.
- More fixes for cluster-level = 1.
- Uniscribe positioning fix.


Overview of changes leading to 1.0.2
Wednesday, August 19, 2015
====================================

- Fix shaping with cluster-level > 0.
- Fix Uniscribe backend font-size scaling.
- Declare dependencies in harfbuzz.pc.
  FreeType is not declared though, to avoid bugs in pkg-config
  0.26 with recursive dependencies.
- Slightly improved debug infrastructure.  More to come later.
- Misc build fixes.


Overview of changes leading to 1.0.1
Monday, July 27, 2015
====================================

- Fix out-of-bounds access in USE shaper.


Overview of changes leading to 1.0.0
Sunday, July 26, 2015
====================================

- Implement Universal Shaping Engine:
  https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
  http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worl\
ds-languages/
- Bump version to 1.0.0.  The soname was NOT bumped.


Overview of changes leading to 0.9.42
Thursday, July 26, 2015
=====================================

- New API to allow for retrieving finer-grained cluster
  mappings if the client desires to handle them.  Default
  behavior is unchanged.
- Fix cluster merging when removing default-ignorables.
- Update to Unicode 8.0
- hb-graphite2 fixes.
- Misc fixes.
- Removed HB_NO_MERGE_CLUSTERS hack.
- New API:
  hb_buffer_cluster_level_t enum
  hb_buffer_get_cluster_level()
  hb_buffer_set_cluster_level()
  hb-shape / hb-view --cluster-level


Overview of changes leading to 0.9.41
Thursday, June 18, 2015
=====================================

- Fix hb-coretext with trailing whitespace in right-to-left.
- New API: hb_buffer_reverse_range().
- Allow implementing atomic ops in config.h.
- Fix hb_language_t in language bindings.
- Misc fixes.


Overview of changes leading to 0.9.40
Friday, March 20, 2015
=====================================

- Another hb-coretext crasher fix.  Ouch!
- Happy Norouz!


Overview of changes leading to 0.9.39
Wednesday, March 4, 2015
=====================================

- Critical hb-coretext fixes.
- Optimizations and refactoring; no functional change
  expected.
- Misc build fixes.


Overview of changes leading to 0.9.38
Friday, January 23, 2015
=====================================

- Fix minor out-of-bounds access in Indic shaper.
- Change New Tai Lue shaping engine from South-East Asian to default,
  reflecting change in Unicode encoding model.
- Add hb-shape --font-size.  Can take up to two numbers for separate
  x / y size.
- Fix CoreText and FreeType scale issues with negative scales.
- Reject blobs larger than 2GB.  This might break some icu-le-hb clients
  that need security fixes.  See:
  http://www.icu-project.org/trac/ticket/11450
- Avoid accessing font tables during face destruction, in casce rogue
  clients released face data already.
- Fix up gobject-introspection a bit.  Python bindings kinda working.
  See README.python.
- Misc fixes.
- API additions:
  hb_ft_face_create_referenced()
  hb_ft_font_create_referenced()


Overview of changes leading to 0.9.37
Wednesday, December 17, 2014
=====================================

- Fix out-of-bounds access in Context lookup format 3.
- Indic: Allow ZWJ/ZWNJ before syllable modifiers.


Overview of changes leading to 0.9.36
Thursday, November 20, 2014
=====================================

- First time that three months went by without a release since
  0.9.2 was released on August 10, 2012!
- Fix performance bug in hb_ot_collect_glyphs():
  https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
- Add basic vertical-text support to hb-ot-font.
- Misc build fixes.


Overview of changes leading to 0.9.35
Saturday, August 13, 2014
=====================================

- Fix major shape-plan caching bug when more than one shaper were
  provided to hb_shape_full() (as exercised by XeTeX).
  http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.ht\
ml
- Fix Arabic fallback shaping regression.  This was broken in 0.9.32.
- Major hb-coretext fixes.  That backend is complete now, including
  respecing buffer direction and language, down to vertical writing.
- Build fixes for Windows CE.  Should build fine now.
- Misc fixes:
  Use atexit() only if it's safe to call from shared library
  https://bugs.freedesktop.org/show_bug.cgi?id=82246
  Mandaic had errors in its Unicode Joining_Type
  https://bugs.freedesktop.org/show_bug.cgi?id=82306
- API changes:

  * hb_buffer_clear_contents() does not reset buffer flags now.

    After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
    need to set flags for different pieces of text.  The flags now
    are something the client sets up once, depending on how it
    actually uses the buffer.  As such, don't clear it in
    clear_contents().

    I don't expect any changes to be needed to any existing client.


Overview of changes leading to 0.9.34
Saturday, August 2, 2014
=====================================

- hb_feature_from_string() now accepts CSS font-feature-settings format.
- As a result, hb-shape / hb-view --features also accept CSS-style strings.
  Eg, "'liga' off" is accepted now.
- Add old-spec Myanmar shaper:
  https://bugs.freedesktop.org/show_bug.cgi?id=81775
- Don't apply 'calt' in Hangul shaper.
- Fix mark advance zeroing for Hebrew shaper:
  https://bugs.freedesktop.org/show_bug.cgi?id=76767
- Implement Windows-1256 custom Arabic shaping.  Only built on Windows,
  and requires help from get_glyph().  Used by Firefox.
  https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
- Disable 'liga' in vertical text.
- Build fixes.
- API changes:

  * Make HB_BUFFER_FLAG_BOT/EOT easier to use.

    Previously, we expected users to provide BOT/EOT flags when the
    text *segment* was at paragraph boundaries.  This meant that for
    clients that provide full paragraph to HarfBuzz (eg. Pango), they
    had code like this:

      hb_buffer_set_flags (hb_buffer,
                           (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
                           (item_offset + item_length == paragraph_length ?
                            HB_BUFFER_FLAG_EOT : 0));

      hb_buffer_add_utf8 (hb_buffer,
                          paragraph_text, paragraph_length,
                          item_offset, item_length);

    After this change such clients can simply say:

      hb_buffer_set_flags (hb_buffer,
                           HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);

      hb_buffer_add_utf8 (hb_buffer,
                          paragraph_text, paragraph_length,
                          item_offset, item_length);

    Ie, HarfBuzz itself checks whether the segment is at the beginning/end
    of the paragraph.  Clients that only pass item-at-a-time to HarfBuzz
    continue not setting any flags whatsoever.

    Another way to put it is: if there's pre-context text in the buffer,
    HarfBuzz ignores the BOT flag.  If there's post-context, it ignores
    EOT flag.


Overview of changes leading to 0.9.33
Tuesday, July 22, 2014
=====================================

- Turn off ARabic 'cswh' feature that was accidentally turned on.
- Add HB_TAG_MAX_SIGNED.
- Make hb_face_make_immutable() really make face immutable!
- Windows build fixes.


Overview of changes leading to 0.9.32
Thursday, July 17, 2014
=====================================

- Apply Arabic shaping features in spec order exactly.
- Another fix for Mongolian free variation selectors.
- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
  together.
- Minor adjustment to U+FFFD logic.
- Fix hb-coretext build.


Overview of changes leading to 0.9.31
Wednesday, July 16, 2014
=====================================

- Only accept valid UTF-8/16/32; we missed many cases before.
- Better shaping of invalid UTF-8/16/32.  Falls back to
  U+FFFD REPLACEMENT CHARACTER now.
- With all changes in this release, the buffer will contain fully
  valid Unicode after hb_buffer_add_utf8/16/32 no matter how
  broken the input is.  This can be overridden though.  See below.
- Fix Mongolian Variation Selectors for fonts without GDEF.
- Fix minor invalid buffer access.
- Accept zh-Hant and zh-Hans language tags.  hb_ot_tag_to_language()
  now uses these instead of private tags.
- Build fixes.
- New API:
  * hb_buffer_add_codepoints().  This does what hb_buffer_add_utf32()
    used to do, ie. no validity check on the input at all.  add_utf32
    now replaces invalid Unicode codepoints with the replacement
    character (see below).
  * hb_buffer_set_replacement_codepoint()
  * hb_buffer_get_replacement_codepoint()
    Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
    we detected broken input, we replaced that with (hb_codepoint_t)-1.
    This has changed to use U+FFFD now, but can be changed using these
    new API.


Overview of changes leading to 0.9.30
Wednesday, July 9, 2014
=====================================

- Update to Unicode 7.0.0:
  * New scripts Manichaean and Psalter Pahlavi are shaped using
    Arabic shaper.
  * All the other new scripts to through the generic shaper for
    now.
- Minor Indic improvements.
- Fix graphite2 backend cluster mapping [crasher!]
- API changes:
  * New HB_SCRIPT_* values for Unicode 7.0 scripts.
  * New function hb_ot_layout_language_get_required_feature().
- Build fixes.


Overview of changes leading to 0.9.29
Thursday, May 29, 2014
=====================================

- Implement cmap in hb-ot-font.h.  No variation-selectors yet.
- Myanmar: Allow MedialYa+Asat.
- Various Indic fixes:
  * Support most characters in Extended Devanagary and Vedic
    Unicode blocks.
  * Allow digits and a some punctuation as consonant placeholders.
- Build fixes.


Overview of changes leading to 0.9.28
Monday, April 28, 2014
=====================================

- Unbreak old-spec Indic shaping. (bug 76705)
- Fix shaping of U+17DD and U+0FC6.
- Add HB_NO_MERGE_CLUSTERS build option.  NOT to be enabled by default
  for shipping libraries.  It's an option for further experimentation
  right now.  When we are sure how to do it properly, we will add
  public run-time API for the functionality.
- Build fixes.


Overview of changes leading to 0.9.27
Tuesday, March 18, 2014
=====================================

- Don't use "register" storage class specifier
- Wrap definition of free_langs() with HAVE_ATEXIT
- Add coretext_aat shaper and hb_coretext_face_create() constructor
- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
- Add Myanmar test case from OpenType Myanmar spec
- Only do fallback Hebrew composition if no GPOS 'mark' available
- Allow bootstrapping without gtk-doc
- Use AM_MISSING_PROG for ragel and git
- Typo in ucdn's Makefile.am
- Improve MemoryBarrier() implementation


Overview of changes leading to 0.9.26
Thursday, January 30, 2014
=====================================

- Misc fixes.
- Fix application of 'rtlm' feature.
- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
- New header: hb-ot-shape.h
- Uniscribe: fix scratch-buffer accounting.
- Reorder Tai Tham SAKOT to after tone-marks.
- Add Hangul shaper.
- New files:
  hb-ot-shape-complex-hangul.cc
  hb-ot-shape-complex-hebrew.cc
  hb-ot-shape-complex-tibetan.cc
- Disable 'cswh' feature in Arabic shaper.
- Coretext: better handle surrogate pairs.
- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.


Overview of changes leading to 0.9.25
Wednesday, December 4, 2013
=====================================

- Myanmar shaper improvements.
- Avoid font fallback in CoreText backend.
- Additional OpenType language tag mappiongs.
- More aggressive shape-plan caching.
- Build with / require automake 1.13.
- Build with libtool 2.4.2.418 alpha to support ppc64le.


Overview of changes leading to 0.9.24
Tuesday, November 13, 2013
=====================================

- Misc compiler warning fixes with clang.
- No functional changes.


Overview of changes leading to 0.9.23
Monday, October 28, 2013
=====================================

- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
- Fix (Chain)Context recursion with non-monotone lookup positions.
- Misc Indic bug fixes.
- New Javanese / Buginese shaping, similar to Windows 8.1.


Overview of changes leading to 0.9.22
Thursday, October 3, 2013
=====================================

- Fix use-after-end-of-scope in hb_language_from_string().
- Fix hiding of default_ignorables if font doesn't have space glyph.
- Protect against out-of-range lookup indices.

- API Changes:

  * Added hb_ot_layout_table_get_lookup_count()


Overview of changes leading to 0.9.21
Monday, September 16, 2013
=====================================

- Rename gobject-introspection library name from harfbuzz to HarfBuzz.
- Remove (long disabled) hb-old and hb-icu-le test shapers.
- Misc gtk-doc and gobject-introspection annotations.
- Misc fixes.
- API changes:

  * Add HB_SET_VALUE_INVALID

Overview of changes leading to 0.9.20
Thursday, August 29, 2013
=====================================

General:
- Misc substitute_closure() fixes.
- Build fixes.

Documentation:
- gtk-doc boilerplate integrated.  Docs are built now, but
  contain no contents.  By next release hopefully we have
  some content in.  Enable using --enable-gtk-doc.

GObject and Introspection:
- Added harfbuzz-gobject library (hb-gobject.h) that has type
  bindings for all HarfBuzz objects and enums.  Enable using
  --with-gobject.
- Added gobject-introspection boilerplate.  Nothing useful
  right now.  Work in progress.  Gets enabled automatically if
  --with-gobject is used.  Override with --disable-introspection.

OpenType shaper:
- Apply 'mark' in Myanmar shaper.
- Don't apply 'dlig' by default.

Uniscribe shaper:
- Support user features.
- Fix loading of fonts that are also installed on the system.
- Fix shaping of Arabic Presentation Forms.
- Fix build with wide chars.

CoreText shaper:
- Support user features.

Source changes:
- hb_face_t code moved to hb-face.h / hb-face.cc.
- Added hb-deprecated.h.

API changes:
- Added HB_DISABLE_DEPRECATED.
- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
  HB_SCRIPT_CANADIAN_SYLLABICS.
- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
  HB_BUFFER_FLAG_DEFAULT.
- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
  HB_BUFFER_SERIALIZE_FLAG_DEFAULT.


Overview of changes leading to 0.9.19
Tuesday, July 16, 2013
=====================================

- Build fixes.
- Better handling of multiple variation selectors in a row.
- Pass on variation selector to GSUB if not consumed by cmap.
- Fix undefined memory access.
- Add Javanese config to Indic shaper.
- Misc bug fixes.

Overview of changes leading to 0.9.18
Tuesday, May 28, 2013
=====================================

New build system:

- All unneeded code is all disabled by default,

- Uniscribe and CoreText shapers can be enabled with their --with options,

- icu_le and old shapers cannot be enabled for now,

- glib, freetype, and cairo will be detected automatically.
  They can be force on/off'ed with their --with options,

- icu and graphite2 are default off, can be enabled with their --with
  options,

Moreover, ICU support is now build into a separate library:
libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
Distros can enable ICU now without every application on earth
getting linked to via libharfbuzz.so.

For distros I recommend that they make sure they are building --with-glib
--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
And package harfbuzz and harfbuzz-icu separately.


Overview of changes leading to 0.9.17
Monday, May 20, 2013
=====================================

- Build fixes.
- Fix bug in hb_set_get_min().
- Fix regression with Arabic mark positioning / width-zeroing.

Overview of changes leading to 0.9.16
Friday, April 19, 2013
=====================================

- Major speedup in OpenType lookup processing.  With the Amiri
  Arabic font, this release is over 3x faster than previous
  release.  All scripts / languages should see this speedup.

- New --num-iterations option for hb-shape / hb-view; useful for
  profiling.

Overview of changes leading to 0.9.15
Friday, April 05, 2013
=====================================

- Build fixes.
- Fix crasher in graphite2 shaper.
- Fix Arabic mark width zeroing regression.
- Don't compose Hangul jamo into Unicode syllables.


Overview of changes leading to 0.9.14
Thursday, March 21, 2013
=====================================

- Build fixes.
- Fix time-consuming sanitize with malicious fonts.
- Implement hb_buffer_deserialize_glyphs() for both json and text.
- Do not ignore Hangul filler characters.
- Indic fixes:
  * Fix Malayalam pre-base reordering interaction with post-forms.
  * Further adjust ZWJ handling.  Should fix known regressions from
    0.9.13.


Overview of changes leading to 0.9.13
Thursday, February 25, 2013
=====================================

- Build fixes.
- Ngapi HarfBuzz Hackfest in London (February 2013):
  * Fixed all known Indic bugs,
  * New Win8-style Myanmar shaper,
  * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
  * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
    matching GSUB/GPOS lookups,
  * Fix 'Phags-Pa U+A872 shaping,
  * Fix partial disabling of default-on features,
  * Allow disabling of TrueType kerning.
- Fix possible crasher with broken fonts with overlapping tables.
- Removed generated files from git again.  So, one needs ragel to
  bootstrap from the git tree.

API changes:
- hb_shape() and related APIs now abort if buffer direction is
  HB_DIRECTION_INVALID.  Previously, hb_shape() was calling
  hb_buffer_guess_segment_properties() on the buffer before
  shaping.  The heuristics in that function are fragile.  If the
  user really wants the old behvaior, they can call that function
  right before calling hb_shape() to get the old behavior.
- hb_blob_create_sub_blob() always creates sub-blob with
  HB_MEMORY_MODE_READONLY.  See comments for the reason.


Overview of changes leading to 0.9.12
Thursday, January 18, 2013
=====================================

- Build fixes for Sun compiler.
- Minor bug fix.

Overview of changes leading to 0.9.11
Thursday, January 10, 2013
=====================================

- Build fixes.
- Fix GPOS mark attachment with null Anchor offsets.
- [Indic] Fix old-spec reordering of viramas if sequence ends in one.
- Fix multi-threaded shaper data creation crash.
- Add atomic ops for Solaris.

API changes:
- Rename hb_buffer_clear() to hb_buffer_clear_contents().


Overview of changes leading to 0.9.10
Thursday, January 3, 2013
=====================================

- [Indic] Fixed rendering of Malayalam dot-reph
- Updated OT language tags.
- Updated graphite2 backend.
- Improved hb_ot_layout_get_size_params() logic.
- Improve hb-shape/hb-view help output.
- Fixed hb-set.h implementation to not crash.
- Fixed various issues with hb_ot_layout_collect_lookups().
- Various build fixes.

New API:

hb_graphite2_face_get_gr_face()
hb_graphite2_font_get_gr_font()
hb_coretext_face_get_cg_font()

Modified API:

hb_ot_layout_get_size_params()


Overview of changes leading to 0.9.9
Wednesday, December 5, 2012
====================================

- Fix build on Windows.
- Minor improvements.


Overview of changes leading to 0.9.8
Tuesday, December 4, 2012
====================================


- Actually implement hb_shape_plan_get_shaper ().
- Make UCDB data tables const.
- Lots of internal refactoring in OTLayout tables.
- Flesh out hb_ot_layout_lookup_collect_glyphs().

New API:

hb_ot_layout_collect_lookups()
hb_ot_layout_get_size_params()


Overview of changes leading to 0.9.7
Sunday, November 21, 2012
====================================


HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.

- Fix Arabic contextual joining using pre-context text.
- Fix Sinhala "split matra" mess.
- Fix Khmer shaping with broken fonts.
- Implement Thai "PUA" shaping for old fonts.
- Do NOT route Kharoshthi script through the Indic shaper.
- Disable fallback positioning for Indic and Thai shapers.
- Misc fixes.


hb-shape / hb-view changes:

- Add --text-before and --text-after
- Add --bot / --eot / --preserve-default-ignorables
- hb-shape --output-format=json


New API:

hb_buffer_clear()

hb_buffer_flags_t

HB_BUFFER_FLAGS_DEFAULT
HB_BUFFER_FLAG_BOT
HB_BUFFER_FLAG_EOT
HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES

hb_buffer_set_flags()
hb_buffer_get_flags()

HB_BUFFER_SERIALIZE_FLAGS
hb_buffer_serialize_glyphs()
hb_buffer_deserialize_glyphs()
hb_buffer_serialize_list_formats()

hb_set_add_range()
hb_set_del_range()
hb_set_get_population()
hb_set_next_range()

hb_face_[sg]et_glyph_count()

hb_segment_properties_t
HB_SEGMENT_PROPERTIES_DEFAULT
hb_segment_properties_equal()
hb_segment_properties_hash()

hb_buffer_set_segment_properties()
hb_buffer_get_segment_properties()

hb_ot_layout_glyph_class_t
hb_ot_layout_get_glyph_class()
hb_ot_layout_get_glyphs_in_class()

hb_shape_plan_t
hb_shape_plan_create()
hb_shape_plan_create_cached()
hb_shape_plan_get_empty()
hb_shape_plan_reference()
hb_shape_plan_destroy()
hb_shape_plan_set_user_data()
hb_shape_plan_get_user_data()
hb_shape_plan_execute()
hb_shape_plan_get_shaper()

hb_ot_shape_plan_collect_lookups()


API changes:

- Remove "mask" parameter from hb_buffer_add().
- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_c\
losure_lookup().
- hb-set.h API const correction.
- Renamed hb_set_min/max() to hb_set_get_min/max().
- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_ge\
t_lookups().
- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().



Overview of changes leading to 0.9.6
Sunday, November 13, 2012
====================================

- Don't clear pre-context text if no new context is provided.
- Fix ReverseChainingSubstLookup, which was totally borked.
- Adjust output format of hb-shape a bit.
- Include config.h.in in-tree.  Makes it easier for alternate build systems.
- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
- Use ICU LayoutEngine's C API instead of C++.  Avoids much headache.
- Drop glyphs for all of Unicode Default_Ignorable characters.
- Misc build fixes.

Arabic shaper:
- Enable 'dlig' and 'mset' features in Arabic shaper.
- Implement 'Phags-pa shaping, improve Mongolian.

Indic shaper:
- Decompose Sinhala split matras the way old HarfBuzz / Pango did.
- Initial support for Consonant Medials.
- Start adding new-style Myanmar shaping.
- Make reph and 'pref' logic introspect the font.
- Route Meetei-Mayek through the Indic shaper.
- Don't apply 'liga' in Indic shaper.
- Improve Malayalam pre-base reordering Ra interaction with Chillus.



Overview of changes leading to 0.9.5
Sunday, October 14, 2012
====================================

- Synthetic-GSUB Arabic fallback shaping.

- Misc Indic improvements.

- Add build system support for pthread.

- Imported UCDN for in-tree Unicode callbacks implementation.

- Context-aware Arabic joining.

- Misc other fixes.

- New API:

  hb_feature_to/from-string()
  hb_buffer_[sg]et_content_type()



Overview of changes leading to 0.9.4
Tuesday, Sep 03, 2012
====================================

- Indic improvements with old-spec Malayalam.

- Better fallback glyph positioning, specially with Thai / Lao marks.

- Implement dotted-circle insertion.

- Better Arabic fallback shaping / ligation.

- Added ICU LayoutEngine backend for testing.  Call it by the 'icu_le' name.

- Misc fixes.



Overview of changes leading to 0.9.3
Friday, Aug 18, 2012
====================================

- Fixed fallback mark positioning for left-to-right text.

- Improve mark positioning for the remaining combining classes.

- Unbreak Thai and fallback Arabic shaping.

- Port Arabic shaper to shape-plan caching.

- Use new ICU normalizer functions.



Overview of changes leading to 0.9.2
Friday, Aug 10, 2012
====================================

- Over a thousand commits!  This is the first major release of HarfBuzz.

- HarfBuzz is feature-complete now!  It should be in par, or better, than
  both Pango's shapers and old HarfBuzz / Qt shapers.

- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.

- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
  Sinhala, N'ko, Mongolian, and Mandaic.

- New Thai / Lao shaper.

- Tibetan / Hangul support in the generic shaper.

- Synthetic GDEF support for fonts without a GDEF table.

- Fallback mark positioning for fonts without a GPOS table.

- Unicode normalization shaping heuristic during glyph mapping.

- New experimental Graphite2 backend.

- New Uniscribe backend (primarily for testing).

- New CoreText backend (primarily for testing).

- Major optimization and speedup.

- Test suites and testing infrastructure (work in progress).

- Greatly improved hb-view cmdline tool.

- hb-shape cmdline tool.

- Unicode 6.1 support.

Summary of API changes:

o Changed API:

  - Users are expected to only include main header files now (ie. hb.h,
    hb-glib.h, hb-ft.h, ...)

  - All struct tag names had their initial underscore removed.
    Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.

  - All set_user_data() functions now take a "replace" boolean parameter.

  - hb_buffer_create() takes zero arguments now.
    Use hb_buffer_pre_allocate() to pre-allocate.

  - hb_buffer_add_utf*() now accept -1 for length parameters,
    meaning "nul-terminated".

  - hb_direction_t enum values changed.

  - All *_from_string() APIs now take a length parameter to allow for
    non-nul-terminated strings. A -1 length means "nul-terminated".

  - Typedef for hb_language_t changed.

  - hb_get_table_func_t renamed to hb_reference_table_func_t.

  - hb_ot_layout_table_choose_script()

  - Various renames in hb-unicode.h.

o New API:

  - hb_buffer_guess_properties()
    Automatically called by hb_shape().

  - hb_buffer_normalize_glyphs()

  - hb_tag_from_string()

  - hb-coretext.h

  - hb-uniscribe.h

  - hb_face_reference_blob()
  - hb_face_[sg]et_index()
  - hb_face_set_upem()

  - hb_font_get_glyph_name_func_t
    hb_font_get_glyph_from_name_func_t
    hb_font_funcs_set_glyph_name_func()
    hb_font_funcs_set_glyph_from_name_func()
    hb_font_get_glyph_name()
    hb_font_get_glyph_from_name()
    hb_font_glyph_to_string()
    hb_font_glyph_from_string()

  - hb_font_set_funcs_data()

  - hb_ft_font_set_funcs()
  - hb_ft_font_get_face()

  - hb-gobject.h (work in progress)

  - hb_ot_shape_glyphs_closure()
    hb_ot_layout_substitute_closure_lookup()

  - hb-set.h

  - hb_shape_full()

  - hb_unicode_combining_class_t

  - hb_unicode_compose_func_t
    hb_unicode_decompose_func_t
    hb_unicode_decompose_compatibility_func_t
    hb_unicode_funcs_set_compose_func()
    hb_unicode_funcs_set_decompose_func()
    hb_unicode_funcs_set_decompose_compatibility_func()
    hb_unicode_compose()
    hb_unicode_decompose()
    hb_unicode_decompose_compatibility()

o Removed API:

  - hb_ft_get_font_funcs()

  - hb_ot_layout_substitute_start()
    hb_ot_layout_substitute_lookup()
    hb_ot_layout_substitute_finish()
    hb_ot_layout_position_start()
    hb_ot_layout_position_lookup()
    hb_ot_layout_position_finish()



Overview of changes leading to 0.6.0
Friday, May 27, 2011
====================================

- Vertical text support in GPOS
- Almost all API entries have unit tests now, under test/
- All thread-safety issues are fixed

Summary of API changes follows.


* Simple Types API:

  o New API:
    HB_LANGUAGE_INVALID
    hb_language_get_default()
    hb_direction_to_string()
    hb_direction_from_string()
    hb_script_get_horizontal_direction()
    HB_UNTAG()

  o Renamed API:
    hb_category_t renamed to hb_unicode_general_category_t

  o Changed API:
    hb_language_t is a typed pointers now

  o Removed API:
    HB_TAG_STR()


* Use ISO 15924 tags for hb_script_t:

  o New API:
    hb_script_from_iso15924_tag()
    hb_script_to_iso15924_tag()
    hb_script_from_string()

  o Changed API:
    HB_SCRIPT_* enum members changed value.


* Buffer API streamlined:

  o New API:
    hb_buffer_reset()
    hb_buffer_set_length()
    hb_buffer_allocation_successful()

  o Renamed API:
    hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
    hb_buffer_add_glyph() renamed to hb_buffer_add()

  o Removed API:
    hb_buffer_clear()
    hb_buffer_clear_positions()

  o Changed API:
    hb_buffer_get_glyph_infos() takes an out length parameter now
    hb_buffer_get_glyph_positions() takes an out length parameter now


* Blob API streamlined:

  o New API:
    hb_blob_get_data()
    hb_blob_get_data_writable()

  o Renamed API:
    hb_blob_create_empty() renamed to hb_blob_get_empty()

  o Removed API:
    hb_blob_lock()
    hb_blob_unlock()
    hb_blob_is_writable()
    hb_blob_try_writable()

  o Changed API:
    hb_blob_create() takes user_data before destroy now


* Unicode functions API:

  o Unicode function vectors can subclass other unicode function vectors now.
    Unimplemented callbacks in the subclass automatically chainup to the\
 parent.

  o All hb_unicode_funcs_t callbacks take a user_data now.  Their setters
    take a user_data and its respective destroy callback.

  o New API:
    hb_unicode_funcs_get_empty()
    hb_unicode_funcs_get_default()
    hb_unicode_funcs_get_parent()

  o Changed API:
    hb_unicode_funcs_create() now takes a parent_funcs.

  o Removed func getter functions:
    hb_unicode_funcs_get_mirroring_func()
    hb_unicode_funcs_get_general_category_func()
    hb_unicode_funcs_get_script_func()
    hb_unicode_funcs_get_combining_class_func()
    hb_unicode_funcs_get_eastasian_width_func()


* Face API:

  o Renamed API:
    hb_face_get_table() renamed to hb_face_reference_table()
    hb_face_create_for_data() renamed to hb_face_create()

  o Changed API:
    hb_face_create_for_tables() takes user_data before destroy now
    hb_face_reference_table() returns empty blob instead of NULL
    hb_get_table_func_t accepts the face as first parameter now

* Font API:

  o Fonts can subclass other fonts now.  Unimplemented callbacks in the
    subclass automatically chainup to the parent.  When chaining up,
    scale is adjusted if the parent font has a different scale.

  o All hb_font_funcs_t callbacks take a user_data now.  Their setters
    take a user_data and its respective destroy callback.

  o New API:
    hb_font_get_parent()
    hb_font_funcs_get_empty()
    hb_font_create_sub_font()

  o Removed API:
    hb_font_funcs_copy()
    hb_font_unset_funcs()

  o Removed func getter functions:
    hb_font_funcs_get_glyph_func()
    hb_font_funcs_get_glyph_advance_func()
    hb_font_funcs_get_glyph_extents_func()
    hb_font_funcs_get_contour_point_func()
    hb_font_funcs_get_kerning_func()

  o Changed API:
    hb_font_create() takes a face and references it now
    hb_font_set_funcs() takes user_data before destroy now
    hb_font_set_scale() accepts signed integers now
    hb_font_get_contour_point_func_t now takes glyph first, then point_index
    hb_font_get_glyph_func_t returns a success boolean now


* Changed object model:

  o All object types have a _get_empty() now:
    hb_blob_get_empty()
    hb_buffer_get_empty()
    hb_face_get_empty()
    hb_font_get_empty()
    hb_font_funcs_get_empty()
    hb_unicode_funcs_get_empty()

  o Added _set_user_data() and _get_user_data() for all object types:
    hb_blob_get_user_data()
    hb_blob_set_user_data()
    hb_buffer_get_user_data()
    hb_buffer_set_user_data()
    hb_face_get_user_data()
    hb_face_set_user_data()
    hb_font_funcs_get_user_data()
    hb_font_funcs_set_user_data()
    hb_font_get_user_data()
    hb_font_set_user_data()
    hb_unicode_funcs_get_user_data()
    hb_unicode_funcs_set_user_data()

  o Removed the _get_reference_count() from all object types:
    hb_blob_get_reference_count()
    hb_buffer_get_reference_count()
    hb_face_get_reference_count()
    hb_font_funcs_get_reference_count()
    hb_font_get_reference_count()
    hb_unicode_funcs_get_reference_count()

  o Added _make_immutable() and _is_immutable() for all object types except\
 for buffer:
    hb_blob_make_immutable()
    hb_blob_is_immutable()
    hb_face_make_immutable()
    hb_face_is_immutable()


* Changed API for vertical text support

  o The following callbacks where removed:
    hb_font_get_glyph_advance_func_t
    hb_font_get_kerning_func_t

  o The following new callbacks added instead:
    hb_font_get_glyph_h_advance_func_t
    hb_font_get_glyph_v_advance_func_t
    hb_font_get_glyph_h_origin_func_t
    hb_font_get_glyph_v_origin_func_t
    hb_font_get_glyph_h_kerning_func_t
    hb_font_get_glyph_v_kerning_func_t

  o The following API removed as such:
    hb_font_funcs_set_glyph_advance_func()
    hb_font_funcs_set_kerning_func()
    hb_font_get_glyph_advance()
    hb_font_get_kerning()

  o New API added instead:
    hb_font_funcs_set_glyph_h_advance_func()
    hb_font_funcs_set_glyph_v_advance_func()
    hb_font_funcs_set_glyph_h_origin_func()
    hb_font_funcs_set_glyph_v_origin_func()
    hb_font_funcs_set_glyph_h_kerning_func()
    hb_font_funcs_set_glyph_v_kerning_func()
    hb_font_get_glyph_h_advance()
    hb_font_get_glyph_v_advance()
    hb_font_get_glyph_h_origin()
    hb_font_get_glyph_v_origin()
    hb_font_get_glyph_h_kerning()
    hb_font_get_glyph_v_kerning()

  o The following higher-leve API added for convenience:
    hb_font_get_glyph_advance_for_direction()
    hb_font_get_glyph_origin_for_direction()
    hb_font_add_glyph_origin_for_direction()
    hb_font_subtract_glyph_origin_for_direction()
    hb_font_get_glyph_kerning_for_direction()
    hb_font_get_glyph_extents_for_origin()
    hb_font_get_glyph_contour_point_for_origin()


* OpenType Layout API:

  o New API:
    hb_ot_layout_position_start()
    hb_ot_layout_substitute_start()
    hb_ot_layout_substitute_finish()


* Glue code:

  o New API:
    hb_glib_script_to_script()
    hb_glib_script_from_script()
    hb_icu_script_to_script()
    hb_icu_script_from_script()


* Version API added:

  o New API:
    HB_VERSION_MAJOR
    HB_VERSION_MINOR
    HB_VERSION_MICRO
    HB_VERSION_STRING
    HB_VERSION_CHECK()
    hb_version()
    hb_version_string()
    hb_version_check()



\
changes-type: text/plain
url: https://github.com/harfbuzz/harfbuzz/wiki
doc-url: https://harfbuzz.github.io/
src-url: https://github.com/harfbuzz/harfbuzz
package-url: https://github.com/build2-packaging/harfbuzz
email: harfbuzz@lists.freedesktop.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libfreetype ^2.11.1
depends: libicuuc >= 65.1.0
bootstrap-build:
\
project = libharfbuzz

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = hh
cxx{*}: extension = cc

h{*}: c.importable = true
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: harfbuzz/libharfbuzz-4.2.0.tar.gz
sha256sum: e19fdddb072d0ec2ceb73a094631a40b52475c4c3f56cda3a05bba55bcaf652b
:
name: libhello
version: 1.0.0+13
language: c++
project: hello
summary: The "Hello World" example library
license: MIT; MIT License.
topics: hello world example
description:
\
# libhello

A simple library that implements the "Hello World" example in C++. Its primary
goal is to show a canonical `build2`/`bpkg` project/package.

\
description-type: text/markdown;variant=GFM
url: https://git.build2.org/cgit/hello/libhello
src-url: https://git.build2.org/cgit/hello/libhello/tree/libhello?h=1.0
email: users@build2.org
build-warning-email: builds@build2.org
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
builds: all
bootstrap-build:
\
project = libhello

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: hello/libhello-1.0.0+13.tar.gz
sha256sum: 28b71740eed97e92c1215dbb5326190625aa5165d58fcd27f20933d7d2565ce5
:
name: libicui18n
version: 65.1.0+11
upstream-version: 65.1
project: icu
summary: ICU high-level internationalization C/C++ library
license: Unicode-DFS-2016 AND BSD-3-Clause AND BSD-2-Clause; Unicode License\
 Agreement for the most of original files.
topics: C, C++, Unicode, internationalization
description:
\
International Components for Unicode (ICU) is a set of cross-platform Unicode-
based globalization libraries with libicui18n C/C++ library providing high-
level internationalization support (formatting, collation, etc). For more
information see:

http://site.icu-project.org/

This package contains the original libicui18n library source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about library itself to the
ICU mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of libicui18n for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/icu/

\
description-type: text/plain
url: http://site.icu-project.org/
doc-url: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/libicui18n/
package-url: https://git.build2.org/cgit/packaging/icu/
email: icu-support@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libicuuc == 65.1.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Unicode License; see accompanying LICENSE file

project = libicui18n

using version
using config
using test
using install
using dist

# Sync with the libicuuc library ABI version (see libicuuc's bootstrap.build
# for details).
#
abi_version_major = "$version.major"
abi_version_patch = ($version.patch != 0 ? ".$version.patch" : "")
abi_version       = "$abi_version_major.$version.minor$abi_version_patch"

\
root-build:
\
# file      : build/root.build
# license   : Unicode License; see accompanying LICENSE file

# Note that upstream compiles with -std=c++11 but this ends up with the 'auto
# return without trailing return type' error for Clang targeting MSVC runtime.
#
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
debian-name: libicu-dev
fedora-name: libicu-devel
location: icu/libicui18n-65.1.0+11.tar.gz
sha256sum: 8420b51f867549f0c55be5eb9b225180f488436eb363fec8b70aa71ed6f400f6
:
name: libicui18n
version: 74.2.0+3
upstream-version: 74.2
project: icu
summary: ICU high-level internationalization C/C++ library
license: Unicode-3.0 AND BSD-3-Clause AND BSD-2-Clause; Unicode License V3\
 for most of the original files.
topics: C, C++, Unicode, internationalization
description:
\
International Components for Unicode (ICU) is a set of cross-platform Unicode-
based globalization libraries with libicui18n C/C++ library providing high-
level internationalization support (formatting, collation, etc). For more
information see:

http://site.icu-project.org/

This package contains the original libicui18n library source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about library itself to the
ICU mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of libicui18n for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/icu/

\
description-type: text/plain
url: http://site.icu-project.org/
doc-url: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/libicui18n/
package-url: https://git.build2.org/cgit/packaging/icu/
email: icu-support@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
depends: libicuuc == 74.2.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Unicode License; see accompanying LICENSE file

project = libicui18n

using version
using config
using test
using install
using dist

# Sync with the libicuuc library ABI version (see libicuuc's bootstrap.build
# for details).
#
abi_version_major = "$version.major"
abi_version_patch = ($version.patch != 0 ? ".$version.patch" : "")
abi_version       = "$abi_version_major.$version.minor$abi_version_patch"

\
root-build:
\
# file      : build/root.build
# license   : Unicode License; see accompanying LICENSE file

# Note that upstream compiles with -std=c++11 but this ends up with the 'auto
# return without trailing return type' error for Clang targeting MSVC runtime.
#
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: libicu-dev
fedora-name: libicu-devel
location: icu/libicui18n-74.2.0+3.tar.gz
sha256sum: ff8b09653ebb06a974c2be680024c13acc4654b37057cecd25b20a875aa1befc
:
name: libicuio
version: 65.1.0+11
upstream-version: 65.1
project: icu
summary: ICU input/output C/C++ library
license: Unicode-DFS-2016 AND BSD-3-Clause AND BSD-2-Clause; Unicode License\
 Agreement for the most of original files.
topics: C, C++, Unicode, internationalization, input/output
description:
\
International Components for Unicode (ICU) is a set of cross-platform Unicode-
based globalization libraries with libicuio C/C++ library providing
input/output support (writing Unicode string to std::ostream, etc). For more
information see:

http://site.icu-project.org/

This package contains the original libicuio library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about library itself to the
ICU mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of libicuio for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/icu/

\
description-type: text/plain
url: http://site.icu-project.org/
doc-url: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/libicuio/
package-url: https://git.build2.org/cgit/packaging/icu/
email: icu-support@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libicuuc == 65.1.0
depends: libicui18n == 65.1.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Unicode License; see accompanying LICENSE file

project = libicuio

using version
using config
using test
using install
using dist

# Sync with the libicuuc library ABI version (see libicuuc's bootstrap.build
# for details).
#
abi_version_major = "$version.major"
abi_version_patch = ($version.patch != 0 ? ".$version.patch" : "")
abi_version       = "$abi_version_major.$version.minor$abi_version_patch"

\
root-build:
\
# file      : build/root.build
# license   : Unicode License; see accompanying LICENSE file

# Note that upstream compiles with -std=c++11 but this ends up with the 'auto
# return without trailing return type' error for Clang targeting MSVC runtime.
#
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
debian-name: libicu-dev
fedora-name: libicu-devel
location: icu/libicuio-65.1.0+11.tar.gz
sha256sum: 8920269e099181c946e08f0a5ee3ff50de0d6b44c965f7f8d024d5cec57fda55
:
name: libicuio
version: 74.2.0+3
upstream-version: 74.2
project: icu
summary: ICU input/output C/C++ library
license: Unicode-3.0 AND BSD-3-Clause AND BSD-2-Clause; Unicode License V3\
 for most of the original files.
topics: C, C++, Unicode, internationalization, input/output
description:
\
International Components for Unicode (ICU) is a set of cross-platform Unicode-
based globalization libraries with libicuio C/C++ library providing
input/output support (writing Unicode string to std::ostream, etc). For more
information see:

http://site.icu-project.org/

This package contains the original libicuio library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about library itself to the
ICU mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of libicuio for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/icu/

\
description-type: text/plain
url: http://site.icu-project.org/
doc-url: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/libicuio/
package-url: https://git.build2.org/cgit/packaging/icu/
email: icu-support@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
depends: libicuuc == 74.2.0
depends: libicui18n == 74.2.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Unicode License; see accompanying LICENSE file

project = libicuio

using version
using config
using test
using install
using dist

# Sync with the libicuuc library ABI version (see libicuuc's bootstrap.build
# for details).
#
abi_version_major = "$version.major"
abi_version_patch = ($version.patch != 0 ? ".$version.patch" : "")
abi_version       = "$abi_version_major.$version.minor$abi_version_patch"

\
root-build:
\
# file      : build/root.build
# license   : Unicode License; see accompanying LICENSE file

# Note that upstream compiles with -std=c++11 but this ends up with the 'auto
# return without trailing return type' error for Clang targeting MSVC runtime.
#
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: libicu-dev
fedora-name: libicu-devel
location: icu/libicuio-74.2.0+3.tar.gz
sha256sum: 666bcd823f62cb42c361b9aa573cc0c4ac1732129f1ee6fb74ce5a8a7fddb569
:
name: libicuuc
version: 65.1.0+11
upstream-version: 65.1
project: icu
summary: ICU basic internationalization C/C++ library
license: Unicode-DFS-2016 AND BSD-3-Clause AND BSD-2-Clause; Unicode License\
 Agreement for the most of original files.
topics: C, C++, Unicode, internationalization
description:
\
International Components for Unicode (ICU) is a set of cross-platform Unicode-
based globalization libraries with libicuuc C/C++ library providing core
Unicode support and basic functionality (character properties, locales, etc)
and libicudata C library providing data for libicuuc and libicui18n (locale
data, etc). For more information see:

http://site.icu-project.org/

This package contains the original libicuuc and libicudata libraries source
code overlaid with the build2-based build system and packaged for the build2
package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about library itself to the
ICU mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of libicuuc and libicudata for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/icu/

\
description-type: text/plain
url: http://site.icu-project.org/
doc-url: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/libicuuc/
package-url: https://git.build2.org/cgit/packaging/icu/
email: icu-support@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Unicode License; see accompanying LICENSE file

project = libicuuc

using version
using config
using test
using install
using dist

# The ICU version has the <release>.<shared-update>[.<update>] form. The
# shared update version is 0 during development, 1 for the initial release,
# and is incremented for the C/C++ and Java libraries common changes. The
# update version is incremented (or added) for updates applied to only the
# C/C++ or Java library.
#
# Note that the release version is not a semantic version and we will map the
# two-component versions to the standard versions as
# <release>.<shared-update>.0.
#
# The library naming scheme on Linux is
# libicuuc.so.<release>.<shared-update>[.<update>] (LIB_VERSION in
# icu4c/source/configure.ac). The ABI compatibility is preserved for the
# shared updates. See also:
#
# https://unicode-org.github.io/icu/userguide/icu/design.html#version-numbers\
-in-icu
#
abi_version_major = "$version.major"
abi_version_patch = ($version.patch != 0 ? ".$version.patch" : "")
abi_version       = "$abi_version_major.$version.minor$abi_version_patch"

\
root-build:
\
# file      : build/root.build
# license   : Unicode License; see accompanying LICENSE file

c.std = 11

using c

h{*}: extension = h
c{*}: extension = c

# Note that upstream compiles with -std=c++11 but this ends up with the 'auto
# return without trailing return type' error for Clang targeting MSVC runtime.
#
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

\
debian-name: libicu-dev
fedora-name: libicu-devel
location: icu/libicuuc-65.1.0+11.tar.gz
sha256sum: 8cdfab405a64d101b79d37b9f464f76de3e2e93b1c765db088fc5c64421d91a4
:
name: libicuuc
version: 74.2.0+3
upstream-version: 74.2
language: c++
project: icu
summary: ICU basic internationalization C/C++ library
license: Unicode-3.0 AND BSD-3-Clause AND BSD-2-Clause; Unicode License V3\
 for most of the original files.
topics: C, C++, Unicode, internationalization
description:
\
International Components for Unicode (ICU) is a set of cross-platform Unicode-
based globalization libraries with libicuuc C/C++ library providing core
Unicode support and basic functionality (character properties, locales, etc)
and libicudata C library providing data for libicuuc and libicui18n (locale
data, etc). For more information see:

http://site.icu-project.org/

This package contains the original libicuuc and libicudata libraries source
code overlaid with the build2-based build system and packaged for the build2
package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about library itself to the
ICU mailing lists. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of libicuuc and libicudata for build2 is tracked in a Git
repository at:

https://git.build2.org/cgit/packaging/icu/

\
description-type: text/plain
url: http://site.icu-project.org/
doc-url: https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/
src-url: https://git.build2.org/cgit/packaging/icu/icu/tree/libicuuc/
package-url: https://git.build2.org/cgit/packaging/icu/
email: icu-support@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.18.0-
depends: * bpkg >= 0.18.0-
depends: * icu-tools == 74.2.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Unicode License; see accompanying LICENSE file

project = libicuuc

using version
using config
using test
using install
using dist

# The ICU version has the <release>.<shared-update>[.<update>] form. The
# shared update version is 0 during development, 1 for the initial release,
# and is incremented for the C/C++ and Java libraries common changes. The
# update version is incremented (or added) for updates applied to only the
# C/C++ or Java library.
#
# Note that the release version is not a semantic version and we will map the
# two-component versions to the standard versions as
# <release>.<shared-update>.0.
#
# The library naming scheme on Linux is
# libicuuc.so.<release>.<shared-update>[.<update>] (LIB_VERSION in
# icu4c/source/configure.ac). The ABI compatibility is preserved for the
# shared updates. See also:
#
# https://unicode-org.github.io/icu/userguide/icu/design.html#version-numbers\
-in-icu
#
abi_version_major = "$version.major"
abi_version_patch = ($version.patch != 0 ? ".$version.patch" : "")
abi_version       = "$abi_version_major.$version.minor$abi_version_patch"

\
root-build:
\
# file      : build/root.build
# license   : Unicode License; see accompanying LICENSE file

c.std = 11

using c
using c.predefs

h{*}: extension = h
c{*}: extension = c

# Note that upstream compiles with -std=c++11 but this ends up with the 'auto
# return without trailing return type' error for Clang targeting MSVC runtime.
#
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

using c.as-cpp

using in

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: libicu-dev
fedora-name: libicu-devel
location: icu/libicuuc-74.2.0+3.tar.gz
sha256sum: 99fc0ccedfab6c59dd8beb4b61ee5a83b2060e9b1533d091aa238c08a6df9999
:
name: libimgui
version: 1.86.0
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test == 1.86.0
examples: libimgui-examples == 1.86.0
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-1.86.0.tar.gz
sha256sum: 438128c75bb381da4f5989eb0dcbac205e7caed860efb1d1fc0e910fc22d8daa
:
name: libimgui
version: 1.87.0
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test == 1.87.0
examples: libimgui-examples == 1.87.0
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-1.87.0.tar.gz
sha256sum: e815bda0fdaba9961001b3cb180e1bcd7630f7c0c8881f994bddf8226508aa81
:
name: libimgui
version: 1.88.0
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test == 1.88.0
examples: libimgui-examples == 1.88.0
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-1.88.0.tar.gz
sha256sum: ff9b176b3af9f3af2da72709f0a3ce830001c74c2d120e8dfcdd4f2176833738
:
name: libimgui
version: 1.90.8+2
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test == 1.90.8
examples: libimgui-examples == 1.90.8
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui/imgui/imconfig.h
config [bool]    config.libimgui.disable								?= false	# Disables all ImGui\
 functionality
config [bool]    config.libimgui.disable_demo_windows					?= false
config [bool]    config.libimgui.disable_metrics_window					?= false
config [bool]    config.libimgui.disable_obsolete_functions				?= false
config [bool]    config.libimgui.use_bgra_packed_color					?= false
config [bool]    config.libimgui.use_wchar32							?= false
config [bool]    config.libimgui.use_32bit_indices						?= false

\
location: imgui/libimgui-1.90.8+2.tar.gz
sha256sum: 13014e51a40494dfb08cdce752b0faf5696b3b9a2bf3f536d0539d26c9db0a97
:
name: libimgui
version: 1.90.9
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test == 1.90.9
examples: libimgui-examples == 1.90.9
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui/imgui/imconfig.h
config [bool]    config.libimgui.disable								?= false	# Disables all ImGui\
 functionality
config [bool]    config.libimgui.disable_demo_windows					?= false
config [bool]    config.libimgui.disable_metrics_window					?= false
config [bool]    config.libimgui.disable_obsolete_functions				?= false
config [bool]    config.libimgui.use_bgra_packed_color					?= false
config [bool]    config.libimgui.use_wchar32							?= false
config [bool]    config.libimgui.use_32bit_indices						?= false

\
location: imgui/libimgui-1.90.9.tar.gz
sha256sum: 4e103551abea5231da3de6f3d175c32c3ae77fd697e63c2daba3cd129c636e7e
:
name: libimgui
version: 1.91.0
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test == 1.91.0
examples: libimgui-examples == 1.91.0
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui/imgui/imconfig.h
config [bool]    config.libimgui.disable								?= false	# Disables all ImGui\
 functionality
config [bool]    config.libimgui.disable_demo_windows					?= false
config [bool]    config.libimgui.disable_metrics_window					?= false
config [bool]    config.libimgui.disable_obsolete_functions				?= false
config [bool]    config.libimgui.use_bgra_packed_color					?= false
config [bool]    config.libimgui.use_wchar32							?= false
config [bool]    config.libimgui.use_32bit_indices						?= false

\
location: imgui/libimgui-1.91.0.tar.gz
sha256sum: db4241936ffb03acbbadeb25f8a4aa6d1cc57bb445e8afe4654ec64a5ffde429
:
name: libimgui
version: 1.91.4
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test == 1.91.4
examples: libimgui-examples == 1.91.4
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui/imgui/imconfig.h
config [bool]    config.libimgui.disable								?= false	# Disables all ImGui\
 functionality
config [bool]    config.libimgui.disable_demo_windows					?= false
config [bool]    config.libimgui.disable_metrics_window					?= false
config [bool]    config.libimgui.disable_obsolete_functions				?= false
config [bool]    config.libimgui.use_bgra_packed_color					?= false
config [bool]    config.libimgui.use_wchar32							?= false
config [bool]    config.libimgui.use_32bit_indices						?= false

\
location: imgui/libimgui-1.91.4.tar.gz
sha256sum: 5a6e477307eedd3e960ed0f127928061790a7097839443c011fd1b81ad7a86f5
:
name: libimgui
version: 1.91.6
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test == 1.91.6
examples: libimgui-examples == 1.91.6
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui/imgui/imconfig.h
config [bool]    config.libimgui.disable								?= false	# Disables all ImGui\
 functionality
config [bool]    config.libimgui.disable_demo_windows					?= false
config [bool]    config.libimgui.disable_metrics_window					?= false
config [bool]    config.libimgui.disable_obsolete_functions				?= false
config [bool]    config.libimgui.use_bgra_packed_color					?= false
config [bool]    config.libimgui.use_wchar32							?= false
config [bool]    config.libimgui.use_32bit_indices						?= false

\
location: imgui/libimgui-1.91.6.tar.gz
sha256sum: 1361027c5e5b4b528e33058b92da154fae1afe5d386254757095f4bcdb8f8641
:
name: libimgui
version: 1.91.9
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test == 1.91.9
examples: libimgui-examples == 1.91.9
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui/imgui/imconfig.h
config [bool]    config.libimgui.disable								?= false	# Disables all ImGui\
 functionality
config [bool]    config.libimgui.disable_demo_windows					?= false
config [bool]    config.libimgui.disable_metrics_window					?= false
config [bool]    config.libimgui.disable_obsolete_functions				?= false
config [bool]    config.libimgui.use_bgra_packed_color					?= false
config [bool]    config.libimgui.use_wchar32							?= false
config [bool]    config.libimgui.use_32bit_indices						?= false

\
location: imgui/libimgui-1.91.9.tar.gz
sha256sum: 83962b9746f3659310c4f642e831365b3c0ebc0acfbff40aa39f93ff7b710190
:
name: libimgui
version: 1.92.2
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test == 1.92.2
examples: libimgui-examples == 1.92.2
bootstrap-build:
\
project = libimgui

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui/imgui/imconfig.h
config [bool] config.libimgui.disable                          ?= false #\
 Disables all ImGui functionality
config [bool] config.libimgui.disable_demo_windows             ?= false
config [bool] config.libimgui.disable_metrics_window           ?= false
config [bool] config.libimgui.disable_obsolete_functions       ?= false
config [bool] config.libimgui.use_bgra_packed_color            ?= false
config [bool] config.libimgui.use_wchar32                      ?= false
config [bool] config.libimgui.use_32bit_indices                ?= false
config [bool] config.libimgui.debug_highlight_all_id_conflicts ?= false

\
location: imgui/libimgui-1.92.2.tar.gz
sha256sum: db580a27dc061a8fdb0c3e22d762a404e4b47a98223e027d57217048626c2bbe
:
name: libimgui-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test-docking == 1.90.8
examples: libimgui-examples-docking == 1.90.8
bootstrap-build:
\
project = libimgui-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui-docking/imgui/imconfig.h
config [bool] config.libimgui_docking.disable                    ?= false #\
 Disables all ImGui functionality
config [bool] config.libimgui_docking.disable_demo_windows       ?= false
config [bool] config.libimgui_docking.disable_metrics_window     ?= false
config [bool] config.libimgui_docking.disable_obsolete_functions ?= false
config [bool] config.libimgui_docking.use_bgra_packed_color      ?= false
config [bool] config.libimgui_docking.use_wchar32                ?= false
config [bool] config.libimgui_docking.use_32bit_indices          ?= false

\
location: imgui/libimgui-docking-1.90.8+2.tar.gz
sha256sum: 9f07b8425726246e27bf094178e571640562c59a84f521bcaa435d21fe81bb24
:
name: libimgui-docking
version: 1.90.9
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test-docking == 1.90.9
examples: libimgui-examples-docking == 1.90.9
bootstrap-build:
\
project = libimgui-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui-docking/imgui/imconfig.h
config [bool] config.libimgui_docking.disable                    ?= false #\
 Disables all ImGui functionality
config [bool] config.libimgui_docking.disable_demo_windows       ?= false
config [bool] config.libimgui_docking.disable_metrics_window     ?= false
config [bool] config.libimgui_docking.disable_obsolete_functions ?= false
config [bool] config.libimgui_docking.use_bgra_packed_color      ?= false
config [bool] config.libimgui_docking.use_wchar32                ?= false
config [bool] config.libimgui_docking.use_32bit_indices          ?= false

\
location: imgui/libimgui-docking-1.90.9.tar.gz
sha256sum: 77b6ae26c7965cbdb6fbb9024960deef874f116b20a010e6235b63c2dfd6e530
:
name: libimgui-docking
version: 1.91.0
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: libimgui-null-backend-test-docking == 1.91.0
examples: libimgui-examples-docking == 1.91.0
bootstrap-build:
\
project = libimgui-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui-docking/imgui/imconfig.h
config [bool] config.libimgui_docking.disable                    ?= false #\
 Disables all ImGui functionality
config [bool] config.libimgui_docking.disable_demo_windows       ?= false
config [bool] config.libimgui_docking.disable_metrics_window     ?= false
config [bool] config.libimgui_docking.disable_obsolete_functions ?= false
config [bool] config.libimgui_docking.use_bgra_packed_color      ?= false
config [bool] config.libimgui_docking.use_wchar32                ?= false
config [bool] config.libimgui_docking.use_32bit_indices          ?= false

\
location: imgui/libimgui-docking-1.91.0.tar.gz
sha256sum: 54484fcfb88ae2880c519b208d0a885c49c830e347768317a9cba268a7c05530
:
name: libimgui-docking
version: 1.91.4
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test-docking == 1.91.4
examples: libimgui-examples-docking == 1.91.4
bootstrap-build:
\
project = libimgui-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui-docking/imgui/imconfig.h
config [bool] config.libimgui_docking.disable                    ?= false #\
 Disables all ImGui functionality
config [bool] config.libimgui_docking.disable_demo_windows       ?= false
config [bool] config.libimgui_docking.disable_metrics_window     ?= false
config [bool] config.libimgui_docking.disable_obsolete_functions ?= false
config [bool] config.libimgui_docking.use_bgra_packed_color      ?= false
config [bool] config.libimgui_docking.use_wchar32                ?= false
config [bool] config.libimgui_docking.use_32bit_indices          ?= false

\
location: imgui/libimgui-docking-1.91.4.tar.gz
sha256sum: 3937790240df1a1543e553b132ada4931be8caadada806059ad90c32576614db
:
name: libimgui-docking
version: 1.91.6
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test-docking == 1.91.6
examples: libimgui-examples-docking == 1.91.6
bootstrap-build:
\
project = libimgui-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui-docking/imgui/imconfig.h
config [bool] config.libimgui_docking.disable                    ?= false #\
 Disables all ImGui functionality
config [bool] config.libimgui_docking.disable_demo_windows       ?= false
config [bool] config.libimgui_docking.disable_metrics_window     ?= false
config [bool] config.libimgui_docking.disable_obsolete_functions ?= false
config [bool] config.libimgui_docking.use_bgra_packed_color      ?= false
config [bool] config.libimgui_docking.use_wchar32                ?= false
config [bool] config.libimgui_docking.use_32bit_indices          ?= false

\
location: imgui/libimgui-docking-1.91.6.tar.gz
sha256sum: 2d8b94ac4a93e5d4b43d01c1c257f287f158d38d13b29af70662e6eb41979e22
:
name: libimgui-docking
version: 1.91.9
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test-docking == 1.91.9
examples: libimgui-examples-docking == 1.91.9
bootstrap-build:
\
project = libimgui-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui-docking/imgui/imconfig.h
config [bool] config.libimgui_docking.disable                    ?= false #\
 Disables all ImGui functionality
config [bool] config.libimgui_docking.disable_demo_windows       ?= false
config [bool] config.libimgui_docking.disable_metrics_window     ?= false
config [bool] config.libimgui_docking.disable_obsolete_functions ?= false
config [bool] config.libimgui_docking.use_bgra_packed_color      ?= false
config [bool] config.libimgui_docking.use_wchar32                ?= false
config [bool] config.libimgui_docking.use_32bit_indices          ?= false

\
location: imgui/libimgui-docking-1.91.9.tar.gz
sha256sum: 6c62378a54b8a6cc241e06a9693a27405667093ce1d7acd0d7b0665a96909df4
:
name: libimgui-docking
version: 1.92.2
project: imgui
summary: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal\
 dependencies ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
tests: libimgui-null-backend-test-docking == 1.92.2
examples: libimgui-examples-docking == 1.92.2
bootstrap-build:
\
project = libimgui-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# ImGui configuration variables
# For more information, refer to libimgui-docking/imgui/imconfig.h
config [bool] config.libimgui_docking.disable                          ?=\
 false # Disables all ImGui functionality
config [bool] config.libimgui_docking.disable_demo_windows             ?=\
 false
config [bool] config.libimgui_docking.disable_metrics_window           ?=\
 false
config [bool] config.libimgui_docking.disable_obsolete_functions       ?=\
 false
config [bool] config.libimgui_docking.use_bgra_packed_color            ?=\
 false
config [bool] config.libimgui_docking.use_wchar32                      ?=\
 false
config [bool] config.libimgui_docking.use_32bit_indices                ?=\
 false
config [bool] config.libimgui_docking.debug_highlight_all_id_conflicts ?=\
 false

\
location: imgui/libimgui-docking-1.92.2.tar.gz
sha256sum: 577b2597d3daf74b78a2b69ac0ceb0f31ea84a9ffd257c43f75748b510a8d1a5
:
name: libimgui-examples
version: 1.86.0
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw == 1.86.0
depends: libimgui-platform-osx == 1.86.0 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.86.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.86.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.86.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.86.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.86.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.86.0 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.86.0
depends: libimgui-render-opengl3 == 1.86.0
depends: libimgui-render-vulkan == 1.86.0
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.86.0.tar.gz
sha256sum: edeb468c05d497ec93668606f7c7188b9b0bdc67403bf054e1300e25386f42d4
:
name: libimgui-examples
version: 1.87.0
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw == 1.87.0
depends: libimgui-platform-osx == 1.87.0 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.87.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.87.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.87.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.87.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.87.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.87.0 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.87.0
depends: libimgui-render-opengl3 == 1.87.0
depends: libimgui-render-vulkan == 1.87.0
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.87.0.tar.gz
sha256sum: 50a25651a61103af7138028e3d745edb6c8149d3fd1e567a33c3882d05720ade
:
name: libimgui-examples
version: 1.88.0
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw == 1.88.0
depends: libimgui-platform-osx == 1.88.0 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.88.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.88.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.88.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.88.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.88.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.88.0 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.88.0
depends: libimgui-render-opengl3 == 1.88.0
depends: libimgui-render-vulkan == 1.88.0
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.88.0.tar.gz
sha256sum: 8550ab2bd54efdfc6dd6565db6fc065f5d101b1466df65aac5604cde714c3a8d
:
name: libimgui-examples
version: 1.90.8+2
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw == 1.90.8
depends: libimgui-platform-osx == 1.90.8 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.90.8 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.90.8 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.90.8 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.90.8 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.90.8 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.90.8 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.90.8
depends: libimgui-render-opengl3 == 1.90.8
depends: libimgui-render-vulkan == 1.90.8
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.90.8+2.tar.gz
sha256sum: da1872dd3c9cbb79e0b4d8fa2e2847a8736e0572ad7fa07ad0a1b0e64a3e7201
:
name: libimgui-examples
version: 1.90.9
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw == 1.90.9
depends: libimgui-platform-osx == 1.90.9 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.90.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.90.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.90.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.90.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.90.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.90.9 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.90.9
depends: libimgui-render-opengl3 == 1.90.9
depends: libimgui-render-vulkan == 1.90.9
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.90.9.tar.gz
sha256sum: 0036c4276d0bc1aca810c18f4ded5c324957e50b51c7802f7785ed638d341bf7
:
name: libimgui-examples
version: 1.91.0
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw == 1.91.0
depends: libimgui-platform-osx == 1.91.0 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.91.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.91.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.91.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.91.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.91.0 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.91.0 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.91.0
depends: libimgui-render-opengl3 == 1.91.0
depends: libimgui-render-vulkan == 1.91.0
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.91.0.tar.gz
sha256sum: 1e8124e124e7cec2b437808885ad1ebc7816e9fbab8eb688f0bfb74c528983b0
:
name: libimgui-examples
version: 1.91.4
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw == 1.91.4
depends: libimgui-platform-osx == 1.91.4 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.91.4 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.91.4 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.91.4 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.91.4 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.91.4 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.91.4 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.91.4
depends: libimgui-render-opengl3 == 1.91.4
depends: libimgui-render-vulkan == 1.91.4
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.91.4.tar.gz
sha256sum: 70ed9bd7ffaf6c9f7e3467999fdd9b7b7899264ffef4cf4375d75c663a12c5d4
:
name: libimgui-examples
version: 1.91.6
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw == 1.91.6
depends: libimgui-platform-osx == 1.91.6 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.91.6 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.91.6 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.91.6 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.91.6 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.91.6 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.91.6 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.91.6
depends: libimgui-render-opengl3 == 1.91.6
depends: libimgui-render-vulkan == 1.91.6
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.91.6.tar.gz
sha256sum: 32ebdbb7b711ab5559479520bf5d3c6b29872ba256dcf66d7bc60bb6497fb758
:
name: libimgui-examples
version: 1.91.9
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw == 1.91.9
depends: libimgui-platform-osx == 1.91.9 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.91.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.91.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.91.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.91.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.91.9 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.91.9 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.91.9
depends: libimgui-render-opengl3 == 1.91.9
depends: libimgui-render-vulkan == 1.91.9
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.91.9.tar.gz
sha256sum: 659eb93e8d69c1e08e35a6095077aa1328b24aefc468d510029b623a21e5d2db
:
name: libimgui-examples
version: 1.92.2
project: imgui
summary: Executable examples of usage of the Dear ImGui library
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw == 1.92.2
depends: libimgui-platform-osx == 1.92.2 ? ($cxx.target.class == 'macos')
depends: libimgui-platform-win32 == 1.92.2 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx9 == 1.92.2 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx10 == 1.92.2 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx11 == 1.92.2 ? ($cxx.target.class == 'windows')
depends: libimgui-render-dx12 == 1.92.2 ? ($cxx.target.class == 'windows')
depends: libimgui-render-metal == 1.92.2 ? ($cxx.target.class == 'macos')
depends: libimgui-render-opengl2 == 1.92.2
depends: libimgui-render-opengl3 == 1.92.2
depends: libimgui-render-vulkan == 1.92.2
bootstrap-build:
\
project = libimgui-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-1.92.2.tar.gz
sha256sum: 691b7f62dc76689eccc210c4a6b04aac6257c3c2456bd24036d4b3f03176d280
:
name: libimgui-examples-docking
version: 1.90.8+2
project: imgui
summary: Executable examples of usage of the Dear ImGui library ; docking\
 branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw-docking == 1.90.8
depends: libimgui-platform-osx-docking == 1.90.8 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-platform-win32-docking == 1.90.8 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx9-docking == 1.90.8 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx10-docking == 1.90.8 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx11-docking == 1.90.8 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx12-docking == 1.90.8 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-metal-docking == 1.90.8 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-render-opengl2-docking == 1.90.8
depends: libimgui-render-opengl3-docking == 1.90.8
depends: libimgui-render-vulkan-docking == 1.90.8
bootstrap-build:
\
project = libimgui-examples-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-docking-1.90.8+2.tar.gz
sha256sum: d8d30fb3846004d29b780231def5ec8b1031781f008adb5a72fa3e6a76077ef3
:
name: libimgui-examples-docking
version: 1.90.9
project: imgui
summary: Executable examples of usage of the Dear ImGui library ; docking\
 branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw-docking == 1.90.9
depends: libimgui-platform-osx-docking == 1.90.9 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-platform-win32-docking == 1.90.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx9-docking == 1.90.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx10-docking == 1.90.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx11-docking == 1.90.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx12-docking == 1.90.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-metal-docking == 1.90.9 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-render-opengl2-docking == 1.90.9
depends: libimgui-render-opengl3-docking == 1.90.9
depends: libimgui-render-vulkan-docking == 1.90.9
bootstrap-build:
\
project = libimgui-examples-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-docking-1.90.9.tar.gz
sha256sum: b4daa75fb9898fbaf1647d5f282eb0ad5c056584a7c3faf73ff004710a7c3fa6
:
name: libimgui-examples-docking
version: 1.91.0
project: imgui
summary: Executable examples of usage of the Dear ImGui library ; docking\
 branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-platform-glfw-docking == 1.91.0
depends: libimgui-platform-osx-docking == 1.91.0 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-platform-win32-docking == 1.91.0 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx9-docking == 1.91.0 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx10-docking == 1.91.0 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx11-docking == 1.91.0 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx12-docking == 1.91.0 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-metal-docking == 1.91.0 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-render-opengl2-docking == 1.91.0
depends: libimgui-render-opengl3-docking == 1.91.0
depends: libimgui-render-vulkan-docking == 1.91.0
bootstrap-build:
\
project = libimgui-examples-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-docking-1.91.0.tar.gz
sha256sum: 65d388831a3908bb2bbe386e361d66472d393f3554a798d2e4df1b8fc03b1663
:
name: libimgui-examples-docking
version: 1.91.4
project: imgui
summary: Executable examples of usage of the Dear ImGui library ; docking\
 branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw-docking == 1.91.4
depends: libimgui-platform-osx-docking == 1.91.4 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-platform-win32-docking == 1.91.4 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx9-docking == 1.91.4 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx10-docking == 1.91.4 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx11-docking == 1.91.4 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx12-docking == 1.91.4 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-metal-docking == 1.91.4 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-render-opengl2-docking == 1.91.4
depends: libimgui-render-opengl3-docking == 1.91.4
depends: libimgui-render-vulkan-docking == 1.91.4
bootstrap-build:
\
project = libimgui-examples-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-docking-1.91.4.tar.gz
sha256sum: 5e4e825fd094c66beb88393f31bf095c547d86450f7d5bbfae62fa67c2bdf646
:
name: libimgui-examples-docking
version: 1.91.6
project: imgui
summary: Executable examples of usage of the Dear ImGui library ; docking\
 branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw-docking == 1.91.6
depends: libimgui-platform-osx-docking == 1.91.6 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-platform-win32-docking == 1.91.6 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx9-docking == 1.91.6 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx10-docking == 1.91.6 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx11-docking == 1.91.6 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx12-docking == 1.91.6 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-metal-docking == 1.91.6 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-render-opengl2-docking == 1.91.6
depends: libimgui-render-opengl3-docking == 1.91.6
depends: libimgui-render-vulkan-docking == 1.91.6
bootstrap-build:
\
project = libimgui-examples-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-docking-1.91.6.tar.gz
sha256sum: 43940f6a21b1fbbb95e20a8aac44b41d9153405c75371bbe5b24367c1a3a2c35
:
name: libimgui-examples-docking
version: 1.91.9
project: imgui
summary: Executable examples of usage of the Dear ImGui library ; docking\
 branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw-docking == 1.91.9
depends: libimgui-platform-osx-docking == 1.91.9 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-platform-win32-docking == 1.91.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx9-docking == 1.91.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx10-docking == 1.91.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx11-docking == 1.91.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx12-docking == 1.91.9 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-metal-docking == 1.91.9 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-render-opengl2-docking == 1.91.9
depends: libimgui-render-opengl3-docking == 1.91.9
depends: libimgui-render-vulkan-docking == 1.91.9
bootstrap-build:
\
project = libimgui-examples-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-docking-1.91.9.tar.gz
sha256sum: 2fb7fcd710044ec33c4786c6ded207f89dde22c5fc344760f84c4584fff41ef0
:
name: libimgui-examples-docking
version: 1.92.2
project: imgui
summary: Executable examples of usage of the Dear ImGui library ; docking\
 branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-platform-glfw-docking == 1.92.2
depends: libimgui-platform-osx-docking == 1.92.2 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-platform-win32-docking == 1.92.2 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx9-docking == 1.92.2 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx10-docking == 1.92.2 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx11-docking == 1.92.2 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-dx12-docking == 1.92.2 ? ($cxx.target.class ==\
 'windows')
depends: libimgui-render-metal-docking == 1.92.2 ? ($cxx.target.class ==\
 'macos')
depends: libimgui-render-opengl2-docking == 1.92.2
depends: libimgui-render-opengl3-docking == 1.92.2
depends: libimgui-render-vulkan-docking == 1.92.2
bootstrap-build:
\
project = libimgui-examples-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-examples-docking-1.92.2.tar.gz
sha256sum: b220f94ef6052493f9e34d6c62647fb519185d62b4769e65cb279c204f143e5e
:
name: libimgui-framework-sfml
version: 2.5.0+1
project: imgui
summary: Dear ImGui framework backend for SFML.
license: MIT
description:
\
ImGui-SFML v2.5
=======
[![build Actions Status](https://github.com/eliasdaler/imgui-sfml/workflows/b\
uild/badge.svg)](https://github.com/eliasdaler/imgui-sfml/actions)

Library which allows you to use [Dear ImGui](https://github.com/ocornut/imgui\
) with [SFML](https://github.com/SFML/SFML)

![screenshot](https://i2.wp.com/i.imgur.com/iQibpSk.gif)

Based on [this repository](https://github.com/Mischa-Alff/imgui-backends)\
 with big improvements and changes.

Dependencies
-----

* [SFML](https://github.com/SFML/SFML) >= 2.5.0
* [Dear ImGui](https://github.com/ocornut/imgui) >= 1.80

Contributing
-----

* The code is written in C++03. See [#7](https://github.com/eliasdaler/imgui-\
sfml/issues/7)
* The code should be formatted via [ClangFormat](https://clang.llvm.org/docs/\
ClangFormat.html) using `.clang-format` provided in the root of this\
 repository

How-to
----

- [**Detailed tutorial on my blog**](https://eliasdaler.github.io/using-imgui\
-with-sfml-pt1)
- [**Using ImGui with modern C++ and STL**](https://eliasdaler.github.io/usin\
g-imgui-with-sfml-pt2/)
- [**Thread on SFML forums**](https://en.sfml-dev.org/forums/index.php?topic=\
20137.0). Feel free to ask your questions there.

Building and integrating into your CMake project
---

- [**CMake tutorial on my blog**](https://eliasdaler.github.io/using-cmake/)

```sh
cmake <ImGui-SFML repo folder> -DIMGUI_DIR=<ImGui repo folder>\
 -DSFML_DIR=<path with built SFML>
```

If you have SFML installed on your system, you don't need to set SFML_DIR\
 during
configuration.

You can also specify `BUILD_SHARED_LIBS=ON` to build ImGui-SFML as a shared\
 library. To build ImGui-SFML examples, set `IMGUI_SFML_BUILD_EXAMPLES=ON`.\
 To build imgui-demo.cpp (to be able to use `ImGui::ShowDemoWindow`), set\
 `IMGUI_SFML_IMGUI_DEMO=ON`.

After the building, you can install the library on your system by running:
```sh
cmake --build . --target install
```

If you set `CMAKE_INSTALL_PREFIX` during configuration, you can install\
 ImGui-SFML locally.

Integrating into your project is simple.
```cmake
find_package(ImGui-SFML REQUIRED)
target_link_libraries(my_target PRIVATE ImGui-SFML::ImGui-SFML)
```

If CMake can't find ImGui-SFML on your system, just define `ImGui-SFML_DIR`\
 before calling `find_package`.

Integrating into your project manually
---
- Download [ImGui](https://github.com/ocornut/imgui)
- Add ImGui folder to your include directories
- Add `imgui.cpp`, `imgui_widgets.cpp`, `imgui_draw.cpp` and\
 `imgui_tables.cpp` to your build/project
- Copy the contents of `imconfig-SFML.h` to your `imconfig.h` file. (to be\
 able to cast `ImVec2` to `sf::Vector2f` and vice versa)
- Add a folder which contains `imgui-SFML.h` to your include directories
- Add `imgui-SFML.cpp` to your build/project
- Link OpenGL if you get linking errors

Other ways to add to your project(won't recommend as the versions tend to lag\
 behind and are not
---
Not recommended, as they're not maintained officially. Tend to lag behind and\
 stay on older versions.

- [Conan](https://github.com/bincrafters/community/tree/main/recipes/imgui-sf\
ml)
- [vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/imgui-sfml)
- [Bazel](https://github.com/zpervan/ImguiSFMLBazel)

Using ImGui-SFML in your code
---

- Call `ImGui::SFML::Init` and pass your `sf::Window` + `sf::RenderTarget` or\
 `sf::RenderWindow` there. You can create your font atlas and pass the\
 pointer in Init too, otherwise the default internal font atlas will be\
 created for you. Do this for each window you want to draw ImGui on.
- For each iteration of a game loop:
    - Poll and process events:

        ```cpp
        sf::Event event;
        while (window.pollEvent(event)) {
            ImGui::SFML::ProcessEvent(window, event);
            ...
        }
        ```

    - Call `ImGui::SFML::Update(window, deltaTime)` where `deltaTime` is\
 `sf::Time`. You can also pass `mousePosition` and `displaySize` yourself\
 instead of passing the window.
    - Call ImGui functions (`ImGui::Begin()`, `ImGui::Button()`, etc.)
    - Call `ImGui::EndFrame` after the last `ImGui::End` in your update\
 function, if you update more than once before rendering. (e.g. fixed delta\
 game loops)
    - Call `ImGui::SFML::Render(window)`

- Call `ImGui::SFML::Shutdown()` **after** `window.close()` has been called
    - Use `ImGui::SFML::Shutdown(window)` overload if you have multiple\
 windows. After it's called one of the current windows will become a current\
 "global" window. Call `SetCurrentWindow` to explicitly set which window will\
 be used as default.

**If you only draw ImGui widgets without any SFML stuff, then you'll might\
 need to call window.resetGLStates() before rendering anything. You only need\
 to do it once.**

Example code
----

See example file [here](examples/main.cpp)

```cpp
#include "imgui.h"
#include "imgui-SFML.h"

#include <SFML/Graphics/CircleShape.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/System/Clock.hpp>
#include <SFML/Window/Event.hpp>

int main() {
    sf::RenderWindow window(sf::VideoMode(640, 480), "ImGui + SFML = <3");
    window.setFramerateLimit(60);
    ImGui::SFML::Init(window);

    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    sf::Clock deltaClock;
    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            ImGui::SFML::ProcessEvent(window, event);

            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }

        ImGui::SFML::Update(window, deltaClock.restart());

        ImGui::Begin("Hello, world!");
        ImGui::Button("Look at this pretty button");
        ImGui::End();

        window.clear();
        window.draw(shape);
        ImGui::SFML::Render(window);
        window.display();
    }

    ImGui::SFML::Shutdown();
}
```

Fonts how-to
---

Default font is loaded if you don't pass `false` in `ImGui::SFML::Init`. Call\
 `ImGui::SFML::Init(window, false);` if you don't want default font to be\
 loaded.

* Load your fonts like this:

```cpp
IO.Fonts->Clear(); // clear fonts if you loaded some before (even if only\
 default one was loaded)
// IO.Fonts->AddFontDefault(); // this will load default font as well
IO.Fonts->AddFontFromFileTTF("font1.ttf", 8.f);
IO.Fonts->AddFontFromFileTTF("font2.ttf", 12.f);

ImGui::SFML::UpdateFontTexture(); // important call: updates font texture
```

* And use them like this:

```cpp
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[0]);
ImGui::Button("Look at this pretty button");
ImGui::PopFont();

ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
ImGui::TextUnformatted("IT WORKS!");
ImGui::PopFont();
```

The first loaded font is treated as the default one and doesn't need to be\
 pushed with `ImGui::PushFont`.

Multiple windows
----------------

See `examples/multiple_windows` to see how you can create multiple SFML and\
 run different ImGui contexts in them.

- Don't forget to run `ImGui::SFML::Init(const sf::Window&)` for each window\
 you create. Same goes for `ImGui::SFML::Shutdown(const sf::Window&)`
- Instead of calling `ImGui::SFML::ProcessEvent(sf::Event&)`, you need to\
 call `ImGui::SFML::ProcessEvent(const sf::Window&, const sf::Event&)`\
 overload for each window you create
- Call `ImGui::SFML::SetCurrentWindow` before calling any `ImGui` functions\
 (e.g. `ImGui::Begin`, `ImGui::Button` etc.)
- Either call `ImGui::Render(sf::RenderWindow&)` overload for each window or\
 manually do this:
    ```cpp
    SetCurrentWindow(window);
    ... // your custom rendering
    ImGui::Render();

    SetCurrentWindow(window2);
    ... // your custom rendering
    ImGui::Render();
    ```
- When closing everything: don't forget to close all windows using SFML's\
 `sf::Window::Close` and then call `ImGui::SFML::Shutdown` to remote all\
 ImGui-SFML window contexts and other data.

SFML related ImGui overloads / new widgets
---

There are some useful overloads implemented for SFML objects (see\
 `imgui-SFML.h` for other overloads):

```cpp
ImGui::Image(const sf::Sprite& sprite);
ImGui::Image(const sf::Texture& texture);
ImGui::Image(const sf::RenderTexture& texture);

ImGui::ImageButton(const sf::Sprite& sprite);
ImGui::ImageButton(const sf::Texture& texture);
ImGui::ImageButton(const sf::RenderTexture& texture);
```

A note about sf::RenderTexture
---

`sf::RenderTexture`'s texture is stored with pixels flipped upside down. To\
 display it properly when drawing `ImGui::Image` or `ImGui::ImageButton`, use\
 overloads for `sf::RenderTexture`:

```cpp
sf::RenderTexture texture;
sf::Sprite sprite(texture.getTexture());
ImGui::Image(texture);              // OK
ImGui::Image(sprite);               // NOT OK
ImGui::Image(texture.getTexture()); // NOT OK
```

If you want to draw only a part of `sf::RenderTexture` and you're trying to\
 use `sf::Sprite` the texture will be displayed upside-down. To prevent this,\
 you can do this:

```cpp
// make a normal sf::Texture from sf::RenderTexture's flipped texture
sf::Texture texture(renderTexture.getTexture());

sf::Sprite sprite(texture);
ImGui::Image(sprite); // the texture is displayed properly
```

For more notes see [this issue](https://github.com/eliasdaler/imgui-sfml/issu\
es/35).

Mouse cursors
---
You can change your cursors in ImGui like this:

```cpp
ImGui::SetMouseCursor(ImGuiMouseCursor_TextInput);
```

By default, your system cursor will change and will be rendered by your\
 system. If you want SFML to draw your cursor with default ImGui cursors (the\
 system cursor will be hidden), do this:

```cpp
ImGuiIO& io = ImGui::GetIO();
io.MouseDrawCursor = true;
```

Keyboard/Gamepad navigation
---
Starting with [ImGui 1.60](https://github.com/ocornut/imgui/releases/tag/v1.6\
0), there's a feature to control ImGui with keyboard and gamepad. To use\
 keyboard navigation, you just need to do this:

```cpp
ImGuiIO& io = ImGui::GetIO();
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
```

Gamepad navigation requires more work, unless you have XInput gamepad, in\
 which case the mapping is automatically set for you. But you can still set\
 it up for your own gamepad easily, just take a look how it's done for the\
 default mapping [here](https://github.com/eliasdaler/imgui-sfml/blob/navigat\
ion/imgui-SFML.cpp#L697). And then you need to do this:

```cpp
ImGuiIO& io = ImGui::GetIO();
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
```
By default, the first active joystick is used for navigation, but you can set\
 joystick id explicitly like this:
```cpp
ImGui::SFML::SetActiveJoystickId(5);
```

High DPI screens
----

As SFML is not currently DPI aware, your window/gui may show at the incorrect\
 scale. This is particularly noticeable on Apple systems with Retina displays.

To fix this on macOS, you can create an app bundle (as opposed to just the\
 exe) then modify the info.plist so that "High Resolution Capable" is set to\
 "NO"

License
---

This library is licensed under the MIT License, see LICENSE for more\
 information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/eliasdaler/imgui-sfml
doc-url: https://eliasdaler.github.io/using-imgui-with-sfml-pt1/
src-url: https://github.com/eliasdaler/imgui-sfml
package-url: https://github.com/build2-packaging/imgui-sfml
email: eliasdaler@yandex.ru
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui ^1.86.0
depends: libsfml-system ^2.5.0
depends: libsfml-graphics ^2.5.0
depends: libsfml-window ^2.5.0
examples: libimgui-framework-sfml-examples == 2.5.0
builds: default
bootstrap-build:
\
project = libimgui-framework-sfml

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-framework-sfml-2.5.0+1.tar.gz
sha256sum: c693660c11d3d7e57a13c288535ca124572c0ef142c317c70365485ad94af603
:
name: libimgui-framework-sfml-examples
version: 2.5.0+1
project: imgui
summary: Example applications for the Dear ImGui framework backend for SFML.
license: MIT
description:
\
ImGui-SFML v2.5
=======
[![build Actions Status](https://github.com/eliasdaler/imgui-sfml/workflows/b\
uild/badge.svg)](https://github.com/eliasdaler/imgui-sfml/actions)

Library which allows you to use [Dear ImGui](https://github.com/ocornut/imgui\
) with [SFML](https://github.com/SFML/SFML)

![screenshot](https://i2.wp.com/i.imgur.com/iQibpSk.gif)

Based on [this repository](https://github.com/Mischa-Alff/imgui-backends)\
 with big improvements and changes.

Dependencies
-----

* [SFML](https://github.com/SFML/SFML) >= 2.5.0
* [Dear ImGui](https://github.com/ocornut/imgui) >= 1.80

Contributing
-----

* The code is written in C++03. See [#7](https://github.com/eliasdaler/imgui-\
sfml/issues/7)
* The code should be formatted via [ClangFormat](https://clang.llvm.org/docs/\
ClangFormat.html) using `.clang-format` provided in the root of this\
 repository

How-to
----

- [**Detailed tutorial on my blog**](https://eliasdaler.github.io/using-imgui\
-with-sfml-pt1)
- [**Using ImGui with modern C++ and STL**](https://eliasdaler.github.io/usin\
g-imgui-with-sfml-pt2/)
- [**Thread on SFML forums**](https://en.sfml-dev.org/forums/index.php?topic=\
20137.0). Feel free to ask your questions there.

Building and integrating into your CMake project
---

- [**CMake tutorial on my blog**](https://eliasdaler.github.io/using-cmake/)

```sh
cmake <ImGui-SFML repo folder> -DIMGUI_DIR=<ImGui repo folder>\
 -DSFML_DIR=<path with built SFML>
```

If you have SFML installed on your system, you don't need to set SFML_DIR\
 during
configuration.

You can also specify `BUILD_SHARED_LIBS=ON` to build ImGui-SFML as a shared\
 library. To build ImGui-SFML examples, set `IMGUI_SFML_BUILD_EXAMPLES=ON`.\
 To build imgui-demo.cpp (to be able to use `ImGui::ShowDemoWindow`), set\
 `IMGUI_SFML_IMGUI_DEMO=ON`.

After the building, you can install the library on your system by running:
```sh
cmake --build . --target install
```

If you set `CMAKE_INSTALL_PREFIX` during configuration, you can install\
 ImGui-SFML locally.

Integrating into your project is simple.
```cmake
find_package(ImGui-SFML REQUIRED)
target_link_libraries(my_target PRIVATE ImGui-SFML::ImGui-SFML)
```

If CMake can't find ImGui-SFML on your system, just define `ImGui-SFML_DIR`\
 before calling `find_package`.

Integrating into your project manually
---
- Download [ImGui](https://github.com/ocornut/imgui)
- Add ImGui folder to your include directories
- Add `imgui.cpp`, `imgui_widgets.cpp`, `imgui_draw.cpp` and\
 `imgui_tables.cpp` to your build/project
- Copy the contents of `imconfig-SFML.h` to your `imconfig.h` file. (to be\
 able to cast `ImVec2` to `sf::Vector2f` and vice versa)
- Add a folder which contains `imgui-SFML.h` to your include directories
- Add `imgui-SFML.cpp` to your build/project
- Link OpenGL if you get linking errors

Other ways to add to your project(won't recommend as the versions tend to lag\
 behind and are not
---
Not recommended, as they're not maintained officially. Tend to lag behind and\
 stay on older versions.

- [Conan](https://github.com/bincrafters/community/tree/main/recipes/imgui-sf\
ml)
- [vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/imgui-sfml)
- [Bazel](https://github.com/zpervan/ImguiSFMLBazel)

Using ImGui-SFML in your code
---

- Call `ImGui::SFML::Init` and pass your `sf::Window` + `sf::RenderTarget` or\
 `sf::RenderWindow` there. You can create your font atlas and pass the\
 pointer in Init too, otherwise the default internal font atlas will be\
 created for you. Do this for each window you want to draw ImGui on.
- For each iteration of a game loop:
    - Poll and process events:

        ```cpp
        sf::Event event;
        while (window.pollEvent(event)) {
            ImGui::SFML::ProcessEvent(window, event);
            ...
        }
        ```

    - Call `ImGui::SFML::Update(window, deltaTime)` where `deltaTime` is\
 `sf::Time`. You can also pass `mousePosition` and `displaySize` yourself\
 instead of passing the window.
    - Call ImGui functions (`ImGui::Begin()`, `ImGui::Button()`, etc.)
    - Call `ImGui::EndFrame` after the last `ImGui::End` in your update\
 function, if you update more than once before rendering. (e.g. fixed delta\
 game loops)
    - Call `ImGui::SFML::Render(window)`

- Call `ImGui::SFML::Shutdown()` **after** `window.close()` has been called
    - Use `ImGui::SFML::Shutdown(window)` overload if you have multiple\
 windows. After it's called one of the current windows will become a current\
 "global" window. Call `SetCurrentWindow` to explicitly set which window will\
 be used as default.

**If you only draw ImGui widgets without any SFML stuff, then you'll might\
 need to call window.resetGLStates() before rendering anything. You only need\
 to do it once.**

Example code
----

See example file [here](examples/main.cpp)

```cpp
#include "imgui.h"
#include "imgui-SFML.h"

#include <SFML/Graphics/CircleShape.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/System/Clock.hpp>
#include <SFML/Window/Event.hpp>

int main() {
    sf::RenderWindow window(sf::VideoMode(640, 480), "ImGui + SFML = <3");
    window.setFramerateLimit(60);
    ImGui::SFML::Init(window);

    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    sf::Clock deltaClock;
    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            ImGui::SFML::ProcessEvent(window, event);

            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }

        ImGui::SFML::Update(window, deltaClock.restart());

        ImGui::Begin("Hello, world!");
        ImGui::Button("Look at this pretty button");
        ImGui::End();

        window.clear();
        window.draw(shape);
        ImGui::SFML::Render(window);
        window.display();
    }

    ImGui::SFML::Shutdown();
}
```

Fonts how-to
---

Default font is loaded if you don't pass `false` in `ImGui::SFML::Init`. Call\
 `ImGui::SFML::Init(window, false);` if you don't want default font to be\
 loaded.

* Load your fonts like this:

```cpp
IO.Fonts->Clear(); // clear fonts if you loaded some before (even if only\
 default one was loaded)
// IO.Fonts->AddFontDefault(); // this will load default font as well
IO.Fonts->AddFontFromFileTTF("font1.ttf", 8.f);
IO.Fonts->AddFontFromFileTTF("font2.ttf", 12.f);

ImGui::SFML::UpdateFontTexture(); // important call: updates font texture
```

* And use them like this:

```cpp
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[0]);
ImGui::Button("Look at this pretty button");
ImGui::PopFont();

ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]);
ImGui::TextUnformatted("IT WORKS!");
ImGui::PopFont();
```

The first loaded font is treated as the default one and doesn't need to be\
 pushed with `ImGui::PushFont`.

Multiple windows
----------------

See `examples/multiple_windows` to see how you can create multiple SFML and\
 run different ImGui contexts in them.

- Don't forget to run `ImGui::SFML::Init(const sf::Window&)` for each window\
 you create. Same goes for `ImGui::SFML::Shutdown(const sf::Window&)`
- Instead of calling `ImGui::SFML::ProcessEvent(sf::Event&)`, you need to\
 call `ImGui::SFML::ProcessEvent(const sf::Window&, const sf::Event&)`\
 overload for each window you create
- Call `ImGui::SFML::SetCurrentWindow` before calling any `ImGui` functions\
 (e.g. `ImGui::Begin`, `ImGui::Button` etc.)
- Either call `ImGui::Render(sf::RenderWindow&)` overload for each window or\
 manually do this:
    ```cpp
    SetCurrentWindow(window);
    ... // your custom rendering
    ImGui::Render();

    SetCurrentWindow(window2);
    ... // your custom rendering
    ImGui::Render();
    ```
- When closing everything: don't forget to close all windows using SFML's\
 `sf::Window::Close` and then call `ImGui::SFML::Shutdown` to remote all\
 ImGui-SFML window contexts and other data.

SFML related ImGui overloads / new widgets
---

There are some useful overloads implemented for SFML objects (see\
 `imgui-SFML.h` for other overloads):

```cpp
ImGui::Image(const sf::Sprite& sprite);
ImGui::Image(const sf::Texture& texture);
ImGui::Image(const sf::RenderTexture& texture);

ImGui::ImageButton(const sf::Sprite& sprite);
ImGui::ImageButton(const sf::Texture& texture);
ImGui::ImageButton(const sf::RenderTexture& texture);
```

A note about sf::RenderTexture
---

`sf::RenderTexture`'s texture is stored with pixels flipped upside down. To\
 display it properly when drawing `ImGui::Image` or `ImGui::ImageButton`, use\
 overloads for `sf::RenderTexture`:

```cpp
sf::RenderTexture texture;
sf::Sprite sprite(texture.getTexture());
ImGui::Image(texture);              // OK
ImGui::Image(sprite);               // NOT OK
ImGui::Image(texture.getTexture()); // NOT OK
```

If you want to draw only a part of `sf::RenderTexture` and you're trying to\
 use `sf::Sprite` the texture will be displayed upside-down. To prevent this,\
 you can do this:

```cpp
// make a normal sf::Texture from sf::RenderTexture's flipped texture
sf::Texture texture(renderTexture.getTexture());

sf::Sprite sprite(texture);
ImGui::Image(sprite); // the texture is displayed properly
```

For more notes see [this issue](https://github.com/eliasdaler/imgui-sfml/issu\
es/35).

Mouse cursors
---
You can change your cursors in ImGui like this:

```cpp
ImGui::SetMouseCursor(ImGuiMouseCursor_TextInput);
```

By default, your system cursor will change and will be rendered by your\
 system. If you want SFML to draw your cursor with default ImGui cursors (the\
 system cursor will be hidden), do this:

```cpp
ImGuiIO& io = ImGui::GetIO();
io.MouseDrawCursor = true;
```

Keyboard/Gamepad navigation
---
Starting with [ImGui 1.60](https://github.com/ocornut/imgui/releases/tag/v1.6\
0), there's a feature to control ImGui with keyboard and gamepad. To use\
 keyboard navigation, you just need to do this:

```cpp
ImGuiIO& io = ImGui::GetIO();
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
```

Gamepad navigation requires more work, unless you have XInput gamepad, in\
 which case the mapping is automatically set for you. But you can still set\
 it up for your own gamepad easily, just take a look how it's done for the\
 default mapping [here](https://github.com/eliasdaler/imgui-sfml/blob/navigat\
ion/imgui-SFML.cpp#L697). And then you need to do this:

```cpp
ImGuiIO& io = ImGui::GetIO();
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
```
By default, the first active joystick is used for navigation, but you can set\
 joystick id explicitly like this:
```cpp
ImGui::SFML::SetActiveJoystickId(5);
```

High DPI screens
----

As SFML is not currently DPI aware, your window/gui may show at the incorrect\
 scale. This is particularly noticeable on Apple systems with Retina displays.

To fix this on macOS, you can create an app bundle (as opposed to just the\
 exe) then modify the info.plist so that "High Resolution Capable" is set to\
 "NO"

License
---

This library is licensed under the MIT License, see LICENSE for more\
 information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/eliasdaler/imgui-sfml
doc-url: https://eliasdaler.github.io/using-imgui-with-sfml-pt1/
src-url: https://github.com/eliasdaler/imgui-sfml
package-url: https://github.com/build2-packaging/imgui-sfml
email: eliasdaler@yandex.ru
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: default
bootstrap-build:
\
project = libimgui-framework-sfml-examples

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-framework-sfml-examples-2.5.0+1.tar.gz
sha256sum: 898dd0289b2a68f41250cae756129ac3e33f6d5163c224da443e9f30029c5024
:
name: libimgui-null-backend-test
version: 1.86.0
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.86.0.tar.gz
sha256sum: 6674a3a5c03c36590d6840d077eace749361cf9912bbcd5fc054a95ac56cfc2c
:
name: libimgui-null-backend-test
version: 1.87.0
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.87.0.tar.gz
sha256sum: bd82e54d35c8bc166837a90eb1b12c08bb222128dd6aba82d0d2a7b1d31b6dd7
:
name: libimgui-null-backend-test
version: 1.88.0
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.88.0.tar.gz
sha256sum: 9e4605598d81080d20a4fd39bd69ad89bbcf15c5de0c3d4d8b34516344575594
:
name: libimgui-null-backend-test
version: 1.90.8+2
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.90.8+2.tar.gz
sha256sum: 6072d3b31e298487af34c10d29cc8a513ad88c3126d68cb2b1adcef662d220e8
:
name: libimgui-null-backend-test
version: 1.90.9
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.90.9.tar.gz
sha256sum: 86385b219024de7abcd2eb1507f3b158884fdda2055e86822e68fb8084fea86b
:
name: libimgui-null-backend-test
version: 1.91.0
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.91.0.tar.gz
sha256sum: 578e256cb783c4b7804e2cf8c3a7b889296412affe57fc43716b6f9a743fc12a
:
name: libimgui-null-backend-test
version: 1.91.4
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.91.4.tar.gz
sha256sum: b4599531caa244fd1ae7ed558ecd02d65b076807535afdd74a43d5d4b69cb46e
:
name: libimgui-null-backend-test
version: 1.91.6
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.91.6.tar.gz
sha256sum: b1745123c2b101627de27e45e9f60d90cca18916d2c1474022b6b7b79b36c99f
:
name: libimgui-null-backend-test
version: 1.91.9
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.91.9.tar.gz
sha256sum: 16d55298eee74dd81e5281b1efbc8ca3255ea1ac8ea52280602944015ecea82f
:
name: libimgui-null-backend-test
version: 1.92.2
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui.
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-1.92.2.tar.gz
sha256sum: 650d304cac805521b6a2bb3731603920d3b0cc37de75af4b61580ecda8dc0ad9
:
name: libimgui-null-backend-test-docking
version: 1.90.8+2
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui ;\
 docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-docking-1.90.8+2.tar.gz
sha256sum: 01576721c4618676ce10c37b2b2a4b9a1dd2f1f8d9ba2b6c9a7c7b5abf8e116e
:
name: libimgui-null-backend-test-docking
version: 1.90.9
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui ;\
 docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-docking-1.90.9.tar.gz
sha256sum: 04e5ce6c342669ecc528d5a930d118d00ad47de9f0fef69a60eeb67c99bf8f00
:
name: libimgui-null-backend-test-docking
version: 1.91.0
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui ;\
 docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libimgui-null-backend-test-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-docking-1.91.0.tar.gz
sha256sum: 898dfcdbe8544bdf6c22fb6ebcecc3b0555ea598846039cbeb88e3e1d3b75858
:
name: libimgui-null-backend-test-docking
version: 1.91.4
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui ;\
 docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-docking-1.91.4.tar.gz
sha256sum: cb2524830436d133183a4f96f1f4e629e1bf2457b8e63da6624368069958011b
:
name: libimgui-null-backend-test-docking
version: 1.91.6
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui ;\
 docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-docking-1.91.6.tar.gz
sha256sum: 8a17e69cf6ab851225395676cfd1ad619c5232cf23b938251e171195651193dc
:
name: libimgui-null-backend-test-docking
version: 1.91.9
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui ;\
 docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-docking-1.91.9.tar.gz
sha256sum: 04001fdd1c35621c13e4e82fe8e08ea39b05735b450cacfb3c5771938fb25154
:
name: libimgui-null-backend-test-docking
version: 1.92.2
project: imgui
summary: Package using Dear ImGui's example_null backend to test libimgui ;\
 docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimgui-null-backend-test-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-null-backend-test-docking-1.92.2.tar.gz
sha256sum: e51b464ef315740a714759f670973adf37e861990b0fe4384517b23aae961a32
:
name: libimgui-platform-glfw
version: 1.86.0
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.86.0.tar.gz
sha256sum: fd04c188d24b4e1d34a7635794c25246ced60bf6e8fab429fd3d4f32ba0bd8eb
:
name: libimgui-platform-glfw
version: 1.87.0
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.87.0.tar.gz
sha256sum: 7c42599b44661b9feb3a667979174108b0e1845e3bd541e8640b61c61edbfd4c
:
name: libimgui-platform-glfw
version: 1.88.0
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.88.0.tar.gz
sha256sum: a70e2870477de9133641de1b24f1919c3d97537e2ba974c2ab659cf62d9a8c4b
:
name: libimgui-platform-glfw
version: 1.90.8+2
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.90.8+2.tar.gz
sha256sum: 3cb8dfd4d43900a892b46c9f38bd6c4001545ef56e523c41b84b3a89923c734a
:
name: libimgui-platform-glfw
version: 1.90.9
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.90.9.tar.gz
sha256sum: 794a3fbccdd939f08884ffb01e0afa4d72c1597a762d8080dc5b37ddae969c4b
:
name: libimgui-platform-glfw
version: 1.91.0
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.91.0.tar.gz
sha256sum: b26e32a2dfe1b17a432a3f3e73af1c9d2d780a2bbf3354b5625533901714c552
:
name: libimgui-platform-glfw
version: 1.91.4
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.91.4.tar.gz
sha256sum: abe09e18e2627fd48d43fc58f583c3bc02a3bd2c8a1199ead71108e3090aaa8f
:
name: libimgui-platform-glfw
version: 1.91.6
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.91.6.tar.gz
sha256sum: 9d2d94d4d38c5865c97f54917ffb71cf1d093ed4852b75497c88f55f9aefa8f6
:
name: libimgui-platform-glfw
version: 1.91.9
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.91.9.tar.gz
sha256sum: 8684d8afbe1452b389ed13492c3a9244b97a1fe5bacee0919ebbe594ff15ef5a
:
name: libimgui-platform-glfw
version: 1.92.2
project: imgui
summary: Dear ImGui platform backend for GLFW
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-1.92.2.tar.gz
sha256sum: 333412ff07b5a93b8d7e0bb9dbd9ebb2f800ffa66bf752feafae1e879501aa74
:
name: libimgui-platform-glfw-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui platform backend for GLFW ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-docking-1.90.8+2.tar.gz
sha256sum: 7c9540c924f65e51a0193acc81f9e80eb19af32231a808964a984a91c7d2a4e0
:
name: libimgui-platform-glfw-docking
version: 1.90.9
project: imgui
summary: Dear ImGui platform backend for GLFW ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-docking-1.90.9.tar.gz
sha256sum: ebc6ba1ca35d6de263374008b0d84d3ee8e2de4ae71a3c35c490f69eef0d38a7
:
name: libimgui-platform-glfw-docking
version: 1.91.0
project: imgui
summary: Dear ImGui platform backend for GLFW ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-docking-1.91.0.tar.gz
sha256sum: 11ae7a3253b6fdefa05614aadfdf68f8660878aacf58657ad75869e24f15526d
:
name: libimgui-platform-glfw-docking
version: 1.91.4
project: imgui
summary: Dear ImGui platform backend for GLFW ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-docking-1.91.4.tar.gz
sha256sum: f732b26750c98d48ab2aaafb34684e4fc70dfa52a8f121590d5412e9ef047832
:
name: libimgui-platform-glfw-docking
version: 1.91.6
project: imgui
summary: Dear ImGui platform backend for GLFW ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-docking-1.91.6.tar.gz
sha256sum: cf1cad3dd1e777e0233185325d68c1aaec64400a48f4ae608d3810754420a64e
:
name: libimgui-platform-glfw-docking
version: 1.91.9
project: imgui
summary: Dear ImGui platform backend for GLFW ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-docking-1.91.9.tar.gz
sha256sum: 7d57914aa3619a56def960963e1236215d5cb51bb7b6e4a5e0fee5bc92b0ad8c
:
name: libimgui-platform-glfw-docking
version: 1.92.2
project: imgui
summary: Dear ImGui platform backend for GLFW ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
depends: glfw ^3.3.4
bootstrap-build:
\
project = libimgui-platform-glfw-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-glfw-docking-1.92.2.tar.gz
sha256sum: 2bc4e87419edd4e9e4ccbe15d9dc5c85f9f707e76512ceb2ce56f9b5fe4685e0
:
name: libimgui-platform-osx
version: 1.86.0
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.86.0.tar.gz
sha256sum: 9061160a56a926b7bcda01d95cd79478d25a0e4813ae3e2dc1ba9bc3fa9403f3
:
name: libimgui-platform-osx
version: 1.87.0
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.87.0.tar.gz
sha256sum: 07d670efb29b9ee73ce5be44745bea8f094cb45aef7c76c7adcec392a3085a20
:
name: libimgui-platform-osx
version: 1.88.0
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.88.0.tar.gz
sha256sum: 1fda3171c4fdca3a0d40ad6bafdfc55d1cd768ec8b02dc84979f9f9a47682932
:
name: libimgui-platform-osx
version: 1.90.8+2
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.90.8+2.tar.gz
sha256sum: 6b9acaf1e6036c9308845e64a15b5f7efed50d1c72a3bacee4cd5ff8a68b223e
:
name: libimgui-platform-osx
version: 1.90.9
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.90.9.tar.gz
sha256sum: 53aa72ff1678e88316798acda8c1af609927a38bb8d09e1b49c44f331820c0c1
:
name: libimgui-platform-osx
version: 1.91.0
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.91.0.tar.gz
sha256sum: 5819382c81eb81281ecc6321032388f87f3965e2e6cec61082dfa0dd9f0d3488
:
name: libimgui-platform-osx
version: 1.91.4
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.91.4.tar.gz
sha256sum: 441f7ee670600ddaa97460584d98235f98a289297018756ce17be0494f45855b
:
name: libimgui-platform-osx
version: 1.91.6
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.91.6.tar.gz
sha256sum: 2b448025220449b9c7909583ee1ee22bb4bb391821091c246ff1314786d0bbc2
:
name: libimgui-platform-osx
version: 1.91.9
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.91.9.tar.gz
sha256sum: 1db46ae7019380a6ba4182a405df110a5076650793d56ff5f8df7884689cb28e
:
name: libimgui-platform-osx
version: 1.92.2
project: imgui
summary: Dear ImGui platform backend for OSX
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-1.92.2.tar.gz
sha256sum: 0f4c6275571321f0d70e1a59a76f80a105f583f776c7af95fd030d6b415b8491
:
name: libimgui-platform-osx-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui platform backend for OSX ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-docking-1.90.8+2.tar.gz
sha256sum: 69a8e6baebe2a68b49df441ee1a976e54578e0821df20fb79b9cdb1fec19207f
:
name: libimgui-platform-osx-docking
version: 1.90.9
project: imgui
summary: Dear ImGui platform backend for OSX ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-docking-1.90.9.tar.gz
sha256sum: 8acdd1c80895f760f9715ce113d83c219807e11a367c2c7253ff8554dfddd7f2
:
name: libimgui-platform-osx-docking
version: 1.91.0
project: imgui
summary: Dear ImGui platform backend for OSX ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-docking-1.91.0.tar.gz
sha256sum: 41d89b7dcc57927780becd7c82ae8e51a9bd3ad3884c1496cfb8f43b8d8b7f6c
:
name: libimgui-platform-osx-docking
version: 1.91.4
project: imgui
summary: Dear ImGui platform backend for OSX ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-docking-1.91.4.tar.gz
sha256sum: c38a868149f10eaf9d82b4837fd40902df62e3405fc7b5275dc5fa7495719825
:
name: libimgui-platform-osx-docking
version: 1.91.6
project: imgui
summary: Dear ImGui platform backend for OSX ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-docking-1.91.6.tar.gz
sha256sum: d0ec589c90ff38aae6e1b292b8586e96d34494a95ee18c2df59e8dd6fed6fc53
:
name: libimgui-platform-osx-docking
version: 1.91.9
project: imgui
summary: Dear ImGui platform backend for OSX ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-docking-1.91.9.tar.gz
sha256sum: b61a5f5a88db12b891d8fb5067c6799bd9a0438819898bce166db8d08c17079d
:
name: libimgui-platform-osx-docking
version: 1.92.2
project: imgui
summary: Dear ImGui platform backend for OSX ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-platform-osx-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-osx-docking-1.92.2.tar.gz
sha256sum: e872327dab27c72a4d8b00b4cece7ad8c2bf8c615122061f9e14a1a72d7eb977
:
name: libimgui-platform-win32
version: 1.86.0
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.86.0.tar.gz
sha256sum: 3689646fc1fe13e84537951c2011b136a709cfde4c60c7eb592f285f6de56038
:
name: libimgui-platform-win32
version: 1.87.0
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.87.0.tar.gz
sha256sum: 7ed666afd6e797797bc5836b9b712992b606024aa5f4cedb8b023319766ea376
:
name: libimgui-platform-win32
version: 1.88.0
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.88.0.tar.gz
sha256sum: 65855c4a362ebde964880070a09756c68c66bd8e60910ba842291001f677b638
:
name: libimgui-platform-win32
version: 1.90.8+2
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.90.8+2.tar.gz
sha256sum: 5086df8be8e22d450e9b4534478e94433727410fca2e2207db27a5941c1399fd
:
name: libimgui-platform-win32
version: 1.90.9
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.90.9.tar.gz
sha256sum: cd185fa70e9bf860ec78fd5b599ca3d8e30a8764e2bc451ede0caf287c8d5a5d
:
name: libimgui-platform-win32
version: 1.91.0
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.91.0.tar.gz
sha256sum: 9c4c4a684c56b0f6f7889915303ffdb749a1da5e535141453336d78555f94f3d
:
name: libimgui-platform-win32
version: 1.91.4
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.91.4.tar.gz
sha256sum: 8b439737217a2eddcbaab939fdd17ac9910240af3b2b4bb31b7055b170be2e3e
:
name: libimgui-platform-win32
version: 1.91.6
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.91.6.tar.gz
sha256sum: 6a8377965a209e0d5aa5b5c0960509d6a7fe5368252a77f6c23b2b08e15497f7
:
name: libimgui-platform-win32
version: 1.91.9
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.91.9.tar.gz
sha256sum: b42d8a73e2e8f7b5ee40fb7fe31085536b8acde07282597a91cfa50e188b7d0b
:
name: libimgui-platform-win32
version: 1.92.2
project: imgui
summary: Dear ImGui platform backend for Win32
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-1.92.2.tar.gz
sha256sum: 2d4fd21ef1d150f84bb8173e3fead99cf9530efe701565772fb8edd3fd8696c5
:
name: libimgui-platform-win32-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui platform backend for Win32 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-docking-1.90.8+2.tar.gz
sha256sum: 291052a26279e2093e8beaace6609cf53f6c724c216d0a0d5e0b6b8c976d9a69
:
name: libimgui-platform-win32-docking
version: 1.90.9
project: imgui
summary: Dear ImGui platform backend for Win32 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-docking-1.90.9.tar.gz
sha256sum: 5a55deadead5f29f4d10b04bafc196b4c7d76483e62a486b388022ef728a27ce
:
name: libimgui-platform-win32-docking
version: 1.91.0
project: imgui
summary: Dear ImGui platform backend for Win32 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-docking-1.91.0.tar.gz
sha256sum: ae2ad1b1359b2e59e5c63a7d686b31e2403f511e128d257bdcba5a3ec299bb65
:
name: libimgui-platform-win32-docking
version: 1.91.4
project: imgui
summary: Dear ImGui platform backend for Win32 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-docking-1.91.4.tar.gz
sha256sum: 884898763575f8a37ad81b615fdf89e4c663db13b0e2276e4e0598b7dcfd7b88
:
name: libimgui-platform-win32-docking
version: 1.91.6
project: imgui
summary: Dear ImGui platform backend for Win32 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-docking-1.91.6.tar.gz
sha256sum: 739a6ea477eab7989c2863e2d585896c14255b9b5abfe48893b4711dc0ee572e
:
name: libimgui-platform-win32-docking
version: 1.91.9
project: imgui
summary: Dear ImGui platform backend for Win32 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-docking-1.91.9.tar.gz
sha256sum: 39278846da6fa0d60583f49d8a09efe413c84e591e1795c9e0a2d7b6730801ca
:
name: libimgui-platform-win32-docking
version: 1.92.2
project: imgui
summary: Dear ImGui platform backend for Win32 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-platform-win32-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-platform-win32-docking-1.92.2.tar.gz
sha256sum: 981b546e1a40f64fef49eecdde5357ba5b3d493609d7938a237c9e51d43ff066
:
name: libimgui-render-dx10
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.86.0.tar.gz
sha256sum: ebc57b6f95b61ce5c27935ffd889c4f2cb25e82fbfbd50b3569008949df07533
:
name: libimgui-render-dx10
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.87.0.tar.gz
sha256sum: edbea88e3d46c80c4b0e0b064bb1927a02b7ff60c7192dd351d4e735b3c12eb3
:
name: libimgui-render-dx10
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.88.0.tar.gz
sha256sum: 6bc423e0045e53832fb798aeda5f777894c5a8c50413a1231a8a2db5a5fdf9bc
:
name: libimgui-render-dx10
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.90.8+2.tar.gz
sha256sum: f6b0503b5a2952908380f2c167fb1facd0cd7b4aa6db140846cea3cedb9bfa5a
:
name: libimgui-render-dx10
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.90.9.tar.gz
sha256sum: fc4dd62d80e7711440592669ff426072c93177bdb4c11cdd5aff79be6462a38a
:
name: libimgui-render-dx10
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.91.0.tar.gz
sha256sum: 03e7451e04657602c2ed883e6c24cccfc79f9f193ec24bd7d60e6fbf5d592a42
:
name: libimgui-render-dx10
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.91.4.tar.gz
sha256sum: 8f40d9433bd2d784979cbf4b8c6d32438a8d5b2d21d6aaa19fdd35fb1f015654
:
name: libimgui-render-dx10
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.91.6.tar.gz
sha256sum: c7c754a53db77776cf678c7ad4394a58c58b284276602a198c9e8b72c2abdd46
:
name: libimgui-render-dx10
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.91.9.tar.gz
sha256sum: 0b0fdb9dad183eca99ffb32fc19b0579471bd0d11b6ea1cc2dc1451982410f40
:
name: libimgui-render-dx10
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 10
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-1.92.2.tar.gz
sha256sum: 836d75fa98b6bcc5dec372b9c01727930fc3a2ce7acebe61375bdb87e6b88ac5
:
name: libimgui-render-dx10-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 10 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-docking-1.90.8+2.tar.gz
sha256sum: 7a203b763a17a7441788a953e8a21ceec2a58f2e36bee0158c09f21cb12dc7a5
:
name: libimgui-render-dx10-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 10 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-docking-1.90.9.tar.gz
sha256sum: 06dde85e47e382f2b125047d17aa4a9a4bcab7f1bf14550af759cfc4ed1a9de9
:
name: libimgui-render-dx10-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 10 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-docking-1.91.0.tar.gz
sha256sum: fa069568cd4ef48d6eb0d5db33ce378d3555c7b502e58ff63863eb20da96e2d9
:
name: libimgui-render-dx10-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 10 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-docking-1.91.4.tar.gz
sha256sum: 168cebd3f3dfe2a6df6c4ddb0de9c78a9961dbaf185be90f11a1e79fe03a99c1
:
name: libimgui-render-dx10-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 10 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-docking-1.91.6.tar.gz
sha256sum: 77a5344a5f7bf7c7c7c1a8e07283e912596e38a21645c178927f8692429d7a92
:
name: libimgui-render-dx10-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 10 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-docking-1.91.9.tar.gz
sha256sum: 8a78187d486f928c4f67f696b633309c8f0767e86562cdde960e21c2473ad938
:
name: libimgui-render-dx10-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 10 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx10-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx10-docking-1.92.2.tar.gz
sha256sum: d7993d49cf0a641150a5a50341093fb111e217c8f7b90eda14f4a52a44f9633e
:
name: libimgui-render-dx11
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.86.0.tar.gz
sha256sum: c8cf92265593bcb1b3d66bf8b44b904dbc5a0f2af5279351422df8dff9537815
:
name: libimgui-render-dx11
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.87.0.tar.gz
sha256sum: 622bc6d5df2211ac495dfe532a8499086cb60a19ba25cc42f2ca71a91065a21d
:
name: libimgui-render-dx11
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.88.0.tar.gz
sha256sum: 17a91302ce70f2dc4035e9cbe1a39446cf9f3d6c41ec4d8f4a035e91b19d3f79
:
name: libimgui-render-dx11
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.90.8+2.tar.gz
sha256sum: 77d8972d28b7f660e6b48b8d6ac610a6132588c88619146ca3dd3fb6ab6336e4
:
name: libimgui-render-dx11
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.90.9.tar.gz
sha256sum: 631940c60f6604f2d41337c05bc0f41ab440ce4b60d2e69cc60d705012bd958b
:
name: libimgui-render-dx11
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.91.0.tar.gz
sha256sum: a084fada3ab3e66da9f620fd97612acfe87bf90f41a35840cacc239b45a871a2
:
name: libimgui-render-dx11
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.91.4.tar.gz
sha256sum: ed5ad9f135af3c830007fc6e2c4b89eaad487cb7016daae7fdd9d468c26ff27c
:
name: libimgui-render-dx11
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.91.6.tar.gz
sha256sum: 50e6075231aa1fffec56d9ad8c78a195c3ec02fd1ca378abdff013f920b2cbb7
:
name: libimgui-render-dx11
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.91.9.tar.gz
sha256sum: 0b6ed3141fc5068ee78d8c46378369d7dfdeb6c2eff70f0ca4d3f5b6042cd372
:
name: libimgui-render-dx11
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 11
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-1.92.2.tar.gz
sha256sum: ac935886fd822c1d5f5a10ee8cade916ffa514f1fd83846c13358228e8eaad34
:
name: libimgui-render-dx11-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 11 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-docking-1.90.8+2.tar.gz
sha256sum: 2a3101d640bb741141cca04874539899a11f0866440ada20c86644db83ed47e2
:
name: libimgui-render-dx11-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 11 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-docking-1.90.9.tar.gz
sha256sum: 624a6e5e3673e95f0bd7045071d741a9b656133d6884a42895844c2acac047e6
:
name: libimgui-render-dx11-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 11 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-docking-1.91.0.tar.gz
sha256sum: 57379884f1676cf8ce38a15192311b0103fe4339b90d0f84fc8cffc46ca85d69
:
name: libimgui-render-dx11-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 11 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-docking-1.91.4.tar.gz
sha256sum: dc6b36af9ce5ad21b2eca46d5d70b4d90d75e2734c5b94025d3e69a6ae9dabff
:
name: libimgui-render-dx11-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 11 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-docking-1.91.6.tar.gz
sha256sum: f994f703aae2d53390d55df259527a673a64017dad55a662acc104cfc4f0ff9b
:
name: libimgui-render-dx11-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 11 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-docking-1.91.9.tar.gz
sha256sum: c3366c5280ed22b2c3429a316d90c774511140ab199de91c0b4acdbd22ef5a8b
:
name: libimgui-render-dx11-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 11 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx11-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx11-docking-1.92.2.tar.gz
sha256sum: 1c8a5ee96428d9a4ed9225e1d4b7a8a8188cdeb201d39acedad56c5b14b1b20d
:
name: libimgui-render-dx12
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.86.0.tar.gz
sha256sum: c443622c459077b40d7399b269a2de71e7ec885bc1420c698a69e35eeabecbde
:
name: libimgui-render-dx12
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.87.0.tar.gz
sha256sum: 6fc3593a8a16a31819a6f6d703b564b5230053db1058abae72518655fc1c7573
:
name: libimgui-render-dx12
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.88.0.tar.gz
sha256sum: a5adb832f207e68da91c1191c7e09da0820a4ffd5bf1bc36acce20910a98ee55
:
name: libimgui-render-dx12
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.90.8+2.tar.gz
sha256sum: e21e1d48f0cffe72353e3bca70e2420307a1766494920116410cbb0c450ef98b
:
name: libimgui-render-dx12
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.90.9.tar.gz
sha256sum: 33621c53891fd97ffad1e8d7c816d9eb0f12c78f5c3fc0b90fde9dee22c793c3
:
name: libimgui-render-dx12
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.91.0.tar.gz
sha256sum: acf7d5b964963654a2becc7429751648fd5e0420811e977fc69b2819aac239b3
:
name: libimgui-render-dx12
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.91.4.tar.gz
sha256sum: 8d4f74e0cafaba5c52b8fb47f77fc8ed2c0c7605465341053ffe1282e9fa8f38
:
name: libimgui-render-dx12
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.91.6.tar.gz
sha256sum: dc2373e06a7ea26ed224e99604f29291bec89218a26f56b7c6f7e0f5d110ce5c
:
name: libimgui-render-dx12
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.91.9.tar.gz
sha256sum: 885de2424f1b62703a86ceadc88aa4b38f628516f4e16b9650ce62e501e43de1
:
name: libimgui-render-dx12
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 12
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-1.92.2.tar.gz
sha256sum: 3b1f2f75be1a4e86e3adae29738c46f0f5b745b61d3a922bb78d3690bd143108
:
name: libimgui-render-dx12-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 12 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-docking-1.90.8+2.tar.gz
sha256sum: 26ae160b144ccd18cab1986a91a47e34775160db606587f68cfc81e346392040
:
name: libimgui-render-dx12-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 12 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-docking-1.90.9.tar.gz
sha256sum: 1a8664417901632d0df59cb0c5296173526ff19b6c2b8fe1e9057b8dd5ab9ed5
:
name: libimgui-render-dx12-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 12 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-docking-1.91.0.tar.gz
sha256sum: 21fb526f9bc95343e545a7bafde7bb98866ac0131072593ad26cea491bb1cf76
:
name: libimgui-render-dx12-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 12 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-docking-1.91.4.tar.gz
sha256sum: a9309cd4cd9cfd48281098bae077b677311f161c19b17cf9786f9e80ff79dc2e
:
name: libimgui-render-dx12-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 12 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-docking-1.91.6.tar.gz
sha256sum: 6a0f63ba0c404cf79ee7d4692a729cf82ede11036a237f29871e16a676b42c12
:
name: libimgui-render-dx12-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 12 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-docking-1.91.9.tar.gz
sha256sum: fdcec5e4e6027a1685929048850abfae12a11e22bad511bf1fac029e693ba2ef
:
name: libimgui-render-dx12-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 12 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx12-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx12-docking-1.92.2.tar.gz
sha256sum: d6676e47e3d6f196f7c773e6d66052058d89b02dacbb4b5cf30c1fda089f0a40
:
name: libimgui-render-dx9
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.86.0.tar.gz
sha256sum: 9e11ba63543633ec2bc32df06312cbac72664937d8be9d16634eaadfe9bfeca3
:
name: libimgui-render-dx9
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.87.0.tar.gz
sha256sum: 91471eee63c391ad39de8adce6ac8256d2b09ce634a4702482872394871dbefc
:
name: libimgui-render-dx9
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.88.0.tar.gz
sha256sum: 91ba0784d13535585d02dfa1a973de43e1ea8075a89e60c6a742277b5e81461f
:
name: libimgui-render-dx9
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.90.8+2.tar.gz
sha256sum: 67f832d722be068b3d08efbae937c129ecc8effedd76beedb00c3b4c4841311d
:
name: libimgui-render-dx9
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.90.9.tar.gz
sha256sum: f12209503f67bd9a7bcdbdececa92582d94ed19780fd76790130dc6925d4b767
:
name: libimgui-render-dx9
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.91.0.tar.gz
sha256sum: 282d4a430ad72462667b8d277d07c4ff7f04a3e62373487dd51cb2627c90f799
:
name: libimgui-render-dx9
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.91.4.tar.gz
sha256sum: 97e068f88d0cb723e410ce7007c147134fa314ca5dd9a952cafb69de3d7e9a09
:
name: libimgui-render-dx9
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.91.6.tar.gz
sha256sum: aa1979565ff1dd7a825c00577838dbcda116e06128bef766c1322e815dc8883d
:
name: libimgui-render-dx9
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.91.9.tar.gz
sha256sum: 32774147eb1ef6960b4b8753c956c847a19ab0ba7e659e468df050e7b89ab064
:
name: libimgui-render-dx9
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 9
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-1.92.2.tar.gz
sha256sum: 0b4b562e58a6eeec6c1b36bf74fe187829728916a3da55c7962cd94621d512b6
:
name: libimgui-render-dx9-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for DirectX 9 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-docking-1.90.8+2.tar.gz
sha256sum: 9e25df5e0a094d48ad6b308f419233b9f2701cb6108030ce9952a91bdb335d19
:
name: libimgui-render-dx9-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for DirectX 9 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-docking-1.90.9.tar.gz
sha256sum: 6541114332df18bdc6dae44113c67eeb1a48b9f49f51e803e508856adfc05689
:
name: libimgui-render-dx9-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for DirectX 9 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-docking-1.91.0.tar.gz
sha256sum: 7f39dd593da5f201c9e9fbec1a340f78da7ff1c3543e751e83b12a4619e1a35d
:
name: libimgui-render-dx9-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for DirectX 9 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-docking-1.91.4.tar.gz
sha256sum: d30b41cbf491785842b0912a04bfc3cc947a893587a202f0ea74a8974070603e
:
name: libimgui-render-dx9-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for DirectX 9 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-docking-1.91.6.tar.gz
sha256sum: 7dbeebec6959ef272bcf1a31257c278b7759df329749ed8af24b2a40e06ff299
:
name: libimgui-render-dx9-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for DirectX 9 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-docking-1.91.9.tar.gz
sha256sum: 8cc2ed33dcb26c624fa5971d23b32660025b304321ba1027d5b84581b3274863
:
name: libimgui-render-dx9-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for DirectX 9 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
builds: &( +windows -gcc )
bootstrap-build:
\
project = libimgui-render-dx9-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-dx9-docking-1.92.2.tar.gz
sha256sum: 72f0933ed7b2697fa34d354710fa37661983619c8e634102f9a1a531413a0f0f
:
name: libimgui-render-metal
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.86.0.tar.gz
sha256sum: 38b2b7db243cb98b42899fb0a2090602ad7958bd47478b9480ae0267259dad0c
:
name: libimgui-render-metal
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.87.0.tar.gz
sha256sum: a65e5eb02bedc7666cce96b099c13133049213d7be76d646c3331d75d5211fb9
:
name: libimgui-render-metal
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.88.0.tar.gz
sha256sum: 6278d14e2230ee5d34b31b65d5eb5d6d7b275ba3afeeefe003cfc1dc26b5bc5d
:
name: libimgui-render-metal
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.90.8+2.tar.gz
sha256sum: c49defd626cfaaea117e67c14c4ba17d9d96378caedc5d49051c3989fd7bbd2a
:
name: libimgui-render-metal
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.90.9.tar.gz
sha256sum: 75ca6101f2b3c7812296bb8e566a1eab02ddb3f7c89850f68b651ba6128300a9
:
name: libimgui-render-metal
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.91.0.tar.gz
sha256sum: 30fcd4e90bba1415e5f294d2dd06cd528e2f1045173614fb86a6cc001ef57f37
:
name: libimgui-render-metal
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.91.4.tar.gz
sha256sum: 35aabe46eddb43ffb9fe450f2aa2ce589bc4393d48795e58ea961929c6ec748d
:
name: libimgui-render-metal
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.91.6.tar.gz
sha256sum: b0003cb19753698a5e11adde96aec77800117a8036ddebaf58a1c29e0527420a
:
name: libimgui-render-metal
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.91.9.tar.gz
sha256sum: 8173b107859aa0e2d68fa0e8e74937a6210c9d8a727947624625d2759c096871
:
name: libimgui-render-metal
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for Metal
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-1.92.2.tar.gz
sha256sum: 4cd54bec7a89fb1cc440da9fc562f4e57a6a89cf2706f36ecae4d980e24ed3fa
:
name: libimgui-render-metal-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for Metal ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-docking-1.90.8+2.tar.gz
sha256sum: 77498dc6578c14907a2d063519586073189af7de53f2a37181c2197c2d22fd94
:
name: libimgui-render-metal-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for Metal ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-docking-1.90.9.tar.gz
sha256sum: 279609f2ba9203ae559d70a99762a3b00948576edabe7dababc9957a3782dcc3
:
name: libimgui-render-metal-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for Metal ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-docking-1.91.0.tar.gz
sha256sum: dd8693aa875cc068ec23d6edd01a723d9270bb397b1c79f476bc4fb2d58aacca
:
name: libimgui-render-metal-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for Metal ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-docking-1.91.4.tar.gz
sha256sum: 7680ab093b7bbadee2c121bc8bff838ad4d510a635183476cc89898f3180cab0
:
name: libimgui-render-metal-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for Metal ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-docking-1.91.6.tar.gz
sha256sum: 5a69055d6ef245aaeac939083d835e585c3dd4e71bdac6aaa27d646d133448fa
:
name: libimgui-render-metal-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for Metal ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-docking-1.91.9.tar.gz
sha256sum: e1764584df66fba7fde9eb4fa32fb15fff7c96957b9f54681a6074f18ba1497a
:
name: libimgui-render-metal-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for Metal ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
builds: &( +macos -gcc )
bootstrap-build:
\
project = libimgui-render-metal-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-metal-docking-1.92.2.tar.gz
sha256sum: 42fcb11f4aa8d9eb02adbf0ffb5db25e0057d64e4c97e861f1573e3dcf3128fe
:
name: libimgui-render-opengl2
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.86.0.tar.gz
sha256sum: 1747457f28ac3de8c49b83b784717eaab8eb896075a945dd1a6995ceb374a6de
:
name: libimgui-render-opengl2
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.87.0.tar.gz
sha256sum: 840140baad80de42a4e4ede964d9b43834f59fa56fc5d1d4d25ea4e43a3e635e
:
name: libimgui-render-opengl2
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.88.0.tar.gz
sha256sum: b81b47da5a847703a6f4125603390adb17491fb6e4b0fa0c5ad772640bdc2e26
:
name: libimgui-render-opengl2
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.90.8+2.tar.gz
sha256sum: 9294d7b71e8cf5b928d3a2c93b42798482bc5ec6ce0791df00e3452929da4f0c
:
name: libimgui-render-opengl2
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.90.9.tar.gz
sha256sum: 0dfc53dac285e455143f229babc526f3cc4b6c54720182e5e7122ca13d2d2108
:
name: libimgui-render-opengl2
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.91.0.tar.gz
sha256sum: 88563aec600649ee3f2ca77bf45b2b8466bb31049f66e644894e246f88bfef9f
:
name: libimgui-render-opengl2
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.91.4.tar.gz
sha256sum: 8f1917f7415fadb8451716c3cb0da54405188f4cfce4a45231d60e98afe87dbf
:
name: libimgui-render-opengl2
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.91.6.tar.gz
sha256sum: 57b1ac48c2116544f5fa2b4dd12b2e0a45c07c0818a7d3455ac6aafb28eb3e4a
:
name: libimgui-render-opengl2
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.91.9.tar.gz
sha256sum: a24f0638af918287233f8f5b7f7af6f03b3625395f7302eb2081f7dc74a709dc
:
name: libimgui-render-opengl2
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for Open GL 2
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-1.92.2.tar.gz
sha256sum: 08bdf38bcdb3e61d6f5131d71720fe87419cdd6c31c14b86b8cacfce4c71f69a
:
name: libimgui-render-opengl2-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for Open GL 2 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-docking-1.90.8+2.tar.gz
sha256sum: fe6488a7d1bd8b3a57108baa4d0bc84902fc9ab8a5822ebdb423b32267980a97
:
name: libimgui-render-opengl2-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for Open GL 2 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-docking-1.90.9.tar.gz
sha256sum: bab6862ed4df997d56b6be3aad66538c2236e7f3606eaf64072be48c44df1a31
:
name: libimgui-render-opengl2-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for Open GL 2 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-docking-1.91.0.tar.gz
sha256sum: ad9884b26051a1c6b5ac5d1fc70add776d1ab37e77a24e9b94548ba77aff66e2
:
name: libimgui-render-opengl2-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for Open GL 2 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-docking-1.91.4.tar.gz
sha256sum: 3cc4df94e8e46b7525f37c2edc64053d10bc53383cc49f95bfb8b3ef193bc883
:
name: libimgui-render-opengl2-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for Open GL 2 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-docking-1.91.6.tar.gz
sha256sum: 48fa2a0a25ad95644b6127e32d86dfcc86c4341971ebfcc3efdd0ed2e469547e
:
name: libimgui-render-opengl2-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for Open GL 2 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-docking-1.91.9.tar.gz
sha256sum: 46d01cd04354ccbbd8a79d2b02309dc6f14c95a7a284640828ef7ab84f08d67a
:
name: libimgui-render-opengl2-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for Open GL 2 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl2-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl2-docking-1.92.2.tar.gz
sha256sum: 2d9265dca4a99409f5b982233c52c7de79a9c4dc843bbb53aabce70636a52940
:
name: libimgui-render-opengl3
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.86.0.tar.gz
sha256sum: aca81c3b1a864654b7c9ac8d9803bceffea50436a4f657b12a427851e3a6e681
:
name: libimgui-render-opengl3
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.87.0.tar.gz
sha256sum: ad84b1141837a877a0dcbc75242c59033fde2e0a3d40c82f9e5788acf14d36ae
:
name: libimgui-render-opengl3
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.88.0.tar.gz
sha256sum: 0053ee14ba80a9761b6ff6fca214df05140b51f31c5a56ca38d71aec1dc67465
:
name: libimgui-render-opengl3
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.90.8+2.tar.gz
sha256sum: 2a4ea8b63ecc4435c2a53c94cbb348e3273d37a5fe485ecc7e48c07b0df3c546
:
name: libimgui-render-opengl3
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.90.9.tar.gz
sha256sum: 1cb3930f4a2b6afaa6df3b61b87e4c62ec640140f3cdc069fb27a237cec99876
:
name: libimgui-render-opengl3
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.91.0.tar.gz
sha256sum: d679ac18d3bccfe9963b2884e7bd75f84dc5f21d15700cb4cf07926eb9e1c281
:
name: libimgui-render-opengl3
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.91.4.tar.gz
sha256sum: 9abe7ee6a73892b05b0a2400b27eca43e220400e8bcd18967824feff526f19d3
:
name: libimgui-render-opengl3
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.91.6.tar.gz
sha256sum: 1a11d2123f67774749f3f812ff5d7365ddaa7757781f0256e33d797e4fc537d8
:
name: libimgui-render-opengl3
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.91.9.tar.gz
sha256sum: 5157e3dd2caf66a447fdc6101924b0dbf9c5dbf71ad5412f6b6ef039865f5d40
:
name: libimgui-render-opengl3
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for OpenGL 3
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-1.92.2.tar.gz
sha256sum: dd693b23568e137a24c9e6b4f0ac7ed093c0ea898fbd9216136c384064831dde
:
name: libimgui-render-opengl3-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for OpenGL 3 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-docking-1.90.8+2.tar.gz
sha256sum: 077a1208989b7f0dfbd661b2e411d8896d10ad0ac984b1cb354bd8a04ea3b5d1
:
name: libimgui-render-opengl3-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for OpenGL 3 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-docking-1.90.9.tar.gz
sha256sum: af423e7797b49731e1125e7aa825af9805635b286c9a17a87d2f5f930b66ad40
:
name: libimgui-render-opengl3-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for OpenGL 3 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-docking-1.91.0.tar.gz
sha256sum: ac07c21f693c96c732fa9af54972955c901bf2a5037ce4c0307be3b34ae5a8c6
:
name: libimgui-render-opengl3-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for OpenGL 3 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-docking-1.91.4.tar.gz
sha256sum: 1451e02293de9f1d7ea8bcba19bda328b10f34a09eba8495f40cfce93291a8ca
:
name: libimgui-render-opengl3-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for OpenGL 3 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-docking-1.91.6.tar.gz
sha256sum: 696a920f764d3dfa4db50eed3be6d15432204124592a570b4796a9cca107771f
:
name: libimgui-render-opengl3-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for OpenGL 3 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-docking-1.91.9.tar.gz
sha256sum: 4a1c10c237f3faba8296b803ce69690bcf1195562894d26df07f915b1c9f91a4
:
name: libimgui-render-opengl3-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for OpenGL 3 ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
depends: libopengl-meta ^1.0.0-
bootstrap-build:
\
project = libimgui-render-opengl3-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-opengl3-docking-1.92.2.tar.gz
sha256sum: 51ae3889fac4159535fcfe76fe27f918350adac6a37a2f4c754d46c546a1218b
:
name: libimgui-render-vulkan
version: 1.86.0
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2021 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.86.0
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.86.0.tar.gz
sha256sum: 5a9539cc65b17b4a154240a4188014532fe67ccbc534fc77edf783c2c249ce25
:
name: libimgui-render-vulkan
version: 1.87.0
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====
[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)


<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S).

Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

----

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

| [Usage](#usage) - [How it works](#how-it-works) - [Releases &\
 Changelogs](#releases--changelogs) - [Demo](#demo) - [Integration](#integrat\
ion) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices.

**Backends for a variety of graphics api and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. See the\
 [Integration](#integration) section of this document for details. You may\
 also create your own backend. Anywhere where you can render textured\
 triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)
<br>_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium,\
 16px)_

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20210331.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20210331.zip) (Windows, 1.83 WIP, built 2021/03/31, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/4451)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but\
 it is generally safe and recommended to sync to master/latest. The library\
 is fairly stable and regressions tend to be fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/4451)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail)

**How can I help financing further development of Dear ImGui?**

See [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) page.

Sponsors
--------

Ongoing Dear ImGui development is currently financially supported by users\
 and private sponsors:

*Platinum-chocolate sponsors*
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/\
all/1)

*Double-chocolate sponsors*
- [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-l\
ibrary-for-c-dear-imgui), [Supercell](https://supercell.com)

*Chocolate sponsors*
- [Activision](https://careers.activision.com/c/programmingsoftware-engineeri\
ng-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras\
 Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-stu\
dios.com), [Epic](https://www.unrealengine.com/en-US/megagrants),\
 [Google](https://github.com/google/filament), [Nvidia](https://developer.nvi\
dia.com/nvidia-omniverse), [RAD Game Tools](http://www.radgametools.com/)

*Salty-caramel sponsors*
- [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grin\
dinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level\
 Games](https://www.nextlevelgames.com), [O-Net Communications\
 (USA)](http://en.o-netcom.com)

Please see [detailed list of Dear ImGui supporters](https://github.com/ocornu\
t/imgui/wiki/Sponsors) for past sponsors.
From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter\
 [@ShironekoBen](https://github.com/ShironekoBen).
A large portion of work on automation systems, regression tests and other\
 features are currently unpublished.

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.87.0
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.87.0.tar.gz
sha256sum: 62b15659912bdaab5b19c76b9a20f77e0f6f3d108cecd3483a3d1f033831ba0a
:
name: libimgui-render-vulkan
version: 1.88.0
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 technical support, maintenance, sponsoring contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_

Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Sponsors](https://github.com/ocornut/imgui/wiki/Spo\
nsors) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support,\
 FAQ](#support-frequently-asked-questions-faq) -  [How to help](#how-to-help)\
 - [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors) -\
 [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Languages & frameworks\
 backends/bindings](https://github.com/ocornut/imgui/wiki/Bindings) -\
 [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-u\
sing-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes\
) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline enabled application. It is fast, portable, renderer agnostic and\
 self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal, and lacks certain features normally found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in games engine (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on consoles platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by many major actors in the game industry.

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).

**No specific build process is required**. You can add the .cpp files to your\
 existing project.

You will need a backend to integrate Dear ImGui in your app. The backend\
 passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui,\
 and is in charge of rendering the resulting vertices. **Backends for a\
 variety of graphics api and rendering platforms** are provided in the\
 [backends/](https://github.com/ocornut/imgui/tree/master/backends) folder,\
 along with example applications in the [examples/](https://github.com/ocornu\
t/imgui/tree/master/examples) folder. See the [Integration](#integration)\
 section of this document for details. You may also create your own backend.\
 Anywhere where you can render textured triangles, you can render Dear ImGui.

After Dear ImGui is setup in your application, you can use it from\
 \_anywhere\_ in your program loop:

Code:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
Result:
<br>![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocorn\
ut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output\
 (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/captu\
re_readme_styles_0002.png)

Code:
```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color (stored as ~4 floats)
ImGui::ColorEdit4("Color", my_color);

// Plot some values
const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f };
ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
Result:
<br>![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgu\
i/web/v180/code_sample_04_color.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweaks variables while your application is running, and\
 remove the code a minute later! Dear ImGui is not just for tweaking values.\
 You can use it to trace a running algorithm by just emitting text commands.\
 You can use it along with your own reflection data to browse your dataset\
 live. You can use it to expose the internals of a subsystem in your engine,\
 to create a logger, an inspection tool, a profiler, a debugger, an entire\
 game making editor/framework, etc.

### How it works

Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/im\
gui/wiki#about-the-imgui-paradigm) section if you want to understand the core\
 principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous\
 state duplication, state synchronization and state retention from the user's\
 point of view. It is less error prone (less code and less bugs) than\
 traditional retained-mode interfaces, and lends itself to create dynamic\
 user interfaces.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode gui for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the gui functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`.

![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v\
167/v167-misc.png)

You should be able to build the examples from sources (tested on\
 Windows/Mac/Linux). If you don't, let us know! If you want to have a quick\
 look at some Dear ImGui features, you can download Windows binaries of the\
 demo app here:
- [imgui-demo-binaries-20220504.zip](https://www.dearimgui.org/binaries/imgui\
-demo-binaries-20220504.zip) (Windows, 1.88 WIP, built 2022/05/04, master\
 branch) or [older demo binaries](https://www.dearimgui.org/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at different scale, and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.org/faq)).

### Integration

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more of the imgui_impl_xxxx files instead of rewriting them:\
 this will be less work for you and you can get Dear ImGui running\
 immediately. You can _later_ decide to rewrite a custom backend using your\
 custom engine functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/ma\
ster/examples) folder is populated with applications doing just that. If you\
 are an experienced programmer at ease with those concepts, it should take\
 you less than two hours to integrate Dear ImGui in your custom engine.\
 **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq),\
 comments, and some of the examples/ application!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Odin, Pascal,\
 PureBasic, Python, Ruby, Rust, Swift...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot,\
 GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine,\
 Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks,\
 OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer,\
 SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32\
 GDI, WxWidgets.
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are\
 auto-generated, you can use its json/lua output to generate bindings for\
 other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Text editors, node editors, timeline editors, plotting, software renderers,\
 remote network access, memory editors, gizmos etc.

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Upcoming Changes

Some of the goals for 2022 are:
- Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109),\
 in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
- Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.c\
om/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut\
/imgui/tree/docking) branch looking for feedback)
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/i\
mgui/issues/787))
- Work on automation and testing system, both to test the library and\
 end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
- Make the examples look better, improve styles, improve font support, make\
 the examples hi-DPI and multi-DPI aware.

### Gallery

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/5243)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

Custom engine [ehre](https://github.com/tksuoran/erhe) (docking branch)
[![ehre](https://user-images.githubusercontent.com/8225057/166686854-3f76bf28\
-0442-4fac-8e65-9fc9650d2ed0.jpg)](https://user-images.githubusercontent.com/\
994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png)

Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.c\
om) (2017)
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.co\
m/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)

Custom engine (untitled)
[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/\
v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornu\
t/imgui/web/v160/editor_white.png)

[Tracy Profiler](https://github.com/wolfpld/tracy)
![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v1\
76/tracy_profiler.png)

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions).

For other questions, bug reports, requests, feedback, you may post on [GitHub\
 Issues](https://github.com/ocornut/imgui/issues). Please read and fill the\
 New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to master/latest. The library is fairly stable and regressions tend to be\
 fixed fast when reported.

Advanced users may want to use the `docking` branch with [Multi-Viewport](htt\
ps://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/o\
cornut/imgui/issues/2109) features. This branch is kept in sync with master\
 regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes),\
 [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using\
 dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also see the [Gallery Threads](https://github.com/\
ocornut/imgui/issues/5243)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/issues](https://github.com/ocornut/imgui/issues) and\
 [Github Discussions](https://github.com/ocornut/imgui/discussions).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest in the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Have your company financially support this project (please reach by e-mail\
 to say hi!).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see **[detailed list of current and past Dear ImGui\
 supporters](https://github.com/ocornut/imgui/wiki/Sponsors)** for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors (2022): Omar Cornut [@ocornut](https://github.com/ocor\
nut), Rokas Kupstys [@rokups](https://github.com/rokups) (a large portion of\
 work on automation systems, regression tests and other features are\
 currently unpublished).

Sponsoring, support contracts and other B2B transactions are hosted and\
 handled by [Lizardcube](https://www.lizardcube.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT\
 license).

Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/n\
othings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.88.0
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.88.0.tar.gz
sha256sum: 03f23570e5c82d66d46e3dff8439cb8de704b74414ce1eb563fca7236393667d
:
name: libimgui-render-vulkan
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.8
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.90.8+2.tar.gz
sha256sum: 21fe604bba292637996ed119db47a3ec5894ac8536b0db5ff698a27606ab96c5
:
name: libimgui-render-vulkan
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.90.9
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.90.9.tar.gz
sha256sum: f586179256e7adc6be8c83271ca605325e7904028ce3e71511353d91ea34ab42
:
name: libimgui-render-vulkan
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui == 1.91.0
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.91.0.tar.gz
sha256sum: 54cfceb93ee1e9ddc9c338912b4c9196f45ca24640ae04526b36d850893bf31e
:
name: libimgui-render-vulkan
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.4
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.91.4.tar.gz
sha256sum: 94cd5fb9c386c7450b11ee29fa075810b6a7818fa7e9a2a4418a56eb4c7854ce
:
name: libimgui-render-vulkan
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.6
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.91.6.tar.gz
sha256sum: 66568b4126e4724b9292a60f3f5ea3336bc773f8ede9e6293d5113489160791c
:
name: libimgui-render-vulkan
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.91.9
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.91.9.tar.gz
sha256sum: b27eb9acb85bc586ee3df7568774d204f6c77a028b12145ef856eecec04147ce
:
name: libimgui-render-vulkan
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for Vulkan
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui == 1.92.2
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-1.92.2.tar.gz
sha256sum: 71292a3ec299bb18f46626478eb30287950e17a0f47f6518bb8fe028b703d568
:
name: libimgui-render-vulkan-docking
version: 1.90.8+2
project: imgui
summary: Dear ImGui render backend for Vulkan ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.8
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-docking-1.90.8+2.tar.gz
sha256sum: e5204fd4b44f5a814b6025339000fc50a12ee486728be6ef08b1f2ae511e7a0a
:
name: libimgui-render-vulkan-docking
version: 1.90.9
project: imgui
summary: Dear ImGui render backend for Vulkan ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) -\
 [Integration](#integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide and [Integration](#integration) section of this document for more\
 details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.90.9
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-docking-1.90.9.tar.gz
sha256sum: 3bee8b0096df11454830affe4079ef7ca9bb06fca818196b67cb765062709f5f
:
name: libimgui-render-vulkan-docking
version: 1.91.0
project: imgui
summary: Dear ImGui render backend for Vulkan ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues/7503)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109)\
 features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues/7503)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis.
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libimgui-docking == 1.91.0
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-docking-1.91.0.tar.gz
sha256sum: b978bf50dc4c70ddaf2fb23cf1f0a1ba239e0cbe615fac8d0a08e4d28f4e9ab4
:
name: libimgui-render-vulkan-docking
version: 1.91.4
project: imgui
summary: Dear ImGui render backend for Vulkan ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20240105.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20240105.zip) (Windows, 1.90.1 WIP, built 2024/01/05, master)\
 or [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.4
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-docking-1.91.4.tar.gz
sha256sum: 0b8326a0e47cf7ab7f591bfca7ff5b14f7acf13b2e0adca68fcf818a6dc4ff4d
:
name: libimgui-render-vulkan-docking
version: 1.91.6
project: imgui
summary: Dear ImGui render backend for Vulkan ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_Renderer, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.6
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-docking-1.91.6.tar.gz
sha256sum: d582e7b0bfd72d8529272ab341756c3bce0c6ff0bbcc8e18ef301eea6e406520
:
name: libimgui-render-vulkan-docking
version: 1.91.9
project: imgui
summary: Dear ImGui render backend for Vulkan ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Languages bindings & frameworks\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20241211.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20241211.zip) (Windows, 1.91.6, built 2024/11/11, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory takes you less than an\
 hour to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 omar AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.91.9
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-docking-1.91.9.tar.gz
sha256sum: 3ede7adba0a464ffd7baefd4c0c3334131cb118d453d81ddba8a4056d1de7aa5
:
name: libimgui-render-vulkan-docking
version: 1.92.2
project: imgui
summary: Dear ImGui render backend for Vulkan ; docking branch
license: MIT
description:
\
Dear ImGui
=====

<center><b><i>"Give someone state and they'll have a bug one day, but teach\
 them how to represent state in two separate locations that have to be kept\
 in sync and they'll have bugs for a lifetime."</i></b></center> <a\
 href="https://twitter.com/rygorous/status/1507178315886444544">-ryg</a>

----

[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)]\
(https://github.com/ocornut/imgui/actions?workflow=build) [![Static Analysis\
 Status](https://github.com/ocornut/imgui/workflows/static-analysis/badge.svg\
)](https://github.com/ocornut/imgui/actions?workflow=static-analysis)\
 [![Tests Status](https://github.com/ocornut/imgui_test_engine/workflows/test\
s/badge.svg)](https://github.com/ocornut/imgui_test_engine/actions?workflow=t\
ests)

<sub>(This library is available under a free and permissive license, but\
 needs financial support to sustain its continued improvements. In addition\
 to maintenance and stability there are many desirable features yet to be\
 added. If your company is using Dear ImGui, please consider reaching\
 out.)</sub>

Businesses: support continued development and maintenance via invoiced\
 sponsoring/support contracts:
<br>&nbsp;&nbsp;_E-mail: contact @ dearimgui dot com_
<br>Individuals: support continued development and maintenance\
 [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=\
WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Fund\
ing) page.

| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) -\
 [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting\
 Started & Integration](#getting-started--integration) |
:----------------------------------------------------------: |
| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-fa\
q) -  [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com\
/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |
| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github\
.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework\
 backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using\
 Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui)\
 - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |

### The Pitch

Dear ImGui is a **bloat-free graphical user interface library for C++**. It\
 outputs optimized vertex buffers that you can render anytime in your\
 3D-pipeline-enabled application. It is fast, portable, renderer agnostic,\
 and self-contained (no external dependencies).

Dear ImGui is designed to **enable fast iterations** and to **empower\
 programmers** to create **content creation tools and visualization / debug\
 tools** (as opposed to UI for the average end-user). It favors simplicity\
 and productivity toward this goal and lacks certain features commonly found\
 in more high-level libraries. Among other things, full internationalization\
 (right-to-left text, bidirectional text, text shaping etc.) and\
 accessibility features are not supported.

Dear ImGui is particularly suited to integration in game engines (for\
 tooling), real-time 3D applications, fullscreen applications, embedded\
 applications, or any applications on console platforms where operating\
 system features are non-standard.

 - Minimize state synchronization.
 - Minimize UI-related state storage on user side.
 - Minimize setup and maintenance.
 - Easy to use to create dynamic UI which are the reflection of a dynamic\
 data set.
 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more\
 elaborate tools.
 - Easy to hack and improve.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.
 - Battle-tested, used by [many major actors in the game industry](https://gi\
thub.com/ocornut/imgui/wiki/Software-using-dear-imgui).

### Usage

**The core of Dear ImGui is self-contained within a few platform-agnostic\
 files** which you can easily compile in your application/engine. They are\
 all the files in the root folder of the repository (imgui*.cpp, imgui*.h).\
 **No specific build process is required**. You can add the .cpp files into\
 your existing project.

**Backends for a variety of graphics API and rendering platforms** are\
 provided in the [backends/](https://github.com/ocornut/imgui/tree/master/bac\
kends) folder, along with example applications in the [examples/](https://git\
hub.com/ocornut/imgui/tree/master/examples) folder. You may also create your\
 own backend. Anywhere where you can render textured triangles, you can\
 render Dear ImGui.

See the [Getting Started & Integration](#getting-started--integration)\
 section of this document for more details.

After Dear ImGui is set up in your application, you can use it from\
 \_anywhere\_ in your program loop:
```cpp
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("Save"))
    MySaveFunction();
ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
```
![sample code output (dark, segoeui font, freetype)](https://user-images.gith\
ubusercontent.com/8225057/191050833-b7ecf528-bfae-4a9f-ac1b-f3d83437a2f4.png)
![sample code output (light, segoeui font, freetype)](https://user-images.git\
hubusercontent.com/8225057/191050838-8742efd4-504d-4334-a9a2-e756d15bc2ab.png)

```cpp
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ }
        if (ImGui::MenuItem("Save", "Ctrl+S"))   { /* Do stuff */ }
        if (ImGui::MenuItem("Close", "Ctrl+W"))  { my_tool_active = false; }
        ImGui::EndMenu();
    }
    ImGui::EndMenuBar();
}

// Edit a color stored as 4 floats
ImGui::ColorEdit4("Color", my_color);

// Generate samples and plot them
float samples[100];
for (int n = 0; n < 100; n++)
    samples[n] = sinf(n * 0.2f + ImGui::GetTime() * 1.5f);
ImGui::PlotLines("Samples", samples, 100);

// Display contents in a scrolling region
ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
ImGui::BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
    ImGui::Text("%04d: Some text", n);
ImGui::EndChild();
ImGui::End();
```
![my_first_tool_v188](https://user-images.githubusercontent.com/8225057/19105\
5698-690a5651-458f-4856-b5a9-e8cc95c543e2.gif)

Dear ImGui allows you to **create elaborate tools** as well as very\
 short-lived ones. On the extreme side of short-livedness: using the\
 Edit&Continue (hot code reload) feature of modern compilers you can add a\
 few widgets to tweak variables while your application is running, and remove\
 the code a minute later! Dear ImGui is not just for tweaking values. You can\
 use it to trace a running algorithm by just emitting text commands. You can\
 use it along with your own reflection data to browse your dataset live. You\
 can use it to expose the internals of a subsystem in your engine, to create\
 a logger, an inspection tool, a profiler, a debugger, an entire game-making\
 editor/framework, etc.

### How it works

The IMGUI paradigm through its API tries to minimize superfluous state\
 duplication, state synchronization, and state retention from the user's\
 point of view. It is less error-prone (less code and fewer bugs) than\
 traditional retained-mode interfaces, and lends itself to creating dynamic\
 user interfaces. Check out the Wiki's [About the IMGUI paradigm](https://git\
hub.com/ocornut/imgui/wiki#about-the-imgui-paradigm) section for more details.

Dear ImGui outputs vertex buffers and command lists that you can easily\
 render in your application. The number of draw calls and state changes\
 required to render them is fairly small. Because Dear ImGui doesn't know or\
 touch graphics state directly, you can call its functions  anywhere in your\
 code (e.g. in the middle of a running algorithm, or in the middle of your\
 own rendering process). Refer to the sample applications in the examples/\
 folder for instructions on how to integrate Dear ImGui with your existing\
 codebase.

_A common misunderstanding is to mistake immediate mode GUI for immediate\
 mode rendering, which usually implies hammering your driver/GPU with a bunch\
 of inefficient draw calls and state changes as the GUI functions are called.\
 This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a\
 small list of draw calls batches. It never touches your GPU directly. The\
 draw call batches are decently optimal and you can render them later, in\
 your app or even remotely._

### Releases & Changelogs

See [Releases](https://github.com/ocornut/imgui/releases) page for decorated\
 Changelogs.
Reading the changelogs is a good way to keep up to date with the things Dear\
 ImGui has to offer, and maybe will give you ideas of some features that\
 you've been ignoring until now!

### Demo

Calling the `ImGui::ShowDemoWindow()` function will create a demo window\
 showcasing a variety of features and examples. The code is always available\
 for reference in `imgui_demo.cpp`. [Here's how the demo looks](https://raw.g\
ithubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png).

You should be able to build the examples from sources. If you don't, let us\
 know! If you want to have a quick look at some Dear ImGui features, you can\
 download Windows binaries of the demo app here:
- [imgui-demo-binaries-20250625.zip](https://www.dearimgui.com/binaries/imgui\
-demo-binaries-20250625.zip) (Windows, 1.92.0, built 2025/06/25, master) or\
 [older binaries](https://www.dearimgui.com/binaries).

The demo applications are not DPI aware so expect some blurriness on a 4K\
 screen. For DPI awareness in your application, you can load/reload your font\
 at a different scale and scale your style with `style.ScaleAllSizes()` (see\
 [FAQ](https://www.dearimgui.com/faq)).

### Getting Started & Integration

See the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Start\
ed) guide for details.

On most platforms and when using C++, **you should be able to use a\
 combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/m\
aster/backends) backends without modification** (e.g. `imgui_impl_win32.cpp`\
 + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms,\
 consider using more imgui_impl_xxxx files instead of rewriting them: this\
 will be less work for you, and you can get Dear ImGui running immediately.\
 You can _later_ decide to rewrite a custom backend using your custom engine\
 functions if you wish so.

Integrating Dear ImGui within your custom engine is a matter of 1) wiring\
 mouse/keyboard/gamepad inputs 2) uploading a texture to your GPU/render\
 engine 3) providing a render function that can bind textures and render\
 textured triangles, which is essentially what Backends are doing. The\
 [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is\
 populated with applications doing just that: setting up a window and using\
 backends. If you follow the [Getting Started](https://github.com/ocornut/img\
ui/wiki/Getting-Started) guide it should in theory take you less than an hour\
 to integrate Dear ImGui.  **Make sure to spend time reading the\
 [FAQ](https://www.dearimgui.com/faq), comments, and the examples\
 applications!**

Officially maintained backends/bindings (in repository):
- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, Metal, OpenGL/ES/ES2,\
 SDL_GPU, SDL_Renderer2/3, Vulkan, WebGPU.
- Platforms: GLFW, SDL2/SDL3, Win32, Glut, OSX, Android.
- Frameworks: Allegro5, Emscripten.

[Third-party backends/bindings](https://github.com/ocornut/imgui/wiki/Binding\
s) wiki page:
- Languages: C, C# and: Beef, ChaiScript, CovScript, Crystal, D, Go, Haskell,\
 Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lobster, Lua, Nim, Odin,\
 Pascal, PureBasic, Python, ReaScript, Ruby, Rust, Swift, Zig...
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder,\
 Cocos2d-x, Defold, Diligent Engine, Ebiten, Flexium, GML/Game Maker Studio,\
 GLEQ, Godot, GTK3, Irrlicht Engine, JUCE, LÖVE+LUA, Mach Engine, Magnum,\
 Marmalade, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS/Switch/WiiU\
 (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop,\
 px_render, Qt/QtDirect3D, raylib, SFML, Sokol, Unity, Unreal Engine 4/5,\
 UWP, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
- Many bindings are auto-generated (by good old [cimgui](https://github.com/c\
imgui/cimgui) or newer/experimental [dear_bindings](https://github.com/dearim\
gui/dear_bindings)), you can use their metadata output to generate bindings\
 for other languages.

[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Exte\
nsions) wiki page:
- Automation/testing, Text editors, node editors, timeline editors, plotting,\
 software renderers, remote network access, memory editors, gizmos, etc.\
 Notable and well supported extensions include [ImPlot](https://github.com/ep\
ezent/implot) and [Dear ImGui Test Engine](https://github.com/ocornut/imgui_t\
est_engine).

Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and\
 ideas.

### Gallery

Examples projects using Dear ImGui: [Tracy](https://github.com/wolfpld/tracy)\
 (profiler), [ImHex](https://github.com/WerWolv/ImHex) (hex editor/data\
 analysis), [RemedyBG](https://remedybg.itch.io/remedybg) (debugger) and\
 [hundreds of others](https://github.com/ocornut/imgui/wiki/Software-using-De\
ar-ImGui).

For more user-submitted screenshots of projects using Dear ImGui, check out\
 the [Gallery Threads](https://github.com/ocornut/imgui/issues?q=label%3Agall\
ery)!

For a list of third-party widgets and extensions, check out the [Useful\
 Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions)\
 wiki page.

|  |  |
|--|--|
| Custom engine [erhe](https://github.com/tksuoran/erhe) (docking\
 branch)<BR>[![erhe](https://user-images.githubusercontent.com/8225057/190203\
358-6988b846-0686-480e-8663-1311fbd18abd.jpg)](https://user-images.githubuser\
content.com/994606/147875067-a848991e-2ad2-4fd3-bf71-4aeb8a547bcf.png) |\
 Custom engine for [Wonder Boy: The Dragon's Trap](http://www.TheDragonsTrap.\
com) (2017)<BR>[![the dragon's trap](https://user-images.githubusercontent.co\
m/8225057/190203379-57fcb80e-4aec-4fec-959e-17ddd3cd71e5.jpg)](https://cloud.\
githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93\
b048a.png) |
| Custom engine (untitled)<BR>[![editor white](https://user-images.githubuser\
content.com/8225057/190203393-c5ac9f22-b900-4d1e-bfeb-6027c63e3d92.jpg)](http\
s://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) |\
 Tracy Profiler ([github](https://github.com/wolfpld/tracy))<BR>[![tracy\
 profiler](https://user-images.githubusercontent.com/8225057/190203401-7b595f\
6e-607c-44d3-97ea-4c2673244dfb.jpg)](https://raw.githubusercontent.com/wiki/o\
cornut/imgui/web/v176/tracy_profiler.png) |

### Support, Frequently Asked Questions (FAQ)

See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob\
/master/docs/FAQ.md) where common questions are answered.

See: [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started)\
 and [Wiki](https://github.com/ocornut/imgui/wiki) for many links,\
 references, articles.

See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wik\
i#about-the-imgui-paradigm) to read/learn about the Immediate Mode GUI\
 paradigm.

See: [Upcoming Changes](https://github.com/ocornut/imgui/wiki/Upcoming-Change\
s).

See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_t\
est_engine) for Automation & Testing.

For the purposes of getting search engines to crawl the wiki, here's a link\
 to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki)\
 (not for humans, [here's why](https://github-wiki-see.page/)).

Getting started? For first-time users having issues compiling/linking/running\
 or issues loading fonts, please use [GitHub Discussions](https://github.com/\
ocornut/imgui/discussions). For ANY other questions, bug reports, requests,\
 feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/is\
sues). Please read and fill the New Issue template carefully.

Private support is available for paying business customers (E-mail: _contact\
 @ dearimgui dot com_).

**Which version should I get?**

We occasionally tag [Releases](https://github.com/ocornut/imgui/releases)\
 (with nice releases notes) but it is generally safe and recommended to sync\
 to latest `master` or `docking` branch. The library is fairly stable and\
 regressions tend to be fixed fast when reported. Advanced users may want to\
 use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/im\
gui/wiki/Multi-Viewports) and [Docking](https://github.com/ocornut/imgui/wiki\
/Docking) features. This branch is kept in sync with master regularly.

**Who uses Dear ImGui?**

See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Funding &\
 Sponsors](https://github.com/ocornut/imgui/wiki/Funding), and [Software\
 using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-\
imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your\
 game/software if you can! Also, see the [Gallery Threads](https://github.com\
/ocornut/imgui/issues?q=label%3Agallery)!

How to help
-----------

**How can I help?**

- See [GitHub Forum/Issues](https://github.com/ocornut/imgui/issues).
- You may help with development and submit pull requests! Please understand\
 that by submitting a PR you are also submitting a request for the maintainer\
 to review your code and then take over its maintenance forever. PR should be\
 crafted both in the interest of the end-users and also to ease the\
 maintainer into understanding and accepting it.
- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the\
 [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas.
- Be a [Funding Supporter](https://github.com/ocornut/imgui/wiki/Funding)!\
 Have your company financially support this project via invoiced\
 sponsors/maintenance or by buying a license for [Dear ImGui Test\
 Engine](https://github.com/ocornut/imgui_test_engine) (please reach out:\
 contact AT dearimgui DOT com).

Sponsors
--------

Ongoing Dear ImGui development is and has been financially supported by users\
 and private sponsors.
<BR>Please see the **[detailed list of current and past Dear ImGui funding\
 supporters and sponsors](https://github.com/ocornut/imgui/wiki/Funding)**\
 for details.
<BR>From November 2014 to December 2019, ongoing development has also been\
 financially supported by its users on Patreon and through individual\
 donations.

**THANK YOU to all past and present supporters for helping to keep this\
 project alive and thriving!**

Dear ImGui is using software and services provided free of charge for open\
 source projects:
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_m\
edium=github&utm_campaign=open_source) for static analysis (supports\
 C/C++/C#/Java).
- [GitHub actions](https://github.com/features/actions) for continuous\
 integration systems.
- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for\
 code coverage analysis.

Credits
-------

Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or\
 indirect [contributors](https://github.com/ocornut/imgui/graphs/contributors\
) to the GitHub. The early version of this library was developed with the\
 support of [Media Molecule](https://www.mediamolecule.com) and first used\
 internally on the game [Tearaway](https://tearaway.mediamolecule.com) (PS\
 Vita).

Recurring contributors include Rokas Kupstys [@rokups](https://github.com/rok\
ups) (2020-2022): a good portion of work on automation system and regression\
 tests now available in [Dear ImGui Test Engine](https://github.com/ocornut/i\
mgui_test_engine).

Maintenance/support contracts, sponsoring invoices and other B2B transactions\
 are hosted and handled by [Disco Hello](https://www.discohello.com).

Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games\
.com) where Atman Binstock had dropped his own simple implementation in the\
 codebase, which I spent quite some time improving and thinking about. It\
 turned out that Atman was exposed to the concept directly by working with\
 Casey. When I moved to Media Molecule I rewrote a new library trying to\
 overcome the flaws and limitations of the first one I've worked with. It\
 became this library and since then I have spent an unreasonable amount of\
 time iterating and improving it."

Embeds [ProggyClean.ttf](https://www.proggyfonts.net) font by Tristan Grimmer\
 (MIT license).
<br>Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.c\
om/nothings/stb/) by Sean Barrett (public domain).

Inspiration, feedback, and testing for early versions: Casey Muratori, Atman\
 Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov,\
 Matt Willis. Special thanks to Alex Evans, Patrick Doane, Marco Koegler for\
 kindly helping. Also thank you to everyone posting feedback, questions and\
 patches on GitHub.

License
-------

Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://githu\
b.com/ocornut/imgui/blob/master/LICENSE.txt) for more information.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ocornut/imgui
doc-url: https://github.com/ocornut/imgui/wiki
src-url: https://github.com/ocornut/imgui
package-url: https://github.com/build2-packaging/imgui
email: contact@dearimgui.com
package-email: swat.somebug@gmail.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libimgui-docking == 1.92.2
depends: libvulkan-meta ^1.0.0
bootstrap-build:
\
project = libimgui-render-vulkan-docking

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: imgui/libimgui-render-vulkan-docking-1.92.2.tar.gz
sha256sum: 4b94ab773cf845e185d73a9b0d1f379f98a90c6eff4dcd99f4e03ce655fb46ec
:
name: libimmer
version: 0.8.1+2
type: lib,binless
language: c++
project: immer
summary: Immutable and persistent data structures C++ library
license: BSL-1.0; Boost Software License 1.0.
package-description:
\
# libimmer - Immutable and persistent data structures C++ library

This is a `build2` package for the [`immer`](https://github.com/arximboldi/im\
mer)
C++ library. It provides persistent and immutable data structure.

## Usage

To start using `libimmer` in your project, add the following\
 [`depends`](https://build2.org/bpkg/doc/build2-package-manager-manual.xhtml#\
manifest-package-depends) value to your [`manifest`](https://build2.org/bpkg/\
doc/build2-package-manager-manual.xhtml#manifests), adjusting the version\
 constraint as appropriate:

```
depends: libimmer ^0.8.1
```

Then import the library in your `buildfile`:

```
import libs = libimmer%lib{immer}
```

## Importable targets

This package provides the following importable targets:

```
lib{immer}
```

### Importable targets description

* `immer` - Immutable and persistent data structures C++ library.

## Configuration variables

This package provides the following configuration variables:

```
[bool] config.libimmer.no_exceptions ?= false
```

### Configuration variables description

* `no_exceptions` - Whether to build without exception handling support.

\
package-description-type: text/markdown;variant=GFM
url: https://sinusoid.es/immer
doc-url: https://sinusoid.es/immer
src-url: https://github.com/arximboldi/immer
package-url: https://github.com/build2-packaging/immer
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
bootstrap-build:
\
project = libimmer

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Whether to build without exception handling support.
#
config [bool] config.libimmer.no_exceptions ?= false


\
location: immer/libimmer-0.8.1+2.tar.gz
sha256sum: 0c14d7ece637919a379d7499ffefa06cd2f4f6380c48f7763b3c0cfe6c468b0a
:
name: libisocline
version: 1.0.9+1
language: c
project: isocline
summary: Isocline is a pure C library that can be used as an alternative to\
 the GNU readline library.
license: MIT
description:
\
<!-- <img align="right" width="350px" src="doc/completion-macos.png"/> -->

<img align="left" src="doc/isocline-inline.svg"/>

# Isocline: a portable readline alternative.
 
Isocline is a pure C library that can be used as an alternative to the GNU\
 readline library (latest release v1.0.8, 2022-01-15).

- Small: less than 8k lines and can be compiled as a single C file without 
  any dependencies or configuration (e.g. `gcc -c src/isocline.c`).
  
- Portable: works on Unix, Windows, and macOS, and uses a minimal
  subset of ANSI escape sequences.
    
- Features: extensive multi-line editing mode (`shift-tab`), (24-bit) color,\
 history, completion, unicode, 
  undo/redo, incremental history search, inline hints, syntax highlighting,\
 brace matching,
  closing brace insertion, auto indentation, graceful fallback, support for\
 custom allocators, etc.
  
- License: MIT. 

- Comes with a Haskell binding ([`System.Console.Isocline`][hdoc].

Enjoy,
  Daan
  
<!--  <img align="right" width="350px" src="doc/history-win.png"/> -->
  
# Demo

![recording](doc/record-macos.svg)  

Shows in order: unicode, syntax highlighting, brace matching, jump to\
 matching brace, auto indent, multiline editing, 24-bit colors, inline\
 hinting, filename completion, and incremental history search.  
<sub>(screen capture was made with [termtosvg] by Nicolas Bedos)</sub>

# Usage

Include the isocline header in your C or C++ source:
```C
#include <include/isocline.h>
```

and call `ic_readline` to get user input with rich editing abilities:
```C
char* input;
while( (input = ic_readline("prompt")) != NULL ) { // ctrl+d/c or errors\
 return NULL
  printf("you typed:\n%s\n", input); // use the input
  free(input);  
}
```

See the [example] for a full example with completion, syntax highligting,\
 history, etc.

# Run the Example

You can compile and run the [example] as:
```
$ gcc -o example -Iinclude test/example.c src/isocline.c
$ ./example
```

or, the Haskell [example][HaskellExample]:
```
$ ghc -ihaskell test/Example.hs src/isocline.c
$ ./test/Example
```


# Editing with Isocline

Isocline tries to be as compatible as possible with standard [GNU Readline]\
 key bindings.

### Overview:
```apl
       home/ctrl-a       cursor     end/ctrl-e
         ┌─────────────────┼───────────────┐    (navigate)
         │     ctrl-left   │  ctrl-right   │
         │         ┌───────┼──────┐        │    ctrl-r   : search history
         ▼         ▼       ▼      ▼        ▼    tab      : complete word
  prompt> it is the quintessential language     shift-tab: insert new line
         ▲         ▲              ▲        ▲    esc      : delete input, done
         │         └──────────────┘        │    ctrl-z   : undo
         │    alt-backsp        alt-d      │
         └─────────────────────────────────┘    (delete)
       ctrl-u                          ctrl-k
```

<sub>Note: on macOS, the meta (alt) key is not directly available in most\
 terminals. 
Terminal/iTerm2 users can activate the meta key through
`Terminal` &rarr; `Preferences` &rarr; `Settings` &rarr; `Use option as meta\
 key`.</sub>

### Key Bindings

These are also shown when pressing `F1` on a Isocline prompt. We use `^` as a\
 shorthand for `ctrl-`:

| Navigation        |                                                 |
|-------------------|-------------------------------------------------|
| `left`,`^b`       | go one character to the left |
| `right`,`^f   `   | go one character to the right |
| `up           `   | go one row up, or back in the history |
| `down         `   | go one row down, or forward in the history |
| `^left        `   | go to the start of the previous word |
| `^right       `   | go to the end the current word |
| `home`,`^a    `   | go to the start of the current line |
| `end`,`^e     `   | go to the end of the current line |
| `pgup`,`^home `   | go to the start of the current input |
| `pgdn`,`^end  `   | go to the end of the current input |
| `alt-m        `   | jump to matching brace |
| `^p           `   | go back in the history |
| `^n           `   | go forward in the history |
| `^r`,`^s      `   | search the history starting with the current word |
  

| Deletion        |                                                 |
|-------------------|-------------------------------------------------|
| `del`,`^d     `   | delete the current character |
| `backsp`,`^h  `   | delete the previous character |
| `^w           `   | delete to preceding white space |
| `alt-backsp   `   | delete to the start of the current word |
| `alt-d        `   | delete to the end of the current word |
| `^u           `   | delete to the start of the current line |
| `^k           `   | delete to the end of the current line |
| `esc          `   | delete the current input, or done with empty input |
  

| Editing           |                                                 |
|-------------------|-------------------------------------------------|
| `enter        `   | accept current input |
| `^enter`,`^j`,`shift-tab` | create a new line for multi-line input |
| `^l           `   | clear screen |
| `^t           `   | swap with previous character (move character backward) |
| `^z`,`^_      `   | undo |
| `^y           `   | redo |
| `tab          `   | try to complete the current input |
  

| Completion menu   |                                                 |
|-------------------|-------------------------------------------------|
| `enter`,`left`    | use the currently selected completion |
| `1` - `9`         | use completion N from the menu |
| `tab, down    `   | select the next completion |
| `shift-tab, up`   | select the previous completion |
| `esc          `   | exit menu without completing |
| `pgdn`,`^enter`,`^j`   | show all further possible completions |
  

| Incremental history search        |                                        \
         |
|-------------------|-------------------------------------------------|
| `enter        `   | use the currently found history entry |
| `backsp`,`^z  `   | go back to the previous match (undo) |
| `tab`,`^r`,`up`   | find the next match |
| `shift-tab`,`^s`,`down`  | find an earlier match |
| `esc          `   | exit search |


# Build the Library

### Build as a Single Source

Copy the sources (in `include` and `src`) into your project, or add the\
 library as a [submodule]:
```
$ git submodule add https://github.com/daanx/isocline
```
and add `isocline/src/isocline.c` to your build rules -- no configuration is\
 needed. 

### Build with CMake

Clone the repository and run cmake to build a static library (`.a`/`.lib`):
```
$ git clone https://github.com/daanx/isocline
$ cd isocline
$ mkdir -p build/release
$ cd build/release
$ cmake ../..
$ cmake --build .
```
This builds a static library `libisocline.a` (or `isocline.lib` on Windows)
and the example program:
```
$ ./example
```

### Build the Haskell Library

See the Haskell [readme][Haskell] for instructions to build and use the\
 Haskell library.


# API Reference

* See the [C API reference][docapi] and the [example] for example usage of\
 history, completion, etc.

* See the [Haskell API reference][hdoc] on Hackage and the Haskell\
 [example][HaskellExample].


# Motivation

Isocline was created for use in the [Koka] interactive compiler. 
This required: pure C (no dependency on a C++ runtime or other libraries), 
portable (across Linux, macOS, and Windows), unicode support, 
a BSD-style license, and good functionality for completion and multi-line\
 editing.

Some other excellent libraries that we considered:
[GNU readline],
[editline](https://github.com/troglobit/editline),
[linenoise](https://github.com/antirez/linenoise),
[replxx](https://github.com/AmokHuginnsson/replxx), and 
[Haskeline](https://github.com/judah/haskeline).


# Formatted Output

Isocline also exposes functions for rich terminal output
as `ic_print` (and `ic_println` and `ic_printf`). 
Inspired by the (Python) [Rich][RichBBcode] library, 
this supports a form of [bbcode]'s to format the output:
```c
ic_println( "[b]bold [red]and red[/red][/b]" );
```
Each print automatically closes any open tags that were
not yet closed. Also, you can use a general close
tag as `[/]` to close the innermost tag, so the
following print is equivalent to the earlier one:
```c
ic_println( "[b]bold [red]and red[/]" );
```
There can be multiple styles in one tag
(where the first name is used for the closing tag):
```c
ic_println( "[u #FFD700]underlined gold[/]" );
```

Sometimes, you need to display arbitrary messages
that may contain sequences that you would not like
to be interpreted as bbcode tags. One way to do
this is the `[!`_tag_`]` which ignores formatting
up to a close tag of the form `[/`_tag_`]`.
```c
ic_printf( "[red]red? [!pre]%s[/pre].\n", "[blue]not blue!" );
```

Predefined styles include `b` (bold),
`u` (underline), `i` (italic), and `r` (reverse video), but
you can (re)define any style yourself as:
```c
ic_style_def("warning", "crimson u");
```

and use them like any builtin style or property:
```c
ic_println( "[warning]this is a warning![/]" );
```
which is great for adding themes to your application.

Each `ic_print` function always closes any unclosed tags automatically.
To open a style persistently, use `ic_style_open` with a matching
`ic_style_close` which scopes over any `ic_print` statements in between.
```c
ic_style_open("warning");
ic_println("[b]crimson underlined and bold[/]");
ic_style_close();
```

# Advanced


## BBCode Format

An open tag can have multiple white space separated
entries that are
either a _style name_, or a primitive _property_[`=`_value_].

### Styles

Isocline provides the following builtin styles as property shorthands:
`b` (bold), `u` (underline), `i` (italic), `r` (reverse video),
and some builtin styles for syntax highlighting:
`keyword`, `control` (control-flow keywords), `string`,
`comment`, `number`, `type`, `constant`.

Predefined styles used by Isocline itself are:

- `ic-prompt`: prompt style, e.g. `ic_style_def("ic-prompt", "yellow on\
 blue")`.
- `ic-info`: information (like the numbers in a completion menu).    
- `ic-diminish`: dim text (used for example in history search).
- `ic-emphasis`: emphasized text (also used in history search).
- `ic-hint`: color of an inline hint.
- `ic-error`: error color (like an unmatched brace).   
- `ic-bracematch`: color of matching parenthesis.

### Properties

Boolean properties are by default `on`:

- `bold` [`=`(`on`|`off`)]
- `italic` [`=`(`on`|`off`)]
- `underline` [`=`(`on`|`off`)]
- `reverse` [`=`(`on`|`off`)]

Color properties can be assigned a _color_:

- `color=`_color_
- `bgcolor=`_color_
- _color_: equivalent to `color=`_color_.
- `on` _color_: equivalent to `bgcolor=`_color_.

A color value can be specified in many ways:

- any standard HTML [color name][htmlcolors].
- any of the 16 standard ANSI [color names][ansicolors] by prefixing `ansi-` 
  (like `ansi-black` or `ansi-maroon`).   
  The actual color value of these depend on the a terminal theme.
- `#`_rrggbb_ or `#`_rgb_ for a specific 24-bit color.
- `ansi-color=`_idx_: where 0 <= _idx_ <= 256 specifies an entry in the
  standard ANSI 256 [color palette][ansicolor256], where 256 is used for the\
 ANSI 
  default color.


## Environment Variables

- `NO_COLOR`: if present no colors are displayed.
- `CLICOLOR=1`: if set, the `LSCOLORS` or `LS_COLORS` environment variables\
 are used to colorize
  filename completions.
- `COLORTERM=`(`truecolor`|`256color`|`16color`|`8color`|`monochrome`):\
 enable a certain color palette, see the next section.
- `TERM`: used on some systems to determine the color

## Colors

Isocline supports 24-bit colors and any RGB colors are automatically
mapped to a reduced palette on older terminals if these do not
support true color. Detection of full color support
is not always possible to do automatically and you can
set the `COLORTERM` environment variable expicitly to force Isocline to use
a specific palette:
- `COLORTERM=truecolor`: use 24-bit colors.  
  <img width="500px" src="doc/color/ansi-truecolor.png"/>
- `COLORTERM=256color`: use the ANSI 256 color palette.  
  <img width="500px" src="doc/color/ansi-256color.png"/>
- `COLORTERM=16color` : use the regular ANSI 16 color 
   palette (8 normal and 8 bright colors).  
   <img width="500px" src="doc/color/ansi-16color.png"/>
- `COLORTERM=8color`: use bold for bright colors.
- `COLORTERM=monochrome`: use no color.

The above screenshots are made with the 
[`test_colors.c`](https://github.com/daanx/isocline/blob/main/test/test_color\
s.c) program. You can test your own
terminal as:
```
$ gcc -o test_colors -Iinclude test/test_colors.c src/isocline.c
$ ./test_colors
$ COLORTERM=truecolor ./test_colors
$ COLORTERM=16color ./test_colors
```

## ANSI Escape Sequences

Isocline uses just few ANSI escape sequences that are widely
supported:
- `ESC[`_n_`A`, `ESC[`_n_`B`, `ESC[`_n_`C`, and `ESC[`_n_`D`,
  for moving the cursor _n_ places up, down, right, and left.
- `ESC[K` to clear the line from the cursor.
- `ESC[`_n_`m` for colors, with _n_ one of: 0 (reset), 1,22 (bold), 3,23\
 (italic),
   4,24 (underline), 7,27 (reverse), 30-37,40-47,90-97,100-107 (color),
   and 39,49 (select default color).
- `ESC[38;5;`_n_`m`, `ESC[48;5;`_n_`m`, `ESC[38;2;`_r_`;`_g_`;`_b_`m`,\
 `ESC[48;2;`_r_`;`_g_`;`_b_`m`: 
  on terminals that support it, select 
  entry _n_ from the
  256 color ANSI palette (used with `XTERM=xterm-256color` for example), or\
 directly specify
  any 24-bit _rgb_ color (used with `COLORTERM=truecolor`) for the foreground\
 or background.
    
On Windows the above functionality is implemented using the Windows console\
 API
(except if running in the new Windows Terminal which supports these escape
sequences natively).

## Async and Threads

Isocline is _not_ thread-safe and `ic_readline`_xxx_ and `ic_print`_xxx_\
 should
be used from one thread only.

The best way to use `ic_readline` asynchronously is
to run it in a (blocking) dedicated thread and deliver
results from there to the async event loop. Isocline has the
```C
bool ic_async_stop(void)
```
function that is thread-safe and can deliver an
asynchronous event to Isocline that unblocks a current
`ic_readline` and makes it behave as if the user pressed
`ctrl-c` (which returns NULL from the read line call).

## Color Mapping

To map full RGB colors to an ANSI 256 or 16-color palette
Isocline finds a palette color with the minimal "color distance" to
the original color. There are various
ways of calculating this: one way is to take the euclidean distance
in the sRGB space (_simple-rgb_), a slightly better way is to 
take a weighted distance where the weight distribution is adjusted
according to how big the red component is ([redmean](https://en.wikipedia.org\
/wiki/Color_difference),
denoted as _delta-rgb_ in the figure), 
this is used by Isocline),
and finally, we can first translate into a perceptually uniform color space
(CIElab) and calculate the distance there using the [CIEDE2000](https://en.wi\
kipedia.org/wiki/Color_difference)
algorithm (_ciede2000_). Here are these three methods compared on
some colors: 

![color space comparison](doc/color/colorspace-map.png)

Each top row is the true 24-bit RGB color. Surprisingly,
the sophisticated CIEDE2000 distance seems less good here compared to the 
simpler methods (as in the upper left block for example)
(perhaps  because this algorithm was created to find close
perceptual colors in images where lightness differences may be given
less weight?). CIEDE2000 also leads to more "outliers", for example as seen
in column 5. Given these results, Isocline uses _redmean_ for
color mapping. We also add a gray correction that makes it less
likely to substitute a color for a gray value (and the other way
around).


## Possible Future Extensions

- Vi key bindings.
- kill buffer.
- make the `ic_print`_xxx_ functions thread-safe.
- extended low-level terminal functions.
- status and progress bars.
- prompt variants: confirm, etc.
- ...

Contact me if you are interested in doing any of these :-)


# Releases

* `2022-01-15`: v1.0.9: fix missing `ic_completion_arg` (issue #6), 
   fix null ptr check in ic_print (issue #7), fix crash when using /dev/null\
 as both input and output.
* `2021-09-05`: v1.0.5: use our own wcwidth for consistency; 
  thanks to Hans-Georg Breunig for helping with testing on NetBSD.
* `2021-08-28`: v1.0.4: fix color query on Ubuntu/Gnome
* `2021-08-27`: v1.0.3: fix duplicates in completions 
* `2021-08-23`: v1.0.2: fix windows eol wrapping
* `2021-08-21`: v1.0.1: fix line-buffering
* `2021-08-20`: v1.0.0: initial release  
  


[GNU readline]: https://tiswww.case.edu/php/chet/readline/rltop.html
[koka]: http://www.koka-lang.org
[submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
[Haskell]: https://github.com/daanx/isocline/tree/main/haskell
[HaskellExample]: https://github.com/daanx/isocline/blob/main/test/Example.hs
[example]: https://github.com/daanx/isocline/blob/main/test/example.c
[termtosvg]: https://github.com/nbedos/termtosvg
[Rich]: https://github.com/willmcgugan/rich
[RichBBcode]: https://rich.readthedocs.io/en/latest/markup.html
[bbcode]: https://en.wikipedia.org/wiki/BBCode
[htmlcolors]: https://en.wikipedia.org/wiki/Web_colors#HTML_color_names
[ansicolors]: https://en.wikipedia.org/wiki/Web_colors#Basic_colors
[ansicolor256]: https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
[docapi]: https://daanx.github.io/isocline
[hdoc]: https://hackage.haskell.org/package/isocline/docs/System-Console-Isoc\
line.html

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for `isocline`

[`isocline`](https://github.com/daanx/isocline) is a pure C library that can\
 be used as an alternative to the GNU readline library.

[![Official](https://img.shields.io/website/https/github.com/daanx/isocline.s\
vg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up_m\
essage=online)](https://github.com/daanx/isocline)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/i\
socline.svg?down_message=offline&label=build2&style=for-the-badge&up_color=bl\
ue&up_message=online)](https://github.com/build2-packaging/isocline)
[![cppget.org](https://img.shields.io/website/https/cppget.org/libisocline.sv\
g?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_\
message=online)](https://cppget.org/libisocline)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/li\
bisocline.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style\
=for-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/\
libisocline)

## Usage

First, add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch this package.

```
:
role: prerequisite
location: https://pkg.cppget.org/1/stable
# trust: ...
```

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

```
:
role: prerequisite
location: https://github.com/build2-packaging/isocline.git
```

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

```
depends: libisocline ^1.0.9
```

The static library can then be imported by the following declaration in a\
 `buildfile`. Please note that the `libisocline` package only exports the\
 static library as the shared build is not supported by the upstream\
 repository.

```
import isocline = libisocline%liba{isocline}
```

## Configuration

There are no configuration options available.

## Issues and Notes

- Warnings are generated due to unused private functions in the library.
- Shared library builds are not supported by the upstream repository. Even\
 the use of automatic DLL symbol export does not seem to solve that issue.

## Contributing

Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/isocline/issues) for everything that is not described below.

### Recommend Updating Version

Please, file an issue on [GitHub](https://github.com/build2-packaging/isoclin\
e/issues) with the new recommended version.

### Update Version by Pull Request

1. Fork the repository on [GitHub](https://github.com/build2-packaging/isocli\
ne) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions

1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/daanx/isocline
doc-url: https://daanx.github.io/isocline/
package-url: https://github.com/build2-packaging/isocline
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = libisocline

using version
using config
using test
using install
using dist

\
root-build:
\
# Make sure that the older GCC versions don't fail with the "'for' loop
# initial declarations are only allowed in C99 or C11 mode" error.
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: isocline/libisocline-1.0.9+1.tar.gz
sha256sum: 8914a17af673888ac7c55f9a9ec93772fd87a0e4d820f45fa6d8492dd3b99c4a
:
name: libjpeg-turbo
version: 2.1.3+2
summary: JPEG image codec C library
license: IJG, LicenseRef-modified-BSD-3-clause, Zlib; IJG: Independent JPEG\
 Group license.
description:
\
Background
==========

libjpeg-turbo is a JPEG image codec that uses SIMD instructions to accelerate
baseline JPEG compression and decompression on x86, x86-64, Arm, PowerPC, and
MIPS systems, as well as progressive JPEG compression on x86, x86-64, and Arm
systems.  On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg,
all else being equal.  On other types of systems, libjpeg-turbo can still
outperform libjpeg by a significant amount, by virtue of its highly-optimized
Huffman coding routines.  In many cases, the performance of libjpeg-turbo
rivals that of proprietary high-speed JPEG codecs.

libjpeg-turbo implements both the traditional libjpeg API as well as the less
powerful but more straightforward TurboJPEG API.  libjpeg-turbo also features
colorspace extensions that allow it to compress from/decompress to 32-bit and
big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
interface.

libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
derivative of libjpeg v6b developed by Miyasaka Masaru.  The TigerVNC and
VirtualGL projects made numerous enhancements to the codec in 2009, and in
early 2010, libjpeg-turbo spun off into an independent project, with the goal
of making high-speed JPEG compression/decompression technology available to a
broader range of users and developers.


License
=======

libjpeg-turbo is covered by three compatible BSD-style open source licenses.
Refer to [LICENSE.md](LICENSE.md) for a roll-up of license terms.


Building libjpeg-turbo
======================

Refer to [BUILDING.md](BUILDING.md) for complete instructions.


Using libjpeg-turbo
===================

libjpeg-turbo includes two APIs that can be used to compress and decompress
JPEG images:

- **TurboJPEG API**<br>
  This API provides an easy-to-use interface for compressing and decompressing
  JPEG images in memory.  It also provides some functionality that would not\
 be
  straightforward to achieve using the underlying libjpeg API, such as
  generating planar YUV images and performing multiple simultaneous lossless
  transforms on an image.  The Java interface for libjpeg-turbo is written on
  top of the TurboJPEG API.  The TurboJPEG API is recommended for first-time
  users of libjpeg-turbo.  Refer to [tjexample.c](tjexample.c) and
  [TJExample.java](java/TJExample.java) for examples of its usage and to
  <http://libjpeg-turbo.org/Documentation/Documentation> for API\
 documentation.

- **libjpeg API**<br>
  This is the de facto industry-standard API for compressing and decompressing
  JPEG images.  It is more difficult to use than the TurboJPEG API but also
  more powerful.  The libjpeg API implementation in libjpeg-turbo is both
  API/ABI-compatible and mathematically compatible with libjpeg v6b.  It can
  also optionally be configured to be API/ABI-compatible with libjpeg v7 and\
 v8
  (see below.)  Refer to [cjpeg.c](cjpeg.c) and [djpeg.c](djpeg.c) for\
 examples
  of its usage and to [libjpeg.txt](libjpeg.txt) for API documentation.

There is no significant performance advantage to either API when both are used
to perform similar operations.

Colorspace Extensions
---------------------

libjpeg-turbo includes extensions that allow JPEG images to be compressed
directly from (and decompressed directly to) buffers that use BGR, BGRX,
RGBX, XBGR, and XRGB pixel ordering.  This is implemented with ten new
colorspace constants:

    JCS_EXT_RGB   /* red/green/blue */
    JCS_EXT_RGBX  /* red/green/blue/x */
    JCS_EXT_BGR   /* blue/green/red */
    JCS_EXT_BGRX  /* blue/green/red/x */
    JCS_EXT_XBGR  /* x/blue/green/red */
    JCS_EXT_XRGB  /* x/red/green/blue */
    JCS_EXT_RGBA  /* red/green/blue/alpha */
    JCS_EXT_BGRA  /* blue/green/red/alpha */
    JCS_EXT_ABGR  /* alpha/blue/green/red */
    JCS_EXT_ARGB  /* alpha/red/green/blue */

Setting `cinfo.in_color_space` (compression) or `cinfo.out_color_space`
(decompression) to one of these values will cause libjpeg-turbo to read the
red, green, and blue values from (or write them to) the appropriate position\
 in
the pixel when compressing from/decompressing to an RGB buffer.

Your application can check for the existence of these extensions at compile
time with:

    #ifdef JCS_EXTENSIONS

At run time, attempting to use these extensions with a libjpeg implementation
that does not support them will result in a "Bogus input colorspace" error.
Applications can trap this error in order to test whether run-time support is
available for the colorspace extensions.

When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression,\
 the
X byte is undefined, and in order to ensure the best performance,\
 libjpeg-turbo
can set that byte to whatever value it wishes.  If an application expects the\
 X
byte to be used as an alpha channel, then it should specify `JCS_EXT_RGBA`,
`JCS_EXT_BGRA`, `JCS_EXT_ABGR`, or `JCS_EXT_ARGB`.  When these colorspace
constants are used, the X byte is guaranteed to be 0xFF, which is interpreted
as opaque.

Your application can check for the existence of the alpha channel colorspace
extensions at compile time with:

    #ifdef JCS_ALPHA_EXTENSIONS

[jcstest.c](jcstest.c), located in the libjpeg-turbo source tree, demonstrates
how to check for the existence of the colorspace extensions at compile time\
 and
run time.

libjpeg v7 and v8 API/ABI Emulation
-----------------------------------

With libjpeg v7 and v8, new features were added that necessitated extending\
 the
compression and decompression structures.  Unfortunately, due to the exposed
nature of those structures, extending them also necessitated breaking backward
ABI compatibility with previous libjpeg releases.  Thus, programs that were
built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
based on the libjpeg v6b code base.  Although libjpeg v7 and v8 are not
as widely used as v6b, enough programs (including a few Linux distros) made
the switch that there was a demand to emulate the libjpeg v7 and v8 ABIs
in libjpeg-turbo.  It should be noted, however, that this feature was added
primarily so that applications that had already been compiled to use libjpeg
v7+ could take advantage of accelerated baseline JPEG encoding/decoding
without recompiling.  libjpeg-turbo does not claim to support all of the
libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
cases (see below.)

By passing an argument of `-DWITH_JPEG7=1` or `-DWITH_JPEG8=1` to `cmake`, you
can build a version of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI,\
 so
that programs that are built against libjpeg v7 or v8 can be run with
libjpeg-turbo.  The following section describes which libjpeg v7+ features are
supported and which aren't.

### Support for libjpeg v7 and v8 Features

#### Fully supported

- **libjpeg API: IDCT scaling extensions in decompressor**<br>
  libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
  1/2, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2/1 (only 1/4
  and 1/2 are SIMD-accelerated.)

- **libjpeg API: Arithmetic coding**

- **libjpeg API: In-memory source and destination managers**<br>
  See notes below.

- **cjpeg: Separate quality settings for luminance and chrominance**<br>
  Note that the libpjeg v7+ API was extended to accommodate this feature only
  for convenience purposes.  It has always been possible to implement this
  feature with libjpeg v6b (see rdswitch.c for an example.)

- **cjpeg: 32-bit BMP support**

- **cjpeg: `-rgb` option**

- **jpegtran: Lossless cropping**

- **jpegtran: `-perfect` option**

- **jpegtran: Forcing width/height when performing lossless crop**

- **rdjpgcom: `-raw` option**

- **rdjpgcom: Locale awareness**


#### Not supported

NOTE:  As of this writing, extensive research has been conducted into the
usefulness of DCT scaling as a means of data reduction and SmartScale as a
means of quality improvement.  Readers are invited to peruse the research at
<http://www.libjpeg-turbo.org/About/SmartScale> and draw their own\
 conclusions,
but it is the general belief of our project that these features have not
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.

- **libjpeg API: DCT scaling in compressor**<br>
  `cinfo.scale_num` and `cinfo.scale_denom` are silently ignored.
  There is no technical reason why DCT scaling could not be supported when
  emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
  below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
  8/9 would be available, which is of limited usefulness.

- **libjpeg API: SmartScale**<br>
  `cinfo.block_size` is silently ignored.
  SmartScale is an extension to the JPEG format that allows for DCT block
  sizes other than 8x8.  Providing support for this new format would be
  feasible (particularly without full acceleration.)  However, until/unless
  the format becomes either an official industry standard or, at minimum, an
  accepted solution in the community, we are hesitant to implement it, as
  there is no sense of whether or how it might change in the future.  It is
  our belief that SmartScale has not demonstrated sufficient usefulness as a
  lossless format nor as a means of quality enhancement, and thus our primary
  interest in providing this feature would be as a means of supporting
  additional DCT scaling factors.

- **libjpeg API: Fancy downsampling in compressor**<br>
  `cinfo.do_fancy_downsampling` is silently ignored.
  This requires the DCT scaling feature, which is not supported.

- **jpegtran: Scaling**<br>
  This requires both the DCT scaling and SmartScale features, which are not
  supported.

- **Lossless RGB JPEG files**<br>
  This requires the SmartScale feature, which is not supported.

### What About libjpeg v9?

libjpeg v9 introduced yet another field to the JPEG compression structure
(`color_transform`), thus making the ABI backward incompatible with that of
libjpeg v8.  This new field was introduced solely for the purpose of\
 supporting
lossless SmartScale encoding.  Furthermore, there was actually no reason to
extend the API in this manner, as the color transform could have just as\
 easily
been activated by way of a new JPEG colorspace constant, thus preserving
backward ABI compatibility.

Our research (see link above) has shown that lossless SmartScale does not
generally accomplish anything that can't already be accomplished better with
existing, standard lossless formats.  Therefore, at this time it is our belief
that there is not sufficient technical justification for software projects to
upgrade from libjpeg v8 to libjpeg v9, and thus there is not sufficient
technical justification for us to emulate the libjpeg v9 ABI.

In-Memory Source/Destination Managers
-------------------------------------

By default, libjpeg-turbo 1.3 and later includes the `jpeg_mem_src()` and
`jpeg_mem_dest()` functions, even when not emulating the libjpeg v8 API/ABI.
Previously, it was necessary to build libjpeg-turbo from source with libjpeg\
 v8
API/ABI emulation in order to use the in-memory source/destination managers,
but several projects requested that those functions be included when emulating
the libjpeg v6b API/ABI as well.  This allows the use of those functions by
programs that need them, without breaking ABI compatibility for programs that
don't, and it allows those functions to be provided in the "official"
libjpeg-turbo binaries.

Those who are concerned about maintaining strict conformance with the libjpeg
v6b or v7 API can pass an argument of `-DWITH_MEM_SRCDST=0` to `cmake` prior\
 to
building libjpeg-turbo.  This will restore the pre-1.3 behavior, in which
`jpeg_mem_src()` and `jpeg_mem_dest()` are only included when emulating the
libjpeg v8 API/ABI.

On Un*x systems, including the in-memory source/destination managers changes
the dynamic library version from 62.2.0 to 62.3.0 if using libjpeg v6b API/ABI
emulation and from 7.2.0 to 7.3.0 if using libjpeg v7 API/ABI emulation.

Note that, on most Un*x systems, the dynamic linker will not look for a
function in a library until that function is actually used.  Thus, if a\
 program
is built against libjpeg-turbo 1.3+ and uses `jpeg_mem_src()` or
`jpeg_mem_dest()`, that program will not fail if run against an older version
of libjpeg-turbo or against libjpeg v7- until the program actually tries to
call `jpeg_mem_src()` or `jpeg_mem_dest()`.  Such is not the case on Windows.
If a program is built against the libjpeg-turbo 1.3+ DLL and uses
`jpeg_mem_src()` or `jpeg_mem_dest()`, then it must use the libjpeg-turbo 1.3+
DLL at run time.

Both cjpeg and djpeg have been extended to allow testing the in-memory
source/destination manager functions.  See their respective man pages for more
details.


Mathematical Compatibility
==========================

For the most part, libjpeg-turbo should produce identical output to libjpeg
v6b.  The one exception to this is when using the floating point DCT/IDCT, in
which case the outputs of libjpeg v6b and libjpeg-turbo can differ for the
following reasons:

- The SSE/SSE2 floating point DCT implementation in libjpeg-turbo is ever so
  slightly more accurate than the implementation in libjpeg v6b, but not by
  any amount perceptible to human vision (generally in the range of 0.01 to
  0.08 dB gain in PNSR.)

- When not using the SIMD extensions, libjpeg-turbo uses the more accurate
  (and slightly faster) floating point IDCT algorithm introduced in libjpeg
  v8a as opposed to the algorithm used in libjpeg v6b.  It should be noted,
  however, that this algorithm basically brings the accuracy of the floating
  point IDCT in line with the accuracy of the accurate integer IDCT.  The
  floating point DCT/IDCT algorithms are mainly a legacy feature, and they do
  not produce significantly more accuracy than the accurate integer algorithms
  (to put numbers on this, the typical difference in PNSR between the two
  algorithms is less than 0.10 dB, whereas changing the quality level by 1 in
  the upper range of the quality scale is typically more like a 1.0 dB
  difference.)

- If the floating point algorithms in libjpeg-turbo are not implemented using
  SIMD instructions on a particular platform, then the accuracy of the
  floating point DCT/IDCT can depend on the compiler settings.

While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood it is
still using the same algorithms as libjpeg v6b, so there are several specific
cases in which libjpeg-turbo cannot be expected to produce the same output as
libjpeg v8:

- When decompressing using scaling factors of 1/2 and 1/4, because libjpeg v8
  implements those scaling algorithms differently than libjpeg v6b does, and
  libjpeg-turbo's SIMD extensions are based on the libjpeg v6b behavior.

- When using chrominance subsampling, because libjpeg v8 implements this
  with its DCT/IDCT scaling algorithms rather than with a separate
  downsampling/upsampling algorithm.  In our testing, the subsampled/upsampled
  output of libjpeg v8 is less accurate than that of libjpeg v6b for this
  reason.

- When decompressing using a scaling factor > 1 and merged (AKA "non-fancy" or
  "non-smooth") chrominance upsampling, because libjpeg v8 does not support
  merged upsampling with scaling factors > 1.


Performance Pitfalls
====================

Restart Markers
---------------

The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
in a way that makes the rest of the libjpeg infrastructure happy, so it is
necessary to use the slow Huffman decoder when decompressing a JPEG image that
has restart markers.  This can cause the decompression performance to drop by
as much as 20%, but the performance will still be much greater than that of
libjpeg.  Many consumer packages, such as Photoshop, use restart markers when
generating JPEG images, so images generated by those programs will experience
this issue.

Fast Integer Forward DCT at High Quality Levels
-----------------------------------------------

The algorithm used by the SIMD-accelerated quantization function cannot\
 produce
correct results whenever the fast integer forward DCT is used along with a\
 JPEG
quality of 98-100.  Thus, libjpeg-turbo must use the non-SIMD quantization
function in those cases.  This causes performance to drop by as much as 40%.
It is therefore strongly advised that you use the accurate integer forward DCT
whenever encoding images with a JPEG quality of 98 or higher.


Memory Debugger Pitfalls
========================

Valgrind and Memory Sanitizer (MSan) can generate false positives
(specifically, incorrect reports of uninitialized memory accesses) when used
with libjpeg-turbo's SIMD extensions.  It is generally recommended that the
SIMD extensions be disabled, either by passing an argument of `-DWITH_SIMD=0`
to `cmake` when configuring the build or by setting the environment variable
`JSIMD_FORCENONE` to `1` at run time, when testing libjpeg-turbo with\
 Valgrind,
MSan, or other memory debuggers.

\
description-type: text/markdown;variant=GFM
changes:
\
2.1.3
=====

### Significant changes relative to 2.1.2

1. Fixed a regression introduced by 2.0 beta1[7] whereby cjpeg compressed PGM
input files into full-color JPEG images unless the `-grayscale` option was
used.

2. cjpeg now automatically compresses GIF and 8-bit BMP input files into
grayscale JPEG images if the input files contain only shades of gray.

3. The build system now enables the intrinsics implementation of the AArch64
(Arm 64-bit) Neon SIMD extensions by default when using GCC 12 or later.

4. Fixed a segfault that occurred while decompressing a 4:2:0 JPEG image using
the merged (non-fancy) upsampling algorithms (that is, with
`cinfo.do_fancy_upsampling` set to `FALSE`) along with `jpeg_crop_scanline()`.
Specifically, the segfault occurred if the number of bytes remaining in the
output buffer was less than the number of bytes required to represent one
uncropped scanline of the output image.  For that reason, the issue could only
be reproduced using the libjpeg API, not using djpeg.


2.1.2
=====

### Significant changes relative to 2.1.1

1. Fixed a regression introduced by 2.1 beta1[13] that caused the remaining
GAS implementations of AArch64 (Arm 64-bit) Neon SIMD functions (which are\
 used
by default with GCC for performance reasons) to be placed in the `.rodata`
section rather than in the `.text` section.  This caused the GNU linker to
automatically place the `.rodata` section in an executable segment, which
prevented libjpeg-turbo from working properly with other linkers and also
represented a potential security risk.

2. Fixed an issue whereby the `tjTransform()` function incorrectly computed\
 the
MCU block size for 4:4:4 JPEG images with non-unary sampling factors and thus
unduly rejected some cropping regions, even though those regions aligned with
8x8 MCU block boundaries.

3. Fixed a regression introduced by 2.1 beta1[13] that caused the build system
to enable the Arm Neon SIMD extensions when targetting Armv6 and other legacy
architectures that do not support Neon instructions.

4. libjpeg-turbo now performs run-time detection of AltiVec instructions on
FreeBSD/PowerPC systems if AltiVec instructions are not enabled at compile
time.  This allows both AltiVec-equipped and non-AltiVec-equipped CPUs to be
supported using the same build of libjpeg-turbo.

5. cjpeg now accepts a `-strict` argument similar to that of djpeg and
jpegtran, which causes the compressor to abort if an LZW-compressed GIF input
image contains incomplete or corrupt image data.


2.1.1
=====

### Significant changes relative to 2.1.0

1. Fixed a regression introduced in 2.1.0 that caused build failures with
non-GCC-compatible compilers for Un*x/Arm platforms.

2. Fixed a regression introduced by 2.1 beta1[13] that prevented the Arm\
 32-bit
(AArch32) Neon SIMD extensions from building unless the C compiler flags
included `-mfloat-abi=softfp` or `-mfloat-abi=hard`.

3. Fixed an issue in the AArch32 Neon SIMD Huffman encoder whereby reliance on
undefined C compiler behavior led to crashes ("SIGBUS: illegal alignment") on
Android systems when running AArch32/Thumb builds of libjpeg-turbo built with
recent versions of Clang.

4. Added a command-line argument (`-copy icc`) to jpegtran that causes it to
copy only the ICC profile markers from the source file and discard any other
metadata.

5. libjpeg-turbo should now build and run on CHERI-enabled architectures,\
 which
use capability pointers that are larger than the size of `size_t`.

6. Fixed a regression (CVE-2021-37972) introduced by 2.1 beta1[5] that caused\
 a
segfault in the 64-bit SSE2 Huffman encoder when attempting to losslessly
transform a specially-crafted malformed JPEG image.


2.1.0
=====

### Significant changes relative to 2.1 beta1

1. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to
decompress certain progressive JPEG images with one or more component planes\
 of
width 8 or less caused a buffer overrun.

2. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to
decompress a specially-crafted malformed progressive JPEG image caused the
block smoothing algorithm to read from uninitialized memory.

3. Fixed an issue in the Arm Neon SIMD Huffman encoders that caused the
encoders to generate incorrect results when using the Clang compiler with
Visual Studio.

4. Fixed a floating point exception (CVE-2021-20205) that occurred when
attempting to compress a specially-crafted malformed GIF image with a\
 specified
image width of 0 using cjpeg.

5. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to
generate a progressive JPEG image on an SSE2-capable CPU using a scan script
containing one or more scans with lengths divisible by 32 and non-zero
successive approximation low bit positions would, under certain circumstances,
result in an error ("Missing Huffman code table entry") and an invalid JPEG
image.

6. Introduced a new flag (`TJFLAG_LIMITSCANS` in the TurboJPEG C API and
`TJ.FLAG_LIMIT_SCANS` in the TurboJPEG Java API) and a corresponding TJBench
command-line argument (`-limitscans`) that causes the TurboJPEG decompression
and transform functions/operations to return/throw an error if a progressive
JPEG image contains an unreasonably large number of scans.  This allows
applications that use the TurboJPEG API to guard against an exploit of the
progressive JPEG format described in the report
["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/upload\
s/About/TwoIssueswiththeJPEGStandard.pdf).

7. The PPM reader now throws an error, rather than segfaulting (due to a\
 buffer
overrun) or generating incorrect pixels, if an application attempts to use the
`tjLoadImage()` function to load a 16-bit binary PPM file (a binary PPM file
with a maximum value greater than 255) into a grayscale image buffer or to\
 load
a 16-bit binary PGM file into an RGB image buffer.

8. Fixed an issue in the PPM reader that caused incorrect pixels to be
generated when using the `tjLoadImage()` function to load a 16-bit binary PPM
file into an extended RGB image buffer.

9. Fixed an issue whereby, if a JPEG buffer was automatically re-allocated by
one of the TurboJPEG compression or transform functions and an error
subsequently occurred during compression or transformation, the JPEG buffer
pointer passed by the application was not updated when the function returned.


2.0.90 (2.1 beta1)
==================

### Significant changes relative to 2.0.6:

1. The build system, x86-64 SIMD extensions, and accelerated Huffman codec now
support the x32 ABI on Linux, which allows for using x86-64 instructions with
32-bit pointers.  The x32 ABI is generally enabled by adding `-mx32` to the
compiler flags.

     Caveats:
     - CMake 3.9.0 or later is required in order for the build system to
automatically detect an x32 build.
     - Java does not support the x32 ABI, and thus the TurboJPEG Java API will
automatically be disabled with x32 builds.

2. Added Loongson MMI SIMD implementations of the RGB-to-grayscale, 4:2:2\
 fancy
chroma upsampling, 4:2:2 and 4:2:0 merged chroma upsampling/color conversion,
and fast integer DCT/IDCT algorithms.  Relative to libjpeg-turbo 2.0.x, this
speeds up:

     - the compression of RGB source images into grayscale JPEG images by
approximately 20%
     - the decompression of 4:2:2 JPEG images by approximately 40-60% when
using fancy upsampling
     - the decompression of 4:2:2 and 4:2:0 JPEG images by approximately
15-20% when using merged upsampling
     - the compression of RGB source images by approximately 30-45% when using
the fast integer DCT
     - the decompression of JPEG images into RGB destination images by
approximately 2x when using the fast integer IDCT

    The overall decompression speedup for RGB images is now approximately
2.3-3.7x (compared to 2-3.5x with libjpeg-turbo 2.0.x.)

3. 32-bit (Armv7 or Armv7s) iOS builds of libjpeg-turbo are no longer
supported, and the libjpeg-turbo build system can no longer be used to package
such builds.  32-bit iOS apps cannot run in iOS 11 and later, and the App\
 Store
no longer allows them.

4. 32-bit (i386) OS X/macOS builds of libjpeg-turbo are no longer supported,
and the libjpeg-turbo build system can no longer be used to package such
builds.  32-bit Mac applications cannot run in macOS 10.15 "Catalina" and
later, and the App Store no longer allows them.

5. The SSE2 (x86 SIMD) and C Huffman encoding algorithms have been
significantly optimized, resulting in a measured average overall compression
speedup of 12-28% for 64-bit code and 22-52% for 32-bit code on various Intel
and AMD CPUs, as well as a measured average overall compression speedup of
0-23% on platforms that do not have a SIMD-accelerated Huffman encoding
implementation.

6. The block smoothing algorithm that is applied by default when decompressing
progressive Huffman-encoded JPEG images has been improved in the following
ways:

     - The algorithm is now more fault-tolerant.  Previously, if a particular
scan was incomplete, then the smoothing parameters for the incomplete scan
would be applied to the entire output image, including the parts of the image
that were generated by the prior (complete) scan.  Visually, this had the
effect of removing block smoothing from lower-frequency scans if they were
followed by an incomplete higher-frequency scan.  libjpeg-turbo now applies
block smoothing parameters to each iMCU row based on which scan generated the
pixels in that row, rather than always using the block smoothing parameters\
 for
the most recent scan.
     - When applying block smoothing to DC scans, a Gaussian-like kernel with\
 a
5x5 window is used to reduce the "blocky" appearance.

7. Added SIMD acceleration for progressive Huffman encoding on Arm platforms.
This speeds up the compression of full-color progressive JPEGs by about 30-40%
on average (relative to libjpeg-turbo 2.0.x) when using modern Arm CPUs.

8. Added configure-time and run-time auto-detection of Loongson MMI SIMD
instructions, so that the Loongson MMI SIMD extensions can be included in any
MIPS64 libjpeg-turbo build.

9. Added fault tolerance features to djpeg and jpegtran, mainly to demonstrate
methods by which applications can guard against the exploits of the JPEG\
 format
described in the report
["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/upload\
s/About/TwoIssueswiththeJPEGStandard.pdf).

     - Both programs now accept a `-maxscans` argument, which can be used to
limit the number of allowable scans in the input file.
     - Both programs now accept a `-strict` argument, which can be used to
treat all warnings as fatal.

10. CMake package config files are now included for both the libjpeg and
TurboJPEG API libraries.  This facilitates using libjpeg-turbo with CMake's
`find_package()` function.  For example:

        find_package(libjpeg-turbo CONFIG REQUIRED)

        add_executable(libjpeg_program libjpeg_program.c)
        target_link_libraries(libjpeg_program PUBLIC libjpeg-turbo::jpeg)

        add_executable(libjpeg_program_static libjpeg_program.c)
        target_link_libraries(libjpeg_program_static PUBLIC
          libjpeg-turbo::jpeg-static)

        add_executable(turbojpeg_program turbojpeg_program.c)
        target_link_libraries(turbojpeg_program PUBLIC
          libjpeg-turbo::turbojpeg)

        add_executable(turbojpeg_program_static turbojpeg_program.c)
        target_link_libraries(turbojpeg_program_static PUBLIC
          libjpeg-turbo::turbojpeg-static)

11. Since the Unisys LZW patent has long expired, cjpeg and djpeg can now
read/write both LZW-compressed and uncompressed GIF files (feature ported from
jpeg-6a and jpeg-9d.)

12. jpegtran now includes the `-wipe` and `-drop` options from jpeg-9a and
jpeg-9d, as well as the ability to expand the image size using the `-crop`
option.  Refer to jpegtran.1 or usage.txt for more details.

13. Added a complete intrinsics implementation of the Arm Neon SIMD\
 extensions,
thus providing SIMD acceleration on Arm platforms for all of the algorithms
that are SIMD-accelerated on x86 platforms.  This new implementation is
significantly faster in some cases than the old GAS implementation--
depending on the algorithms used, the type of CPU core, and the compiler. \
 GCC,
as of this writing, does not provide a full or optimal set of Neon intrinsics,
so for performance reasons, the default when building libjpeg-turbo with GCC\
 is
to continue using the GAS implementation of the following algorithms:

     - 32-bit RGB-to-YCbCr color conversion
     - 32-bit fast and accurate inverse DCT
     - 64-bit RGB-to-YCbCr and YCbCr-to-RGB color conversion
     - 64-bit accurate forward and inverse DCT
     - 64-bit Huffman encoding

    A new CMake variable (`NEON_INTRINSICS`) can be used to override this
default.

    Since the new intrinsics implementation includes SIMD acceleration
for merged upsampling/color conversion, 1.5.1[5] is no longer necessary and\
 has
been reverted.

14. The Arm Neon SIMD extensions can now be built using Visual Studio.

15. The build system can now be used to generate a universal x86-64 + Armv8
libjpeg-turbo SDK package for both iOS and macOS.


2.0.6
=====

### Significant changes relative to 2.0.5:

1. Fixed "using JNI after critical get" errors that occurred on Android
platforms when using any of the YUV encoding/compression/decompression/decodi\
ng
methods in the TurboJPEG Java API.

2. Fixed or worked around multiple issues with `jpeg_skip_scanlines()`:

     - Fixed segfaults or "Corrupt JPEG data: premature end of data segment"
errors in `jpeg_skip_scanlines()` that occurred when decompressing 4:2:2 or
4:2:0 JPEG images using merged (non-fancy) upsampling/color conversion (that
is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.)  2.0.0[6] was a
similar fix, but it did not cover all cases.
     - `jpeg_skip_scanlines()` now throws an error if two-pass color
quantization is enabled.  Two-pass color quantization never worked properly
with `jpeg_skip_scanlines()`, and the issues could not readily be fixed.
     - Fixed an issue whereby `jpeg_skip_scanlines()` always returned 0 when
skipping past the end of an image.

3. The Arm 64-bit (Armv8) Neon SIMD extensions can now be built using MinGW
toolchains targetting Arm64 (AArch64) Windows binaries.

4. Fixed unexpected visual artifacts that occurred when using
`jpeg_crop_scanline()` and interblock smoothing while decompressing only the\
 DC
scan of a progressive JPEG image.

5. Fixed an issue whereby libjpeg-turbo would not build if\
 12-bit-per-component
JPEG support (`WITH_12BIT`) was enabled along with libjpeg v7 or libjpeg v8
API/ABI emulation (`WITH_JPEG7` or `WITH_JPEG8`.)


2.0.5
=====

### Significant changes relative to 2.0.4:

1. Worked around issues in the MIPS DSPr2 SIMD extensions that caused failures
in the libjpeg-turbo regression tests.  Specifically, the
`jsimd_h2v1_downsample_dspr2()` and `jsimd_h2v2_downsample_dspr2()` functions
in the MIPS DSPr2 SIMD extensions are now disabled until/unless they can be
fixed, and other functions that are incompatible with big endian MIPS CPUs are
disabled when building libjpeg-turbo for such CPUs.

2. Fixed an oversight in the `TJCompressor.compress(int)` method in the
TurboJPEG Java API that caused an error ("java.lang.IllegalStateException: No
source image is associated with this instance") when attempting to use that
method to compress a YUV image.

3. Fixed an issue (CVE-2020-13790) in the PPM reader that caused a buffer
overrun in cjpeg, TJBench, or the `tjLoadImage()` function if one of the\
 values
in a binary PPM/PGM input file exceeded the maximum value defined in the\
 file's
header and that maximum value was less than 255.  libjpeg-turbo 1.5.0 already
included a similar fix for binary PPM/PGM files with maximum values greater
than 255.

4. The TurboJPEG API library's global error handler, which is used in\
 functions
such as `tjBufSize()` and `tjLoadImage()` that do not require a TurboJPEG
instance handle, is now thread-safe on platforms that support thread-local
storage.


2.0.4
=====

### Significant changes relative to 2.0.3:

1. Fixed a regression in the Windows packaging system (introduced by
2.0 beta1[2]) whereby, if both the 64-bit libjpeg-turbo SDK for GCC and the
64-bit libjpeg-turbo SDK for Visual C++ were installed on the same system,\
 only
one of them could be uninstalled.

2. Fixed a signed integer overflow and subsequent segfault that occurred when
attempting to decompress images with more than 715827882 pixels using the
64-bit C version of TJBench.

3. Fixed out-of-bounds write in `tjDecompressToYUV2()` and
`tjDecompressToYUVPlanes()` (sometimes manifesting as a double free) that
occurred when attempting to decompress grayscale JPEG images that were
compressed with a sampling factor other than 1 (for instance, with
`cjpeg -grayscale -sample 2x2`).

4. Fixed a regression introduced by 2.0.2[5] that caused the TurboJPEG API to
incorrectly identify some JPEG images with unusual sampling factors as 4:4:4
JPEG images.  This was known to cause a buffer overflow when attempting to
decompress some such images using `tjDecompressToYUV2()` or
`tjDecompressToYUVPlanes()`.

5. Fixed an issue (CVE-2020-17541), detected by ASan, whereby attempting to
losslessly transform a specially-crafted malformed JPEG image containing an
extremely-high-frequency coefficient block (junk image data that could never\
 be
generated by a legitimate JPEG compressor) could cause the Huffman encoder's
local buffer to be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].)  Given that
the buffer overrun was fully contained within the stack and did not cause a
segfault or other user-visible errant behavior, and given that the lossless
transformer (unlike the decompressor) is not generally exposed to arbitrary
data exploits, this issue did not likely pose a security risk.

6. The Arm 64-bit (Armv8) Neon SIMD assembly code now stores constants in a
separate read-only data section rather than in the text section, to support
execute-only memory layouts.


2.0.3
=====

### Significant changes relative to 2.0.2:

1. Fixed "using JNI after critical get" errors that occurred on Android
platforms when passing invalid arguments to certain methods in the TurboJPEG
Java API.

2. Fixed a regression in the SIMD feature detection code, introduced by
the AVX2 SIMD extensions (2.0 beta1[1]), that was known to cause an illegal
instruction exception, in rare cases, on CPUs that lack support for CPUID leaf
07H (or on which the maximum CPUID leaf has been limited by way of a BIOS
setting.)

3. The 4:4:0 (h1v2) fancy (smooth) chroma upsampling algorithm in the
decompressor now uses a similar bias pattern to that of the 4:2:2 (h2v1) fancy
chroma upsampling algorithm, rounding up or down the upsampled result for
alternate pixels rather than always rounding down.  This ensures that,
regardless of whether a 4:2:2 JPEG image is rotated or transposed prior to
decompression (in the frequency domain) or after decompression (in the spatial
domain), the final image will be similar.

4. Fixed an integer overflow and subsequent segfault that occurred when
attempting to compress or decompress images with more than 1 billion pixels
using the TurboJPEG API.

5. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to
generate a progressive JPEG image on an SSE2-capable CPU using a scan script
containing one or more scans with lengths divisible by 16 would result in an
error ("Missing Huffman code table entry") and an invalid JPEG image.

6. Fixed an issue whereby `tjDecodeYUV()` and `tjDecodeYUVPlanes()` would\
 throw
an error ("Invalid progressive parameters") or a warning ("Inconsistent
progression sequence") if passed a TurboJPEG instance that was previously used
to decompress a progressive JPEG image.


2.0.2
=====

### Significant changes relative to 2.0.1:

1. Fixed a regression introduced by 2.0.1[5] that prevented a runtime search
path (rpath) from being embedded in the libjpeg-turbo shared libraries and
executables for macOS and iOS.  This caused a fatal error of the form
"dyld: Library not loaded" when attempting to use one of the executables,
unless `DYLD_LIBRARY_PATH` was explicitly set to the location of the
libjpeg-turbo shared libraries.

2. Fixed an integer overflow and subsequent segfault (CVE-2018-20330) that
occurred when attempting to load a BMP file with more than 1 billion pixels
using the `tjLoadImage()` function.

3. Fixed a buffer overrun (CVE-2018-19664) that occurred when attempting to
decompress a specially-crafted malformed JPEG image to a 256-color BMP using
djpeg.

4. Fixed a floating point exception that occurred when attempting to
decompress a specially-crafted malformed JPEG image with a specified image
width or height of 0 using the C version of TJBench.

5. The TurboJPEG API will now decompress 4:4:4 JPEG images with 2x1, 1x2, 3x1,
or 1x3 luminance and chrominance sampling factors.  This is a non-standard way
of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and
chrominance sampling factors), but the JPEG format and the libjpeg API both
allow it.

6. Fixed a regression introduced by 2.0 beta1[7] that caused djpeg to generate
incorrect PPM images when used with the `-colors` option.

7. Fixed an issue whereby a static build of libjpeg-turbo (a build in which
`ENABLE_SHARED` is `0`) could not be installed using the Visual Studio IDE.

8. Fixed a severe performance issue in the Loongson MMI SIMD extensions that
occurred when compressing RGB images whose image rows were not 64-bit-aligned.


2.0.1
=====

### Significant changes relative to 2.0.0:

1. Fixed a regression introduced with the new CMake-based Un*x build system,
whereby jconfig.h could cause compiler warnings of the form
`"HAVE_*_H" redefined` if it was included by downstream Autotools-based
projects that used `AC_CHECK_HEADERS()` to check for the existence of\
 locale.h,
stddef.h, or stdlib.h.

2. The `jsimd_quantize_float_dspr2()` and `jsimd_convsamp_float_dspr2()`
functions in the MIPS DSPr2 SIMD extensions are now disabled at compile time
if the soft float ABI is enabled.  Those functions use instructions that are
incompatible with the soft float ABI.

3. Fixed a regression in the SIMD feature detection code, introduced by
the AVX2 SIMD extensions (2.0 beta1[1]), that caused libjpeg-turbo to crash on
Windows 7 if Service Pack 1 was not installed.

4. Fixed out-of-bounds read in cjpeg that occurred when attempting to compress
a specially-crafted malformed color-index (8-bit-per-sample) Targa file in
which some of the samples (color indices) exceeded the bounds of the Targa
file's color table.

5. Fixed an issue whereby installing a fully static build of libjpeg-turbo
(a build in which `CFLAGS` contains `-static` and `ENABLE_SHARED` is `0`)\
 would
fail with "No valid ELF RPATH or RUNPATH entry exists in the file."


2.0.0
=====

### Significant changes relative to 2.0 beta1:

1. The TurboJPEG API can now decompress CMYK JPEG images that have subsampled\
 M
and Y components (not to be confused with YCCK JPEG images, in which the C/M/Y
components have been transformed into luma and chroma.)   Previously, an error
was generated ("Could not determine subsampling type for JPEG image") when\
 such
an image was passed to `tjDecompressHeader3()`, `tjTransform()`,
`tjDecompressToYUVPlanes()`, `tjDecompressToYUV2()`, or the equivalent Java
methods.

2. Fixed an issue (CVE-2018-11813) whereby a specially-crafted malformed input
file (specifically, a file with a valid Targa header but incomplete pixel\
 data)
would cause cjpeg to generate a JPEG file that was potentially thousands of
times larger than the input file.  The Targa reader in cjpeg was not properly
detecting that the end of the input file had been reached prematurely, so\
 after
all valid pixels had been read from the input, the reader injected dummy\
 pixels
with values of 255 into the JPEG compressor until the number of pixels
specified in the Targa header had been compressed.  The Targa reader in cjpeg
now behaves like the PPM reader and aborts compression if the end of the input
file is reached prematurely.  Because this issue only affected cjpeg and not
the underlying library, and because it did not involve any out-of-bounds reads
or other exploitable behaviors, it was not believed to represent a security
threat.

3. Fixed an issue whereby the `tjLoadImage()` and `tjSaveImage()` functions
would produce a "Bogus message code" error message if the underlying bitmap\
 and
PPM readers/writers threw an error that was specific to the readers/writers
(as opposed to a general libjpeg API error.)

4. Fixed an issue (CVE-2018-1152) whereby a specially-crafted malformed BMP
file, one in which the header specified an image width of 1073741824 pixels,
would trigger a floating point exception (division by zero) in the
`tjLoadImage()` function when attempting to load the BMP file into a
4-component image buffer.

5. Fixed an issue whereby certain combinations of calls to
`jpeg_skip_scanlines()` and `jpeg_read_scanlines()` could trigger an infinite
loop when decompressing progressive JPEG images that use vertical chroma
subsampling (for instance, 4:2:0 or 4:4:0.)

6. Fixed a segfault in `jpeg_skip_scanlines()` that occurred when\
 decompressing
a 4:2:2 or 4:2:0 JPEG image using the merged (non-fancy) upsampling algorithms
(that is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.)

7. The new CMake-based build system will now disable the MIPS DSPr2 SIMD
extensions if it detects that the compiler does not support DSPr2\
 instructions.

8. Fixed out-of-bounds read in cjpeg (CVE-2018-14498) that occurred when
attempting to compress a specially-crafted malformed color-index
(8-bit-per-sample) BMP file in which some of the samples (color indices)
exceeded the bounds of the BMP file's color table.

9. Fixed a signed integer overflow in the progressive Huffman decoder,\
 detected
by the Clang and GCC undefined behavior sanitizers, that could be triggered by
attempting to decompress a specially-crafted malformed JPEG image.  This issue
did not pose a security threat, but removing the warning made it easier to
detect actual security issues, should they arise in the future.


1.5.90 (2.0 beta1)
==================

### Significant changes relative to 1.5.3:

1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
downsampling and upsampling, integer quantization and sample conversion, and
accurate integer DCT/IDCT algorithms.  When using the accurate integer\
 DCT/IDCT
algorithms on AVX2-equipped CPUs, the compression of RGB images is
approximately 13-36% (avg. 22%) faster (relative to libjpeg-turbo 1.5.x) with
64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
decompression of RGB images is approximately 9-35% (avg. 17%) faster with
64-bit code and 7-17% (avg. 12%) faster with 32-bit code.  (As tested on a
3 GHz Intel Core i7.  Actual mileage may vary.)

2. Overhauled the build system to use CMake on all platforms, and removed the
autotools-based build system.  This decision resulted from extensive
discussions within the libjpeg-turbo community.  libjpeg-turbo traditionally
used CMake only for Windows builds, but there was an increasing amount of
demand to extend CMake support to other platforms.  However, because of the
unique nature of our code base (the need to support different assemblers on
each platform, the need for Java support, etc.), providing dual build systems
as other OSS imaging libraries do (including libpng and libtiff) would have
created a maintenance burden.  The use of CMake greatly simplifies some\
 aspects
of our build system, owing to CMake's built-in support for various assemblers,
Java, and unit testing, as well as generally fewer quirks that have to be
worked around in order to implement our packaging system.  Eliminating
autotools puts our project slightly at odds with the traditional practices of
the OSS community, since most "system libraries" tend to be built with
autotools, but it is believed that the benefits of this move outweigh the
risks.  In addition to providing a unified build environment, switching to
CMake allows for the use of various build tools and IDEs that aren't supported
under autotools, including XCode, Ninja, and Eclipse.  It also eliminates the
need to install autotools via MacPorts/Homebrew on OS X and allows
libjpeg-turbo to be configured without the use of a terminal/command prompt.
Extensive testing was conducted to ensure that all features provided by the
autotools-based build system are provided by the new build system.

3. The libjpeg API in this version of libjpeg-turbo now includes two\
 additional
functions, `jpeg_read_icc_profile()` and `jpeg_write_icc_profile()`, that can
be used to extract ICC profile data from a JPEG file while decompressing or to
embed ICC profile data in a JPEG file while compressing or transforming.  This
eliminates the need for downstream projects, such as color management\
 libraries
and browsers, to include their own glueware for accomplishing this.

4. Improved error handling in the TurboJPEG API library:

     - Introduced a new function (`tjGetErrorStr2()`) in the TurboJPEG C API
that allows compression/decompression/transform error messages to be retrieved
in a thread-safe manner.  Retrieving error messages from global functions,\
 such
as `tjInitCompress()` or `tjBufSize()`, is still thread-unsafe, but since\
 those
functions will only throw errors if passed an invalid argument or if a memory
allocation failure occurs, thread safety is not as much of a concern.
     - Introduced a new function (`tjGetErrorCode()`) in the TurboJPEG C API
and a new method (`TJException.getErrorCode()`) in the TurboJPEG Java API that
can be used to determine the severity of the last
compression/decompression/transform error.  This allows applications to
choose whether to ignore warnings (non-fatal errors) from the underlying
libjpeg API or to treat them as fatal.
     - Introduced a new flag (`TJFLAG_STOPONWARNING` in the TurboJPEG C API\
 and
`TJ.FLAG_STOPONWARNING` in the TurboJPEG Java API) that causes the library to
immediately halt a compression/decompression/transform operation if it
encounters a warning from the underlying libjpeg API (the default behavior is
to allow the operation to complete unless a fatal error is encountered.)

5. Introduced a new flag in the TurboJPEG C and Java APIs (`TJFLAG_PROGRESSIV\
E`
and `TJ.FLAG_PROGRESSIVE`, respectively) that causes the library to use
progressive entropy coding in JPEG images generated by compression and
transform operations.  Additionally, a new transform option
(`TJXOPT_PROGRESSIVE` in the C API and `TJTransform.OPT_PROGRESSIVE` in the
Java API) has been introduced, allowing progressive entropy coding to be
enabled for selected transforms in a multi-transform operation.

6. Introduced a new transform option in the TurboJPEG API (`TJXOPT_COPYNONE`\
 in
the C API and `TJTransform.OPT_COPYNONE` in the Java API) that allows the
copying of markers (including EXIF and ICC profile data) to be disabled for a
particular transform.

7. Added two functions to the TurboJPEG C API (`tjLoadImage()` and
`tjSaveImage()`) that can be used to load/save a BMP or PPM/PGM image to/from\
 a
memory buffer with a specified pixel format and layout.  These functions
replace the project-private (and slow) bmp API, which was previously used by
TJBench, and they also provide a convenient way for first-time users of
libjpeg-turbo to quickly develop a complete JPEG compression/decompression
program.

8. The TurboJPEG C API now includes a new convenience array\
 (`tjAlphaOffset[]`)
that contains the alpha component index for each pixel format (or -1 if the
pixel format lacks an alpha component.)  The TurboJPEG Java API now includes a
new method (`TJ.getAlphaOffset()`) that returns the same value.  In addition,
the `tjRedOffset[]`, `tjGreenOffset[]`, and `tjBlueOffset[]` arrays-- and the
corresponding `TJ.getRedOffset()`, `TJ.getGreenOffset()`, and
`TJ.getBlueOffset()` methods-- now return -1 for `TJPF_GRAY`/`TJ.PF_GRAY`
rather than 0.  This allows programs to easily determine whether a pixel\
 format
has red, green, blue, and alpha components.

9. Added a new example (tjexample.c) that demonstrates the basic usage of the
TurboJPEG C API.  This example mirrors the functionality of TJExample.java.
Both files are now included in the libjpeg-turbo documentation.

10. Fixed two signed integer overflows in the arithmetic decoder, detected by
the Clang undefined behavior sanitizer, that could be triggered by attempting
to decompress a specially-crafted malformed JPEG image.  These issues did not
pose a security threat, but removing the warnings makes it easier to detect
actual security issues, should they arise in the future.

11. Fixed a bug in the merged 4:2:0 upsampling/dithered RGB565 color\
 conversion
algorithm that caused incorrect dithering in the output image.  This algorithm
now produces bitwise-identical results to the unmerged algorithms.

12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
libjpeg-turbo is built with Yasm), and iOS/Arm[64] builds are now private.
This prevents those symbols from being exposed in applications or shared
libraries that link statically with libjpeg-turbo.

13. Added Loongson MMI SIMD implementations of the RGB-to-YCbCr and
YCbCr-to-RGB colorspace conversion, 4:2:0 chroma downsampling, 4:2:0 fancy
chroma upsampling, integer quantization, and accurate integer DCT/IDCT
algorithms.  When using the accurate integer DCT/IDCT, this speeds up the
compression of RGB images by approximately 70-100% and the decompression of\
 RGB
images by approximately 2-3.5x.

14. Fixed a build error when building with older MinGW releases (regression
caused by 1.5.1[7].)

15. Added SIMD acceleration for progressive Huffman encoding on SSE2-capable
x86 and x86-64 platforms.  This speeds up the compression of full-color
progressive JPEGs by about 85-90% on average (relative to libjpeg-turbo 1.5.x)
when using modern Intel and AMD CPUs.


1.5.3
=====

### Significant changes relative to 1.5.2:

1. Fixed a NullPointerException in the TurboJPEG Java wrapper that occurred
when using the YUVImage constructor that creates an instance backed by\
 separate
image planes and allocates memory for the image planes.

2. Fixed an issue whereby the Java version of TJUnitTest would fail when
testing BufferedImage encoding/decoding on big endian systems.

3. Fixed a segfault in djpeg that would occur if an output format other than
PPM/PGM was selected along with the `-crop` option.  The `-crop` option now
works with the GIF and Targa formats as well (unfortunately, it cannot be made
to work with the BMP and RLE formats due to the fact that those output engines
write scanlines in bottom-up order.)  djpeg will now exit gracefully if an
output format other than PPM/PGM, GIF, or Targa is selected along with the
`-crop` option.

4. Fixed an issue (CVE-2017-15232) whereby `jpeg_skip_scanlines()` would
segfault if color quantization was enabled.

5. TJBench (both C and Java versions) will now display usage information if\
 any
command-line argument is unrecognized.  This prevents the program from\
 silently
ignoring typos.

6. Fixed an access violation in tjbench.exe (Windows) that occurred when the
program was used to decompress an existing JPEG image.

7. Fixed an ArrayIndexOutOfBoundsException in the TJExample Java program that
occurred when attempting to decompress a JPEG image that had been compressed
with 4:1:1 chrominance subsampling.

8. Fixed an issue whereby, when using `jpeg_skip_scanlines()` to skip to the
end of a single-scan (non-progressive) image, subsequent calls to
`jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than
`JPEG_REACHED_EOI`.

9. `jpeg_crop_scanline()` now works correctly when decompressing grayscale\
 JPEG
images that were compressed with a sampling factor other than 1 (for instance,
with `cjpeg -grayscale -sample 2x2`).


1.5.2
=====

### Significant changes relative to 1.5.1:

1. Fixed a regression introduced by 1.5.1[7] that prevented libjpeg-turbo from
building with Android NDK platforms prior to android-21 (5.0).

2. Fixed a regression introduced by 1.5.1[1] that prevented the MIPS DSPR2\
 SIMD
code in libjpeg-turbo from building.

3. Fixed a regression introduced by 1.5 beta1[11] that prevented the Java
version of TJBench from outputting any reference images (the `-nowrite` switch
was accidentally enabled by default.)

4. libjpeg-turbo should now build and run with full AltiVec SIMD acceleration
on PowerPC-based AmigaOS 4 and OpenBSD systems.

5. Fixed build and runtime errors on Windows that occurred when building
libjpeg-turbo with libjpeg v7 API/ABI emulation and the in-memory
source/destination managers.  Due to an oversight, the `jpeg_skip_scanlines()`
and `jpeg_crop_scanline()` functions were not being included in jpeg7.dll when
libjpeg-turbo was built with `-DWITH_JPEG7=1` and `-DWITH_MEMSRCDST=1`.

6. Fixed "Bogus virtual array access" error that occurred when using the
lossless crop feature in jpegtran or the TurboJPEG API, if libjpeg-turbo was
built with libjpeg v7 API/ABI emulation.  This was apparently a long-standing
bug that has existed since the introduction of libjpeg v7/v8 API/ABI emulation
in libjpeg-turbo v1.1.

7. The lossless transform features in jpegtran and the TurboJPEG API will now
always attempt to adjust the EXIF image width and height tags if the image\
 size
changed as a result of the transform.  This behavior has always existed when
using libjpeg v8 API/ABI emulation.  It was supposed to be available with
libjpeg v7 API/ABI emulation as well but did not work properly due to a bug.
Furthermore, there was never any good reason not to enable it with libjpeg v6b
API/ABI emulation, since the behavior is entirely internal.  Note that
`-copy all` must be passed to jpegtran in order to transfer the EXIF tags from
the source image to the destination image.

8. Fixed several memory leaks in the TurboJPEG API library that could occur
if the library was built with certain compilers and optimization levels
(known to occur with GCC 4.x and clang with `-O1` and higher but not with
GCC 5.x or 6.x) and one of the underlying libjpeg API functions threw an error
after a TurboJPEG API function allocated a local buffer.

9. The libjpeg-turbo memory manager will now honor the `max_memory_to_use`
structure member in jpeg\_memory\_mgr, which can be set to the maximum amount
of memory (in bytes) that libjpeg-turbo should use during decompression or
multi-pass (including progressive) compression.  This limit can also be set
using the `JPEGMEM` environment variable or using the `-maxmemory` switch in
cjpeg/djpeg/jpegtran (refer to the respective man pages for more details.)
This has been a documented feature of libjpeg since v5, but the
`malloc()`/`free()` implementation of the memory manager (jmemnobs.c) never
implemented the feature.  Restricting libjpeg-turbo's memory usage is useful
for two reasons:  it allows testers to more easily work around the 2 GB limit
in libFuzzer, and it allows developers of security-sensitive applications to
more easily defend against one of the progressive JPEG exploits (LJT-01-004)
identified in
[this report](http://www.libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswith\
theJPEGStandard.pdf).

10. TJBench will now run each benchmark for 1 second prior to starting the
timer, in order to improve the consistency of the results.  Furthermore, the
`-warmup` option is now used to specify the amount of warmup time rather than
the number of warmup iterations.

11. Fixed an error (`short jump is out of range`) that occurred when\
 assembling
the 32-bit x86 SIMD extensions with NASM versions prior to 2.04.  This was a
regression introduced by 1.5 beta1[12].


1.5.1
=====

### Significant changes relative to 1.5.0:

1. Previously, the undocumented `JSIMD_FORCE*` environment variables could be
used to force-enable a particular SIMD instruction set if multiple instruction
sets were available on a particular platform.  On x86 platforms, where CPU
feature detection is bulletproof and multiple SIMD instruction sets are
available, it makes sense for those environment variables to allow forcing the
use of an instruction set only if that instruction set is available.  However,
since the ARM implementations of libjpeg-turbo can only use one SIMD
instruction set, and since their feature detection code is less bulletproof
(parsing /proc/cpuinfo), it makes sense for the `JSIMD_FORCENEON` environment
variable to bypass the feature detection code and really force the use of NEON
instructions.  A new environment variable (`JSIMD_FORCEDSPR2`) was introduced
in the MIPS implementation for the same reasons, and the existing
`JSIMD_FORCENONE` environment variable was extended to that implementation.
These environment variables provide a workaround for those attempting to test
ARM and MIPS builds of libjpeg-turbo in QEMU, which passes through
/proc/cpuinfo from the host system.

2. libjpeg-turbo previously assumed that AltiVec instructions were always
available on PowerPC platforms, which led to "illegal instruction" errors when
running on PowerPC chips that lack AltiVec support (such as the older 7xx/G3
and newer e5500 series.)  libjpeg-turbo now examines /proc/cpuinfo on
Linux/Android systems and enables AltiVec instructions only if the CPU\
 supports
them.  It also now provides two environment variables, `JSIMD_FORCEALTIVEC`\
 and
`JSIMD_FORCENONE`, to force-enable and force-disable AltiVec instructions in
environments where /proc/cpuinfo is an unreliable means of CPU feature
detection (such as when running in QEMU.)  On OS X, libjpeg-turbo continues to
assume that AltiVec support is always available, which means that\
 libjpeg-turbo
cannot be used with G3 Macs unless you set the environment variable
`JSIMD_FORCENONE` to `1`.

3. Fixed an issue whereby 64-bit ARM (AArch64) builds of libjpeg-turbo would
crash when built with recent releases of the Clang/LLVM compiler.  This was
caused by an ABI conformance issue in some of libjpeg-turbo's 64-bit NEON SIMD
routines.  Those routines were incorrectly using 64-bit instructions to
transfer a 32-bit JDIMENSION argument, whereas the ABI allows the upper
(unused) 32 bits of a 32-bit argument's register to be undefined.  The new
Clang/LLVM optimizer uses load combining to transfer multiple adjacent 32-bit
structure members into a single 64-bit register, and this exposed the ABI
conformance issue.

4. Fancy upsampling is now supported when decompressing JPEG images that use
4:4:0 (h1v2) chroma subsampling.  These images are generated when losslessly
rotating or transposing JPEG images that use 4:2:2 (h2v1) chroma subsampling.
The h1v2 fancy upsampling algorithm is not currently SIMD-accelerated.

5. If merged upsampling isn't SIMD-accelerated but YCbCr-to-RGB conversion is,
then libjpeg-turbo will now disable merged upsampling when decompressing YCbCr
JPEG images into RGB or extended RGB output images.  This significantly speeds
up the decompression of 4:2:0 and 4:2:2 JPEGs on ARM platforms if fancy
upsampling is not used (for example, if the `-nosmooth` option to djpeg is
specified.)

6. The TurboJPEG API will now decompress 4:2:2 and 4:4:0 JPEG images with
2x2 luminance sampling factors and 2x1 or 1x2 chrominance sampling factors.
This is a non-standard way of specifying 2x subsampling (normally 4:2:2 JPEGs
have 2x1 luminance and 1x1 chrominance sampling factors, and 4:4:0 JPEGs have
1x2 luminance and 1x1 chrominance sampling factors), but the JPEG format and
the libjpeg API both allow it.

7. Fixed an unsigned integer overflow in the libjpeg memory manager, detected
by the Clang undefined behavior sanitizer, that could be triggered by
attempting to decompress a specially-crafted malformed JPEG image.  This issue
affected only 32-bit code and did not pose a security threat, but removing the
warning makes it easier to detect actual security issues, should they arise in
the future.

8. Fixed additional negative left shifts and other issues reported by the GCC
and Clang undefined behavior sanitizers when attempting to decompress
specially-crafted malformed JPEG images.  None of these issues posed a\
 security
threat, but removing the warnings makes it easier to detect actual security
issues, should they arise in the future.

9. Fixed an out-of-bounds array reference, introduced by 1.4.90[2] (partial
image decompression) and detected by the Clang undefined behavior sanitizer,
that could be triggered by a specially-crafted malformed JPEG image with more
than four components.  Because the out-of-bounds reference was still within\
 the
same structure, it was not known to pose a security threat, but removing the
warning makes it easier to detect actual security issues, should they arise in
the future.

10. Fixed another ABI conformance issue in the 64-bit ARM (AArch64) NEON SIMD
code.  Some of the routines were incorrectly reading and storing data below\
 the
stack pointer, which caused segfaults in certain applications under specific
circumstances.


1.5.0
=====

### Significant changes relative to 1.5 beta1:

1. Fixed an issue whereby a malformed motion-JPEG frame could cause the "fast
path" of libjpeg-turbo's Huffman decoder to read from uninitialized memory.

2. Added libjpeg-turbo version and build information to the global string\
 table
of the libjpeg and TurboJPEG API libraries.  This is a common practice in\
 other
infrastructure libraries, such as OpenSSL and libpng, because it makes it easy
to examine an application binary and determine which version of the library\
 the
application was linked against.

3. Fixed a couple of issues in the PPM reader that would cause buffer overruns
in cjpeg if one of the values in a binary PPM/PGM input file exceeded the
maximum value defined in the file's header and that maximum value was greater
than 255.  libjpeg-turbo 1.4.2 already included a similar fix for ASCII\
 PPM/PGM
files.  Note that these issues were not security bugs, since they were\
 confined
to the cjpeg program and did not affect any of the libjpeg-turbo libraries.

4. Fixed an issue whereby attempting to decompress a JPEG file with a corrupt
header using the `tjDecompressToYUV2()` function would cause the function to
abort without returning an error and, under certain circumstances, corrupt the
stack.  This only occurred if `tjDecompressToYUV2()` was called prior to
calling `tjDecompressHeader3()`, or if the return value from
`tjDecompressHeader3()` was ignored (both cases represent incorrect usage of
the TurboJPEG API.)

5. Fixed an issue in the ARM 32-bit SIMD-accelerated Huffman encoder that
prevented the code from assembling properly with clang.

6. The `jpeg_stdio_src()`, `jpeg_mem_src()`, `jpeg_stdio_dest()`, and
`jpeg_mem_dest()` functions in the libjpeg API will now throw an error if a
source/destination manager has already been assigned to the compress or
decompress object by a different function or by the calling program.  This
prevents these functions from attempting to reuse a source/destination manager
structure that was allocated elsewhere, because there is no way to ensure that
it would be big enough to accommodate the new source/destination manager.


1.4.90 (1.5 beta1)
==================

### Significant changes relative to 1.4.2:

1. Added full SIMD acceleration for PowerPC platforms using AltiVec VMX
(128-bit SIMD) instructions.  Although the performance of libjpeg-turbo on
PowerPC was already good, due to the increased number of registers available
to the compiler vs. x86, it was still possible to speed up compression by\
 about
3-4x and decompression by about 2-2.5x (relative to libjpeg v6b) through the
use of AltiVec instructions.

2. Added two new libjpeg API functions (`jpeg_skip_scanlines()` and
`jpeg_crop_scanline()`) that can be used to partially decode a JPEG image. \
 See
[libjpeg.txt](libjpeg.txt) for more details.

3. The TJCompressor and TJDecompressor classes in the TurboJPEG Java API now
implement the Closeable interface, so those classes can be used with a
try-with-resources statement.

4. The TurboJPEG Java classes now throw unchecked idiomatic exceptions
(IllegalArgumentException, IllegalStateException) for unrecoverable errors
caused by incorrect API usage, and those classes throw a new checked exception
type (TJException) for errors that are passed through from the C library.

5. Source buffers for the TurboJPEG C API functions, as well as the
`jpeg_mem_src()` function in the libjpeg API, are now declared as const
pointers.  This facilitates passing read-only buffers to those functions and
ensures the caller that the source buffer will not be modified.  This should
not create any backward API or ABI incompatibilities with prior libjpeg-turbo
releases.

6. The MIPS DSPr2 SIMD code can now be compiled to support either FR=0 or FR=1
FPUs.

7. Fixed additional negative left shifts and other issues reported by the GCC
and Clang undefined behavior sanitizers.  Most of these issues affected only
32-bit code, and none of them was known to pose a security threat, but\
 removing
the warnings makes it easier to detect actual security issues, should they
arise in the future.

8. Removed the unnecessary `.arch` directive from the ARM64 NEON SIMD code.
This directive was preventing the code from assembling using the clang
integrated assembler.

9. Fixed a regression caused by 1.4.1[6] that prevented 32-bit and 64-bit
libjpeg-turbo RPMs from being installed simultaneously on recent Red\
 Hat/Fedora
distributions.  This was due to the addition of a macro in jconfig.h that
allows the Huffman codec to determine the word size at compile time.  Since
that macro differs between 32-bit and 64-bit builds, this caused a conflict
between the i386 and x86_64 RPMs (any differing files, other than executables,
are not allowed when 32-bit and 64-bit RPMs are installed simultaneously.)
Since the macro is used only internally, it has been moved into jconfigint.h.

10. The x86-64 SIMD code can now be disabled at run time by setting the
`JSIMD_FORCENONE` environment variable to `1` (the other SIMD implementations
already had this capability.)

11. Added a new command-line argument to TJBench (`-nowrite`) that prevents\
 the
benchmark from outputting any images.  This removes any potential operating
system overhead that might be caused by lazy writes to disk and thus improves
the consistency of the performance measurements.

12. Added SIMD acceleration for Huffman encoding on SSE2-capable x86 and\
 x86-64
platforms.  This speeds up the compression of full-color JPEGs by about 10-15%
on average (relative to libjpeg-turbo 1.4.x) when using modern Intel and AMD
CPUs.  Additionally, this works around an issue in the clang optimizer that
prevents it (as of this writing) from achieving the same performance as GCC
when compiling the C version of the Huffman encoder
(<https://llvm.org/bugs/show_bug.cgi?id=16035>).  For the purposes of
benchmarking or regression testing, SIMD-accelerated Huffman encoding can be
disabled by setting the `JSIMD_NOHUFFENC` environment variable to `1`.

13. Added ARM 64-bit (ARMv8) NEON SIMD implementations of the commonly-used
compression algorithms (including the accurate integer forward DCT and h2v2 &
h2v1 downsampling algorithms, which are not accelerated in the 32-bit NEON
implementation.)  This speeds up the compression of full-color JPEGs by about
75% on average on a Cavium ThunderX processor and by about 2-2.5x on average\
 on
Cortex-A53 and Cortex-A57 cores.

14. Added SIMD acceleration for Huffman encoding on NEON-capable ARM 32-bit
and 64-bit platforms.

    For 32-bit code, this speeds up the compression of full-color JPEGs by
about 30% on average on a typical iOS device (iPhone 4S, Cortex-A9) and by
about 6-7% on average on a typical Android device (Nexus 5X, Cortex-A53 and
Cortex-A57), relative to libjpeg-turbo 1.4.x.  Note that the larger speedup
under iOS is due to the fact that iOS builds use LLVM, which does not optimize
the C Huffman encoder as well as GCC does.

    For 64-bit code, NEON-accelerated Huffman encoding speeds up the
compression of full-color JPEGs by about 40% on average on a typical iOS\
 device
(iPhone 5S, Apple A7) and by about 7-8% on average on a typical Android device
(Nexus 5X, Cortex-A53 and Cortex-A57), in addition to the speedup described in
[13] above.

    For the purposes of benchmarking or regression testing, SIMD-accelerated
Huffman encoding can be disabled by setting the `JSIMD_NOHUFFENC` environment
variable to `1`.

15. pkg-config (.pc) scripts are now included for both the libjpeg and
TurboJPEG API libraries on Un*x systems.  Note that if a project's build\
 system
relies on these scripts, then it will not be possible to build that project
with libjpeg or with a prior version of libjpeg-turbo.

16. Optimized the ARM 64-bit (ARMv8) NEON SIMD decompression routines to
improve performance on CPUs with in-order pipelines.  This speeds up the
decompression of full-color JPEGs by nearly 2x on average on a Cavium ThunderX
processor and by about 15% on average on a Cortex-A53 core.

17. Fixed an issue in the accelerated Huffman decoder that could have caused
the decoder to read past the end of the input buffer when a malformed,
specially-crafted JPEG image was being decompressed.  In prior versions of
libjpeg-turbo, the accelerated Huffman decoder was invoked (in most cases)\
 only
if there were > 128 bytes of data in the input buffer.  However, it is\
 possible
to construct a JPEG image in which a single Huffman block is over 430 bytes
long, so this version of libjpeg-turbo activates the accelerated Huffman
decoder only if there are > 512 bytes of data in the input buffer.

18. Fixed a memory leak in tjunittest encountered when running the program
with the `-yuv` option.


1.4.2
=====

### Significant changes relative to 1.4.1:

1. Fixed an issue whereby cjpeg would segfault if a Windows bitmap with a
negative width or height was used as an input image (Windows bitmaps can have
a negative height if they are stored in top-down order, but such files are
rare and not supported by libjpeg-turbo.)

2. Fixed an issue whereby, under certain circumstances, libjpeg-turbo would
incorrectly encode certain JPEG images when quality=100 and the fast integer
forward DCT were used.  This was known to cause `make test` to fail when the
library was built with `-march=haswell` on x86 systems.

3. Fixed an issue whereby libjpeg-turbo would crash when built with the latest
& greatest development version of the Clang/LLVM compiler.  This was caused by
an x86-64 ABI conformance issue in some of libjpeg-turbo's 64-bit SSE2 SIMD
routines.  Those routines were incorrectly using a 64-bit `mov` instruction to
transfer a 32-bit JDIMENSION argument, whereas the x86-64 ABI allows the upper
(unused) 32 bits of a 32-bit argument's register to be undefined.  The new
Clang/LLVM optimizer uses load combining to transfer multiple adjacent 32-bit
structure members into a single 64-bit register, and this exposed the ABI
conformance issue.

4. Fixed a bug in the MIPS DSPr2 4:2:0 "plain" (non-fancy and non-merged)
upsampling routine that caused a buffer overflow (and subsequent segfault)\
 when
decompressing a 4:2:0 JPEG image whose scaled output width was less than 16
pixels.  The "plain" upsampling routines are normally only used when
decompressing a non-YCbCr JPEG image, but they are also used when\
 decompressing
a JPEG image whose scaled output height is 1.

5. Fixed various negative left shifts and other issues reported by the GCC and
Clang undefined behavior sanitizers.  None of these was known to pose a
security threat, but removing the warnings makes it easier to detect actual
security issues, should they arise in the future.


1.4.1
=====

### Significant changes relative to 1.4.0:

1. tjbench now properly handles CMYK/YCCK JPEG files.  Passing an argument of
`-cmyk` (instead of, for instance, `-rgb`) will cause tjbench to internally
convert the source bitmap to CMYK prior to compression, to generate YCCK JPEG
files, and to internally convert the decompressed CMYK pixels back to RGB\
 after
decompression (the latter is done automatically if a CMYK or YCCK JPEG is
passed to tjbench as a source image.)  The CMYK<->RGB conversion operation is
not benchmarked.  NOTE: The quick & dirty CMYK<->RGB conversions that tjbench
uses are suitable for testing only.  Proper conversion between CMYK and RGB
requires a color management system.

2. `make test` now performs additional bitwise regression tests using tjbench,
mainly for the purpose of testing compression from/decompression to a\
 subregion
of a larger image buffer.

3. `make test` no longer tests the regression of the floating point DCT/IDCT
by default, since the results of those tests can vary if the algorithms in
question are not implemented using SIMD instructions on a particular platform.
See the comments in [Makefile.am](Makefile.am) for information on how to
re-enable the tests and to specify an expected result for them based on the
particulars of your platform.

4. The NULL color conversion routines have been significantly optimized,
which speeds up the compression of RGB and CMYK JPEGs by 5-20% when using
64-bit code and 0-3% when using 32-bit code, and the decompression of those
images by 10-30% when using 64-bit code and 3-12% when using 32-bit code.

5. Fixed an "illegal instruction" error that occurred when djpeg from a
SIMD-enabled libjpeg-turbo MIPS build was executed with the `-nosmooth` option
on a MIPS machine that lacked DSPr2 support.  The MIPS SIMD routines for h2v1
and h2v2 merged upsampling were not properly checking for the existence of
DSPr2.

6. Performance has been improved significantly on 64-bit non-Linux and
non-Windows platforms (generally 10-20% faster compression and 5-10% faster
decompression.)  Due to an oversight, the 64-bit version of the accelerated
Huffman codec was not being compiled in when libjpeg-turbo was built on
platforms other than Windows or Linux.  Oops.

7. Fixed an extremely rare bug in the Huffman encoder that caused 64-bit
builds of libjpeg-turbo to incorrectly encode a few specific test images when
quality=98, an optimized Huffman table, and the accurate integer forward DCT
were used.

8. The Windows (CMake) build system now supports building only static or only
shared libraries.  This is accomplished by adding either `-DENABLE_STATIC=0`\
 or
`-DENABLE_SHARED=0` to the CMake command line.

9. TurboJPEG API functions will now return an error code if a warning is
triggered in the underlying libjpeg API.  For instance, if a JPEG file is
corrupt, the TurboJPEG decompression functions will attempt to decompress
as much of the image as possible, but those functions will now return -1 to
indicate that the decompression was not entirely successful.

10. Fixed a bug in the MIPS DSPr2 4:2:2 fancy upsampling routine that caused a
buffer overflow (and subsequent segfault) when decompressing a 4:2:2 JPEG\
 image
in which the right-most MCU was 5 or 6 pixels wide.


1.4.0
=====

### Significant changes relative to 1.4 beta1:

1. Fixed a build issue on OS X PowerPC platforms (md5cmp failed to build
because OS X does not provide the `le32toh()` and `htole32()` functions.)

2. The non-SIMD RGB565 color conversion code did not work correctly on big
endian machines.  This has been fixed.

3. Fixed an issue in `tjPlaneSizeYUV()` whereby it would erroneously return 1
instead of -1 if `componentID` was > 0 and `subsamp` was `TJSAMP_GRAY`.

3. Fixed an issue in `tjBufSizeYUV2()` whereby it would erroneously return 0
instead of -1 if `width` was < 1.

5. The Huffman encoder now uses `clz` and `bsr` instructions for bit counting
on ARM64 platforms (see 1.4 beta1[5].)

6. The `close()` method in the TJCompressor and TJDecompressor Java classes is
now idempotent.  Previously, that method would call the native `tjDestroy()`
function even if the TurboJPEG instance had already been destroyed.  This
caused an exception to be thrown during finalization, if the `close()` method
had already been called.  The exception was caught, but it was still an
expensive operation.

7. The TurboJPEG API previously generated an error (`Could not determine
subsampling type for JPEG image`) when attempting to decompress grayscale JPEG
images that were compressed with a sampling factor other than 1 (for instance,
with `cjpeg -grayscale -sample 2x2`).  Subsampling technically has no meaning
with grayscale JPEGs, and thus the horizontal and vertical sampling factors
for such images are ignored by the decompressor.  However, the TurboJPEG API
was being too rigid and was expecting the sampling factors to be equal to 1
before it treated the image as a grayscale JPEG.

8. cjpeg, djpeg, and jpegtran now accept an argument of `-version`, which will
print the library version and exit.

9. Referring to 1.4 beta1[15], another extremely rare circumstance was
discovered under which the Huffman encoder's local buffer can be overrun
when a buffered destination manager is being used and an
extremely-high-frequency block (basically junk image data) is being encoded.
Even though the Huffman local buffer was increased from 128 bytes to 136 bytes
to address the previous issue, the new issue caused even the larger buffer to
be overrun.  Further analysis reveals that, in the absolute worst case (such\
 as
setting alternating AC coefficients to 32767 and -32768 in the JPEG scanning
order), the Huffman encoder can produce encoded blocks that approach double\
 the
size of the unencoded blocks.  Thus, the Huffman local buffer was increased to
256 bytes, which should prevent any such issue from re-occurring in the\
 future.

10. The new `tjPlaneSizeYUV()`, `tjPlaneWidth()`, and `tjPlaneHeight()`
functions were not actually usable on any platform except OS X and Windows,
because those functions were not included in the libturbojpeg mapfile.  This
has been fixed.

11. Restored the `JPP()`, `JMETHOD()`, and `FAR` macros in the libjpeg-turbo
header files.  The `JPP()` and `JMETHOD()` macros were originally implemented
in libjpeg as a way of supporting non-ANSI compilers that lacked support for
prototype parameters.  libjpeg-turbo has never supported such compilers, but
some software packages still use the macros to define their own prototypes.
Similarly, libjpeg-turbo has never supported MS-DOS and other platforms that
have far symbols, but some software packages still use the `FAR` macro.  A
pretty good argument can be made that this is a bad practice on the part of\
 the
software in question, but since this affects more than one package, it's just
easier to fix it here.

12. Fixed issues that were preventing the ARM 64-bit SIMD code from compiling
for iOS, and included an ARMv8 architecture in all of the binaries installed\
 by
the "official" libjpeg-turbo SDK for OS X.


1.3.90 (1.4 beta1)
==================

### Significant changes relative to 1.3.1:

1. New features in the TurboJPEG API:

     - YUV planar images can now be generated with an arbitrary line padding
(previously only 4-byte padding, which was compatible with X Video, was
supported.)
     - The decompress-to-YUV function has been extended to support image
scaling.
     - JPEG images can now be compressed from YUV planar source images.
     - YUV planar images can now be decoded into RGB or grayscale images.
     - 4:1:1 subsampling is now supported.  This is mainly included for
compatibility, since 4:1:1 is not fully accelerated in libjpeg-turbo and has\
 no
significant advantages relative to 4:2:0.
     - CMYK images are now supported.  This feature allows CMYK source images
to be compressed to YCCK JPEGs and YCCK or CMYK JPEGs to be decompressed to
CMYK destination images.  Conversion between CMYK/YCCK and RGB or YUV images\
 is
not supported.  Such conversion requires a color management system and is thus
out of scope for a codec library.
     - The handling of YUV images in the Java API has been significantly
refactored and should now be much more intuitive.
     - The Java API now supports encoding a YUV image from an arbitrary
position in a large image buffer.
     - All of the YUV functions now have a corresponding function that\
 operates
on separate image planes instead of a unified image buffer.  This allows for
compressing/decoding from or decompressing/encoding to a subregion of a larger
YUV image.  It also allows for handling YUV formats that swap the order of the
U and V planes.

2. Added SIMD acceleration for DSPr2-capable MIPS platforms.  This speeds up
the compression of full-color JPEGs by 70-80% on such platforms and
decompression by 25-35%.

3. If an application attempts to decompress a Huffman-coded JPEG image whose
header does not contain Huffman tables, libjpeg-turbo will now insert the
default Huffman tables.  In order to save space, many motion JPEG video frames
are encoded without the default Huffman tables, so these frames can now be
successfully decompressed by libjpeg-turbo without additional work on the part
of the application.  An application can still override the Huffman tables, for
instance to re-use tables from a previous frame of the same video.

4. The Mac packaging system now uses pkgbuild and productbuild rather than
PackageMaker (which is obsolete and no longer supported.)  This means that
OS X 10.6 "Snow Leopard" or later must be used when packaging libjpeg-turbo,
although the packages produced can be installed on OS X 10.5 "Leopard" or
later.  OS X 10.4 "Tiger" is no longer supported.

5. The Huffman encoder now uses `clz` and `bsr` instructions for bit counting
on ARM platforms rather than a lookup table.  This reduces the memory\
 footprint
by 64k, which may be important for some mobile applications.  Out of four
Android devices that were tested, two demonstrated a small overall performance
loss (~3-4% on average) with ARMv6 code and a small gain (also ~3-4%) with
ARMv7 code when enabling this new feature, but the other two devices
demonstrated a significant overall performance gain with both ARMv6 and ARMv7
code (~10-20%) when enabling the feature.  Actual mileage may vary.

6. Worked around an issue with Visual C++ 2010 and later that caused incorrect
pixels to be generated when decompressing a JPEG image to a 256-color bitmap,
if compiler optimization was enabled when libjpeg-turbo was built.  This\
 caused
the regression tests to fail when doing a release build under Visual C++ 2010
and later.

7. Improved the accuracy and performance of the non-SIMD implementation of the
floating point inverse DCT (using code borrowed from libjpeg v8a and later.)
The accuracy of this implementation now matches the accuracy of the SSE/SSE2
implementation.  Note, however, that the floating point DCT/IDCT algorithms\
 are
mainly a legacy feature.  They generally do not produce significantly better
accuracy than the accurate integer DCT/IDCT algorithms, and they are quite a
bit slower.

8. Added a new output colorspace (`JCS_RGB565`) to the libjpeg API that allows
for decompressing JPEG images into RGB565 (16-bit) pixels.  If dithering is\
 not
used, then this code path is SIMD-accelerated on ARM platforms.

9. Numerous obsolete features, such as support for non-ANSI compilers and
support for the MS-DOS memory model, were removed from the libjpeg code,
greatly improving its readability and making it easier to maintain and extend.

10. Fixed a segfault that occurred when calling `output_message()` with
`msg_code` set to `JMSG_COPYRIGHT`.

11. Fixed an issue whereby wrjpgcom was allowing comments longer than 65k
characters to be passed on the command line, which was causing it to generate
incorrect JPEG files.

12. Fixed a bug in the build system that was causing the Windows version of
wrjpgcom to be built using the rdjpgcom source code.

13. Restored 12-bit-per-component JPEG support.  A 12-bit version of
libjpeg-turbo can now be built by passing an argument of `--with-12bit` to
configure (Unix) or `-DWITH_12BIT=1` to cmake (Windows.)  12-bit JPEG support
is included only for convenience.  Enabling this feature disables all of the
performance features in libjpeg-turbo, as well as arithmetic coding and the
TurboJPEG API.  The resulting library still contains the other libjpeg-turbo
features (such as the colorspace extensions), but in general, it performs no
faster than libjpeg v6b.

14. Added ARM 64-bit SIMD acceleration for the YCC-to-RGB color conversion
and IDCT algorithms (both are used during JPEG decompression.)  For unknown
reasons (probably related to clang), this code cannot currently be compiled\
 for
iOS.

15. Fixed an extremely rare bug (CVE-2014-9092) that could cause the Huffman
encoder's local buffer to overrun when a very high-frequency MCU is compressed
using quality 100 and no subsampling, and when the JPEG output buffer is being
dynamically resized by the destination manager.  This issue was so rare that,
even with a test program specifically designed to make the bug occur (by
injecting random high-frequency YUV data into the compressor), it was
reproducible only once in about every 25 million iterations.

16. Fixed an oversight in the TurboJPEG C wrapper:  if any of the JPEG
compression functions was called repeatedly with the same
automatically-allocated destination buffer, then TurboJPEG would erroneously
assume that the `jpegSize` parameter was equal to the size of the buffer, when
in fact that parameter was probably equal to the size of the most recently
compressed JPEG image.  If the size of the previous JPEG image was not as\
 large
as the current JPEG image, then TurboJPEG would unnecessarily reallocate the
destination buffer.


1.3.1
=====

### Significant changes relative to 1.3.0:

1. On Un*x systems, `make install` now installs the libjpeg-turbo libraries
into /opt/libjpeg-turbo/lib32 by default on any 32-bit system, not just x86,
and into /opt/libjpeg-turbo/lib64 by default on any 64-bit system, not just
x86-64.  You can override this by overriding either the `prefix` or `libdir`
configure variables.

2. The Windows installer now places a copy of the TurboJPEG DLLs in the same
directory as the rest of the libjpeg-turbo binaries.  This was mainly done
to support TurboVNC 1.3, which bundles the DLLs in its Windows installation.
When using a 32-bit version of CMake on 64-bit Windows, it is impossible to
access the c:\WINDOWS\system32 directory, which made it impossible for the
TurboVNC build scripts to bundle the 64-bit TurboJPEG DLL.

3. Fixed a bug whereby attempting to encode a progressive JPEG with arithmetic
entropy coding (by passing arguments of `-progressive -arithmetic` to cjpeg or
jpegtran, for instance) would result in an error, `Requested feature was
omitted at compile time`.

4. Fixed a couple of issues (CVE-2013-6629 and CVE-2013-6630) whereby\
 malformed
JPEG images would cause libjpeg-turbo to use uninitialized memory during
decompression.

5. Fixed an error (`Buffer passed to JPEG library is too small`) that occurred
when calling the TurboJPEG YUV encoding function with a very small (< 5x5)
source image, and added a unit test to check for this error.

6. The Java classes should now build properly under Visual Studio 2010 and
later.

7. Fixed an issue that prevented SRPMs generated using the in-tree packaging
tools from being rebuilt on certain newer Linux distributions.

8. Numerous minor fixes to eliminate compilation and build/packaging system
warnings, fix cosmetic issues, improve documentation clarity, and other\
 general
source cleanup.


1.3.0
=====

### Significant changes relative to 1.3 beta1:

1. `make test` now works properly on FreeBSD, and it no longer requires the
md5sum executable to be present on other Un*x platforms.

2. Overhauled the packaging system:

     - To avoid conflict with vendor-supplied libjpeg-turbo packages, the
official RPMs and DEBs for libjpeg-turbo have been renamed to
"libjpeg-turbo-official".
     - The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
official Linux and Mac packages, to avoid conflict with vendor-supplied
packages and also to streamline the packaging system.
     - Release packages are now created with the directory structure defined
by the configure variables `prefix`, `bindir`, `libdir`, etc. (Un\*x) or by\
 the
`CMAKE_INSTALL_PREFIX` variable (Windows.)  The exception is that the docs are
always located under the system default documentation directory on Un\*x and
Mac systems, and on Windows, the TurboJPEG DLL is always located in the\
 Windows
system directory.
     - To avoid confusion, official libjpeg-turbo packages on Linux/Unix
platforms (except for Mac) will always install the 32-bit libraries in
/opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
     - Fixed an issue whereby, in some cases, the libjpeg-turbo executables on
Un*x systems were not properly linking with the shared libraries installed by
the same package.
     - Fixed an issue whereby building the "installer" target on Windows when
`WITH_JAVA=1` would fail if the TurboJPEG JAR had not been previously built.
     - Building the "install" target on Windows now installs files into the
same places that the installer does.

3. Fixed a Huffman encoder bug that prevented I/O suspension from working
properly.


1.2.90 (1.3 beta1)
==================

### Significant changes relative to 1.2.1:

1. Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4,
11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing.  Note that the IDCT\
 will
not be SIMD-accelerated when using any of these new scaling factors.

2. The TurboJPEG dynamic library is now versioned.  It was not strictly
necessary to do so, because TurboJPEG uses versioned symbols, and if a\
 function
changes in an ABI-incompatible way, that function is renamed and a legacy
function is provided to maintain backward compatibility.  However, certain
Linux distro maintainers have a policy against accepting any library that\
 isn't
versioned.

3. Extended the TurboJPEG Java API so that it can be used to compress a JPEG
image from and decompress a JPEG image to an arbitrary position in a large
image buffer.

4. The `tjDecompressToYUV()` function now supports the `TJFLAG_FASTDCT` flag.

5. The 32-bit supplementary package for amd64 Debian systems now provides
symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32.
This allows those libraries to be used on MultiArch-compatible systems (such\
 as
Ubuntu 11 and later) without setting the linker path.

6. The TurboJPEG Java wrapper should now find the JNI library on Mac systems
without having to pass `-Djava.library.path=/usr/lib` to java.

7. TJBench has been ported to Java to provide a convenient way of validating
the performance of the TurboJPEG Java API.  It can be run with
`java -cp turbojpeg.jar TJBench`.

8. cjpeg can now be used to generate JPEG files with the RGB colorspace
(feature ported from jpeg-8d.)

9. The width and height in the `-crop` argument passed to jpegtran can now be
suffixed with `f` to indicate that, when the upper left corner of the cropping
region is automatically moved to the nearest iMCU boundary, the bottom right
corner should be moved by the same amount.  In other words, this feature\
 causes
jpegtran to strictly honor the specified width/height rather than the\
 specified
bottom right corner (feature ported from jpeg-8d.)

10. JPEG files using the RGB colorspace can now be decompressed into grayscale
images (feature ported from jpeg-8d.)

11. Fixed a regression caused by 1.2.1[7] whereby the build would fail with
multiple "Mismatch in operand sizes" errors when attempting to build the x86
SIMD code with NASM 0.98.

12. The in-memory source/destination managers (`jpeg_mem_src()` and
`jpeg_mem_dest()`) are now included by default when building libjpeg-turbo\
 with
libjpeg v6b or v7 emulation, so that programs can take advantage of these
functions without requiring the use of the backward-incompatible libjpeg v8
ABI.  The "age number" of the libjpeg-turbo library on Un*x systems has been
incremented by 1 to reflect this.  You can disable this feature with a
configure/CMake switch in order to retain strict API/ABI compatibility with\
 the
libjpeg v6b or v7 API/ABI (or with previous versions of libjpeg-turbo.)  See
[README.md](README.md) for more details.

13. Added ARMv7s architecture to libjpeg.a and libturbojpeg.a in the official
libjpeg-turbo binary package for OS X, so that those libraries can be used to
build applications that leverage the faster CPUs in the iPhone 5 and iPad 4.


1.2.1
=====

### Significant changes relative to 1.2.0:

1. Creating or decoding a JPEG file that uses the RGB colorspace should now
properly work when the input or output colorspace is one of the libjpeg-turbo
colorspace extensions.

2. When libjpeg-turbo was built without SIMD support and merged (non-fancy)
upsampling was used along with an alpha-enabled colorspace during
decompression, the unused byte of the decompressed pixels was not being set to
0xFF.  This has been fixed.  TJUnitTest has also been extended to test for the
correct behavior of the colorspace extensions when merged upsampling is used.

3. Fixed a bug whereby the libjpeg-turbo SSE2 SIMD code would not preserve the
upper 64 bits of xmm6 and xmm7 on Win64 platforms, which violated the Win64
calling conventions.

4. Fixed a regression (CVE-2012-2806) caused by 1.2.0[6] whereby decompressing
corrupt JPEG images (specifically, images in which the component count was
erroneously set to a large value) would cause libjpeg-turbo to segfault.

5. Worked around a severe performance issue with "Bobcat" (AMD Embedded APU)
processors.  The `MASKMOVDQU` instruction, which was used by the libjpeg-turbo
SSE2 SIMD code, is apparently implemented in microcode on AMD processors, and
it is painfully slow on Bobcat processors in particular.  Eliminating the use
of this instruction improved performance by an order of magnitude on Bobcat
processors and by a small amount (typically 5%) on AMD desktop processors.

6. Added SIMD acceleration for performing 4:2:2 upsampling on NEON-capable ARM
platforms.  This speeds up the decompression of 4:2:2 JPEGs by 20-25% on such
platforms.

7. Fixed a regression caused by 1.2.0[2] whereby, on Linux/x86 platforms
running the 32-bit SSE2 SIMD code in libjpeg-turbo, decompressing a 4:2:0 or
4:2:2 JPEG image into a 32-bit (RGBX, BGRX, etc.) buffer without using fancy
upsampling would produce several incorrect columns of pixels at the right-hand
side of the output image if each row in the output image was not evenly
divisible by 16 bytes.

8. Fixed an issue whereby attempting to build the SIMD extensions with Xcode
4.3 on OS X platforms would cause NASM to return numerous errors of the form
"'%define' expects a macro identifier".

9. Added flags to the TurboJPEG API that allow the caller to force the use of
either the fast or the accurate DCT/IDCT algorithms in the underlying codec.


1.2.0
=====

### Significant changes relative to 1.2 beta1:

1. Fixed build issue with Yasm on Unix systems (the libjpeg-turbo build system
was not adding the current directory to the assembler include path, so Yasm
was not able to find jsimdcfg.inc.)

2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
a JPEG image to a bitmap buffer whose size was not a multiple of 16 bytes.
This was more of an annoyance than an actual bug, since it did not cause any
actual run-time problems, but the issue showed up when running libjpeg-turbo\
 in
valgrind.  See <http://crbug.com/72399> for more information.

3. Added a compile-time macro (`LIBJPEG_TURBO_VERSION`) that can be used to
check the version of libjpeg-turbo against which an application was compiled.

4. Added new RGBA/BGRA/ABGR/ARGB colorspace extension constants (libjpeg API)
and pixel formats (TurboJPEG API), which allow applications to specify that,
when decompressing to a 4-component RGB buffer, the unused byte should be set
to 0xFF so that it can be interpreted as an opaque alpha channel.

5. Fixed regression issue whereby DevIL failed to build against libjpeg-turbo
because libjpeg-turbo's distributed version of jconfig.h contained an `INLINE`
macro, which conflicted with a similar macro in DevIL.  This macro is used\
 only
internally when building libjpeg-turbo, so it was moved into config.h.

6. libjpeg-turbo will now correctly decompress erroneous CMYK/YCCK JPEGs whose
K component is assigned a component ID of 1 instead of 4.  Although these\
 files
are in violation of the spec, other JPEG implementations handle them
correctly.

7. Added ARMv6 and ARMv7 architectures to libjpeg.a and libturbojpeg.a in
the official libjpeg-turbo binary package for OS X, so that those libraries\
 can
be used to build both OS X and iOS applications.


1.1.90 (1.2 beta1)
==================

### Significant changes relative to 1.1.1:

1. Added a Java wrapper for the TurboJPEG API.  See [java/README](java/README)
for more details.

2. The TurboJPEG API can now be used to scale down images during
decompression.

3. Added SIMD routines for RGB-to-grayscale color conversion, which
significantly improves the performance of grayscale JPEG compression from an
RGB source image.

4. Improved the performance of the C color conversion routines, which are used
on platforms for which SIMD acceleration is not available.

5. Added a function to the TurboJPEG API that performs lossless transforms.
This function is implemented using the same back end as jpegtran, but it
performs transcoding entirely in memory and allows multiple transforms and/or
crop operations to be batched together, so the source coefficients only need\
 to
be read once.  This is useful when generating image tiles from a single source
JPEG.

6. Added tests for the new TurboJPEG scaled decompression and lossless
transform features to tjbench (the TurboJPEG benchmark, formerly called
"jpgtest".)

7. Added support for 4:4:0 (transposed 4:2:2) subsampling in TurboJPEG, which
was necessary in order for it to read 4:2:2 JPEG files that had been\
 losslessly
transposed or rotated 90 degrees.

8. All legacy VirtualGL code has been re-factored, and this has allowed
libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.

9. libjpeg-turbo can now be built with Yasm.

10. Added SIMD acceleration for ARM Linux and iOS platforms that support
NEON instructions.

11. Refactored the TurboJPEG C API and documented it using Doxygen.  The
TurboJPEG 1.2 API uses pixel formats to define the size and component order of
the uncompressed source/destination images, and it includes a more efficient
version of `TJBUFSIZE()` that computes a worst-case JPEG size based on the
level of chrominance subsampling.  The refactored implementation of the
TurboJPEG API now uses the libjpeg memory source and destination managers,
which allows the TurboJPEG compressor to grow the JPEG buffer as necessary.

12. Eliminated errors in the output of jpegtran on Windows that occurred when
the application was invoked using I/O redirection
(`jpegtran <input.jpg >output.jpg`.)

13. The inclusion of libjpeg v7 and v8 emulation as well as arithmetic coding
support in libjpeg-turbo v1.1.0 introduced several new error constants in
jerror.h, and these were mistakenly enabled for all emulation modes, causing
the error enum in libjpeg-turbo to sometimes have different values than the
same enum in libjpeg.  This represents an ABI incompatibility, and it caused
problems with rare applications that took specific action based on a\
 particular
error value.  The fix was to include the new error constants conditionally
based on whether libjpeg v7 or v8 emulation was enabled.

14. Fixed an issue whereby Windows applications that used libjpeg-turbo would
fail to compile if the Windows system headers were included before jpeglib.h.
This issue was caused by a conflict in the definition of the INT32 type.

15. Fixed 32-bit supplementary package for amd64 Debian systems, which was
broken by enhancements to the packaging system in 1.1.

16. When decompressing a JPEG image using an output colorspace of
`JCS_EXT_RGBX`, `JCS_EXT_BGRX`, `JCS_EXT_XBGR`, or `JCS_EXT_XRGB`,
libjpeg-turbo will now set the unused byte to 0xFF, which allows applications
to interpret that byte as an alpha channel (0xFF = opaque).


1.1.1
=====

### Significant changes relative to 1.1.0:

1. Fixed a 1-pixel error in row 0, column 21 of the luminance plane generated
by `tjEncodeYUV()`.

2. libjpeg-turbo's accelerated Huffman decoder previously ignored unexpected
markers found in the middle of the JPEG data stream during decompression.  It
will now hand off decoding of a particular block to the unaccelerated Huffman
decoder if an unexpected marker is found, so that the unaccelerated Huffman
decoder can generate an appropriate warning.

3. Older versions of MinGW64 prefixed symbol names with underscores by
default, which differed from the behavior of 64-bit Visual C++.  MinGW64 1.0
has adopted the behavior of 64-bit Visual C++ as the default, so to\
 accommodate
this, the libjpeg-turbo SIMD function names are no longer prefixed with an
underscore when building with MinGW64.  This means that, when building
libjpeg-turbo with older versions of MinGW64, you will now have to add
`-fno-leading-underscore` to the `CFLAGS`.

4. Fixed a regression bug in the NSIS script that caused the Windows installer
build to fail when using the Visual Studio IDE.

5. Fixed a bug in `jpeg_read_coefficients()` whereby it would not initialize
`cinfo->image_width` and `cinfo->image_height` if libjpeg v7 or v8 emulation
was enabled.  This specifically caused the jpegoptim program to fail if it was
linked against a version of libjpeg-turbo that was built with libjpeg v7 or v8
emulation.

6. Eliminated excessive I/O overhead that occurred when reading BMP files in
cjpeg.

7. Eliminated errors in the output of cjpeg on Windows that occurred when the
application was invoked using I/O redirection (`cjpeg <inputfile\
 >output.jpg`.)


1.1.0
=====

### Significant changes relative to 1.1 beta1:

1. The algorithm used by the SIMD quantization function cannot produce correct
results when the JPEG quality is >= 98 and the fast integer forward DCT is
used.  Thus, the non-SIMD quantization function is now used for those cases,
and libjpeg-turbo should now produce identical output to libjpeg v6b in all
cases.

2. Despite the above, the fast integer forward DCT still degrades somewhat for
JPEG qualities greater than 95, so the TurboJPEG wrapper will now\
 automatically
use the accurate integer forward DCT when generating JPEG images of quality 96
or greater.  This reduces compression performance by as much as 15% for these
high-quality images but is necessary to ensure that the images are\
 perceptually
lossless.  It also ensures that the library can avoid the performance pitfall
created by [1].

3. Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.

4. Fixed visual artifacts in grayscale JPEG compression caused by a typo in
the RGB-to-luminance lookup tables.

5. The Windows distribution packages now include the libjpeg run-time programs
(cjpeg, etc.)

6. All packages now include jpgtest.

7. The TurboJPEG dynamic library now uses versioned symbols.

8. Added two new TurboJPEG API functions, `tjEncodeYUV()` and
`tjDecompressToYUV()`, to replace the somewhat hackish `TJ_YUV` flag.


1.0.90 (1.1 beta1)
==================

### Significant changes relative to 1.0.1:

1. Added emulation of the libjpeg v7 and v8 APIs and ABIs.  See
[README.md](README.md) for more details.  This feature was sponsored by
CamTrace SAS.

2. Created a new CMake-based build system for the Visual C++ and MinGW builds.

3. Grayscale bitmaps can now be compressed from/decompressed to using the
TurboJPEG API.

4. jpgtest can now be used to test decompression performance with existing
JPEG images.

5. If the default install prefix (/opt/libjpeg-turbo) is used, then
`make install` now creates /opt/libjpeg-turbo/lib32 and
/opt/libjpeg-turbo/lib64 sym links to duplicate the behavior of the binary
packages.

6. All symbols in the libjpeg-turbo dynamic library are now versioned, even
when the library is built with libjpeg v6b emulation.

7. Added arithmetic encoding and decoding support (can be disabled with
configure or CMake options)

8. Added a `TJ_YUV` flag to the TurboJPEG API, which causes both the\
 compressor
and decompressor to output planar YUV images.

9. Added an extended version of `tjDecompressHeader()` to the TurboJPEG API,
which allows the caller to determine the type of subsampling used in a JPEG
image.

10. Added further protections against invalid Huffman codes.


1.0.1
=====

### Significant changes relative to 1.0.0:

1. The Huffman decoder will now handle erroneous Huffman codes (for instance,
from a corrupt JPEG image.)  Previously, these would cause libjpeg-turbo to
crash under certain circumstances.

2. Fixed typo in SIMD dispatch routines that was causing 4:2:2 upsampling to
be used instead of 4:2:0 when decompressing JPEG images using SSE2 code.

3. The configure script will now automatically determine whether the
`INCOMPLETE_TYPES_BROKEN` macro should be defined.


1.0.0
=====

### Significant changes relative to 0.0.93:

1. 2983700: Further FreeBSD build tweaks (no longer necessary to specify
`--host` when configuring on a 64-bit system)

2. Created symlinks in the Unix/Linux packages so that the TurboJPEG
include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.

3. The Unix/Linux distribution packages now include the libjpeg run-time
programs (cjpeg, etc.) and man pages.

4. Created a 32-bit supplementary package for amd64 Debian systems, which
contains just the 32-bit libjpeg-turbo libraries.

5. Moved the libraries from */lib32 to */lib in the i386 Debian package.

6. Include distribution package for Cygwin

7. No longer necessary to specify `--without-simd` on non-x86 architectures,
and unit tests now work on those architectures.


0.0.93
======

### Significant changes since 0.0.91:

1. 2982659: Fixed x86-64 build on FreeBSD systems

2. 2988188: Added support for Windows 64-bit systems


0.0.91
======

### Significant changes relative to 0.0.90:

1. Added documentation to .deb packages

2. 2968313: Fixed data corruption issues when decompressing large JPEG images
and/or using buffered I/O with the libjpeg-turbo decompressor


0.0.90
======

Initial release

\
changes-type: text/markdown;variant=GFM
url: https://libjpeg-turbo.org/
src-url: https://github.com/libjpeg-turbo/libjpeg-turbo
package-url: https://github.com/build2-packaging/libjpeg-turbo
email: libjpeg-turbo-users@googlegroups.com; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = libjpeg-turbo

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: libjpeg-turbo/libjpeg-turbo-2.1.3+2.tar.gz
sha256sum: 298fcc76a2007780a928145370d8f539de46cb7bf2011346e6bebf983d735e5b
:
name: libmariadb
version: 10.2.10+12
project: mariadb
summary: MariaDB C API client library
license: LGPLv2.1
topics: C, MariaDB, MySQL, SQL, relational database
description:
\
MariaDB is an open-source, multi-threaded, relational database management
system with libmariadb being its C client library. Applications can use this
library to pass queries to MariaDB database servers and to receive the results
of those queries using the C programming language. For more information see:

https://mariadb.com

This package contains the original libmariadb library source code overlaid\
 with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the MariaDB mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of libmariadb for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/mariadb/

\
description-type: text/plain
url: https://mariadb.com
doc-url: https://mariadb.com/kb/en/library/mariadb-connector-c/
src-url: https://git.build2.org/cgit/packaging/mariadb/libmariadb/tree/
package-url: https://git.build2.org/cgit/packaging/mariadb/
email: maria-discuss@lists.launchpad.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libz >= 1.2.1100
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : LGPLv2.1; see accompanying COPYING file

project = libmariadb

using version
using config
using dist
using test
using install

# The MariaDB server and client library versions have the same
# <major>.<minor>.<maintenance> form but do not correlate with each other. So,
# for example, the server 10.2.10 is released with the client 3.0.2. See also:
#
# https://mariadb.com/sites/default/files/MariaDBCorporationEngineeringpolici\
es-v1.03.pdf
#
# Releasing the library with the upstream server version (as the major Linux
# distributions do), we obtain the client version from the
# CPACK_PACKAGE_VERSION_* variable values in libmariadb/CMakeLists.txt for\
 each
# package release. Also, while at it, check that the protocol version still
# correct (PROTOCOL_VERSION variable),
#
# See also how Debian/Fedora package libmariadb if trying to wrap your head
# around this mess.
#
if ($version.major == 10 && $version.minor == 2 && $version.patch == 10)
{
  client_major = 3
  client_minor = 0
  client_patch = 2

  protocol_version = 10
}
else
  fail "increment the ABI version?"

abi_version = $client_major

\
root-build:
\
# file      : build/root.build
# license   : LGPLv2.1; see accompanying COPYING file

c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

using in

\
location: mariadb/libmariadb-10.2.10+12.tar.gz
sha256sum: 9d6c13f1a4eea376436f929e8196a67c9380facf6741b76c8ec43fe2926aef0e
:
name: libmd4c
version: 0.4.8
project: md4c
summary: Markdown parser C library
license: MIT
description:
\
[![Linux Build Status (travis-ci.com)](https://img.shields.io/travis/mity/md4\
c/master.svg?logo=linux&label=linux%20build)](https://travis-ci.com/mity/md4c)
[![Windows Build Status (appveyor.com)](https://img.shields.io/appveyor/ci/mi\
ty/md4c/master.svg?logo=windows&label=windows%20build)](https://ci.appveyor.c\
om/project/mity/md4c/branch/master)
[![Code Coverage Status (codecov.io)](https://img.shields.io/codecov/c/github\
/mity/md4c/master.svg?logo=codecov&label=code%20coverage)](https://codecov.io\
/github/mity/md4c)
[![Coverity Scan Status](https://img.shields.io/coverity/scan/mity-md4c.svg?l\
abel=coverity%20scan)](https://scan.coverity.com/projects/mity-md4c)


# MD4C Readme

* Home: http://github.com/mity/md4c
* Wiki: http://github.com/mity/md4c/wiki
* Issue tracker: http://github.com/mity/md4c/issues

MD4C stands for "Markdown for C" and that's exactly what this project is\
 about.


## What is Markdown

In short, Markdown is the markup language this `README.md` file is written in.

The following resources can explain more if you are unfamiliar with it:
* [Wikipedia article](http://en.wikipedia.org/wiki/Markdown)
* [CommonMark site](http://commonmark.org)


## What is MD4C

MD4C is Markdown parser implementation in C, with the following features:

* **Compliance:** Generally, MD4C aims to be compliant to the latest version\
 of
  [CommonMark specification](http://spec.commonmark.org/). Currently, we are
  fully compliant to CommonMark 0.29.

* **Extensions:** MD4C supports some commonly requested and accepted\
 extensions.
  See below.

* **Performance:** MD4C is [very fast](https://talk.commonmark.org/t/2520).

* **Compactness:** MD4C parser is implemented in one source file and one\
 header
  file. There are no dependencies other than standard C library.

* **Embedding:** MD4C parser is easy to reuse in other projects, its API is
  very straightforward: There is actually just one function, `md_parse()`.

* **Push model:** MD4C parses the complete document and calls few callback
  functions provided by the application to inform it about a start/end of
  every block, a start/end of every span, and with any textual contents.

* **Portability:** MD4C builds and works on Windows and POSIX-compliant OSes.
  (It should be simple to make it run also on most other platforms, at least\
 as
  long as the platform provides C standard library, including a heap memory
  management.)

* **Encoding:** MD4C by default expects UTF-8 encoding of the input document.
  But it can be compiled to recognize ASCII-only control characters (i.e. to
  disable all Unicode-specific code), or (on Windows) to expect UTF-16 (i.e.
  what is on Windows commonly called just "Unicode"). See more details below.

* **Permissive license:** MD4C is available under the [MIT\
 license](LICENSE.md).


## Using MD4C

### Parsing Markdown

If you need just to parse a Markdown document, you need to include `md4c.h`
and link against MD4C library (`-lmd4c`); or alternatively add `md4c.[hc]`
directly to your code base as the parser is only implemented in the single C
source file.

The main provided function is `md_parse()`. It takes a text in the Markdown
syntax and a pointer to a structure which provides pointers to several\
 callback
functions.

As `md_parse()` processes the input, it calls the callbacks (when entering or
leaving any Markdown block or span; and when outputting any textual content of
the document), allowing application to convert it into another format or\
 render
it onto the screen.


### Converting to HTML

If you need to convert Markdown to HTML, include `md4c-html.h` and link\
 against
MD4C-HTML library (`-lmd4c-html`); or alternatively add the sources\
 `md4c.[hc]`,
`md4c-html.[hc]` and `entity.[hc]` into your code base.

To convert a Markdown input, call `md_html()` function. It takes the Markdown
input and calls the provided callback function. The callback is fed with
chunks of the HTML output. Typical callback implementation just appends the
chunks into a buffer or writes them to a file.


## Markdown Extensions

The default behavior is to recognize only Markdown syntax defined by the
[CommonMark specification](http://spec.commonmark.org/).

However, with appropriate flags, the behavior can be tuned to enable some
extensions:

* With the flag `MD_FLAG_COLLAPSEWHITESPACE`, a non-trivial whitespace is
  collapsed into a single space.

* With the flag `MD_FLAG_TABLES`, GitHub-style tables are supported.

* With the flag `MD_FLAG_TASKLISTS`, GitHub-style task lists are supported.

* With the flag `MD_FLAG_STRIKETHROUGH`, strike-through spans are enabled
  (text enclosed in tilde marks, e.g. `~foo bar~`).

* With the flag `MD_FLAG_PERMISSIVEURLAUTOLINKS` permissive URL autolinks
  (not enclosed in `<` and `>`) are supported.

* With the flag `MD_FLAG_PERMISSIVEEMAILAUTOLINKS`, permissive e-mail
  autolinks (not enclosed in `<` and `>`) are supported.

* With the flag `MD_FLAG_PERMISSIVEWWWAUTOLINKS` permissive WWW autolinks
  without any scheme specified (e.g. `www.example.com`) are supported. MD4C
  then assumes `http:` scheme.

* With the flag `MD_FLAG_LATEXMATHSPANS` LaTeX math spans (`$...$`) and
  LaTeX display math spans (`$$...$$`) are supported. (Note though that the
  HTML renderer outputs them verbatim in a custom tag `<x-equation>`.)

* With the flag `MD_FLAG_WIKILINKS`, wiki-style links (`[[link label]]` and
  `[[target article|link label]]`) are supported. (Note that the HTML renderer
  outputs them in a custom tag `<x-wikilink>`.)

* With the flag `MD_FLAG_UNDERLINE`, underscore (`_`) denotes an underline
  instead of an ordinary emphasis or strong emphasis.

Few features of CommonMark (those some people see as mis-features) may be
disabled with the following flags:

* With the flag `MD_FLAG_NOHTMLSPANS` or `MD_FLAG_NOHTMLBLOCKS`, raw inline
  HTML or raw HTML blocks respectively are disabled.

* With the flag `MD_FLAG_NOINDENTEDCODEBLOCKS`, indented code blocks are
  disabled.


## Input/Output Encoding

The CommonMark specification declares that any sequence of Unicode code points
is a valid CommonMark document.

But, under a closer inspection, Unicode plays any role in few very specific
situations when parsing Markdown documents:

1. For detection of word boundaries when processing emphasis and strong
   emphasis, some classification of Unicode characters (whether it is
   a whitespace or a punctuation) is needed.

2. For (case-insensitive) matching of a link reference label with the
   corresponding link reference definition, Unicode case folding is used.

3. For translating HTML entities (e.g. `&amp;`) and numeric character
   references (e.g. `&#35;` or `&#xcab;`) into their Unicode equivalents.

   However note MD4C leaves this translation on the renderer/application; as
   the renderer is supposed to really know output encoding and whether it
   really needs to perform this kind of translation. (For example, when the
   renderer outputs HTML, it may leave the entities untranslated and defer the
   work to a web browser.)

MD4C relies on this property of the CommonMark and the implementation is, to
a large degree, encoding-agnostic. Most of MD4C code only assumes that the
encoding of your choice is compatible with ASCII. I.e. that the codepoints
below 128 have the same numeric values as ASCII.

Any input MD4C does not understand is simply seen as part of the document text
and sent to the renderer's callback functions unchanged.

The two situations (word boundary detection and link reference matching) where
MD4C has to understand Unicode are handled as specified by the following
preprocessor macros (as specified at the time MD4C is being built):

* If preprocessor macro `MD4C_USE_UTF8` is defined, MD4C assumes UTF-8 for the
  word boundary detection and for the case-insensitive matching of link\
 labels.

  When none of these macros is explicitly used, this is the default behavior.

* On Windows, if preprocessor macro `MD4C_USE_UTF16` is defined, MD4C uses
  `WCHAR` instead of `char` and assumes UTF-16 encoding in those situations.
  (UTF-16 is what Windows developers usually call just "Unicode" and what
  Win32API generally works with.)

  Note that because this macro affects also the types in `md4c.h`, you have
  to define the macro both when building MD4C as well as when including
  `md4c.h`.

  Also note this is only supported in the parser (`md4c.[hc]`). The HTML
  renderer does not support this and you will have to write your own custom
  renderer to use this feature.

* If preprocessor macro `MD4C_USE_ASCII` is defined, MD4C assumes nothing but
  an ASCII input.

  That effectively means that non-ASCII whitespace or punctuation characters
  won't be recognized as such and that link reference matching will work in
  a case-insensitive way only for ASCII letters (`[a-zA-Z]`).


## Documentation

The API of the parser is quite well documented in the comments in the\
 `md4c.h`.
Similarly, the markdown-to-html API is described in its header `md4c-html.h`.

There is also [project wiki](http://github.com/mity/md4c/wiki) which provides
some more comprehensive documentation. However note it is incomplete and some
details may be somewhat outdated.


## FAQ

**Q: How does MD4C compare to a parser XY?**

**A:** Some other implementations combine Markdown parser and HTML generator
into a single entangled code hidden behind an interface which just allows the
conversion from Markdown to HTML. They are often unusable if you want to
process the input in any other way.

Even when the parsing is available as a standalone feature, most parsers (if
not all of them; at least within the scope of C/C++ language) are full\
 DOM-like
parsers: They construct abstract syntax tree (AST) representation of the whole
Markdown document. That takes time and it leads to bigger memory footprint.

It's completely fine as long as you really need it. If you don't need the full
AST, there is a very high chance that using MD4C will be substantially faster
and less hungry in terms of memory consumption.

Last but not least, some Markdown parsers are implemented in a naive way. When
fed with a [smartly crafted input pattern](test/pathological_tests.py), they
may exhibit quadratic (or even worse) parsing times. What MD4C can still parse
in a fraction of second may turn into long minutes or possibly hours with\
 them.
Hence, when such a naive parser is used to process an input from an untrusted
source, the possibility of denial-of-service attacks becomes a real danger.

A lot of our effort went into providing linear parsing times no matter what
kind of crazy input MD4C parser is fed with. (If you encounter an input\
 pattern
which leads to a sub-linear parsing times, please do not hesitate and report\
 it
as a bug.)

**Q: Does MD4C perform any input validation?**

**A:** No. And we are proud of it. :-)

CommonMark specification states that any sequence of Unicode characters is
a valid Markdown document. (In practice, this more or less always means UTF-8
encoding.)

In other words, according to the specification, it does not matter whether\
 some
Markdown syntax construction is in some way broken or not. If it is broken, it
will simply not be recognized and the parser should see it just as a verbatim
text.

MD4C takes this a step further: It sees any sequence of bytes as a valid\
 input,
following completely the GIGO philosophy (garbage in, garbage out). I.e. any
ill-formed UTF-8 byte sequence will propagate to the respective callback as
a part of the text.

If you need to validate that the input is, say, a well-formed UTF-8 document,
you have to do it on your own. The easiest way how to do this is to simply
validate the whole document before passing it to the MD4C parser.


## License

MD4C is covered with MIT license, see the file `LICENSE.md`.


## Links to Related Projects

Ports and bindings to other languages:

* [commonmark-d](https://github.com/AuburnSounds/commonmark-d):
  Port of MD4C to D language.

* [markdown-wasm](https://github.com/rsms/markdown-wasm):
  Port of MD4C to WebAssembly.

* [PyMD4C](https://github.com/dominickpastore/pymd4c):
  Python bindings for MD4C

Software using MD4C:

* [QOwnNotes](https://www.qownnotes.org/):
  A plain-text file notepad and todo-list manager with markdown support and
  ownCloud / Nextcloud integration.

* [Qt](https://www.qt.io/):
  Cross-platform C++ GUI framework.

* [Textosaurus](https://github.com/martinrotter/textosaurus):
  Cross-platform text editor based on Qt and Scintilla.

* [8th](https://8th-dev.com/):
  Cross-platform concatenative programming language.

\
description-type: text/markdown;variant=GFM
changes:
\

# MD4C Change Log


## Version 0.4.8

Fixes:

 * [#149](https://github.com/mity/md4c/issues/149):
   A HTML block started in a container block (and not explicitly finished in
   the block) could eat 1 line of actual contents.

 * [#150](https://github.com/mity/md4c/issues/150):
   Fix md2html utility to output proper DOCTYPE and HTML tags when\
 `--full-html`
   command line options is used, accordingly to the expected output format
   (HTML or XHTML).

 * [#152](https://github.com/mity/md4c/issues/152):
   Suppress recognition of a permissive autolink if it would otherwise form a
   complete body of an outer inline link.

 * [#153](https://github.com/mity/md4c/issues/153),
   [#154](https://github.com/mity/md4c/issues/154):
   Set `MD_BLOCK_UL_DETAIL::mark` and `MD_BLOCK_OL_DETAIL::mark_delimiter`
   correctly, even when the blocks are nested at the same line in a\
 complicated
   ways.

 * [#155](https://github.com/mity/md4c/issues/155):
   Avoid reading 1 character beyond the input size in some complex cases.


## Version 0.4.7

Changes:

 * Add `MD_TABLE_DETAIL` structure into the API. The structure describes\
 column
   count and row count of the table, and pointer to it is passed into the
   application-provided block callback with the `MD_BLOCK_TABLE` block type.

Fixes:

 * [#131](https://github.com/mity/md4c/issues/131):
   Fix handling of a reference image nested in a reference link.

 * [#135](https://github.com/mity/md4c/issues/135):
   Handle unmatched parenthesis pairs inside a permissive URL and WWW\
 auto-links
   in a way more compatible with the GFM.

 * [#138](https://github.com/mity/md4c/issues/138):
   The tag `<tbody></tbody>` is now suppressed whenever the table has zero\
 body
   rows.

 * [#139](https://github.com/mity/md4c/issues/139):
   Recognize a list item mark even when EOF follows it.

 * [#142](https://github.com/mity/md4c/issues/142):
   Fix reference link definition label matching in a case when the label ends
   with a Unicode character with non-trivial case folding mapping.


## Version 0.4.6

Fixes:

 * [#130](https://github.com/mity/md4c/issues/130):
   Fix `ISANYOF` macro, which could provide unexpected results when\
 encountering
   zero byte in the input text; in some cases leading to broken internal state
   of the parser.

   The bug could result in denial of service and possibly also to other\
 security
   implications. Applications are advised to update to 0.4.6.


## Version 0.4.5

Fixes:

 * [#118](https://github.com/mity/md4c/issues/118):
   Fix HTML renderer's `MD_HTML_FLAG_VERBATIM_ENTITIES` flag, exposed in the
   `md2html` utility via `--fverbatim-entities`.

 * [#124](https://github.com/mity/md4c/issues/124):
   Fix handling of indentation of 16 or more spaces in the fenced code blocks.


## Version 0.4.4

Changes:

 * Make Unicode-specific code compliant to Unicode 13.0.

New features:

 * The HTML renderer, developed originally as the heart of the `md2html`
   utility, is now built as a standalone library, in order to simplify its
   reuse in applications.

 * With `MD_HTML_FLAG_SKIP_UTF8_BOM`, the HTML renderer now skips UTF-8 byte
   order mark (BOM) if the input begins with it, before passing to the\
 Markdown
   parser.

   `md2html` utility automatically enables the flag (unless it is custom-built
   with `-DMD4C_USE_ASCII`).

 * With `MD_HTML_FLAG_XHTML`, The HTML renderer generates XHTML instead of
   HTML.

   This effectively means `<br />` instead of `<br>`, `<hr />` instead of
   `<hr>`, and `<img ... />` instead of `<img ...>`.

   `md2html` utility now understands the command line option `-x` or `--xhtml`
   enabling the XHTML mode.

Fixes:

 * [#113](https://github.com/mity/md4c/issues/113):
   Add missing folding info data for the following Unicode characters:
   `U+0184`, `U+018a`, `U+01b2`, `U+01b5`, `U+01f4`, `U+0372`, `U+038f`,
   `U+1c84`, `U+1fb9`, `U+1fbb`, `U+1fd9`, `U+1fdb`, `U+1fe9`, `U+1feb`,
   `U+1ff9`, `U+1ffb`, `U+2c7f`, `U+2ced`, `U+a77b`, `U+a792`, `U+a7c9`.

   Due the bug, the link definition label matching did not work in the case
   insensitive way for these characters.


## Version 0.4.3

New features:

 * With `MD_FLAG_UNDERLINE`, spans enclosed in underscore (`_foo_`) are seen
   as underline (`MD_SPAN_UNDERLINE`) rather than an ordinary emphasis or
   strong emphasis.

Changes:

 * The implementation of wiki-links extension (with `MD_FLAG_WIKILINKS`) has
   been simplified.

    - A noticeable increase of MD4C's memory footprint introduced by the
      extension implementation in 0.4.0 has been removed.
    - The priority handling towards other inline elements have been unified.
      (This affects an obscure case where syntax of an image was in place of
      wiki-link destination made the wiki-link invalid. Now *all* inline spans
      in the wiki-link destination, including the images, is suppressed.)
    - The length limitation of 100 characters now always applies to wiki-link
      destination.

 * Recognition of strike-through spans (with the flag `MD_FLAG_STRIKETHROUGH`)
   has become much stricter and, arguably, reasonable.

    - Only single tildes (`~`) and double tildes (`~~`) are recognized as
      strike-through marks. Longer ones are not anymore.
    - The length of the opener and closer marks have to be the same.
    - The tildes cannot open a strike-through span if a whitespace follows.
    - The tildes cannot close a strike-through span if a whitespace precedes.

   This change follows the changes of behavior in cmark-gfm some time ago, so
   it is also beneficial from compatibility point of view.

 * When building MD4C by hand instead of using its CMake-based build, the\
 UTF-8
   support was by default disabled, unless explicitly asked for by defining
   a preprocessor macro `MD4C_USE_UTF8`.

   This has been changed and the UTF-8 mode now becomes the default, no matter
   how `md4c.c` is compiled. If you need to disable it and use the ASCII-only
   mode, you have explicitly define macro `MD4C_USE_ASCII` when compiling it.

   (The CMake-based build as provided in our repository explicitly asked for
   the UTF-8 support with `-DMD4C_USE_UTF8`. I.e. if you are using MD4C\
 library
   built with our vanilla `CMakeLists.txt` files, this change should not\
 affect
   you.)

Fixes:

 * Fixed some string length handling in the special `MD4C_USE_UTF16` build.

   (This does not affect you unless you are on Windows and explicitly define
   the macro when building MD4C.)

 * [#100](https://github.com/mity/md4c/issues/100):
   Fixed an off-by-one error in the maximal length limit of some segments
   of e-mail addresses used in autolinks.

 * [#107](https://github.com/mity/md4c/issues/107):
   Fix mis-detection of asterisk-encoded emphasis in some corner cases when
   length of the opener and closer differs, as in `***foo *bar baz***`.


## Version 0.4.2

Fixes:

 * [#98](https://github.com/mity/md4c/issues/98):
   Fix mis-detection of asterisk-encoded emphasis in some corner cases when
   length of the opener and closer differs, as in `**a *b c** d*`.


## Version 0.4.1

Unfortunately, 0.4.0 has been released with badly updated ChangeLog. Fixing
this is the only change on 0.4.1.


## Version 0.4.0

New features:

 * With `MD_FLAG_LATEXMATHSPANS`, LaTeX math spans (`$...$`) and LaTeX display
   math spans (`$$...$$`) are now recognized. (Note though that the HTML
   renderer outputs them verbatim in a custom `<x-equation>` tag.)

   Contributed by [Tilman Roeder](https://github.com/dyedgreen).

 * With `MD_FLAG_WIKILINKS`, Wiki-style links (`[[...]]`) are now recognized.
   (Note though that the HTML renderer renders them as a custom `<x-wikilink>`
   tag.)

   Contributed by [Nils Blomqvist](https://github.com/niblo).

Changes:

 * Parsing of tables (with `MD_FLAG_TABLES`) is now closer to the way how
   cmark-gfm parses tables as we do not require every row of the table to
   contain a pipe `|` anymore.

   As a consequence, paragraphs now cannot interrupt tables. A paragraph which
   follows the table has to be delimited with a blank line.

Fixes:

 * [#94](https://github.com/mity/md4c/issues/94):
   `md_build_ref_def_hashtable()`: Do not allocate more memory than strictly
   needed.

 * [#95](https://github.com/mity/md4c/issues/95):
   `md_is_container_mark()`: Ordered list mark requires at least one digit.

 * [#96](https://github.com/mity/md4c/issues/96):
   Some fixes for link label comparison.


## Version 0.3.4

Changes:

 * Make Unicode-specific code compliant to Unicode 12.1.

 * Structure `MD_BLOCK_CODE_DETAIL` got new member `fenced_char`. Application
   can use it to detect character used to form the block fences (`` ` `` or
   `~`). In the case of indented code block, it is set to zero.

Fixes:

 * [#77](https://github.com/mity/md4c/issues/77):
   Fix maximal count of digits for numerical character references, as\
 requested
   by CommonMark specification 0.29.

 * [#78](https://github.com/mity/md4c/issues/78):
   Fix link reference definition label matching for Unicode characters where
   the folding mapping leads to multiple codepoints, as e.g. in `ẞ` -> `SS`.

 * [#83](https://github.com/mity/md4c/issues/83):
   Fix recognition of an empty blockquote which interrupts a paragraph.


## Version 0.3.3

Changes:

 * Make permissive URL autolink and permissive WWW autolink extensions\
 stricter.

   This brings the behavior closer to GFM and mitigates risk of false\
 positives.
   In particular, the domain has to contain at least one dot and parenthesis
   can be part of the link destination only if `(` and `)` are balanced.

Fixes:

 * [#73](https://github.com/mity/md4c/issues/73):
   Some raw HTML inputs could lead to quadratic parsing times.

 * [#74](https://github.com/mity/md4c/issues/74):
   Fix input leading to a crash. Found by fuzzing.

 * [#76](https://github.com/mity/md4c/issues/76):
   Fix handling of parenthesis in some corner cases of permissive URL autolink
   and permissive WWW autolink extensions.


## Version 0.3.2

Changes:

 * Changes mandated by CommonMark specification 0.29.

   Most importantly, the white-space trimming rules for code spans have\
 changed.
   At most one space/newline is trimmed from beginning/end of the code span
   (if the code span contains some non-space contents, and if it begins and
   ends with space at the same time). In all other cases the spaces in the\
 code
   span are now left intact.

   Other changes in behavior are in corner cases only. Refer to [CommonMark
   0.29 notes](https://github.com/commonmark/commonmark-spec/releases/tag/0.2\
9)
   for more info.

Fixes:

 * [#68](https://github.com/mity/md4c/issues/68):
   Some specific HTML blocks were not recognized when EOF follows without any
   end-of-line character.

 * [#69](https://github.com/mity/md4c/issues/69):
   Strike-through span not working correctly when its opener mark is directly
   followed by other opener mark; or when other closer mark directly precedes
   its closer mark.


## Version 0.3.1

Fixes:

 * [#58](https://github.com/mity/md4c/issues/58),
   [#59](https://github.com/mity/md4c/issues/59),
   [#60](https://github.com/mity/md4c/issues/60),
   [#63](https://github.com/mity/md4c/issues/63),
   [#66](https://github.com/mity/md4c/issues/66):
   Some inputs could lead to quadratic parsing times. Thanks to Anders Kaseorg
   for finding all those issues.

 * [#61](https://github.com/mity/md4c/issues/59):
   Flag `MD_FLAG_NOHTMLSPANS` erroneously affected also recognition of
   CommonMark autolinks.


## Version 0.3.0

New features:

 * Add extension for GitHub-style task lists:

   ```
    * [x] foo
    * [x] bar
    * [ ] baz
   ```

   (It has to be explicitly enabled with `MD_FLAG_TASKLISTS`.)

 * Added support for building as a shared library. On non-Windows platforms,
   this is now default behavior; on Windows static library is still the\
 default.
   The CMake option `BUILD_SHARED_LIBS` can be used to request one or the\
 other
   explicitly.

   Contributed by Lisandro Damián Nicanor Pérez Meyer.

 * Renamed structure `MD_RENDERER` to `MD_PARSER` and refactorize its contents
   a little bit. Note this is source-level incompatible and initialization\
 code
   in apps may need to be updated.

   The aim of the change is to be more friendly for long-term ABI\
 compatibility
   we shall maintain, starting with this release.

 * Added `CHANGELOG.md` (this file).

 * Make sure `md_process_table_row()` reports the same count of table cells\
 for
   all table rows, no matter how broken the input is. The cell count is\
 derived
   from table underline line. Bogus cells in other rows are silently ignored.
   Missing cells in other rows are reported as empty ones.

Fixes:

 * CID 1475544:
   Calling `md_free_attribute()` on uninitialized data.

 * [#47](https://github.com/mity/md4c/issues/47):
   Using bad offsets in `md_is_entity_str()`, in some cases leading to buffer
   overflow.

 * [#51](https://github.com/mity/md4c/issues/51):
   Segfault in `md_process_table_cell()`.

 * [#53](https://github.com/mity/md4c/issues/53):
   With `MD_FLAG_PERMISSIVEURLAUTOLINKS` or `MD_FLAG_PERMISSIVEWWWAUTOLINKS`
   we could generate bad output for ordinary Markdown links, if a non-space
   character immediately follows like e.g. in `[link](http://github.com)X`.


## Version 0.2.7

This was the last version before the changelog has been added.

\
changes-type: text/markdown;variant=GFM
url: https://github.com/mity/md4c
doc-url: https://github.com/mity/md4c/wiki
src-url: https://github.com/mity/md4c
package-url: https://github.com/build2-packaging/md4c
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = libmd4c

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

# If true, compile with -DDEBUG.
#
config [bool] config.libmd4c.debug ?= false

\
location: md4c/libmd4c-0.4.8.tar.gz
sha256sum: 8c48151d8aa4846f1db9ea9838e10cdbfc0f344a8893cf54803abb1a74924e66
:
name: libminiz
version: 3.0.2+2
type: lib
language: c
project: miniz
summary: Miniz is a lossless, high performance data compression library in a\
 single source file that implements the zlib (RFC 1950) and Deflate (RFC\
 1951) compressed data format specification standards.
license: MIT
description:
\
## Miniz

Miniz is a lossless, high performance data compression library in a single\
 source file that implements the zlib (RFC 1950) and Deflate (RFC 1951)\
 compressed data format specification standards. It supports the most\
 commonly used functions exported by the zlib library, but is a completely\
 independent implementation so zlib's licensing requirements do not apply.\
 Miniz also contains simple to use functions for writing .PNG format image\
 files and reading/writing/appending .ZIP format archives. Miniz's\
 compression speed has been tuned to be comparable to zlib's, and it also has\
 a specialized real-time compressor function designed to compare well against\
 fastlz/minilzo.

## Usage

Releases are available at the [releases page](https://github.com/richgel999/m\
iniz/releases) as a pair of `miniz.c`/`miniz.h` files which can be simply\
 added to a project. To create this file pair the different source and header\
 files are [amalgamated](https://www.sqlite.org/amalgamation.html) during\
 build. Alternatively use as cmake or meson module (or build system of your\
 choice).

## Features

* MIT licensed
* A portable, single source and header file library written in plain C.\
 Tested with GCC, clang and Visual Studio.
* Easily tuned and trimmed down by defines
* A drop-in replacement for zlib's most used API's (tested in several open\
 source projects that use zlib, such as libpng and libzip).
* Fills a single threaded performance vs. compression ratio gap between\
 several popular real-time compressors and zlib. For example, at level 1,\
 miniz.c compresses around 5-9% better than minilzo, but is approx. 35%\
 slower. At levels 2-9, miniz.c is designed to compare favorably against\
 zlib's ratio and speed. See the miniz performance comparison page for\
 example timings.
* Not a block based compressor: miniz.c fully supports stream based\
 processing using a coroutine-style implementation. The zlib-style API\
 functions can be called a single byte at a time if that's all you've got.
* Easy to use. The low-level compressor (tdefl) and decompressor (tinfl) have\
 simple state structs which can be saved/restored as needed with simple\
 memcpy's. The low-level codec API's don't use the heap in any way.
* Entire inflater (including optional zlib header parsing and Adler-32\
 checking) is implemented in a single function as a coroutine, which is\
 separately available in a small (~550 line) source file: miniz_tinfl.c
* A fairly complete (but totally optional) set of .ZIP archive manipulation\
 and extraction API's. The archive functionality is intended to solve common\
 problems encountered in embedded, mobile, or game development situations.\
 (The archive API's are purposely just powerful enough to write an entire\
 archiver given a bit of additional higher-level logic.)

## Building miniz - Using vcpkg

You can download and install miniz using the [vcpkg](https://github.com/Micro\
soft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install miniz

The miniz port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

## Known Problems

* No support for encrypted archives. Not sure how useful this stuff is in\
 practice.
* Minimal documentation. The assumption is that the user is already familiar\
 with the basic zlib API. I need to write an API wiki - for now I've tried to\
 place key comments before each enum/API, and I've included 6 examples that\
 demonstrate how to use the module's major features.

## Special Thanks

Thanks to Alex Evans for the PNG writer function. Also, thanks to Paul Holden\
 and Thorsten Scheuermann for feedback and testing, Matt Pritchard for all\
 his encouragement, and Sean Barrett's various public domain libraries for\
 inspiration (and encouraging me to write miniz.c in C, which was much more\
 enjoyable and less painful than I thought it would be considering I've been\
 programming in C++ for so long).

Thanks to Bruce Dawson for reporting a problem with the level_and_flags\
 archive API parameter (which is fixed in v1.12) and general feedback, and\
 Janez Zemva for indirectly encouraging me into writing more examples.

## Patents

I was recently asked if miniz avoids patent issues. miniz purposely uses the\
 same core algorithms as the ones used by zlib. The compressor uses vanilla\
 hash chaining as described [here](https://datatracker.ietf.org/doc/html/rfc1\
951#section-4). Also see the [gzip FAQ](https://web.archive.org/web/201603080\
45258/http://www.gzip.org/#faq11). In my opinion, if miniz falls prey to a\
 patent attack then zlib/gzip are likely to be at serious risk too.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for miniz
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/richgel999/miniz">miniz</a>.
    Miniz is a lossless, high performance data compression library in a\
 single source file that implements the zlib (RFC 1950) and Deflate (RFC\
 1951) compressed data format specification standards.
</p>

<p align="center">
    <a href="https://github.com/richgel999/miniz">
        <img src="https://img.shields.io/website/https/github.com/richgel999/\
miniz.svg?down_message=offline&label=Official&style=for-the-badge&up_color=bl\
ue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/miniz">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/miniz.svg?down_message=offline&label=build2&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://cppget.org/libminiz">
        <img src="https://img.shields.io/website/https/cppget.org/libminiz.sv\
g?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_\
message=online">
    </a>
    <a href="https://queue.cppget.org/libminiz">
        <img src="https://img.shields.io/website/https/queue.cppget.org/libmi\
niz.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-t\
he-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/miniz.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: libminiz ^ 3.0.2

The library can be imported by the following declaration in a `buildfile`.

    import miniz = libminiz%lib{miniz}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Currently, we do not use the same export header as generated by the builtin\
 `generate_export_header` function that is provided by CMake. So, there could\
 be differences in symbol visibility.
- The test fuzzers are only built and not executed, as they use something\
 like `oss-fuzz`.
- The C++-based `miniz_tester` was considered. But as the original build\
 system does not provide tests for this executable and compiling it fails on\
 Windows- and MacOS-based configurations, it was removed.
- The amalgamation support was considered but deemed not to be necessary and\
 removed. Tag `v3.0.2` points to a version with a valid implementation and\
 configuration variables. Please see [Issue #1](https://github.com/build2-pac\
kaging/miniz/issues/1) for more information.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
## Changelog

### 3.0.2

 - Fix buffer overrun in mz_utf8z_to_widechar on Windows

### 3.0.1

 - Fix compilation error with MINIZ_USE_UNALIGNED_LOADS_AND_STORES=1

### 3.0.0

 - Reduce memory usage for inflate. This changes `struct tinfl_decompressor_t\
ag` and therefore requires a major version bump (breaks ABI compatibility)
 - Add padding to structures so it continues to work if features differ. This\
 also changes some structures
 - Use _ftelli64, _fseeki64 and stat with MinGW32 and OpenWatcom
 - Fix varios warnings with OpenWatcom compiler
 - Avoid using unaligned memory access in UBSan builds
 - Set MINIZ_LITTLE_ENDIAN only if not set
 - Add MINIZ_NO_DEFLATE_APIS and MINIZ_NO_INFLATE_APIS
 - Fix use of uninitialized memory in tinfl_decompress_mem_to_callback()
 - Use wfopen on windows
 - Use _wstat64 instead _stat64 on windows
 - Use level_and_flags after MZ_DEFAULT_COMPRESSION has been handled
 - Improve endianess detection
 - Don't use unaligned stores and loads per default
 - Fix function declaration if MINIZ_NO_STDIO is used
 - Fix MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 not being set
 - Remove total files check (its 32-bit uint)
 - tinfl_decompress: avoid NULL ptr arithmetic UB
 - miniz_zip: fix mz_zip_reader_extract_to_heap to read correct sizes
 - Eliminate 64-bit operations on 32-bit machines
 - Disable treating warnings as error with MSVC
 - Disable building shared lib via CMake by default
 - Fixed alignment problems on MacOS
 - Fixed get error string for MZ_ZIP_TOTAL_ERRORS
 - Write correct FLEVEL 2-bit value in zlib header
 - miniz.pc.in: fix include path not containing the "miniz" suffix
 - Fix compatibility with FreeBSD
 - pkg-config tweaks
 - Fix integer overflow in header corruption check
 - Fix some warnings
 - tdefl_compress_normal: Avoid NULL ptr arithmetic UB
 - replace use of stdint.h types with mz_ variants
 
 
### 2.2.0

 - Fix examples with amalgamation
 - Modified cmake script to support shared library mode and find_package
 - Fix for misleading doc comment on `mz_zip_reader_init_cfile` function
 - Add include location tolerance and stop forcing `_GNU_SOURCE`
 - Fix: mz_zip_reader_locate_file_v2 returns an mz_bool
 - Fix large file system checks
 - Add #elif to enable an external mz_crc32() to be linked in
 - Write with dynamic size (size of file/data to be added not known before\
 adding)
 - Added uncompress2 for zlib compatibility
 - Add support for building as a Meson subproject
 - Added OSSFuzz support; Integrate with CIFuzz
 - Add pkg-config file
 - Fixed use-of-uninitialized value msan error when copying dist bytes with\
 no output bytes written.
 - mz_zip_validate_file(): fix memory leak on errors
 - Fixed MSAN use-of-uninitialized in tinfl_decompress when invalid dist is\
 decoded. In this instance dist was 31 which s_dist_base translates as 0
 - Add flag to set (compressed) size in local file header
 - avoid use of uninitialized value in tdefl_record_literal

### 2.1.0

 - More instances of memcpy instead of cast and use memcpy per default
 - Remove inline for c90 support
 - New function to read files via callback functions when adding them
 - Fix out of bounds read while reading Zip64 extended information
 - guard memcpy when n == 0 because buffer may be NULL
 - Implement inflateReset() function
 - Move comp/decomp alloc/free  prototypes under guarding #ifndef MZ_NO_MALLOC
 - Fix large file support under Windows
 - Don't warn if _LARGEFILE64_SOURCE is not defined to 1
 - Fixes for MSVC warnings
 - Remove check that path of file added to archive contains ':' or '\'
 - Add !defined check on MINIZ_USE_ALIGNED_LOADS_AND_STORES

### 2.0.8

 - Remove unimplemented functions (mz_zip_locate_file and mz_zip_locate_file_\
v2)
 - Add license, changelog, readme and example files to release zip
 - Fix heap overflow to user buffer in tinfl_status tinfl_decompress
 - Fix corrupt archive if uncompressed file smaller than 4 byte and the file\
 is added by mz_zip_writer_add_mem*

### 2.0.7

 - Removed need in C++ compiler in cmake build
 - Fixed a lot of uninitialized value errors found with Valgrind by\
 memsetting m_dict to 0 in tdefl_init
 - Fix resource leak in mz_zip_reader_init_file_v2
 - Fix assert with mz_zip_writer_add_mem* w/MZ_DEFAULT_COMPRESSION
 - cmake build: install library and headers
 - Remove _LARGEFILE64_SOURCE requirement from apple defines for large files

### 2.0.6

 - Improve MZ_ZIP_FLAG_WRITE_ZIP64 documentation
 - Remove check for cur_archive_file_ofs > UINT_MAX because\
 cur_archive_file_ofs is not used after this point
 - Add cmake debug configuration
 - Fix PNG height when creating png files
 - Add "iterative" file extraction method based on mz_zip_reader_extract_to_c\
allback.
 - Option to use memcpy for unaligned data access
 - Define processor/arch macros as zero if not set to one

### 2.0.4/2.0.5

 - Fix compilation with the various omission compile definitions

### 2.0.3

- Fix GCC/clang compile warnings
- Added callback for periodic flushes (for ZIP file streaming)
- Use UTF-8 for file names in ZIP files per default

### 2.0.2

- Fix source backwards compatibility with 1.x
- Fix a ZIP bit not being set correctly

### 2.0.1

- Added some tests
- Added CI
- Make source code ANSI C compatible

### 2.0.0 beta

- Matthew Sitton merged miniz 1.x to Rich Geldreich's vogl ZIP64 changes.\
 Miniz is now licensed as MIT since the vogl code base is MIT licensed
- Miniz is now split into several files
- Miniz does now not seek backwards when creating ZIP files. That is the ZIP\
 files can be streamed
- Miniz automatically switches to the ZIP64 format when the created ZIP files\
 goes over ZIP file limits
- Similar to [SQLite](https://www.sqlite.org/amalgamation.html) the Miniz\
 source code is amalgamated into one miniz.c/miniz.h pair in a build step\
 (amalgamate.sh). Please use miniz.c/miniz.h in your projects
- Miniz 2 is only source back-compatible with miniz 1.x. It breaks binary\
 compatibility because structures changed

### v1.16 BETA Oct 19, 2013

Still testing, this release is downloadable from [here](http://www.tenaciouss\
oftware.com/miniz_v116_beta_r1.7z). Two key inflator-only robustness and\
 streaming related changes. Also merged in tdefl_compressor_alloc(),\
 tdefl_compressor_free() helpers to make script bindings easier for rustyzip.\
 I would greatly appreciate any help with testing or any feedback.

The inflator in raw (non-zlib) mode is now usable on gzip or similar streams\
 that have a bunch of bytes following the raw deflate data (problem\
 discovered by rustyzip author williamw520). This version should never read\
 beyond the last byte of the raw deflate data independent of how many bytes\
 you pass into the input buffer.

The inflator now has a new failure status TINFL_STATUS_FAILED_CANNOT_MAKE_PRO\
GRESS (-4). Previously, if the inflator was starved of bytes and could not\
 make progress (because the input buffer was empty and the caller did not set\
 the TINFL_FLAG_HAS_MORE_INPUT flag - say on truncated or corrupted\
 compressed data stream) it would append all 0's to the input and try to\
 soldier on. This is scary behavior if the caller didn't know when to stop\
 accepting output (because it didn't know how much uncompressed data was\
 expected, or didn't enforce a sane maximum). v1.16 will instead return\
 TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS immediately if it needs 1 or more\
 bytes to make progress, the input buf is empty, and the caller has indicated\
 that no more input is available. This is a "soft" failure, so you can call\
 the inflator again with more input and it will try to continue, or you can\
 give up and fail. This could be very useful in network streaming scenarios.

- The inflator coroutine func. is subtle and complex so I'm being cautious\
 about this release. I would greatly appreciate any help with testing or any\
 feedback.
         I feel good about these changes, and they've been through several\
 hours of automated testing, but they will probably not fix anything for the\
 majority of prev. users so I'm
         going to mark this release as beta for a few weeks and continue\
 testing it at work/home on various things.
- The inflator in raw (non-zlib) mode is now usable on gzip or similar data\
 streams that have a bunch of bytes following the raw deflate data (problem\
 discovered by rustyzip author williamw520).
         This version should *never* read beyond the last byte of the raw\
 deflate data independent of how many bytes you pass into the input buffer.\
 This issue was caused by the various Huffman bitbuffer lookahead\
 optimizations, and
         would not be an issue if the caller knew and enforced the precise\
 size of the raw compressed data *or* if the compressed data was in zlib\
 format (i.e. always followed by the byte aligned zlib adler32).
         So in other words, you can now call the inflator on deflate streams\
 that are followed by arbitrary amounts of data and it's guaranteed that\
 decompression will stop exactly on the last byte.
- The inflator now has a new failure status: TINFL_STATUS_FAILED_CANNOT_MAKE_\
PROGRESS (-4). Previously, if the inflator was starved of bytes and could not\
 make progress (because the input buffer was empty and the
         caller did not set the TINFL_FLAG_HAS_MORE_INPUT flag - say on\
 truncated or corrupted compressed data stream) it would append all 0's to\
 the input and try to soldier on.
         This is scary, because in the worst case, I believe it was possible\
 for the prev. inflator to start outputting large amounts of literal data. If\
 the caller didn't know when to stop accepting output
         (because it didn't know how much uncompressed data was expected, or\
 didn't enforce a sane maximum) it could continue forever. v1.16 cannot fall\
 into this failure mode, instead it'll return
         TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS immediately if it needs 1\
 or more bytes to make progress, the input buf is empty, and the caller has\
 indicated that no more input is available. This is a "soft"
         failure, so you can call the inflator again with more input and it\
 will try to continue, or you can give up and fail. This could be very useful\
 in network streaming scenarios.
- Added documentation to all the tinfl return status codes, fixed\
 miniz_tester so it accepts double minus params for Linux, tweaked\
 example1.c, added a simple "follower bytes" test to miniz_tester.cpp.
### v1.15 r4 STABLE - Oct 13, 2013

Merged over a few very minor bug fixes that I fixed in the zip64 branch. This\
 is downloadable from [here](http://code.google.com/p/miniz/downloads/list)\
 and also in SVN head (as of 10/19/13).


### v1.15 - Oct. 13, 2013

Interim bugfix release while I work on the next major release with zip64 and\
 streaming compression/decompression support. Fixed the MZ_ZIP_FLAG_DO_NOT_SO\
RT_CENTRAL_DIRECTORY bug (thanks kahmyong.moon@hp.com), which could cause the\
 locate files func to not find files when this flag was specified. Also fixed\
 a bug in mz_zip_reader_extract_to_mem_no_alloc() with user provided read\
 buffers (thanks kymoon). I also merged lots of compiler fixes from various\
 github repo branches and Google Code issue reports. I finally added cmake\
 support (only tested under for Linux so far), compiled and tested with clang\
 v3.3 and gcc 4.6 (under Linux), added defl_write_image_to_png_file_in_memory\
_ex() (supports Y flipping for OpenGL use, real-time compression), added a\
 new PNG example (example6.c - Mandelbrot), and I added 64-bit file I/O\
 support (stat64(), etc.) for glibc.

- Critical fix for the MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY bug (thanks\
 kahmyong.moon@hp.com) which could cause locate files to not find files. This\
 bug
        would only have occurred in earlier versions if you explicitly used\
 this flag, OR if you used mz_zip_extract_archive_file_to_heap() or\
 mz_zip_add_mem_to_archive_file_in_place()
        (which used this flag). If you can't switch to v1.15 but want to fix\
 this bug, just remove the uses of this flag from both helper funcs (and of\
 course don't use the flag).
- Bugfix in mz_zip_reader_extract_to_mem_no_alloc() from kymoon when\
 pUser_read_buf is not NULL and compressed size is > uncompressed size
- Fixing mz_zip_reader_extract_*() funcs so they don't try to extract\
 compressed data from directory entries, to account for weird zipfiles which\
 contain zero-size compressed data on dir entries.
         Hopefully this fix won't cause any issues on weird zip archives,\
 because it assumes the low 16-bits of zip external attributes are DOS\
 attributes (which I believe they always are in practice).
- Fixing mz_zip_reader_is_file_a_directory() so it doesn't check the internal\
 attributes, just the filename and external attributes
- mz_zip_reader_init_file() - missing MZ_FCLOSE() call if the seek failed
- Added cmake support for Linux builds which builds all the examples, tested\
 with clang v3.3 and gcc v4.6.
- Clang fix for tdefl_write_image_to_png_file_in_memory() from toffaletti
- Merged MZ_FORCEINLINE fix from hdeanclark
- Fix <time.h> include before config #ifdef, thanks emil.brink
- Added tdefl_write_image_to_png_file_in_memory_ex(): supports Y flipping\
 (super useful for OpenGL apps), and explicit control over the compression\
 level (so you can
        set it to 1 for real-time compression).
- Merged in some compiler fixes from paulharris's github repro.
- Retested this build under Windows (VS 2010, including static analysis), tcc\
  0.9.26, gcc v4.6 and clang v3.3.
- Added example6.c, which dumps an image of the mandelbrot set to a PNG file.
- Modified example2 to help test the MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTOR\
Y flag more.
- In r3: Bugfix to mz_zip_writer_add_file() found during merge: Fix possible\
 src file fclose() leak if alignment bytes+local header file write faiiled
- In r4: Minor bugfix to mz_zip_writer_add_from_zip_reader(): Was pushing the\
 wrong central dir header offset, appears harmless in this release, but it\
 became a problem in the zip64 branch

### v1.14 - May 20, 2012

(SVN Only) Minor tweaks to get miniz.c compiling with the Tiny C Compiler,\
 added #ifndef MINIZ_NO_TIME guards around utime.h includes. Adding mz_free()\
 function, so the caller can free heap blocks returned by miniz using\
 whatever heap functions it has been configured to use, MSVC specific fixes\
 to use "safe" variants of several functions (localtime_s, fopen_s,\
 freopen_s).

MinGW32/64 GCC 4.6.1 compiler fixes: added MZ_FORCEINLINE, #include <time.h>\
 (thanks fermtect).

Compiler specific fixes, some from fermtect. I upgraded to TDM GCC 4.6.1 and\
 now static __forceinline is giving it fits, so I'm changing all usage of\
 __forceinline to MZ_FORCEINLINE and forcing gcc to use __attribute__((__alwa\
ys_inline__)) (and MSVC to use __forceinline). Also various fixes from\
 fermtect for MinGW32: added #include , 64-bit ftell/fseek fixes.

### v1.13 - May 19, 2012

From jason@cornsyrup.org and kelwert@mtu.edu - Most importantly, fixed\
 mz_crc32() so it doesn't compute the wrong CRC-32's when mz_ulong is\
 64-bits. Temporarily/locally slammed in "typedef unsigned long mz_ulong" and\
 re-ran a randomized regression test on ~500k files. Other stuff:

Eliminated a bunch of warnings when compiling with GCC 32-bit/64. Ran all\
 examples, miniz.c, and tinfl.c through MSVC 2008's /analyze (static\
 analysis) option and fixed all warnings (except for the silly "Use of the\
 comma-operator in a tested expression.." analysis warning, which I purposely\
 use to work around a MSVC compiler warning).

Created 32-bit and 64-bit Codeblocks projects/workspace. Built and tested\
 Linux executables. The codeblocks workspace is compatible with\
 Linux+Win32/x64. Added miniz_tester solution/project, which is a useful\
 little app derived from LZHAM's tester app that I use as part of the\
 regression test. Ran miniz.c and tinfl.c through another series of\
 regression testing on ~500,000 files and archives. Modified example5.c so it\
 purposely disables a bunch of high-level functionality (MINIZ_NO_STDIO,\
 etc.). (Thanks to corysama for the MINIZ_NO_STDIO bug report.)

Fix ftell() usage in a few of the examples so they exit with an error on\
 files which are too large (a limitation of the examples, not miniz itself).\
 Fix fail logic handling in mz_zip_add_mem_to_archive_file_in_place() so it\
 always calls mz_zip_writer_finalize_archive() and mz_zip_writer_end(), even\
 if the file add fails.

- From jason@cornsyrup.org and kelwert@mtu.edu - Fix mz_crc32() so it doesn't\
 compute the wrong CRC-32's when mz_ulong is 64-bit.
- Temporarily/locally slammed in "typedef unsigned long mz_ulong" and re-ran\
 a randomized regression test on ~500k files.
- Eliminated a bunch of warnings when compiling with GCC 32-bit/64.
- Ran all examples, miniz.c, and tinfl.c through MSVC 2008's /analyze (static\
 analysis) option and fixed all warnings (except for the silly
"Use of the comma-operator in a tested expression.." analysis warning, which\
 I purposely use to work around a MSVC compiler warning).
- Created 32-bit and 64-bit Codeblocks projects/workspace. Built and tested\
 Linux executables. The codeblocks workspace is compatible with\
 Linux+Win32/x64.
- Added miniz_tester solution/project, which is a useful little app derived\
 from LZHAM's tester app that I use as part of the regression test.
- Ran miniz.c and tinfl.c through another series of regression testing on\
 ~500,000 files and archives.
- Modified example5.c so it purposely disables a bunch of high-level\
 functionality (MINIZ_NO_STDIO, etc.). (Thanks to corysama for the\
 MINIZ_NO_STDIO bug report.)
- Fix ftell() usage in examples so they exit with an error on files which are\
 too large (a limitation of the examples, not miniz itself).

### v1.12 - 4/12/12

More comments, added low-level example5.c, fixed a couple minor\
 level_and_flags issues in the archive API's.
level_and_flags can now be set to MZ_DEFAULT_COMPRESSION. Thanks to Bruce\
 Dawson <bruced@valvesoftware.com> for the feedback/bug report.

### v1.11 - 5/28/11

Added statement from unlicense.org

### v1.10 - 5/27/11

- Substantial compressor optimizations:
- Level 1 is now ~4x faster than before. The L1 compressor's throughput now\
 varies between 70-110MB/sec. on a Core i7 (actual throughput varies\
 depending on the type of data, and x64 vs. x86).
- Improved baseline L2-L9 compression perf. Also, greatly improved\
 compression perf. issues on some file types.
- Refactored the compression code for better readability and maintainability.
- Added level 10 compression level (L10 has slightly better ratio than level\
 9, but could have a potentially large drop in throughput on some files).

### v1.09 - 5/15/11

Initial stable release.



\
changes-type: text/markdown;variant=GFM
url: https://github.com/richgel999/miniz
src-url: https://github.com/richgel999/miniz
package-url: https://github.com/build2-packaging/miniz/
email: richgel99@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = libminiz

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

test.target = $c.target

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

\
location: miniz/libminiz-3.0.2+2.tar.gz
sha256sum: c256d7d13d34d745e724a01f941d295bd3e812cd8dde7009e2fca03481b62f69
:
name: libmysqlclient
version: 8.0.15+18
project: mysql
summary: MySQL C API client library
license: other: GPL-2.0-only with MySQL Universal FOSS Exception
topics: C, MySQL, SQL, relational database
description:
\
MySQL is a relational SQL database management system with libmysqlclient being
its C client library. Applications can use this library to pass queries to
MySQL database servers and to receive the results of those queries using the C
programming language. For more information see:

https://www.mysql.com

This package contains the original libmysqlclient library source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the MySQL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of libmysqlclient for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/mysql/

\
description-type: text/plain
url: https://www.mysql.com
doc-url: https://dev.mysql.com/doc/refman/8.0/en/c-api.html
src-url: https://git.build2.org/cgit/packaging/mysql/mysql/tree/libmysqlclien\
t/
package-url: https://git.build2.org/cgit/packaging/mysql/
email: mysql@lists.mysql.com; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libz ^1.2.1100
depends: libcrypto ^1.1.1
depends: libssl ^1.1.1
builds: all relocatable
builds: -wasm
builds: -static; Implementation uses C++ and requires special linking steps.
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GPLv2 with Universal FOSS Exception; see accompanying LICENSE\
 file

project = libmysqlclient

using version
using config
using dist
using test
using install

# The MySQL client library ABI version number has the <major>.<minor>.<patch>
# form. The major number is increased for backwards-incompatible API changes,
# the minor number for backwards-compatible ones (for example, for adding a\
 new
# function), and the patch number is typically increased for each package
# release, being in a sense redundant. Increase of the version component\
 resets
# the rightmost ones to zero. See also:
#
# http://mysqlserverteam.com/the-client-library-part-2-the-version-number/
#
# There is no way to deduce the ABI version from the release version, so we
# obtain the ABI version from the SHARED_LIB_MAJOR_VERSION variable value in
# upstream/cmake/mysql_version.cmake for each package release. Also, while at
# it, check that the protocol version is still correct (the PROTOCOL_VERSION
# variable).
#
# See also how Debian/Fedora package libmysqlclient if trying to wrap your\
 head
# around this mess.
#
if ($version.major == 8 && $version.minor == 0 && $version.patch == 15)
{
  # @@ Should we also use the ABI minor version to make sure the library is
  #    also forward-compatible?
  #
  abi_version = 21

  protocol_version = 10
}
else
  fail "increment the ABI version?"

\
root-build:
\
# file      : build/root.build
# license   : GPLv2 with Universal FOSS Exception; see accompanying LICENSE\
 file

using in

using c

h{*}: extension = h
c{*}: extension = c

# Note that the implementation uses C++14 internally, with some used
# constructs being deprecated/removed from the later versions of the standard.
#
cxx.std = 14

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

\
debian-name: default-libmysqlclient-dev
debian-to-downstream-version: /.*/8.0.0/
fedora-name: mysql-devel
fedora_39-name: community-mysql-devel
location: mysql/libmysqlclient-8.0.15+18.tar.gz
sha256sum: 2c9367e98265bc2f0adbaf71174066e34c77e5d1c9e38ed94dddfb4330ffd842
:
name: libnanobench
version: 4.3.11+2
project: nanobench
summary: Microbenchmarking functionality for C++11/14/17/20.
license: MIT
description:
\
<a id="top"></a>
# ankerl::nanobench

![ankerl::nanobench logo](src/docs/nanobench-logo-small.svg)

[![Release](https://img.shields.io/github/release/martinus/nanobench.svg)](ht\
tps://github.com/martinus/nanobench/releases)
[![GitHub license](https://img.shields.io/github/license/martinus/nanobench.s\
vg)](https://raw.githubusercontent.com/martinus/nanobench/master/LICENSE)
[![Travis CI Build Status](https://travis-ci.com/martinus/nanobench.svg?branc\
h=master)](https://travis-ci.com/martinus/nanobench)
[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/github/\
martinus/nanobench?branch=master&svg=true)](https://ci.appveyor.com/project/m\
artinus/nanobench)
[![Join the chat at https://gitter.im/nanobench/community](https://badges.git\
ter.im/nanobench/community.svg)](https://gitter.im/nanobench/community?utm_so\
urce=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

`ankerl::nanobench` is a platform independent microbenchmarking library for\
 C++11/14/17/20.

```cpp
#define ANKERL_NANOBENCH_IMPLEMENT
#include <nanobench.h>

int main() {
    double d = 1.0;
    ankerl::nanobench::Bench().run("some double ops", [&] {
        d += 1.0 / d;
        if (d > 5.0) {
            d -= 5.0;
        }
        ankerl::nanobench::doNotOptimizeAway(d);
    });
}
```

The whole executable runs for ~60ms and prints

```markdown
|               ns/op |                op/s |    err% |          ins/op |    \
      cyc/op |    IPC |         bra/op |   miss% |     total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----\
------------:|-------:|---------------:|--------:|----------:|:----------
|                7.52 |      132,948,239.79 |    1.1% |            6.65 |    \
       24.07 |  0.276 |           1.00 |    8.9% |      0.00 | `some double\
 ops`
```

Which github renders as

|               ns/op |                op/s |    err% |          ins/op |    \
      cyc/op |    IPC |         bra/op |   miss% |     total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----\
------------:|-------:|---------------:|--------:|----------:|:----------
|                7.52 |      132,948,239.79 |    1.1% |            6.65 |    \
       24.07 |  0.276 |           1.00 |    8.9% |      0.00 | `some double\
 ops`

The benchmarked code takes **7.52** nanoseconds to run, so ~**133** million\
 times per seconds. Measurements fluctuate by
**1.1%**. On average **6.65** instructions are executed in **24.07** CPU\
 cycles, resulting in **0.276** instructions per
cycle. A **single** branch is in the code, which branch prediction missed in\
 **8.9%** of the cases. Total runtime of
the benchmark with the name `some double ops` is **0.00**, so just a few\
 milliseconds.

# Design Goals

* **Ease of use**: Simple & [powerful API](https://nanobench.ankerl.com/refer\
ence.html), fast compile times, [easy to integrate anywhere](https://nanobenc\
h.ankerl.com/tutorial.html#installation).
* **Fast**: Get accurate results as fast as possible. nanobench is [~80 times\
 faster than google benchmark](https://nanobench.ankerl.com/comparison.html#r\
untime).
* **Accurate**: Get deterministic, repeatable, and accurate results that you\
 can make sound decisions on.
* **Robust**: Be robust against outliers, warn if results are not reliable.

# Documentation

[Extensive documentation is available](https://nanobench.ankerl.com).

# More

* [Code of Conduct](src/docs/CODE_OF_CONDUCT.md) - Contributor Covenant Code\
 of Conduct
* I need a better logo. Currently I use a small bench. Nanobench. Ha ha.


\
description-type: text/markdown;variant=GFM
package-description:
\
# nanobench

This project builds and defines the build2 package for the\
 [nanobench](https://github.com/martinus/nanobench) library.

The packaging code is licensed under the MIT License, the upstream artifacts\
 are licensed under the terms and conditions of nanobench.

## Usage

You can simply add this package as dependency to your project by specifying\
 it in your `manifest`:

```
depends: libnanobench ^4.3.11
```

Then just pick the targets that you need:

```
import libs  = libnanobench%lib{nanobench}
```

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/martinus/nanobench
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = libnanobench

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: nanobench/libnanobench-4.3.11+2.tar.gz
sha256sum: 708bfef5f50d2f2ac40b8513b39a701eacf4ede27122cfaee1cdd31880e83678
:
name: libnng
version: 1.5.2+2
project: nng
summary: nanomsg-next-generation - light-weight brokerless messaging.
license: MIT
topics: C
description:
\
# NNG

[![build2](https://github.com/build2-packaging/nng/actions/workflows/build2.y\
ml/badge.svg)](https://github.com/build2-packaging/nng/actions/workflows/buil\
d2.yml)

This project builds and defines the build2 package for the\
 [NNG](https://nng.nanomsg.org/man/) library.

The packaging code is licensed under the MIT License, the upstream artifacts\
 are licensed under the terms and conditions of NNG.

## Usage

You can simply add this package as dependency to your project by specifying\
 it in your `manifest`:

```
depends: libnng ^1.0.0
```

Then import your required targets

```
import libs = libnng%lib{nng}
```

This library offers a big range of options (though the default values are\
 reasonable), so have a look at the official [upstream code](https://github.c\
om/nanomsg/nng) and the [root.build](libnng/build/root.build).

## Issues

* no TLS support: wolfssl and/or mbedtls need to be available as packages\
 first

\
description-type: text/markdown;variant=GFM
url: https://nng.nanomsg.org/
doc-url: https://nng.nanomsg.org/man/
src-url: https://github.com/nanomsg/nng
package-url: https://github.com/build2-packaging/nng
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0-
depends: * bpkg >= 0.16.0-
builds: default
bootstrap-build:
\
project = libnng

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $c.target

config [bool] config.libnng.elide_deprecated ?= false

# We can use rlimit to configure the stack size for systems
# that have too small defaults.  This is not used for Windows,
# which can grow thread stacks sensibly.  (Note that NNG can get
# by with a smallish stack, but application callbacks might require
# larger values if using aio completion callbacks.  TLS libraries may
# require larger stacks however.)
config [bool] config.libnng.set_stacksize ?= false

config [bool] config.libnng.enable_stats ?= false
config [uint64] config.libnng.resolve_concurrency ?= 0 # zero means\
 "auto-detect"
config [uint64] config.libnng.num_taskq_threads ?= 0 # zero means\
 "auto-detect"
config [uint64] config.libnng.max_taskq_threads ?= 16

# protocol options
config [bool] config.libnng.proto_bus0 ?= true
config [bool] config.libnng.proto_pair0 ?= true
config [bool] config.libnng.proto_pair1 ?= true
config [bool] config.libnng.proto_push0 ?= true
config [bool] config.libnng.proto_pull0 ?= true
config [bool] config.libnng.proto_pub0 ?= true
config [bool] config.libnng.proto_sub0 ?= true
config [bool] config.libnng.proto_req0 ?= true
config [bool] config.libnng.proto_rep0 ?= true
config [bool] config.libnng.proto_surveyor0 ?= true
config [bool] config.libnng.proto_respondent0 ?= true

# transport options
config [bool] config.libnng.transport_inproc ?= true
config [bool] config.libnng.transport_ipc ?= true
config [bool] config.libnng.transport_tcp ?= true
config [bool] config.libnng.transport_tls ?= false
config [bool] config.libnng.transport_ws ?= true

# supplemental options
config [bool] config.libnng.supp_base64 ?= true
config [bool] config.libnng.supp_http ?= true
config [bool] config.libnng.supp_sha1 ?= true
config [bool] config.libnng.supp_tls ?= false
config [bool] config.libnng.supp_websocket ?= true

# can be either 'none', 'mbedtls' or 'wolfssl'
config [string] config.libnng.tls_engine ?= none

\
location: nng/libnng-1.5.2+2.tar.gz
sha256sum: 3e5a2d6afece0dbe40659b6817252248a8fe484154ffa40be3fad536e2cab124
:
name: libodb
version: 2.5.0
project: odb
summary: Common ODB runtime library
license: GPL-2.0-only
license: other: proprietary; Not free/open source.
topics: C++, ORM, SQL, object persistence, relational database
description:
\
# libodb - common ODB runtime library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the common ODB runtime library. Applications that
include code generated by the ODB compiler will need to link this library.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
requires: c++11
tests: odb-tests == 2.5.0 ? ($config.odb_tests.libodb_test)
examples: odb-examples == 2.5.0 ? ($config.odb_examples.libodb_example)
default-builds: all
default-build-config:
\
{
  config.odb_tests.libodb_test=true
  config.odb_tests.database=sqlite
}+ odb-tests

{
  config.odb_examples.libodb_example=true
  config.odb_examples.database=sqlite
}+ odb-examples
\
multi-builds: all
multi-builds: -wasm; Not supported by libodb-{mysql,pgsql}.
multi-builds: -( +windows -gcc ); Requires MinGW GCC.
multi-builds: &gcc; Requires GCC with plugin support enabled.
multi-builds: &gcc-5+; Requires GCC 5 or later.
multi-builds: -static; Implementation uses plugins and requires -fPIC.
multi-build-auxiliary-mysql: *-mysql_*
multi-build-auxiliary-pgsql: *-postgresql_*
multi-build-config:
\
{
  config.odb_tests.libodb_test=true
  config.odb_tests.database='mysql sqlite pgsql'

  config.odb_tests.mysql.user=$getenv(MYSQL_DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(MYSQL_DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(MYSQL_DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(MYSQL_DATABASE_PORT)

  config.odb_tests.pgsql.user=$getenv(PGSQL_DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(PGSQL_DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(PGSQL_DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(PGSQL_DATABASE_PORT)
}+ odb-tests
\
custom-builds: default; Requires default config with GCC as host compiler.
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-build-config:
\
{
  config.odb_tests.libodb_test=true
  config.odb_tests.database=sqlite
}+ odb-tests

{
  config.odb_examples.libodb_example=true
  config.odb_examples.database=sqlite
}+ odb-examples
\
custom-multi-builds: default; Requires default config with GCC as host\
 compiler.
custom-multi-builds: -wasm; Not supported by libodb-{mysql,pgsql}.
custom-multi-builds: -static; Implementation uses plugins and requires -fPIC.
custom-multi-build-auxiliary-mysql: *-mysql_*
custom-multi-build-auxiliary-pgsql: *-postgresql_*
custom-multi-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-build-config:
\
{
  config.odb_tests.libodb_test=true
  config.odb_tests.database='mysql sqlite pgsql'

  config.odb_tests.mysql.user=$getenv(MYSQL_DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(MYSQL_DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(MYSQL_DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(MYSQL_DATABASE_PORT)

  config.odb_tests.pgsql.user=$getenv(PGSQL_DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(PGSQL_DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(PGSQL_DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(PGSQL_DATABASE_PORT)
}+ odb-tests
\
custom-multi-oracle-builds: default; Requires proprietary software.
custom-multi-oracle-builds: -wasm; Not supported by libodb-{mysql,pgsql,oracl\
e}.
custom-multi-oracle-builds: &( +linux &gcc ); Only test on Linux with main\
 compiler.
custom-multi-oracle-builds: -static; Implementation uses plugins and requires\
 -fPIC.
custom-multi-oracle-build-auxiliary-mysql:
\
*-mysql_*
\
custom-multi-oracle-build-auxiliary-pgsql:
\
*-postgresql_*
\
custom-multi-oracle-build-auxiliary-oracle:
\
*-oracle_*
\
custom-multi-oracle-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-oracle-build-config:
\
{
  config.odb_tests.libodb_test=true
  config.odb_tests.database='mysql sqlite pgsql oracle'

  config.odb_tests.mysql.user=$getenv(MYSQL_DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(MYSQL_DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(MYSQL_DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(MYSQL_DATABASE_PORT)

  config.odb_tests.pgsql.user=$getenv(PGSQL_DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(PGSQL_DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(PGSQL_DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(PGSQL_DATABASE_PORT)

  config.odb_tests.oracle.user=$getenv(ORACLE_DATABASE_USER)
  config.odb_tests.oracle.passwd=$getenv(ORACLE_DATABASE_PASSWORD)
  config.odb_tests.oracle.host=$getenv(ORACLE_DATABASE_HOST)
  config.odb_tests.oracle.port=$getenv(ORACLE_DATABASE_PORT)
  config.odb_tests.oracle.service=$getenv(ORACLE_DATABASE_SERVICE)
}+ odb-tests
\
custom-multi-mssql-builds: default; Requires proprietary software.
custom-multi-mssql-builds: -wasm; Not supported by libodb-{mysql,pgsql,mssql}.
custom-multi-mssql-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only\
 test on Windows and Linux with main compiler.
custom-multi-mssql-builds: -static; Implementation uses plugins and requires\
 -fPIC.
custom-multi-mssql-build-auxiliary-mysql:
\
*-mysql_*
\
custom-multi-mssql-build-auxiliary-pgsql:
\
*-postgresql_*
\
custom-multi-mssql-build-auxiliary-mssql:
\
*-mssql_*
\
custom-multi-mssql-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-mssql-build-config:
\
{
  config.odb_tests.libodb_test=true
  config.odb_tests.database='mysql sqlite pgsql mssql'

  config.odb_tests.mysql.user=$getenv(MYSQL_DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(MYSQL_DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(MYSQL_DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(MYSQL_DATABASE_PORT)

  config.odb_tests.pgsql.user=$getenv(PGSQL_DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(PGSQL_DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(PGSQL_DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(PGSQL_DATABASE_PORT)

  config.odb_tests.mssql.user=$getenv(MSSQL_DATABASE_USER)
  config.odb_tests.mssql.passwd=$getenv(MSSQL_DATABASE_PASSWORD)
  config.odb_tests.mssql.database=$getenv(MSSQL_DATABASE_NAME)
  config.odb_tests.mssql.host=$getenv(MSSQL_DATABASE_HOST)
  config.odb_tests.mssql.port=$getenv(MSSQL_DATABASE_PORT)
  config.odb_tests.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-tests
\
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11

{
  config.odb_tests.libodb_test=true
  config.odb_tests.database=sqlite
}+ odb-tests

{
  config.odb_examples.libodb_example=true
  config.odb_examples.database=sqlite
}+ odb-examples
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11

{
  config.odb_tests.libodb_test=true
  config.odb_tests.database=sqlite
}+ odb-tests

{
  config.odb_examples.libodb_example=true
  config.odb_examples.database=sqlite
}+ odb-examples
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-msvc**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11

{
  config.odb_tests.libodb_test=true
  config.odb_tests.database=sqlite
}+ odb-tests

{
  config.odb_examples.libodb_example=true
  config.odb_examples.database=sqlite
}+ odb-examples
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-msvc**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
bpkg.create:config.bin.lib.suffix=D
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.test-installed.create:config.cc.coptions="/W2 /MDd"
b.test-installed.create:config.import.libodb.odb.lib=odbD
bpkg.test-separate-installed.create:config.cc.coptions="/W2 /MDd"
bpkg.test-separate-installed.create:config.import.libodb.odb.lib=odbD
b.create:config.cxx.std=c++11

{
  config.odb_tests.libodb_test=true
  config.odb_tests.database=sqlite
}+ odb-tests

{
  config.odb_examples.libodb_example=true
  config.odb_examples.database=sqlite
}+ odb-examples
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2; see accompanying LICENSE file

project = libodb

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-2.5.0.tar.gz
sha256sum: 700038a73c6cbead011129b15030b7cdd3f73510b687f2c4504808df4230441b
:
name: libodb-boost
version: 2.5.0
project: odb
summary: Boost ODB profile library
license: GPL-2.0-only
license: other: proprietary; Not free/open source.
topics: C++, ORM, Boost, SQL
description:
\
# libodb-boost - Boost ODB profile library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the Boost ODB profile library. The Boost profile
provides support for persisting Boost smart pointers, containers, and value
types.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libodb == 2.5.0
requires: c++11
builds: all
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-msvc**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-msvc**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
bpkg.create:config.bin.lib.suffix=D
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.test-installed.create:config.cc.coptions="/W2 /MDd"
b.test-installed.create:config.import.libodb_boost.odb_boost.lib=odb-boostD
b.create:config.cxx.std=c++11
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2; see accompanying LICENSE file

project = libodb-boost

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-boost-2.5.0.tar.gz
sha256sum: 903111fd9d20e67f4c798751c17b5a0d8517c5cae2a0d14505a3c998bcf874a0
:
name: libodb-mssql
version: 2.5.0
project: odb
summary: Microsoft SQL Server ODB runtime library
license: other: ODB NCUEL; Non-Commercial Use and Evaluation License.
license: other: proprietary; Not free/open source.
topics: C++, ORM, Microsoft SQL Server, SQL
description:
\
# libodb-mssql - MSSQL ODB runtime library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the Microsoft SQL Server (MSSQL) ODB runtime library.
Applications that include code generated for the MSSQL database will need to
link this library.

This runtime library in turn depends on `libunixodbc` (Linux only) and the SQL
Server Native Client ODBC driver.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libodb == 2.5.0
depends: * cli ^1.2.0 ? ($config.libodb_mssql.develop)
requires: c++11
requires: mssql-odbc; MS SQL Server ODBC driver.
tests: odb-tests == 2.5.0 ? (!$defined(config.odb_tests.database))\
 config.odb_tests.database=mssql
examples: odb-examples == 2.5.0 ? (!$defined(config.odb_examples.database))\
 config.odb_examples.database=mssql
builds: none; Requires proprietary software.
build-auxiliary: *-mssql_*
custom-builds: default; Requires proprietary software.
custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-build-config:
\
{
  config.odb_tests.mssql.user=$getenv(DATABASE_USER)
  config.odb_tests.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.mssql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mssql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mssql.port=$getenv(DATABASE_PORT)
  config.odb_tests.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-tests

{
  config.odb_examples.mssql.user=$getenv(DATABASE_USER)
  config.odb_examples.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.mssql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mssql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mssql.port=$getenv(DATABASE_PORT)
  config.odb_examples.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-examples

# Configure odb-{tests,examples} packages' dependency libodb as system on the
# bpkg.test-separate-installed.configure.build step, since it is already
# installed as a dependency of libodb-mssql.
#
{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
custom-multi-builds: default; Requires proprietary software.
custom-multi-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
custom-multi-builds: -static; Implementation uses plugins and requires -fPIC.
custom-multi-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-build-config:
\
{
  config.odb_tests.multi_database=true

  config.odb_tests.mssql.user=$getenv(DATABASE_USER)
  config.odb_tests.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.mssql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mssql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mssql.port=$getenv(DATABASE_PORT)
  config.odb_tests.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-tests

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
boost-custom-builds: default; Requires proprietary software.
boost-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
boost-custom-builds: -static; Implementation uses plugins and requires -fPIC.
boost-custom-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
boost-custom-build-config:
\
{
  config.odb_tests.boost=true

  config.odb_tests.mssql.user=$getenv(DATABASE_USER)
  config.odb_tests.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.mssql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mssql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mssql.port=$getenv(DATABASE_PORT)
  config.odb_tests.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-tests

{
  config.odb_examples.boost=true

  config.odb_examples.mssql.user=$getenv(DATABASE_USER)
  config.odb_examples.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.mssql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mssql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mssql.port=$getenv(DATABASE_PORT)
  config.odb_examples.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt5-custom-builds: default; Requires proprietary software.
qt5-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
qt5-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-custom-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt5-custom-build-config:
\
{
  config.odb_tests.qt=5

  config.odb_tests.mssql.user=$getenv(DATABASE_USER)
  config.odb_tests.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.mssql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mssql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mssql.port=$getenv(DATABASE_PORT)
  config.odb_tests.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-tests

{
  config.odb_examples.qt=5

  config.odb_examples.mssql.user=$getenv(DATABASE_USER)
  config.odb_examples.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.mssql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mssql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mssql.port=$getenv(DATABASE_PORT)
  config.odb_examples.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt6-custom-builds: default; Requires proprietary software.
qt6-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
qt6-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-custom-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt6-custom-build-config:
\
{
  config.odb_tests.qt=6

  config.odb_tests.mssql.user=$getenv(DATABASE_USER)
  config.odb_tests.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.mssql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mssql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mssql.port=$getenv(DATABASE_PORT)
  config.odb_tests.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-tests

{
  config.odb_examples.qt=6

  config.odb_examples.mssql.user=$getenv(DATABASE_USER)
  config.odb_examples.mssql.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.mssql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mssql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mssql.port=$getenv(DATABASE_PORT)
  config.odb_examples.mssql.driver=$getenv(MSSQL_ODBC_DRIVER)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : ODB NCUEL; see accompanying LICENSE file

project = libodb-mssql

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : ODB NCUEL; see accompanying LICENSE file

config [bool] config.libodb_mssql.develop ?= false

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-mssql-2.5.0.tar.gz
sha256sum: eefa34f8b174629b06fced38c9b5b5da7545c03bcb56e328e98bd79b325bb43f
:
name: libodb-mysql
version: 2.5.0
project: odb
summary: MySQL ODB runtime library
license: GPL-2.0-only
license: other: proprietary; Not free/open source.
topics: C++, ORM, MySQL, MariaDB, SQL
description:
\
# libodb-mysql - MySQL ODB runtime library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the MySQL ODB runtime library. Applications that include
code generated for the MySQL database will need to link this library.

This runtime library in turn depends on `libmysqlclient`, MySQL client
library. Note that the MariaDB client library can be used instead of MySQL.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libmysqlclient >= 5.0.3
depends: mysql-client >= 5.0.3 ? ($config.libodb_mysql.mysql_client)
depends: libodb == 2.5.0
depends: * cli ^1.2.0 ? ($config.libodb_mysql.develop)
requires: c++11
tests: odb-tests == 2.5.0 ? (!$defined(config.odb_tests.database))\
 config.odb_tests.database=mysql
examples: odb-examples == 2.5.0 ? (!$defined(config.odb_examples.database))\
 config.odb_examples.database=mysql
build-auxiliary: *-mysql_*
default-builds: all
default-builds: -wasm
default-build-config:
\
{
  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

# Configure odb-{tests,examples} packages' dependency libodb as system on the
# bpkg.test-separate-installed.configure.build step, since it is already
# installed as a dependency of libodb-mysql.
#
{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
multi-builds: all
multi-builds: -wasm
multi-builds: -( +windows -gcc ); Requires MinGW GCC.
multi-builds: &gcc; Requires GCC with plugin support enabled.
multi-builds: &gcc-5+; Requires GCC 5 or later.
multi-builds: -static; Implementation uses plugins and requires -fPIC.
multi-build-config:
\
{
  config.odb_tests.multi_database=true

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
custom-builds: default; Requires default config with GCC as host compiler.
custom-builds: -wasm
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-build-config:
\
{
  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
custom-multi-builds: default; Requires default config with GCC as host\
 compiler.
custom-multi-builds: -wasm
custom-multi-builds: -static; Implementation uses plugins and requires -fPIC.
custom-multi-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-build-config:
\
{
  config.odb_tests.multi_database=true

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
boost-default-builds: default
boost-default-builds: -wasm
boost-default-builds: -( +windows -gcc ); Requires MinGW GCC.
boost-default-builds: &gcc; Requires GCC with plugin support enabled.
boost-default-builds: &gcc-5+; Requires GCC 5 or later.
boost-default-builds: -static; Implementation uses plugins and requires -fPIC.
boost-default-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-default-build-config:
\
{
  config.odb_tests.boost=true

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.boost=true

  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt5-default-builds: default
qt5-default-builds: -wasm
qt5-default-builds: -( +windows -gcc ); Requires MinGW GCC.
qt5-default-builds: &gcc; Requires GCC with plugin support enabled.
qt5-default-builds: &gcc-5+; Requires GCC 5 or later.
qt5-default-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-default-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-default-build-config:
\
{
  config.odb_tests.qt=5

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=5

  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt6-default-builds: default
qt6-default-builds: -wasm
qt6-default-builds: -( +windows -gcc ); Requires MinGW GCC.
qt6-default-builds: &gcc; Requires GCC with plugin support enabled.
qt6-default-builds: &gcc-5+; Requires GCC 5 or later.
qt6-default-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-default-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-default-build-config:
\
{
  config.odb_tests.qt=6

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=6

  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
boost-custom-builds: default; Requires default config with GCC as host\
 compiler.
boost-custom-builds: -wasm
boost-custom-builds: -static; Implementation uses plugins and requires -fPIC.
boost-custom-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
boost-custom-build-config:
\
{
  config.odb_tests.boost=true

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.boost=true

  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt5-custom-builds: default; Requires default config with GCC as host compiler.
qt5-custom-builds: -wasm
qt5-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-custom-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt5-custom-build-config:
\
{
  config.odb_tests.qt=5

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=5

  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt6-custom-builds: default; Requires default config with GCC as host compiler.
qt6-custom-builds: -wasm
qt6-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-custom-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt6-custom-build-config:
\
{
  config.odb_tests.qt=6

  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=6

  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
bpkg.bindist.debian:--debian-buildflags=prepend
b.create:config.cxx.std=c++11
bpkg.configure.build:.../config.cc.poptions=[null]
bpkg.configure.build:.../config.cc.coptions=[null]
bpkg.configure.build:.../config.cc.loptions=[null]
bpkg.configure.build:.../config.cxx.coptions=-Wno-cpp
b.test-installed.create:config.cxx.coptions=-Wno-cpp
bpkg.test-separate-installed.create:config.cxx.coptions=-Wno-cpp
?sys:libmysqlclient
?sys:mysql-client

{
  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libmysqlclient
?sys:mysql-client

{
  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-msvc**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=full
bpkg.bindist.archive:--recursive=?libodb=separate

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11

{ config.libodb_mysql.mysql_client=true }+ libodb-mysql

{
  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-msvc**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=full
bpkg.bindist.archive:--recursive=?libodb=separate

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
bpkg.create:config.bin.lib.suffix=D
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.test-installed.create:config.cc.coptions="/W2 /MDd"
b.test-installed.create:config.import.libodb_mysql.odb_mysql.lib=odb-mysqlD
bpkg.test-separate-installed.create:config.cc.coptions="/W2 /MDd"
bpkg.test-separate-installed.create:config.import.libodb_mysql.odb_mysql.lib=\
odb-mysqlD
bpkg.test-separate-installed.create:config.import.libodb.odb.lib=odbD
b.create:config.cxx.std=c++11

{
  config.odb_tests.mysql.user=$getenv(DATABASE_USER)
  config.odb_tests.mysql.database=$getenv(DATABASE_NAME)
  config.odb_tests.mysql.host=$getenv(DATABASE_HOST)
  config.odb_tests.mysql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.mysql.user=$getenv(DATABASE_USER)
  config.odb_examples.mysql.database=$getenv(DATABASE_NAME)
  config.odb_examples.mysql.host=$getenv(DATABASE_HOST)
  config.odb_examples.mysql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2; see accompanying LICENSE file

project = libodb-mysql

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2; see accompanying LICENSE file

config [bool] config.libodb_mysql.develop ?= false

# Enable the dependency on the mysql-client package to, for example, ease its
# bundling into the binary distribution package (see the bindist-windows-*
# package build configurations hack for the use case).
#
config [bool] config.libodb_mysql.mysql_client ?= false

# Configure which database client library to use for build2 versions greater
# than 0.12.0 and always use MySQL client library otherwise (due to the lack
# of the project configuration variables support).
#
if ($build.version.number > 12000000000)
{
  # Whether to use the MySQL or MariaDB client library.
  #
  config [string] config.libodb_mysql.client_lib ?= 'mysql'

  # Verify the config.libodb_mysql.client_lib configuration variable value and
  # provide the short alias for it.
  #
  switch $config.libodb_mysql.client_lib
  {
    case 'mysql'
    case 'mariadb'
      client_lib = $config.libodb_mysql.client_lib

    default
      fail "invalid config.libodb_mysql.client_lib value '$config.libodb_mysq\
l.client_lib'"
  }
}
else
  client_lib = 'mysql'

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-mysql-2.5.0.tar.gz
sha256sum: 456bc2624b232a1066cc22503a19b0492d17b5bd42eef3b0dba7ea85c78e705f
:
name: libodb-oracle
version: 2.5.0
project: odb
summary: Oracle ODB runtime library
license: other: ODB NCUEL; Non-Commercial Use and Evaluation License.
license: other: proprietary; Not free/open source.
topics: C++, ORM, Oracle, SQL
description:
\
# libodb-oracle - Oracle ODB runtime library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the Oracle ODB runtime library. Applications that
include code generated for the Oracle database will need to link this library.

This runtime library in turn depends on OCI, Oracle client library.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libodb == 2.5.0
depends: * cli ^1.2.0 ? ($config.libodb_oracle.develop)
requires: c++11
requires: oci; Oracle Call Interface library.
tests: odb-tests == 2.5.0 ? (!$defined(config.odb_tests.database))\
 config.odb_tests.database=oracle
examples: odb-examples == 2.5.0 ? (!$defined(config.odb_examples.database))\
 config.odb_examples.database=oracle
builds: none; Requires proprietary software.
build-auxiliary: *-oracle_*
custom-builds: default; Requires proprietary software.
custom-builds: &( +linux &gcc ); Only test on Linux with main compiler.
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-build-config:
\
{
  config.odb_tests.oracle.user=$getenv(DATABASE_USER)
  config.odb_tests.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.oracle.host=$getenv(DATABASE_HOST)
  config.odb_tests.oracle.port=$getenv(DATABASE_PORT)
  config.odb_tests.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-tests

{
  config.odb_examples.oracle.user=$getenv(DATABASE_USER)
  config.odb_examples.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.oracle.host=$getenv(DATABASE_HOST)
  config.odb_examples.oracle.port=$getenv(DATABASE_PORT)
  config.odb_examples.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-examples

# Configure odb-{tests,examples} packages' dependency libodb as system on the
# bpkg.test-separate-installed.configure.build step, since it is already
# installed as a dependency of libodb-oracle.
#
{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
custom-multi-builds: default; Requires proprietary software.
custom-multi-builds: &( +linux &gcc ); Only test on Linux with main compiler.
custom-multi-builds: -static; Implementation uses plugins and requires -fPIC.
custom-multi-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-build-config:
\
{
  config.odb_tests.multi_database=true

  config.odb_tests.oracle.user=$getenv(DATABASE_USER)
  config.odb_tests.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.oracle.host=$getenv(DATABASE_HOST)
  config.odb_tests.oracle.port=$getenv(DATABASE_PORT)
  config.odb_tests.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-tests

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
boost-custom-builds: default; Requires proprietary software.
boost-custom-builds: &( +linux &gcc ); Only test on Linux with main compiler.
boost-custom-builds: -static; Implementation uses plugins and requires -fPIC.
boost-custom-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
boost-custom-build-config:
\
{
  config.odb_tests.boost=true

  config.odb_tests.oracle.user=$getenv(DATABASE_USER)
  config.odb_tests.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.oracle.host=$getenv(DATABASE_HOST)
  config.odb_tests.oracle.port=$getenv(DATABASE_PORT)
  config.odb_tests.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-tests

{
  config.odb_examples.boost=true

  config.odb_examples.oracle.user=$getenv(DATABASE_USER)
  config.odb_examples.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.oracle.host=$getenv(DATABASE_HOST)
  config.odb_examples.oracle.port=$getenv(DATABASE_PORT)
  config.odb_examples.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt5-custom-builds: default; Requires proprietary software.
qt5-custom-builds: &( +linux &gcc ); Only test on Linux with main compiler.
qt5-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-custom-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt5-custom-build-config:
\
{
  config.odb_tests.qt=5

  config.odb_tests.oracle.user=$getenv(DATABASE_USER)
  config.odb_tests.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.oracle.host=$getenv(DATABASE_HOST)
  config.odb_tests.oracle.port=$getenv(DATABASE_PORT)
  config.odb_tests.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-tests

{
  config.odb_examples.qt=5

  config.odb_examples.oracle.user=$getenv(DATABASE_USER)
  config.odb_examples.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.oracle.host=$getenv(DATABASE_HOST)
  config.odb_examples.oracle.port=$getenv(DATABASE_PORT)
  config.odb_examples.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt6-custom-builds: default; Requires proprietary software.
qt6-custom-builds: &( +linux &gcc ); Only test on Linux with main compiler.
qt6-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-custom-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt6-custom-build-config:
\
{
  config.odb_tests.qt=6

  config.odb_tests.oracle.user=$getenv(DATABASE_USER)
  config.odb_tests.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_tests.oracle.host=$getenv(DATABASE_HOST)
  config.odb_tests.oracle.port=$getenv(DATABASE_PORT)
  config.odb_tests.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-tests

{
  config.odb_examples.qt=6

  config.odb_examples.oracle.user=$getenv(DATABASE_USER)
  config.odb_examples.oracle.passwd=$getenv(DATABASE_PASSWORD)
  config.odb_examples.oracle.host=$getenv(DATABASE_HOST)
  config.odb_examples.oracle.port=$getenv(DATABASE_PORT)
  config.odb_examples.oracle.service=$getenv(DATABASE_SERVICE)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : ODB NCUEL; see accompanying LICENSE file

project = libodb-oracle

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : ODB NCUEL; see accompanying LICENSE file

config [bool] config.libodb_oracle.develop ?= false

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-oracle-2.5.0.tar.gz
sha256sum: e1e95a85adc9b336f645ed21685e35a47da1a8ce4de96fa689a656851df6be39
:
name: libodb-pgsql
version: 2.5.0
project: odb
summary: PostgreSQL ODB runtime library
license: GPL-2.0-only
license: other: proprietary; Not free/open source.
topics: C++, ORM, PostgreSQL, SQL
description:
\
# libodb-pgsql - PostgreSQL ODB runtime library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the PostgreSQL ODB runtime library. Applications that
include code generated for the PostgreSQL database will need to link this
library.

This runtime library in turn depends on `libpq`, PostgreSQL client library.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libpq >= 7.4.0
depends: psql >= 7.4.0 ? ($config.libodb_pgsql.psql)
depends: libodb == 2.5.0
depends: * cli ^1.2.0 ? ($config.libodb_pgsql.develop)
requires: c++11
tests: odb-tests == 2.5.0 ? (!$defined(config.odb_tests.database))\
 config.odb_tests.database=pgsql
examples: odb-examples == 2.5.0 ? (!$defined(config.odb_examples.database))\
 config.odb_examples.database=pgsql
build-auxiliary: *-postgresql_*
default-builds: all
default-builds: -wasm
default-build-config:
\
{
  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

# Configure odb-{tests,examples} packages' dependencies libodb and libpq as
# system on the bpkg.test-separate-installed.configure.build step, since they
# are already installed as dependencies of libodb-pqsql.
#
{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
multi-builds: all
multi-builds: -wasm
multi-builds: -( +windows -gcc ); Requires MinGW GCC.
multi-builds: &gcc; Requires GCC with plugin support enabled.
multi-builds: &gcc-5+; Requires GCC 5 or later.
multi-builds: -static; Implementation uses plugins and requires -fPIC.
multi-build-config:
\
{
  config.odb_tests.multi_database=true

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
custom-builds: default; Requires default config with GCC as host compiler.
custom-builds: -wasm
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-build-config:
\
{
  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
custom-multi-builds: default; Requires default config with GCC as host\
 compiler.
custom-multi-builds: -wasm
custom-multi-builds: -static; Implementation uses plugins and requires -fPIC.
custom-multi-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-build-config:
\
{
  config.odb_tests.multi_database=true

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
boost-default-builds: default
boost-default-builds: -wasm
boost-default-builds: -( +windows -gcc ); Requires MinGW GCC.
boost-default-builds: &gcc; Requires GCC with plugin support enabled.
boost-default-builds: &gcc-5+; Requires GCC 5 or later.
boost-default-builds: -static; Implementation uses plugins and requires -fPIC.
boost-default-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-default-build-config:
\
{
  config.odb_tests.boost=true

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.boost=true

  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
qt5-default-builds: default
qt5-default-builds: -wasm
qt5-default-builds: -( +windows -gcc ); Requires MinGW GCC.
qt5-default-builds: &gcc; Requires GCC with plugin support enabled.
qt5-default-builds: &gcc-5+; Requires GCC 5 or later.
qt5-default-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-default-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-default-build-config:
\
{
  config.odb_tests.qt=5

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=5

  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
qt6-default-builds: default
qt6-default-builds: -wasm
qt6-default-builds: -( +windows -gcc ); Requires MinGW GCC.
qt6-default-builds: &gcc; Requires GCC with plugin support enabled.
qt6-default-builds: &gcc-5+; Requires GCC 5 or later.
qt6-default-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-default-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-default-build-config:
\
{
  config.odb_tests.qt=6

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=6

  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
boost-custom-builds: default; Requires default config with GCC as host\
 compiler.
boost-custom-builds: -wasm
boost-custom-builds: -static; Implementation uses plugins and requires -fPIC.
boost-custom-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
boost-custom-build-config:
\
{
  config.odb_tests.boost=true

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.boost=true

  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
qt5-custom-builds: default; Requires default config with GCC as host compiler.
qt5-custom-builds: -wasm
qt5-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-custom-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt5-custom-build-config:
\
{
  config.odb_tests.qt=5

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=5

  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
qt6-custom-builds: default; Requires default config with GCC as host compiler.
qt6-custom-builds: -wasm
qt6-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-custom-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt6-custom-build-config:
\
{
  config.odb_tests.qt=6

  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.qt=6

  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libpq
?sys:psql

{
  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libpq
?sys:psql

{
  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-msvc**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=full
bpkg.bindist.archive:--recursive=?libodb=separate

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11

{ config.libodb_pgsql.psql=true }+ libodb-pgsql

{
  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-msvc**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=full
bpkg.bindist.archive:--recursive=?libodb=separate

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
bpkg.create:config.bin.lib.suffix=D
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.test-installed.create:config.cc.coptions="/W2 /MDd"
b.test-installed.create:config.import.libodb_pgsql.odb_pgsql.lib=odb-pgsqlD
bpkg.test-separate-installed.create:config.cc.coptions="/W2 /MDd"
bpkg.test-separate-installed.create:config.import.libodb_pgsql.odb_pgsql.lib=\
odb-pgsqlD
bpkg.test-separate-installed.create:config.import.libodb.odb.lib=odbD
bpkg.test-separate-installed.create:config.import.libpq.pq.lib=pqD
b.create:config.cxx.std=c++11

{
  config.odb_tests.pgsql.user=$getenv(DATABASE_USER)
  config.odb_tests.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_tests.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_tests.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-tests

{
  config.odb_examples.pgsql.user=$getenv(DATABASE_USER)
  config.odb_examples.pgsql.database=$getenv(DATABASE_NAME)
  config.odb_examples.pgsql.host=$getenv(DATABASE_HOST)
  config.odb_examples.pgsql.port=$getenv(DATABASE_PORT)
}+ odb-examples

{
  --config-uuid=00000000-0000-0000-0000-000000000005
}+ { ?sys:libodb/* ?sys:libpq/* }
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2; see accompanying LICENSE file

project = libodb-pgsql

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2; see accompanying LICENSE file

config [bool] config.libodb_pgsql.develop ?= false

# Enable the dependency on the psql package to, for example, ease its bundling
# into the binary distribution package (see the bindist-windows-* package
# build configurations hack for the use case).
#
config [bool] config.libodb_pgsql.psql ?= false

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-pgsql-2.5.0.tar.gz
sha256sum: f6e63db4a2f77604f48115f64c74a5854ca20f03f208568966693e95712a3e17
:
name: libodb-qt
version: 2.5.0
project: odb
summary: Qt ODB profile library
license: GPL-2.0-only
license: other: proprietary; Not free/open source.
topics: C++, ORM, Qt, SQL
description:
\
# libodb-qt - Qt ODB profile library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the Qt ODB profile library. The Qt profile provides
support for persisting Qt smart pointers, containers, and value types. Note
that both Qt5 and Qt6 are supported.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libodb == 2.5.0
requires: c++11
builds: all
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-msvc**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-msvc**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
bpkg.create:config.bin.lib.suffix=D
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.test-installed.create:config.cc.coptions="/W2 /MDd"
b.test-installed.create:config.import.libodb_qt.odb_qt.lib=odb-qtD
b.create:config.cxx.std=c++11
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2; see accompanying LICENSE file

project = libodb-qt

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-qt-2.5.0.tar.gz
sha256sum: 9456c6afdd966b189ece0e0e3486317fe2506a2590da24fbdf81e71b8d5ed130
:
name: libodb-sqlite
version: 2.5.0
project: odb
summary: SQLite ODB runtime library
license: GPL-2.0-only
license: other: proprietary; Not free/open source.
topics: C++, ORM, SQLite, SQL
description:
\
# libodb-sqlite - SQLite ODB runtime library

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the SQLite ODB runtime library. Applications that
include code generated for the SQLite database will need to link this library.

This runtime library in turn depends on `libsqlite3`, SQLite client library.

If you plan to access an SQLite database from multiple threads, then you will
need SQLite version `3.5.0` or later built with the unlock notify feature
(`SQLITE_ENABLE_UNLOCK_NOTIFY`) enabled.

If you plant to use SQLite incremental BLOB/TEXT I/O support, then you will
need SQLite version `3.4.0` or later built with the column metadata functions
(`SQLITE_ENABLE_COLUMN_METADATA`) enabled.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libsqlite3 ^3.6.18
depends: sqlite3 ^3.6.18 ? ($config.libodb_sqlite.sqlite3)
depends: libodb == 2.5.0
depends: * cli ^1.2.0 ? ($config.libodb_sqlite.develop)
requires: c++11
tests: odb-tests == 2.5.0 ? (!$defined(config.odb_tests.database))\
 config.odb_tests.database=sqlite
examples: odb-examples == 2.5.0 ? (!$defined(config.odb_examples.database))\
 config.odb_examples.database=sqlite
builds: all
default-build-config: { --config-uuid=00000000-0000-0000-0000-000000000005 }+\
 ?sys:libodb/*
multi-builds: all
multi-builds: -( +windows -gcc ); Requires MinGW GCC.
multi-builds: &gcc; Requires GCC with plugin support enabled.
multi-builds: &gcc-5+; Requires GCC 5 or later.
multi-builds: -static; Implementation uses plugins and requires -fPIC.
multi-build-config:
\
{ config.odb_tests.multi_database=true }+ odb-tests

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
custom-builds: default; Requires default config with GCC as host compiler.
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-build-config: { --config-uuid=00000000-0000-0000-0000-000000000005 }+\
 ?sys:libodb/*
custom-multi-builds: default; Requires default config with GCC as host\
 compiler.
custom-multi-builds: -static; Implementation uses plugins and requires -fPIC.
custom-multi-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-build-config:
\
{ config.odb_tests.multi_database=true }+ odb-tests

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
boost-default-builds: default
boost-default-builds: -( +windows -gcc ); Requires MinGW GCC.
boost-default-builds: &gcc; Requires GCC with plugin support enabled.
boost-default-builds: &gcc-5+; Requires GCC 5 or later.
boost-default-builds: -static; Implementation uses plugins and requires -fPIC.
boost-default-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-default-build-config:
\
{ config.odb_tests.boost=true    }+ odb-tests
{ config.odb_examples.boost=true }+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt5-default-builds: default
qt5-default-builds: -( +windows -gcc ); Requires MinGW GCC.
qt5-default-builds: &gcc; Requires GCC with plugin support enabled.
qt5-default-builds: &gcc-5+; Requires GCC 5 or later.
qt5-default-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-default-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-default-build-config:
\
{ config.odb_tests.qt=5    }+ odb-tests
{ config.odb_examples.qt=5 }+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt6-default-builds: default
qt6-default-builds: -( +windows -gcc ); Requires MinGW GCC.
qt6-default-builds: &gcc; Requires GCC with plugin support enabled.
qt6-default-builds: &gcc-5+; Requires GCC 5 or later.
qt6-default-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-default-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-default-build-config:
\
{ config.odb_tests.qt=6    }+ odb-tests
{ config.odb_examples.qt=6 }+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
boost-custom-builds: default; Requires default config with GCC as host\
 compiler.
boost-custom-builds: -static; Implementation uses plugins and requires -fPIC.
boost-custom-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
boost-custom-build-config:
\
{ config.odb_tests.boost=true    }+ odb-tests
{ config.odb_examples.boost=true }+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt5-custom-builds: default; Requires default config with GCC as host compiler.
qt5-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-custom-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt5-custom-build-config:
\
{ config.odb_tests.qt=5    }+ odb-tests
{ config.odb_examples.qt=5 }+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
qt6-custom-builds: default; Requires default config with GCC as host compiler.
qt6-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-custom-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt6-custom-build-config:
\
{ config.odb_tests.qt=6    }+ odb-tests
{ config.odb_examples.qt=6 }+ odb-examples

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libsqlite3

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libsqlite3

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-msvc**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=full
bpkg.bindist.archive:--recursive=?libodb=separate

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11

{ config.libodb_sqlite.sqlite3=true }+ libodb-sqlite

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-msvc**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=full
bpkg.bindist.archive:--recursive=?libodb=separate

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
bpkg.create:config.bin.lib.suffix=D
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.test-installed.create:config.cc.coptions="/W2 /MDd"
b.test-installed.create:config.import.libodb_sqlite.odb_sqlite.lib=odb-sqliteD
bpkg.test-separate-installed.create:config.cc.coptions="/W2 /MDd"
bpkg.test-separate-installed.create:config.import.libodb_sqlite.odb_sqlite.li\
b=odb-sqliteD
bpkg.test-separate-installed.create:config.import.libodb.odb.lib=odbD
b.create:config.cxx.std=c++11

{ --config-uuid=00000000-0000-0000-0000-000000000005 }+ ?sys:libodb/*
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2; see accompanying LICENSE file

project = libodb-sqlite

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2; see accompanying LICENSE file

config [bool] config.libodb_sqlite.develop ?= false

# Enable the dependency on the sqlite3 package to, for example, ease its
# bundling into the binary distribution package (see the bindist-windows-*
# package build configurations hack for the use case).
#
config [bool] config.libodb_sqlite.sqlite3 ?= false

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: odb/libodb-sqlite-2.5.0.tar.gz
sha256sum: b28ab73a902554bba6eb9ba6f4c9099d1e15826de7a1fa4fba6451a410856fbd
:
name: libopengl-meta
version: 1.0.0+1
project: libopengl-meta
summary: Meta package for OpenGL.
license: MIT
topics: C++, OpenGL
description:
\
# OpenGL Build2 Package

[![build2](https://github.com/build2-packaging/opengl-meta/actions/workflows/\
build2.yml/badge.svg)](https://github.com/build2-packaging/opengl-meta/action\
s/workflows/build2.yml)

This project defines a build2 meta package for including OpenGL into your\
 build2 project. It only sets the linker flags as needed by your platform and\
 does not compile any actual code.

The packaging code is licensed under the MIT License.

## Usage

You can simply add this package as dependency to your project by specifying\
 it in your `manifest`:

```
depends: libopengl-meta ^1.0.0
```

Then just pick the targets that you need:

```
# just OpenGL
import opengl_gl_libs = libopengl-meta%lib{opengl-gl}
# OpenGL GLU
import opengl_glu_libs = libopengl-meta%lib{opengl-glu}
# OpenGL GLUT
import opengl_glut_libs = libopengl-meta%lib{opengl-glut}
# OpenGL EGL
import opengl_egl_libs = libopengl-meta%lib{opengl-egl}
# OpenGL GLES
import opengl_gles_libs = libopengl-meta%lib{opengl-gles}
```

\
description-type: text/markdown;variant=GFM
url: https://www.opengl.org/
doc-url: https://www.khronos.org/opengl/
package-url: https://github.com/build2-packaging/libopengl-meta
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
examples: libopengl-meta-examples == 1.0.0
builds: default
bootstrap-build:
\
project = libopengl-meta

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: libopengl-meta/libopengl-meta-1.0.0+1.tar.gz
sha256sum: bf74f5dfa6646cfbd111693939b732bea8a23f2af3ba9f71078196b99ae6f316
:
name: libopengl-meta-examples
version: 1.0.0+1
project: libopengl-meta
summary: Examples on how to use the libopengl-meta package.
license: MIT
topics: C++, OpenGL
description:
\
# OpenGL Examples

[![build2](https://github.com/build2-packaging/vulkan-meta/actions/workflows/\
build2.yml/badge.svg)](https://github.com/build2-packaging/vulkan-meta/action\
s/workflows/build2.yml)

This project defines examples using the `libopengl-meta` packages.

The packaging code is licensed under the MIT License.

\
description-type: text/markdown;variant=GFM
url: https://www.opengl.org/
doc-url: https://www.khronos.org/opengl/
package-url: https://github.com/build2-packaging/libopengl-meta
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libopengl-meta == 1.0.0
builds: default
bootstrap-build:
\
project = libopengl-meta-examples

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: libopengl-meta/libopengl-meta-examples-1.0.0+1.tar.gz
sha256sum: 28536e5f4613c84726f442888a7556edf238525375620dfdb5553743440b8488
:
name: libpcre2
version: 10.38.0+1
upstream-version: 10.38
project: pcre2
summary: Perl-compatible regular expression library
license: other: PCRE2 LICENCE
description:
\
README file for PCRE2 (Perl-compatible regular expression library)
------------------------------------------------------------------

PCRE2 is a re-working of the original PCRE1 library to provide an entirely new
API. Since its initial release in 2015, there has been further development of
the code and it now differs from PCRE1 in more than just the API. There are\
 new
features, and the internals have been improved. The original PCRE1 library is
now obsolete and should not be used in new projects. The latest release of
PCRE2 is available in .tar.gz, tar.bz2, or .zip form from this GitHub
repository:

https://github.com/PhilipHazel/pcre2/releases

There is a mailing list for discussion about the development of PCRE2 at
pcre2-dev@googlegroups.com. You can subscribe by sending an email to
pcre2-dev+subscribe@googlegroups.com.

You can access the archives and also subscribe or manage your subscription
here:

https://groups.google.com/pcre2-dev

Please read the NEWS file if you are upgrading from a previous release. The
contents of this README file are:

  The PCRE2 APIs
  Documentation for PCRE2
  Contributions by users of PCRE2
  Building PCRE2 on non-Unix-like systems
  Building PCRE2 without using autotools
  Building PCRE2 using autotools
  Retrieving configuration information
  Shared libraries
  Cross-compiling using autotools
  Making new tarballs
  Testing PCRE2
  Character tables
  File manifest


The PCRE2 APIs
--------------

PCRE2 is written in C, and it has its own API. There are three sets of
functions, one for the 8-bit library, which processes strings of bytes, one\
 for
the 16-bit library, which processes strings of 16-bit values, and one for the
32-bit library, which processes strings of 32-bit values. Unlike PCRE1, there
are no C++ wrappers.

The distribution does contain a set of C wrapper functions for the 8-bit
library that are based on the POSIX regular expression API (see the pcre2posix
man page). These are built into a library called libpcre2-posix. Note that\
 this
just provides a POSIX calling interface to PCRE2; the regular expressions
themselves still follow Perl syntax and semantics. The POSIX API is\
 restricted,
and does not give full access to all of PCRE2's facilities.

The header file for the POSIX-style functions is called pcre2posix.h. The
official POSIX name is regex.h, but I did not want to risk possible problems
with existing files of that name by distributing it that way. To use PCRE2\
 with
an existing program that uses the POSIX API, pcre2posix.h will have to be
renamed or pointed at by a link (or the program modified, of course). See the
pcre2posix documentation for more details.


Documentation for PCRE2
-----------------------

If you install PCRE2 in the normal way on a Unix-like system, you will end up
with a set of man pages whose names all start with "pcre2". The one that is
just called "pcre2" lists all the others. In addition to these man pages, the
PCRE2 documentation is supplied in two other forms:

  1. There are files called doc/pcre2.txt, doc/pcre2grep.txt, and
     doc/pcre2test.txt in the source distribution. The first of these is a
     concatenation of the text forms of all the section 3 man pages except the
     listing of pcre2demo.c and those that summarize individual functions. The
     other two are the text forms of the section 1 man pages for the pcre2grep
     and pcre2test commands. These text forms are provided for ease of\
 scanning
     with text editors or similar tools. They are installed in
     <prefix>/share/doc/pcre2, where <prefix> is the installation prefix
     (defaulting to /usr/local).

  2. A set of files containing all the documentation in HTML form, hyperlinked
     in various ways, and rooted in a file called index.html, is distributed\
 in
     doc/html and installed in <prefix>/share/doc/pcre2/html.


Building PCRE2 on non-Unix-like systems
---------------------------------------

For a non-Unix-like system, please read the file NON-AUTOTOOLS-BUILD, though\
 if
your system supports the use of "configure" and "make" you may be able to\
 build
PCRE2 using autotools in the same way as for many Unix-like systems.

PCRE2 can also be configured using CMake, which can be run in various ways
(command line, GUI, etc). This creates Makefiles, solution files, etc. The\
 file
NON-AUTOTOOLS-BUILD has information about CMake.

PCRE2 has been compiled on many different operating systems. It should be
straightforward to build PCRE2 on any system that has a Standard C compiler\
 and
library, because it uses only Standard C functions.


Building PCRE2 without using autotools
--------------------------------------

The use of autotools (in particular, libtool) is problematic in some
environments, even some that are Unix or Unix-like. See the\
 NON-AUTOTOOLS-BUILD
file for ways of building PCRE2 without using autotools.


Building PCRE2 using autotools
------------------------------

The following instructions assume the use of the widely used "configure; make;
make install" (autotools) process.

To build PCRE2 on system that supports autotools, first run the "configure"
command from the PCRE2 distribution directory, with your current directory set
to the directory where you want the files to be created. This command is a
standard GNU "autoconf" configuration script, for which generic instructions
are supplied in the file INSTALL.

Most commonly, people build PCRE2 within its own distribution directory, and\
 in
this case, on many systems, just running "./configure" is sufficient. However,
the usual methods of changing standard defaults are available. For example:

CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local

This command specifies that the C compiler should be run with the flags '-O2
-Wall' instead of the default, and that "make install" should install PCRE2
under /opt/local instead of the default /usr/local.

If you want to build in a different directory, just run "configure" with that
directory as current. For example, suppose you have unpacked the PCRE2 source
into /source/pcre2/pcre2-xxx, but you want to build it in
/build/pcre2/pcre2-xxx:

cd /build/pcre2/pcre2-xxx
/source/pcre2/pcre2-xxx/configure

PCRE2 is written in C and is normally compiled as a C library. However, it is
possible to build it as a C++ library, though the provided building apparatus
does not have any features to support this.

There are some optional features that can be included or omitted from the\
 PCRE2
library. They are also documented in the pcre2build man page.

. By default, both shared and static libraries are built. You can change this
  by adding one of these options to the "configure" command:

  --disable-shared
  --disable-static

  (See also "Shared libraries on Unix-like systems" below.)

. By default, only the 8-bit library is built. If you add --enable-pcre2-16 to
  the "configure" command, the 16-bit library is also built. If you add
  --enable-pcre2-32 to the "configure" command, the 32-bit library is also
  built. If you want only the 16-bit or 32-bit library, use --disable-pcre2-8
  to disable building the 8-bit library.

. If you want to include support for just-in-time (JIT) compiling, which can
  give large performance improvements on certain platforms, add --enable-jit\
 to
  the "configure" command. This support is available only for certain hardware
  architectures. If you try to enable it on an unsupported architecture, there
  will be a compile time error. If in doubt, use --enable-jit=auto, which
  enables JIT only if the current hardware is supported.

. If you are enabling JIT under SELinux environment you may also want to add
  --enable-jit-sealloc, which enables the use of an executable memory\
 allocator
  that is compatible with SELinux. Warning: this allocator is experimental!
  It does not support fork() operation and may crash when no disk space is
  available. This option has no effect if JIT is disabled.

. If you do not want to make use of the default support for UTF-8 Unicode
  character strings in the 8-bit library, UTF-16 Unicode character strings in
  the 16-bit library, or UTF-32 Unicode character strings in the 32-bit
  library, you can add --disable-unicode to the "configure" command. This
  reduces the size of the libraries. It is not possible to configure one
  library with Unicode support, and another without, in the same\
 configuration.
  It is also not possible to use --enable-ebcdic (see below) with Unicode
  support, so if this option is set, you must also use --disable-unicode.

  When Unicode support is available, the use of a UTF encoding still has to be
  enabled by setting the PCRE2_UTF option at run time or starting a pattern
  with (*UTF). When PCRE2 is compiled with Unicode support, its input can only
  either be ASCII or UTF-8/16/32, even when running on EBCDIC platforms.

  As well as supporting UTF strings, Unicode support includes support for the
  \P, \p, and \X sequences that recognize Unicode character properties.
  However, only the basic two-letter properties such as Lu are supported.
  Escape sequences such as \d and \w in patterns do not by default make use of
  Unicode properties, but can be made to do so by setting the PCRE2_UCP option
  or starting a pattern with (*UCP).

. You can build PCRE2 to recognize either CR or LF or the sequence CRLF, or\
 any
  of the preceding, or any of the Unicode newline sequences, or the NUL (zero)
  character as indicating the end of a line. Whatever you specify at build\
 time
  is the default; the caller of PCRE2 can change the selection at run time.\
 The
  default newline indicator is a single LF character (the Unix standard). You
  can specify the default newline indicator by adding --enable-newline-is-cr,
  --enable-newline-is-lf, --enable-newline-is-crlf,
  --enable-newline-is-anycrlf, --enable-newline-is-any, or
  --enable-newline-is-nul to the "configure" command, respectively.

. By default, the sequence \R in a pattern matches any Unicode line ending
  sequence. This is independent of the option specifying what PCRE2 considers
  to be the end of a line (see above). However, the caller of PCRE2 can
  restrict \R to match only CR, LF, or CRLF. You can make this the default by
  adding --enable-bsr-anycrlf to the "configure" command (bsr = "backslash\
 R").

. In a pattern, the escape sequence \C matches a single code unit, even in a
  UTF mode. This can be dangerous because it breaks up multi-code-unit
  characters. You can build PCRE2 with the use of \C permanently locked out by
  adding --enable-never-backslash-C (note the upper case C) to the "configure"
  command. When \C is allowed by the library, individual applications can lock
  it out by calling pcre2_compile() with the PCRE2_NEVER_BACKSLASH_C option.

. PCRE2 has a counter that limits the depth of nesting of parentheses in a
  pattern. This limits the amount of system stack that a pattern uses when it
  is compiled. The default is 250, but you can change it by setting, for
  example,

  --with-parens-nest-limit=500

. PCRE2 has a counter that can be set to limit the amount of computing\
 resource
  it uses when matching a pattern. If the limit is exceeded during a match,\
 the
  match fails. The default is ten million. You can change the default by
  setting, for example,

  --with-match-limit=500000

  on the "configure" command. This is just the default; individual calls to
  pcre2_match() or pcre2_dfa_match() can supply their own value. There is more
  discussion in the pcre2api man page (search for pcre2_set_match_limit).

. There is a separate counter that limits the depth of nested backtracking
  (pcre2_match()) or nested function calls (pcre2_dfa_match()) during a
  matching process, which indirectly limits the amount of heap memory that is
  used, and in the case of pcre2_dfa_match() the amount of stack as well. This
  counter also has a default of ten million, which is essentially "unlimited".
  You can change the default by setting, for example,

  --with-match-limit-depth=5000

  There is more discussion in the pcre2api man page (search for
  pcre2_set_depth_limit).

. You can also set an explicit limit on the amount of heap memory used by
  the pcre2_match() and pcre2_dfa_match() interpreters:

  --with-heap-limit=500

  The units are kibibytes (units of 1024 bytes). This limit does not apply\
 when
  the JIT optimization (which has its own memory control features) is used.
  There is more discussion on the pcre2api man page (search for
  pcre2_set_heap_limit).

. In the 8-bit library, the default maximum compiled pattern size is around
  64 kibibytes. You can increase this by adding --with-link-size=3 to the
  "configure" command. PCRE2 then uses three bytes instead of two for offsets
  to different parts of the compiled pattern. In the 16-bit library,
  --with-link-size=3 is the same as --with-link-size=4, which (in both
  libraries) uses four-byte offsets. Increasing the internal link size reduces
  performance in the 8-bit and 16-bit libraries. In the 32-bit library, the
  link size setting is ignored, as 4-byte offsets are always used.

. For speed, PCRE2 uses four tables for manipulating and identifying\
 characters
  whose code point values are less than 256. By default, it uses a set of
  tables for ASCII encoding that is part of the distribution. If you specify

  --enable-rebuild-chartables

  a program called pcre2_dftables is compiled and run in the default C locale
  when you obey "make". It builds a source file called pcre2_chartables.c. If
  you do not specify this option, pcre2_chartables.c is created as a copy of
  pcre2_chartables.c.dist. See "Character tables" below for further
  information.

. It is possible to compile PCRE2 for use on systems that use EBCDIC as their
  character code (as opposed to ASCII/Unicode) by specifying

  --enable-ebcdic --disable-unicode

  This automatically implies --enable-rebuild-chartables (see above). However,
  when PCRE2 is built this way, it always operates in EBCDIC. It cannot\
 support
  both EBCDIC and UTF-8/16/32. There is a second option, --enable-ebcdic-nl25,
  which specifies that the code value for the EBCDIC NL character is 0x25
  instead of the default 0x15.

. If you specify --enable-debug, additional debugging code is included in the
  build. This option is intended for use by the PCRE2 maintainers.

. In environments where valgrind is installed, if you specify

  --enable-valgrind

  PCRE2 will use valgrind annotations to mark certain memory regions as
  unaddressable. This allows it to detect invalid memory accesses, and is
  mostly useful for debugging PCRE2 itself.

. In environments where the gcc compiler is used and lcov is installed, if you
  specify

  --enable-coverage

  the build process implements a code coverage report for the test suite. The
  report is generated by running "make coverage". If ccache is installed on
  your system, it must be disabled when building PCRE2 for coverage reporting.
  You can do this by setting the environment variable CCACHE_DISABLE=1 before
  running "make" to build PCRE2. There is more information about coverage
  reporting in the "pcre2build" documentation.

. When JIT support is enabled, pcre2grep automatically makes use of it, unless
  you add --disable-pcre2grep-jit to the "configure" command.

. There is support for calling external programs during matching in the
  pcre2grep command, using PCRE2's callout facility with string arguments.\
 This
  support can be disabled by adding --disable-pcre2grep-callout to the
  "configure" command. There are two kinds of callout: one that generates
  output from inbuilt code, and another that calls an external program. The
  latter has special support for Windows and VMS; otherwise it assumes the
  existence of the fork() function. This facility can be disabled by adding
  --disable-pcre2grep-callout-fork to the "configure" command.

. The pcre2grep program currently supports only 8-bit data files, and so
  requires the 8-bit PCRE2 library. It is possible to compile pcre2grep to use
  libz and/or libbz2, in order to read .gz and .bz2 files (respectively), by
  specifying one or both of

  --enable-pcre2grep-libz
  --enable-pcre2grep-libbz2

  Of course, the relevant libraries must be installed on your system.

. The default starting size (in bytes) of the internal buffer used by\
 pcre2grep
  can be set by, for example:

  --with-pcre2grep-bufsize=51200

  The value must be a plain integer. The default is 20480. The amount of\
 memory
  used by pcre2grep is actually three times this number, to allow for "before"
  and "after" lines. If very long lines are encountered, the buffer is
  automatically enlarged, up to a fixed maximum size.

. The default maximum size of pcre2grep's internal buffer can be set by, for
  example:

  --with-pcre2grep-max-bufsize=2097152

  The default is either 1048576 or the value of --with-pcre2grep-bufsize,
  whichever is the larger.

. It is possible to compile pcre2test so that it links with the libreadline
  or libedit libraries, by specifying, respectively,

  --enable-pcre2test-libreadline or --enable-pcre2test-libedit

  If this is done, when pcre2test's input is from a terminal, it reads it\
 using
  the readline() function. This provides line-editing and history facilities.
  Note that libreadline is GPL-licenced, so if you distribute a binary of
  pcre2test linked in this way, there may be licensing issues. These can be
  avoided by linking with libedit (which has a BSD licence) instead.

  Enabling libreadline causes the -lreadline option to be added to the
  pcre2test build. In many operating environments with a sytem-installed
  readline library this is sufficient. However, in some environments (e.g. if
  an unmodified distribution version of readline is in use), it may be
  necessary to specify something like LIBS="-lncurses" as well. This is
  because, to quote the readline INSTALL, "Readline uses the termcap\
 functions,
  but does not link with the termcap or curses library itself, allowing
  applications which link with readline the to choose an appropriate library."
  If you get error messages about missing functions tgetstr, tgetent, tputs,
  tgetflag, or tgoto, this is the problem, and linking with the ncurses\
 library
  should fix it.

. The C99 standard defines formatting modifiers z and t for size_t and
  ptrdiff_t values, respectively. By default, PCRE2 uses these modifiers in
  environments other than Microsoft Visual Studio when __STDC_VERSION__ is
  defined and has a value greater than or equal to 199901L (indicating C99).
  However, there is at least one environment that claims to be C99 but does\
 not
  support these modifiers. If --disable-percent-zt is specified, no use is\
 made
  of the z or t modifiers. Instead of %td or %zu, %lu is used, with a cast for
  size_t values.

. There is a special option called --enable-fuzz-support for use by people who
  want to run fuzzing tests on PCRE2. At present this applies only to the\
 8-bit
  library. If set, it causes an extra library called libpcre2-fuzzsupport.a to
  be built, but not installed. This contains a single function called
  LLVMFuzzerTestOneInput() whose arguments are a pointer to a string and the
  length of the string. When called, this function tries to compile the string
  as a pattern, and if that succeeds, to match it. This is done both with no
  options and with some random options bits that are generated from the\
 string.
  Setting --enable-fuzz-support also causes a binary called pcre2fuzzcheck to
  be created. This is normally run under valgrind or used when PCRE2 is
  compiled with address sanitizing enabled. It calls the fuzzing function and
  outputs information about it is doing. The input strings are specified by
  arguments: if an argument starts with "=" the rest of it is a literal input
  string. Otherwise, it is assumed to be a file name, and the contents of the
  file are the test string.

. Releases before 10.30 could be compiled with --disable-stack-for-recursion,
  which caused pcre2_match() to use individual blocks on the heap for
  backtracking instead of recursive function calls (which use the stack). This
  is now obsolete since pcre2_match() was refactored always to use the heap\
 (in
  a much more efficient way than before). This option is retained for\
 backwards
  compatibility, but has no effect other than to output a warning.

The "configure" script builds the following files for the basic C library:

. Makefile             the makefile that builds the library
. src/config.h         build-time configuration options for the library
. src/pcre2.h          the public PCRE2 header file
. pcre2-config          script that shows the building settings such as CFLAGS
                         that were set for "configure"
. libpcre2-8.pc        )
. libpcre2-16.pc       ) data for the pkg-config command
. libpcre2-32.pc       )
. libpcre2-posix.pc    )
. libtool              script that builds shared and/or static libraries

Versions of config.h and pcre2.h are distributed in the src directory of PCRE2
tarballs under the names config.h.generic and pcre2.h.generic. These are
provided for those who have to build PCRE2 without using "configure" or CMake.
If you use "configure" or CMake, the .generic versions are not used.

The "configure" script also creates config.status, which is an executable
script that can be run to recreate the configuration, and config.log, which
contains compiler output from tests that "configure" runs.

Once "configure" has run, you can run "make". This builds whichever of the
libraries libpcre2-8, libpcre2-16 and libpcre2-32 are configured, and a test
program called pcre2test. If you enabled JIT support with --enable-jit,\
 another
test program called pcre2_jit_test is built as well. If the 8-bit library is
built, libpcre2-posix and the pcre2grep command are also built. Running
"make" with the -j option may speed up compilation on multiprocessor systems.

The command "make check" runs all the appropriate tests. Details of the PCRE2
tests are given below in a separate section of this document. The -j option of
"make" can also be used when running the tests.

You can use "make install" to install PCRE2 into live directories on your
system. The following are installed (file names are all relative to the
<prefix> that is set when "configure" is run):

  Commands (bin):
    pcre2test
    pcre2grep (if 8-bit support is enabled)
    pcre2-config

  Libraries (lib):
    libpcre2-8      (if 8-bit support is enabled)
    libpcre2-16     (if 16-bit support is enabled)
    libpcre2-32     (if 32-bit support is enabled)
    libpcre2-posix  (if 8-bit support is enabled)

  Configuration information (lib/pkgconfig):
    libpcre2-8.pc
    libpcre2-16.pc
    libpcre2-32.pc
    libpcre2-posix.pc

  Header files (include):
    pcre2.h
    pcre2posix.h

  Man pages (share/man/man{1,3}):
    pcre2grep.1
    pcre2test.1
    pcre2-config.1
    pcre2.3
    pcre2*.3 (lots more pages, all starting "pcre2")

  HTML documentation (share/doc/pcre2/html):
    index.html
    *.html (lots more pages, hyperlinked from index.html)

  Text file documentation (share/doc/pcre2):
    AUTHORS
    COPYING
    ChangeLog
    LICENCE
    NEWS
    README
    pcre2.txt         (a concatenation of the man(3) pages)
    pcre2test.txt     the pcre2test man page
    pcre2grep.txt     the pcre2grep man page
    pcre2-config.txt  the pcre2-config man page

If you want to remove PCRE2 from your system, you can run "make uninstall".
This removes all the files that "make install" installed. However, it does not
remove any directories, because these are often shared with other programs.


Retrieving configuration information
------------------------------------

Running "make install" installs the command pcre2-config, which can be used to
recall information about the PCRE2 configuration and installation. For\
 example:

  pcre2-config --version

prints the version number, and

  pcre2-config --libs8

outputs information about where the 8-bit library is installed. This command
can be included in makefiles for programs that use PCRE2, saving the\
 programmer
from having to remember too many details. Run pcre2-config with no arguments\
 to
obtain a list of possible arguments.

The pkg-config command is another system for saving and retrieving information
about installed libraries. Instead of separate commands for each library, a
single command is used. For example:

  pkg-config --libs libpcre2-16

The data is held in *.pc files that are installed in a directory called
<prefix>/lib/pkgconfig.


Shared libraries
----------------

The default distribution builds PCRE2 as shared libraries and static\
 libraries,
as long as the operating system supports shared libraries. Shared library
support relies on the "libtool" script which is built as part of the
"configure" process.

The libtool script is used to compile and link both shared and static
libraries. They are placed in a subdirectory called .libs when they are newly
built. The programs pcre2test and pcre2grep are built to use these uninstalled
libraries (by means of wrapper scripts in the case of shared libraries). When
you use "make install" to install shared libraries, pcre2grep and pcre2test\
 are
automatically re-built to use the newly installed shared libraries before\
 being
installed themselves. However, the versions left in the build directory still
use the uninstalled libraries.

To build PCRE2 using static libraries only you must use --disable-shared when
configuring it. For example:

./configure --prefix=/usr/gnu --disable-shared

Then run "make" in the usual way. Similarly, you can use --disable-static to
build only shared libraries.


Cross-compiling using autotools
-------------------------------

You can specify CC and CFLAGS in the normal way to the "configure" command, in
order to cross-compile PCRE2 for some other host. However, you should NOT
specify --enable-rebuild-chartables, because if you do, the pcre2_dftables.c
source file is compiled and run on the local host, in order to generate the
inbuilt character tables (the pcre2_chartables.c file). This will probably not
work, because pcre2_dftables.c needs to be compiled with the local compiler,
not the cross compiler.

When --enable-rebuild-chartables is not specified, pcre2_chartables.c is
created by making a copy of pcre2_chartables.c.dist, which is a default set of
tables that assumes ASCII code. Cross-compiling with the default tables should
not be a problem.

If you need to modify the character tables when cross-compiling, you should
move pcre2_chartables.c.dist out of the way, then compile pcre2_dftables.c by
hand and run it on the local host to make a new version of
pcre2_chartables.c.dist. See the pcre2build section "Creating character tables
at build time" for more details.


Making new tarballs
-------------------

The command "make dist" creates two PCRE2 tarballs, in tar.gz and zip formats.
The command "make distcheck" does the same, but then does a trial build of the
new distribution to ensure that it works.

If you have modified any of the man page sources in the doc directory, you
should first run the PrepareRelease script before making a distribution. This
script creates the .txt and HTML forms of the documentation from the man\
 pages.


Testing PCRE2
-------------

To test the basic PCRE2 library on a Unix-like system, run the RunTest script.
There is another script called RunGrepTest that tests the pcre2grep command.
When JIT support is enabled, a third test program called pcre2_jit_test is
built. Both the scripts and all the program tests are run if you obey "make
check". For other environments, see the instructions in NON-AUTOTOOLS-BUILD.

The RunTest script runs the pcre2test test program (which is documented in its
own man page) on each of the relevant testinput files in the testdata
directory, and compares the output with the contents of the corresponding
testoutput files. RunTest uses a file called testtry to hold the main output
from pcre2test. Other files whose names begin with "test" are used as working
files in some tests.

Some tests are relevant only when certain build-time options were selected.\
 For
example, the tests for UTF-8/16/32 features are run only when Unicode support
is available. RunTest outputs a comment when it skips a test.

Many (but not all) of the tests that are not skipped are run twice if JIT
support is available. On the second run, JIT compilation is forced. This
testing can be suppressed by putting "nojit" on the RunTest command line.

The entire set of tests is run once for each of the 8-bit, 16-bit and 32-bit
libraries that are enabled. If you want to run just one set of tests, call
RunTest with either the -8, -16 or -32 option.

If valgrind is installed, you can run the tests under it by putting "valgrind"
on the RunTest command line. To run pcre2test on just one or more specific\
 test
files, give their numbers as arguments to RunTest, for example:

  RunTest 2 7 11

You can also specify ranges of tests such as 3-6 or 3- (meaning 3 to the
end), or a number preceded by ~ to exclude a test. For example:

  Runtest 3-15 ~10

This runs tests 3 to 15, excluding test 10, and just ~13 runs all the tests
except test 13. Whatever order the arguments are in, the tests are always run
in numerical order.

You can also call RunTest with the single argument "list" to cause it to\
 output
a list of tests.

The test sequence starts with "test 0", which is a special test that has no
input file, and whose output is not checked. This is because it will be
different on different hardware and with different configurations. The test
exists in order to exercise some of pcre2test's code that would not otherwise
be run.

Tests 1 and 2 can always be run, as they expect only plain text strings (not
UTF) and make no use of Unicode properties. The first test file can be fed
directly into the perltest.sh script to check that Perl gives the same\
 results.
The only difference you should see is in the first few lines, where the Perl
version is given instead of the PCRE2 version. The second set of tests check
auxiliary functions, error detection, and run-time flags that are specific to
PCRE2. It also uses the debugging flags to check some of the internals of
pcre2_compile().

If you build PCRE2 with a locale setting that is not the standard C locale,\
 the
character tables may be different (see next paragraph). In some cases, this\
 may
cause failures in the second set of tests. For example, in a locale where the
isprint() function yields TRUE for characters in the range 128-255, the use of
[:isascii:] inside a character class defines a different set of characters,\
 and
this shows up in this test as a difference in the compiled code, which is\
 being
listed for checking. For example, where the comparison test output contains
[\x00-\x7f] the test might contain [\x00-\xff], and similarly in some other
cases. This is not a bug in PCRE2.

Test 3 checks pcre2_maketables(), the facility for building a set of character
tables for a specific locale and using them instead of the default tables. The
script uses the "locale" command to check for the availability of the "fr_FR",
"french", or "fr" locale, and uses the first one that it finds. If the\
 "locale"
command fails, or if its output doesn't include "fr_FR", "french", or "fr" in
the list of available locales, the third test cannot be run, and a comment is
output to say why. If running this test produces an error like this:

  ** Failed to set locale "fr_FR"

it means that the given locale is not available on your system, despite being
listed by "locale". This does not mean that PCRE2 is broken. There are three
alternative output files for the third test, because three different versions
of the French locale have been encountered. The test passes if its output
matches any one of them.

Tests 4 and 5 check UTF and Unicode property support, test 4 being compatible
with the perltest.sh script, and test 5 checking PCRE2-specific things.

Tests 6 and 7 check the pcre2_dfa_match() alternative matching function, in
non-UTF mode and UTF-mode with Unicode property support, respectively.

Test 8 checks some internal offsets and code size features, but it is run only
when Unicode support is enabled. The output is different in 8-bit, 16-bit, and
32-bit modes and for different link sizes, so there are different output files
for each mode and link size.

Tests 9 and 10 are run only in 8-bit mode, and tests 11 and 12 are run only in
16-bit and 32-bit modes. These are tests that generate different output in
8-bit mode. Each pair are for general cases and Unicode support, respectively.

Test 13 checks the handling of non-UTF characters greater than 255 by
pcre2_dfa_match() in 16-bit and 32-bit modes.

Test 14 contains some special UTF and UCP tests that give different output for
different code unit widths.

Test 15 contains a number of tests that must not be run with JIT. They check,
among other non-JIT things, the match-limiting features of the intepretive
matcher.

Test 16 is run only when JIT support is not available. It checks that an
attempt to use JIT has the expected behaviour.

Test 17 is run only when JIT support is available. It checks JIT complete and
partial modes, match-limiting under JIT, and other JIT-specific features.

Tests 18 and 19 are run only in 8-bit mode. They check the POSIX interface to
the 8-bit library, without and with Unicode support, respectively.

Test 20 checks the serialization functions by writing a set of compiled
patterns to a file, and then reloading and checking them.

Tests 21 and 22 test \C support when the use of \C is not locked out, without
and with UTF support, respectively. Test 23 tests \C when it is locked out.

Tests 24 and 25 test the experimental pattern conversion functions, without\
 and
with UTF support, respectively.


Character tables
----------------

For speed, PCRE2 uses four tables for manipulating and identifying characters
whose code point values are less than 256. By default, a set of tables that is
built into the library is used. The pcre2_maketables() function can be called
by an application to create a new set of tables in the current locale. This\
 are
passed to PCRE2 by calling pcre2_set_character_tables() to put a pointer into\
 a
compile context.

The source file called pcre2_chartables.c contains the default set of tables.
By default, this is created as a copy of pcre2_chartables.c.dist, which
contains tables for ASCII coding. However, if --enable-rebuild-chartables is
specified for ./configure, a new version of pcre2_chartables.c is built by the
program pcre2_dftables (compiled from pcre2_dftables.c), which uses the ANSI C
character handling functions such as isalnum(), isalpha(), isupper(),
islower(), etc. to build the table sources. This means that the default C
locale that is set for your system will control the contents of these default
tables. You can change the default tables by editing pcre2_chartables.c and
then re-building PCRE2. If you do this, you should take care to ensure that\
 the
file does not get automatically re-generated. The best way to do this is to
move pcre2_chartables.c.dist out of the way and replace it with your\
 customized
tables.

When the pcre2_dftables program is run as a result of specifying
--enable-rebuild-chartables, it uses the default C locale that is set on your
system. It does not pay attention to the LC_xxx environment variables. In\
 other
words, it uses the system's default locale rather than whatever the compiling
user happens to have set. If you really do want to build a source set of
character tables in a locale that is specified by the LC_xxx variables, you\
 can
run the pcre2_dftables program by hand with the -L option. For example:

  ./pcre2_dftables -L pcre2_chartables.c.special

The second argument names the file where the source code for the tables is
written. The first two 256-byte tables provide lower casing and case flipping
functions, respectively. The next table consists of a number of 32-byte bit
maps which identify certain character classes such as digits, "word"
characters, white space, etc. These are used when building 32-byte bit maps
that represent character classes for code points less than 256. The final
256-byte table has bits indicating various character types, as follows:

    1   white space character
    2   letter
    4   lower case letter
    8   decimal digit
   16   alphanumeric or '_'

You can also specify -b (with or without -L) when running pcre2_dftables. This
causes the tables to be written in binary instead of as source code. A set of
binary tables can be loaded into memory by an application and passed to
pcre2_compile() in the same way as tables created dynamically by calling
pcre2_maketables(). The tables are just a string of bytes, independent of
hardware characteristics such as endianness. This means they can be bundled
with an application that runs in different environments, to ensure consistent
behaviour.

See also the pcre2build section "Creating character tables at build time".


File manifest
-------------

The distribution should contain the files listed below.

(A) Source files for the PCRE2 library functions and their headers are found\
 in
    the src directory:

  src/pcre2_dftables.c     auxiliary program for building pcre2_chartables.c
                           when --enable-rebuild-chartables is specified

  src/pcre2_chartables.c.dist  a default set of character tables that assume
                           ASCII coding; unless --enable-rebuild-chartables is
                           specified, used by copying to pcre2_chartables.c

  src/pcre2posix.c         )
  src/pcre2_auto_possess.c )
  src/pcre2_compile.c      )
  src/pcre2_config.c       )
  src/pcre2_context.c      )
  src/pcre2_convert.c      )
  src/pcre2_dfa_match.c    )
  src/pcre2_error.c        )
  src/pcre2_extuni.c       )
  src/pcre2_find_bracket.c )
  src/pcre2_jit_compile.c  )
  src/pcre2_jit_match.c    ) sources for the functions in the library,
  src/pcre2_jit_misc.c     )   and some internal functions that they use
  src/pcre2_maketables.c   )
  src/pcre2_match.c        )
  src/pcre2_match_data.c   )
  src/pcre2_newline.c      )
  src/pcre2_ord2utf.c      )
  src/pcre2_pattern_info.c )
  src/pcre2_script_run.c   )
  src/pcre2_serialize.c    )
  src/pcre2_string_utils.c )
  src/pcre2_study.c        )
  src/pcre2_substitute.c   )
  src/pcre2_substring.c    )
  src/pcre2_tables.c       )
  src/pcre2_ucd.c          )
  src/pcre2_valid_utf.c    )
  src/pcre2_xclass.c       )

  src/pcre2_printint.c     debugging function that is used by pcre2test,
  src/pcre2_fuzzsupport.c  function for (optional) fuzzing support

  src/config.h.in          template for config.h, when built by "configure"
  src/pcre2.h.in           template for pcre2.h when built by "configure"
  src/pcre2posix.h         header for the external POSIX wrapper API
  src/pcre2_internal.h     header for internal use
  src/pcre2_intmodedep.h   a mode-specific internal header
  src/pcre2_ucp.h          header for Unicode property handling

  sljit/*                  source files for the JIT compiler

(B) Source files for programs that use PCRE2:

  src/pcre2demo.c          simple demonstration of coding calls to PCRE2
  src/pcre2grep.c          source of a grep utility that uses PCRE2
  src/pcre2test.c          comprehensive test program
  src/pcre2_jit_test.c     JIT test program

(C) Auxiliary files:

  132html                  script to turn "man" pages into HTML
  AUTHORS                  information about the author of PCRE2
  ChangeLog                log of changes to the code
  CleanTxt                 script to clean nroff output for txt man pages
  Detrail                  script to remove trailing spaces
  HACKING                  some notes about the internals of PCRE2
  INSTALL                  generic installation instructions
  LICENCE                  conditions for the use of PCRE2
  COPYING                  the same, using GNU's standard name
  Makefile.in              ) template for Unix Makefile, which is built by
                           )   "configure"
  Makefile.am              ) the automake input that was used to create
                           )   Makefile.in
  NEWS                     important changes in this release
  NON-AUTOTOOLS-BUILD      notes on building PCRE2 without using autotools
  PrepareRelease           script to make preparations for "make dist"
  README                   this file
  RunTest                  a Unix shell script for running tests
  RunGrepTest              a Unix shell script for pcre2grep tests
  aclocal.m4               m4 macros (generated by "aclocal")
  config.guess             ) files used by libtool,
  config.sub               )   used only when building a shared library
  configure                a configuring shell script (built by autoconf)
  configure.ac             ) the autoconf input that was used to build
                           )   "configure" and config.h
  depcomp                  ) script to find program dependencies, generated by
                           )   automake
  doc/*.3                  man page sources for PCRE2
  doc/*.1                  man page sources for pcre2grep and pcre2test
  doc/index.html.src       the base HTML page
  doc/html/*               HTML documentation
  doc/pcre2.txt            plain text version of the man pages
  doc/pcre2test.txt        plain text documentation of test program
  install-sh               a shell script for installing files
  libpcre2-8.pc.in         template for libpcre2-8.pc for pkg-config
  libpcre2-16.pc.in        template for libpcre2-16.pc for pkg-config
  libpcre2-32.pc.in        template for libpcre2-32.pc for pkg-config
  libpcre2-posix.pc.in     template for libpcre2-posix.pc for pkg-config
  ltmain.sh                file used to build a libtool script
  missing                  ) common stub for a few missing GNU programs while
                           )   installing, generated by automake
  mkinstalldirs            script for making install directories
  perltest.sh              Script for running a Perl test program
  pcre2-config.in          source of script which retains PCRE2 information
  testdata/testinput*      test data for main library tests
  testdata/testoutput*     expected test results
  testdata/grep*           input and output for pcre2grep tests
  testdata/*               other supporting test files

(D) Auxiliary files for cmake support

  cmake/COPYING-CMAKE-SCRIPTS
  cmake/FindPackageHandleStandardArgs.cmake
  cmake/FindEditline.cmake
  cmake/FindReadline.cmake
  CMakeLists.txt
  config-cmake.h.in

(E) Auxiliary files for building PCRE2 "by hand"

  src/pcre2.h.generic     ) a version of the public PCRE2 header file
                          )   for use in non-"configure" environments
  src/config.h.generic    ) a version of config.h for use in non-"configure"
                          )   environments

Philip Hazel
Email local part: Philip.Hazel
Email domain: gmail.com
Last updated: 27 August 2021

\
description-type: text/plain
url: https://www.pcre.org/
src-url: https://github.com/PhilipHazel/pcre2
email: pcre2-dev@googlegroups.com; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0-
depends: * bpkg >= 0.14.0-
bootstrap-build:
\
project = libpcre2

# Extracted from upstream configure.ac.
#
release_date = 2021-10-01

using version
using config
using test
using install
using dist

\
root-build:
\
using c
using in

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: pcre2/libpcre2-10.38.0+1.tar.gz
sha256sum: 6af3890fa0716c93ccb925e2e3dc0ba35c447d34f409de7bc0944ed559e5e75f
:
name: libpkgconf
version: 1.6.3+4
project: pkgconf
summary: C library for retriving pkg-config compiler and linker flags
license: ISC AND MIT; ISC for the most of original files.
topics: C, build system, build toolchain
description:
\
libpkgconf is a C library which helps to configure compiler and linker flags
for development frameworks. It provides most of the pkgconf's functionality,
which itself is similar to pkg-config. For more information see:

https://git.sr.ht/~kaniini/pkgconf

This package contains the original libpkgconf library source code overlaid\
 with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Post questions, bug reports, or any other feedback about the library itself at
https://todo.sr.ht/~kaniini/pkgconf. Send build system and packaging-related
feedback to the packaging@build2.org mailing list (see
https://lists.build2.org for posting guidelines, etc).

The packaging of libpkgconf for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/pkgconf/

\
description-type: text/plain
url: https://git.sr.ht/~kaniini/pkgconf
doc-url: http://pkgconf.readthedocs.io/en/latest/?badge=latest
src-url: https://git.build2.org/cgit/packaging/pkgconf/pkgconf/tree/libpkgcon\
f/
package-url: https://git.build2.org/cgit/packaging/pkgconf/
email: packaging@build2.org; Report issues at https://todo.sr.ht/~kaniini/pkg\
conf.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : ISC; see accompanying COPYING file

project = libpkgconf

using version
using config
using test
using install
using dist

# The versioning scheme (after 0.9.12) assumes that each [major?] release has
# it's own number (starting with 2). In any case, for the 1.3.90 to 1.4.0
# release version increment the version in the library file name changed from
# 2 to 3 (libpkgconf.so.2.0.0 -> libpkgconf.so.3.0.0). This probably means
# that the first two release version components constitute a major version,
# and the release number increments each time this version changes. So we just
# need to watch their Makefile.am for any changes.
#
# See also: http://kaniini.dereferenced.org/2015/07/20/pkgconf-0-9-12-and-fut\
ure.html
#
# Note that the upstream project didn't increment the release number (3) for
# the 1.5 library version despite the ABI-breaking changes (issue #15 is
# reported).
#
if ($version.major == 1 && $version.minor == 6)
  release_num = 4
else
  fail "increment the release number?"

\
root-build:
\
# file      : build/root.build
# license   : ISC; see accompanying COPYING file

using in

c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: pkgconf/libpkgconf-1.6.3+4.tar.gz
sha256sum: 3a50c4a0204a00fbfa4644f256a74f8211aa3a9d6450ed024ad67d7507a81542
:
name: libpng
version: 1.6.37+1
summary: The official PNG reference C library
license: libpng-2.0; PNG reference library version 2
description:
\
README for libpng version 1.6.37 - April 14, 2019
=================================================

See the note about version numbers near the top of png.h.
See INSTALL for instructions on how to install libpng.

Libpng comes in several distribution formats.  Get libpng-*.tar.gz or
libpng-*.tar.xz or if you want UNIX-style line endings in the text
files, or lpng*.7z or lpng*.zip if you want DOS-style line endings.

Version 0.89 was the first official release of libpng.  Don't let the
fact that it's the first release fool you.  The libpng library has been
in extensive use and testing since mid-1995.  By late 1997 it had
finally gotten to the stage where there hadn't been significant
changes to the API in some time, and people have a bad feeling about
libraries with versions < 1.0.  Version 1.0.0 was released in
March 1998.

****
Note that some of the changes to the png_info structure render this
version of the library binary incompatible with libpng-0.89 or
earlier versions if you are using a shared library.  The type of the
"filler" parameter for png_set_filler() has changed from png_byte to
png_uint_32, which will affect shared-library applications that use
this function.

To avoid problems with changes to the internals of the png info_struct,
new APIs have been made available in 0.95 to avoid direct application
access to info_ptr.  These functions are the png_set_<chunk> and
png_get_<chunk> functions.  These functions should be used when
accessing/storing the info_struct data, rather than manipulating it
directly, to avoid such problems in the future.

It is important to note that the APIs did not make current programs
that access the info struct directly incompatible with the new
library, through libpng-1.2.x.  In libpng-1.4.x, which was meant to
be a transitional release, members of the png_struct and the
info_struct can still be accessed, but the compiler will issue a
warning about deprecated usage.  Since libpng-1.5.0, direct access
to these structs is not allowed, and the definitions of the structs
reside in private pngstruct.h and pnginfo.h header files that are not
accessible to applications.  It is strongly suggested that new
programs use the new APIs (as shown in example.c and pngtest.c), and
older programs be converted to the new format, to facilitate upgrades
in the future.
****

Additions since 0.90 include the ability to compile libpng as a
Windows DLL, and new APIs for accessing data in the info struct.
Experimental functions include the ability to set weighting and cost
factors for row filter selection, direct reads of integers from buffers
on big-endian processors that support misaligned data access, faster
methods of doing alpha composition, and more accurate 16->8 bit color
conversion.

The additions since 0.89 include the ability to read from a PNG stream
which has had some (or all) of the signature bytes read by the calling
application.  This also allows the reading of embedded PNG streams that
do not have the PNG file signature.  As well, it is now possible to set
the library action on the detection of chunk CRC errors.  It is possible
to set different actions based on whether the CRC error occurred in a
critical or an ancillary chunk.

For a detailed description on using libpng, read libpng-manual.txt.
For examples of libpng in a program, see example.c and pngtest.c.  For
usage information and restrictions (what little they are) on libpng,
see png.h.  For a description on using zlib (the compression library
used by libpng) and zlib's restrictions, see zlib.h

I have included a general makefile, as well as several machine and
compiler specific ones, but you may have to modify one for your own
needs.

You should use zlib 1.0.4 or later to run this, but it MAY work with
versions as old as zlib 0.95.  Even so, there are bugs in older zlib
versions which can cause the output of invalid compression streams for
some images.

You should also note that zlib is a compression library that is useful
for more things than just PNG files.  You can use zlib as a drop-in
replacement for fread() and fwrite(), if you are so inclined.

zlib should be available at the same place that libpng is, or at
https://zlib.net.

You may also want a copy of the PNG specification.  It is available
as an RFC, a W3C Recommendation, and an ISO/IEC Standard.  You can find
these at http://www.libpng.org/pub/png/pngdocs.html .

This code is currently being archived at libpng.sourceforge.io in the
[DOWNLOAD] area, and at http://libpng.download/src .

This release, based in a large way on Glenn's, Guy's and Andreas'
earlier work, was created and will be supported by myself and the PNG
development group.

Send comments/corrections/commendations to png-mng-implement at
lists.sourceforge.net (subscription required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe).

Send general questions about the PNG specification to png-mng-misc
at lists.sourceforge.net (subscription required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-misc to
subscribe).

Files in this distribution:

      ANNOUNCE      =>  Announcement of this version, with recent changes
      AUTHORS       =>  List of contributing authors
      CHANGES       =>  Description of changes between libpng versions
      KNOWNBUG      =>  List of known bugs and deficiencies
      LICENSE       =>  License to use and redistribute libpng
      README        =>  This file
      TODO          =>  Things not implemented in the current library
      TRADEMARK     =>  Trademark information
      example.c     =>  Example code for using libpng functions
      libpng.3      =>  manual page for libpng (includes libpng-manual.txt)
      libpng-manual.txt  =>  Description of libpng and its functions
      libpngpf.3    =>  manual page for libpng's private functions
      png.5         =>  manual page for the PNG format
      png.c         =>  Basic interface functions common to library
      png.h         =>  Library function and interface declarations (public)
      pngpriv.h     =>  Library function and interface declarations (private)
      pngconf.h     =>  System specific library configuration (public)
      pngstruct.h   =>  png_struct declaration (private)
      pnginfo.h     =>  png_info struct declaration (private)
      pngdebug.h    =>  debugging macros (private)
      pngerror.c    =>  Error/warning message I/O functions
      pngget.c      =>  Functions for retrieving info from struct
      pngmem.c      =>  Memory handling functions
      pngbar.png    =>  PNG logo, 88x31
      pngnow.png    =>  PNG logo, 98x31
      pngpread.c    =>  Progressive reading functions
      pngread.c     =>  Read data/helper high-level functions
      pngrio.c      =>  Lowest-level data read I/O functions
      pngrtran.c    =>  Read data transformation functions
      pngrutil.c    =>  Read data utility functions
      pngset.c      =>  Functions for storing data into the info_struct
      pngtest.c     =>  Library test program
      pngtest.png   =>  Library test sample image
      pngtrans.c    =>  Common data transformation functions
      pngwio.c      =>  Lowest-level write I/O functions
      pngwrite.c    =>  High-level write functions
      pngwtran.c    =>  Write data transformations
      pngwutil.c    =>  Write utility functions
      arm           =>  Contains optimized code for the ARM platform
      powerpc       =>  Contains optimized code for the PowerPC platform
      contrib       =>  Contributions
       arm-neon         =>  Optimized code for ARM-NEON platform
       powerpc-vsx      =>  Optimized code for POWERPC-VSX platform
       examples         =>  Example programs
       gregbook         =>  source code for PNG reading and writing, from
                            Greg Roelofs' "PNG: The Definitive Guide",
                            O'Reilly, 1999
       libtests         =>  Test programs
       mips-msa         =>  Optimized code for MIPS-MSA platform
       pngminim         =>  Minimal decoder, encoder, and progressive decoder
                            programs demonstrating use of pngusr.dfa
       pngminus         =>  Simple pnm2png and png2pnm programs
       pngsuite         =>  Test images
       testpngs
       tools            =>  Various tools
       visupng          =>  Contains a MSVC workspace for VisualPng
      intel             =>  Optimized code for INTEL-SSE2 platform
      mips              =>  Optimized code for MIPS platform
      projects      =>  Contains project files and workspaces for
                        building a DLL
       owatcom          =>  Contains a WATCOM project for building libpng
       visualc71        =>  Contains a Microsoft Visual C++ (MSVC)
                            workspace for building libpng and zlib
       vstudio          =>  Contains a Microsoft Visual C++ (MSVC)
                            workspace for building libpng and zlib
      scripts       =>  Directory containing scripts for building libpng:
                            (see scripts/README.txt for the list of scripts)

Good luck, and happy coding!

 * Cosmin Truta (current maintainer, since 2018)
 * Glenn Randers-Pehrson (former maintainer, 1998-2018)
 * Andreas Eric Dilger (former maintainer, 1996-1997)
 * Guy Eric Schalnat (original author and former maintainer, 1995-1996)
   (formerly of Group 42, Inc.)

\
description-type: text/plain
changes:
\
CHANGES - changes for libpng

version 0.1 [March 29, 1995]
  initial work-in-progress release

version 0.2 [April 1, 1995]
  added reader into png.h
  fixed small problems in stub file

version 0.3 [April 8, 1995]
  added pull reader
  split up pngwrite.c to several files
  added pnglib.txt
  added example.c
  cleaned up writer, adding a few new transformations
  fixed some bugs in writer
  interfaced with zlib 0.5
  added K&R support
  added check for 64 KB blocks for 16 bit machines

version 0.4 [April 26, 1995]
  cleaned up code and commented code
  simplified time handling into png_time
  created png_color_16 and png_color_8 to handle color needs
  cleaned up color type defines
  fixed various bugs
  made various names more consistent
  interfaced with zlib 0.71
  cleaned up zTXt reader and writer (using zlib's Reset functions)
  split transformations into pngrtran.c and pngwtran.c

version 0.5 [April 30, 1995]
  interfaced with zlib 0.8
  fixed many reading and writing bugs
  saved using 3 spaces instead of tabs

version 0.6 [May 1, 1995]
  first beta release
  added png_large_malloc() and png_large_free()
  added png_size_t
  cleaned up some compiler warnings
  added png_start_read_image()

version 0.7 [June 24, 1995]
  cleaned up lots of bugs
  finished dithering and other stuff
  added test program
  changed name from pnglib to libpng

version 0.71 [June 26, 1995]
  changed pngtest.png for zlib 0.93
  fixed error in libpng.txt and example.c

version 0.8 [August 20, 1995]
  cleaned up some bugs
  added png_set_filler()
  split up pngstub.c into pngmem.c, pngio.c, and pngerror.c
  added #define's to remove unwanted code
  moved png_info_init() to png.c
  added old_size into png_realloc()
  added functions to manually set filtering and compression info
  changed compression parameters based on image type
  optimized filter selection code
  added version info
  changed external functions passing floats to doubles (k&r problems?)
  put all the configurable stuff in pngconf.h
  enabled png_set_shift to work with paletted images on read
  added png_read_update_info() - updates info structure with transformations

Version 0.81 [August, 1995]
  incorporated Tim Wegner's medium model code (thanks, Tim)

Version 0.82 [September, 1995]
  [unspecified changes]

Version 0.85 [December, 1995]
  added more medium model code (almost everything's a far)
  added i/o, error, and memory callback functions
  fixed some bugs (16-bit, 4-bit interlaced, etc.)
  added first run progressive reader (barely tested)

Version 0.86 [January, 1996]
  fixed bugs
  improved documentation

Version 0.87 [January, 1996]
  fixed medium model bugs
  fixed other bugs introduced in 0.85 and 0.86
  added some minor documentation

Version 0.88 [January, 1996]
  fixed progressive bugs
  replaced tabs with spaces
  cleaned up documentation
  added callbacks for read/write and warning/error functions

Version 0.89 [June 5, 1996]
  Added new initialization API to make libpng work better with shared libs
    we now have png_create_read_struct(), png_create_write_struct(),
    png_create_info_struct(), png_destroy_read_struct(), and
    png_destroy_write_struct() instead of the separate calls to
    malloc and png_read_init(), png_info_init(), and png_write_init()
  Changed warning/error callback functions to fix bug - this means you
    should use the new initialization API if you were using the old
    png_set_message_fn() calls, and that the old API no longer exists
    so that people are aware that they need to change their code
  Changed filter selection API to allow selection of multiple filters
    since it didn't work in previous versions of libpng anyways
  Optimized filter selection code
  Fixed png_set_background() to allow using an arbitrary RGB color for
    paletted images
  Fixed gamma and background correction for paletted images, so
    png_correct_palette is not needed unless you are correcting an
    external palette (you will need to #define PNG_CORRECT_PALETTE_SUPPORTED
    in pngconf.h) - if nobody uses this, it may disappear in the future.
  Fixed bug with Borland 64K memory allocation (Alexander Lehmann)
  Fixed bug in interlace handling (Smarasderagd, I think)
  Added more error checking for writing and image to reduce invalid files
  Separated read and write functions so that they won't both be linked
    into a binary when only reading or writing functionality is used
  New pngtest image also has interlacing and zTXt
  Updated documentation to reflect new API

Version 0.89c [June 17, 1996]
  Bug fixes.

Version 0.90 [January, 1997]
  Made CRC errors/warnings on critical and ancillary chunks configurable
  libpng will use the zlib CRC routines by (compile-time) default
  Changed DOS small/medium model memory support - needs zlib 1.04 (Tim Wegner)
  Added external C++ wrapper statements to png.h (Gilles Dauphin)
  Allow PNG file to be read when some or all of file signature has already
    been read from the beginning of the stream.  ****This affects the size
    of info_struct and invalidates all programs that use a shared libpng****
  Fixed png_filler() declarations
  Fixed? background color conversions
  Fixed order of error function pointers to match documentation
  Current chunk name is now available in png_struct to reduce the number
    of nearly identical error messages (will simplify multi-lingual
    support when available)
  Try to get ready for unknown-chunk callback functions:
    - previously read critical chunks are flagged, so the chunk handling
      routines can determine if the chunk is in the right place
    - all chunk handling routines have the same prototypes, so we will
      be able to handle all chunks via a callback mechanism
  Try to fix Linux "setjmp" buffer size problems
  Removed png_large_malloc, png_large_free, and png_realloc functions.

Version 0.95 [March, 1997]
  Fixed bug in pngwutil.c allocating "up_row" twice and "avg_row" never
  Fixed bug in PNG file signature compares when start != 0
  Changed parameter type of png_set_filler(...filler...) from png_byte
    to png_uint_32
  Added test for MACOS to ensure that both math.h and fp.h are not #included
  Added macros for libpng to be compiled as a Windows DLL (Andreas Kupries)
  Added "packswap" transformation, which changes the endianness of
    packed-pixel bytes (Kevin Bracey)
  Added "strip_alpha" transformation, which removes the alpha channel of
    input images without using it (not necessarily a good idea)
  Added "swap_alpha" transformation, which puts the alpha channel in front
    of the color bytes instead of after
  Removed all implicit variable tests which assume NULL == 0 (I think)
  Changed several variables to "png_size_t" to show 16/32-bit limitations
  Added new pCAL chunk read/write support
  Added experimental filter selection weighting (Greg Roelofs)
  Removed old png_set_rgbx() and png_set_xrgb() functions that have been
    obsolete for about 2 years now (use png_set_filler() instead)
  Added macros to read 16- and 32-bit ints directly from buffer, to be
    used only on those systems that support it (namely PowerPC and 680x0)
    With some testing, this may become the default for MACOS/PPC systems.
  Only calculate CRC on data if we are going to use it
  Added macros for zTXt compression type PNG_zTXt_COMPRESSION_???
  Added macros for simple libpng debugging output selectable at compile time
  Removed PNG_READ_END_MODE in progressive reader (Smarasderagd)
  More description of info_struct in libpng.txt and png.h
  More instructions in example.c
  More chunk types tested in pngtest.c
  Renamed pngrcb.c to pngset.c, and all png_read_<chunk> functions to be
    png_set_<chunk>.  We now have corresponding png_get_<chunk>
    functions in pngget.c to get information in info_ptr.  This isolates
    the application from the internal organization of png_info_struct
    (good for shared library implementations).

Version 0.96 [May, 1997]
  Fixed serious bug with < 8bpp images introduced in 0.95
  Fixed 256-color transparency bug (Greg Roelofs)
  Fixed up documentation (Greg Roelofs, Laszlo Nyul)
  Fixed "error" in pngconf.h for Linux setjmp() behavior
  Fixed DOS medium model support (Tim Wegner)
  Fixed png_check_keyword() for case with error in static string text
  Added read of CRC after IEND chunk for embedded PNGs (Laszlo Nyul)
  Added typecasts to quiet compiler errors
  Added more debugging info

Version 0.97 [January, 1998]
  Removed PNG_USE_OWN_CRC capability
  Relocated png_set_crc_action from pngrutil.c to pngrtran.c
  Fixed typecasts of "new_key", etc. (Andreas Dilger)
  Added RFC 1152 [sic] date support
  Fixed bug in gamma handling of 4-bit grayscale
  Added 2-bit grayscale gamma handling (Glenn R-P)
  Added more typecasts. 65536L becomes (png_uint_32)65536L, etc. (Glenn R-P)
  Minor corrections in libpng.txt
  Added simple sRGB support (Glenn R-P)
  Easier conditional compiling, e.g.,
    define PNG_READ/WRITE_NOT_FULLY_SUPPORTED;
    all configurable options can be selected from command-line instead
    of having to edit pngconf.h (Glenn R-P)
  Fixed memory leak in pngwrite.c (free info_ptr->text) (Glenn R-P)
  Added more conditions for png_do_background, to avoid changing
    black pixels to background when a background is supplied and
    no pixels are transparent
  Repaired PNG_NO_STDIO behavior
  Tested NODIV support and made it default behavior (Greg Roelofs)
  Added "-m" option and PNGTEST_DEBUG_MEMORY to pngtest (John Bowler)
  Regularized version numbering scheme and bumped shared-library major
    version number to 2 to avoid problems with libpng 0.89 apps
    (Greg Roelofs)

Version 0.98 [January, 1998]
  Cleaned up some typos in libpng.txt and in code documentation
  Fixed memory leaks in pCAL chunk processing (Glenn R-P and John Bowler)
  Cosmetic change "display_gamma" to "screen_gamma" in pngrtran.c
  Changed recommendation about file_gamma for PC images to .51 from .45,
    in example.c and libpng.txt, added comments to distinguish between
    screen_gamma, viewing_gamma, and display_gamma.
  Changed all references to RFC1152 to read RFC1123 and changed the
    PNG_TIME_RFC1152_SUPPORTED macro to PNG_TIME_RFC1123_SUPPORTED
  Added png_invert_alpha capability (Glenn R-P -- suggestion by Jon Vincent)
  Changed srgb_intent from png_byte to int to avoid compiler bugs

Version 0.99 [January 30, 1998]
  Free info_ptr->text instead of end_info_ptr->text in pngread.c (John Bowler)
  Fixed a longstanding "packswap" bug in pngtrans.c
  Fixed some inconsistencies in pngconf.h that prevented compiling with
    PNG_READ_GAMMA_SUPPORTED and PNG_READ_hIST_SUPPORTED undefined
  Fixed some typos and made other minor rearrangement of libpng.txt (Andreas)
  Changed recommendation about file_gamma for PC images to .50 from .51 in
    example.c and libpng.txt, and changed file_gamma for sRGB images to .45
  Added a number of functions to access information from the png structure
    png_get_image_height(), etc. (Glenn R-P, suggestion by Brad Pettit)
  Added TARGET_MACOS similar to zlib-1.0.8
  Define PNG_ALWAYS_EXTERN when __MWERKS__ && WIN32 are defined
  Added type casting to all png_malloc() function calls

Version 0.99a [January 31, 1998]
  Added type casts and parentheses to all returns that return a value.(Tim W.)

Version 0.99b [February 4, 1998]
  Added type cast png_uint_32 on malloc function calls where needed.
  Changed type of num_hist from png_uint_32 to int (same as num_palette).
  Added checks for rowbytes overflow, in case png_size_t is less than 32 bits.
  Renamed makefile.elf to makefile.lnx.

Version 0.99c [February 7, 1998]
  More type casting.  Removed erroneous overflow test in pngmem.c.
  Added png_buffered_memcpy() and png_buffered_memset(), apply them to\
 rowbytes.
  Added UNIX manual pages libpng.3 (incorporating libpng.txt) and  png.5.

Version 0.99d [February 11, 1998]
  Renamed "far_to_near()" "png_far_to_near()"
  Revised libpng.3
  Version 99c "buffered" operations didn't work as intended.  Replaced them
    with png_memcpy_check() and png_memset_check().
  Added many "if (png_ptr == NULL) return" to quell compiler warnings about
    unused png_ptr, mostly in pngget.c and pngset.c.
  Check for overlength tRNS chunk present when indexed-color PLTE is read.
  Cleaned up spelling errors in libpng.3/libpng.txt
  Corrected a problem with png_get_tRNS() which returned undefined trans array

Version 0.99e [February 28, 1998]
  Corrected png_get_tRNS() again.
  Add parentheses for easier reading of pngget.c, fixed "||" should be "&&".
  Touched up example.c to make more of it compileable, although the entire
    file still can't be compiled (Willem van Schaik)
  Fixed a bug in png_do_shift() (Bryan Tsai)
  Added a space in png.h prototype for png_write_chunk_start()
  Replaced pngtest.png with one created with zlib 1.1.1
  Changed pngtest to report PASS even when file size is different (Jean-loup\
 G.)
  Corrected some logic errors in png_do_invert_alpha() (Chris Patterson)

Version 0.99f [March 5, 1998]
  Corrected a bug in pngpread() introduced in version 99c (Kevin Bracey)
  Moved makefiles into a "scripts" directory, and added INSTALL instruction\
 file
  Added makefile.os2 and pngos2.def (A. Zabolotny) and makefile.s2x (W. Sebok)
  Added pointers to "note on libpng versions" in makefile.lnx and README
  Added row callback feature when reading and writing nonprogressive rows
    and added a test of this feature in pngtest.c
  Added user transform callbacks, with test of the feature in pngtest.c

Version 0.99g [March 6, 1998, morning]
  Minor changes to pngtest.c to suppress compiler warnings.
  Removed "beta" language from documentation.

Version 0.99h [March 6, 1998, evening]
  Minor changes to previous minor changes to pngtest.c
  Changed PNG_READ_NOT_FULLY_SUPPORTED to PNG_READ_TRANSFORMS_NOT_SUPPORTED
    and added PNG_PROGRESSIVE_READ_NOT_SUPPORTED macro
  Added user transform capability

Version 1.00 [March 7, 1998]
  Changed several typedefs in pngrutil.c
  Added makefile.wat (Pawel Mrochen), updated makefile.tc3 (Willem van Schaik)
  Replaced "while(1)" with "for(;;)"
  Added PNGARG() to prototypes in pngtest.c and removed some prototypes
  Updated some of the makefiles (Tom Lane)
  Changed some typedefs (s_start, etc.) in pngrutil.c
  Fixed dimensions of "short_months" array in pngwrite.c
  Replaced ansi2knr.c with the one from jpeg-v6

Version 1.0.0 [March 8, 1998]
  Changed name from 1.00 to 1.0.0 (Adam Costello)
  Added smakefile.ppc (with SCOPTIONS.ppc) for Amiga PPC (Andreas Kleinert)

Version 1.0.0a [March 9, 1998]
  Fixed three bugs in pngrtran.c to make gamma+background handling consistent
    (Greg Roelofs)
  Changed format of the PNG_LIBPNG_VER integer to xyyzz instead of xyz
    for major, minor, and bugfix releases.  This is 10001. (Adam Costello,
    Tom Lane)
  Make months range from 1-12 in png_convert_to_rfc1123

Version 1.0.0b [March 13, 1998]
  Quieted compiler complaints about two empty "for" loops in pngrutil.c
  Minor changes to makefile.s2x
  Removed #ifdef/#endif around a png_free() in pngread.c

Version 1.0.1 [March 14, 1998]
  Changed makefile.s2x to reduce security risk of using a relative pathname
  Fixed some typos in the documentation (Greg).
  Fixed a problem with value of "channels" returned by png_read_update_info()

Version 1.0.1a [April 21, 1998]
  Optimized Paeth calculations by replacing abs() function calls with\
 intrinsics
  plus other loop optimizations. Improves avg decoding speed by about 20%.
  Commented out i386istic "align" compiler flags in makefile.lnx.
  Reduced the default warning level in some makefiles, to make them\
 consistent.
  Removed references to IJG and JPEG in the ansi2knr.c copyright statement.
  Fixed a bug in png_do_strip_filler with XXRRGGBB => RRGGBB transformation.
  Added grayscale and 16-bit capability to png_do_read_filler().
  Fixed a bug in pngset.c, introduced in version 0.99c, that sets rowbytes
    too large when writing an image with bit_depth < 8 (Bob Dellaca).
  Corrected some bugs in the experimental weighted filtering heuristics.
  Moved a misplaced pngrutil code block that truncates tRNS if it has more
    than num_palette entries -- test was done before num_palette was defined.
  Fixed a png_convert_to_rfc1123() bug that converts day 31 to 0 (Steve\
 Eddins).
  Changed compiler flags in makefile.wat for better optimization
    (Pawel Mrochen).

Version 1.0.1b [May 2, 1998]
  Relocated png_do_gray_to_rgb() within png_do_read_transformations() (Greg).
  Relocated the png_composite macros from pngrtran.c to png.h (Greg).
  Added makefile.sco (contributed by Mike Hopkirk).
  Fixed two bugs (missing definitions of "istop") introduced in libpng-1.0.1a.
  Fixed a bug in pngrtran.c that would set channels=5 under some\
 circumstances.
  More work on the Paeth-filtering, achieving imperceptible speedup
    (A Kleinert).
  More work on loop optimization which may help when compiled with C++
    compilers.
  Added warnings when people try to use transforms they've defined out.
  Collapsed 4 "i" and "c" loops into single "i" loops in pngrtran and\
 pngwtran.
  Revised paragraph about png_set_expand() in libpng.txt and libpng.3 (Greg)

Version 1.0.1c [May 11, 1998]
  Fixed a bug in pngrtran.c (introduced in libpng-1.0.1a) where the masks for
    filler bytes should have been 0xff instead of 0xf.
  Added max_pixel_depth=32 in pngrutil.c when using FILLER with palette\
 images.
  Moved PNG_WRITE_WEIGHTED_FILTER_SUPPORTED and PNG_WRITE_FLUSH_SUPPORTED
    out of the PNG_WRITE_TRANSFORMS_NOT_SUPPORTED block of pngconf.h
  Added "PNG_NO_WRITE_TRANSFORMS" etc., as alternatives for *_NOT_SUPPORTED,
    for consistency, in pngconf.h
  Added individual "ifndef PNG_NO_[CAPABILITY]" in pngconf.h to make it easier
    to remove unwanted capabilities via the compile line
  Made some corrections to grammar (which, it's) in documentation (Greg).
  Corrected example.c, use of row_pointers in png_write_image().

Version 1.0.1d [May 24, 1998]
  Corrected several statements that used side effects illegally in pngrutil.c
    and pngtrans.c, that were introduced in version 1.0.1b
  Revised png_read_rows() to avoid repeated if-testing for NULL (A Kleinert)
  More corrections to example.c, use of row_pointers in png_write_image()
    and png_read_rows().
  Added pngdll.mak and pngdef.pas to scripts directory, contributed by
    Bob Dellaca, to make a png32bd.dll with Borland C++ 4.5
  Fixed error in example.c with png_set_text: num_text is 3, not 2 (Guido V.)
  Changed several loops from count-down to count-up, for consistency.

Version 1.0.1e [June 6, 1998]
  Revised libpng.txt and libpng.3 description of png_set_read|write_fn(), and
    added warnings when people try to set png_read_fn and png_write_fn in
    the same structure.
  Added a test such that png_do_gamma will be done when num_trans==0
    for truecolor images that have defined a background.  This corrects an
    error that was introduced in libpng-0.90 that can cause gamma processing
    to be skipped.
  Added tests in png.h to include "trans" and "trans_values" in structures
    when PNG_READ_BACKGROUND_SUPPORTED or PNG_READ_EXPAND_SUPPORTED is\
 defined.
  Add png_free(png_ptr->time_buffer) in png_destroy_read_struct()
  Moved png_convert_to_rfc_1123() from pngwrite.c to png.c
  Added capability for user-provided malloc_fn() and free_fn() functions,
    and revised pngtest.c to demonstrate their use, replacing the
    PNGTEST_DEBUG_MEM feature.
  Added makefile.w32, for Microsoft C++ 4.0 and later (Tim Wegner).

Version 1.0.2 [June 14, 1998]
  Fixed two bugs in makefile.bor .

Version 1.0.2a [December 30, 1998]
  Replaced and extended code that was removed from png_set_filler() in 1.0.1a.
  Fixed a bug in png_do_filler() that made it fail to write filler bytes in
    the left-most pixel of each row (Kevin Bracey).
  Changed "static pngcharp tIME_string" to "static char tIME_string[30]"
    in pngtest.c (Duncan Simpson).
  Fixed a bug in pngtest.c that caused pngtest to try to write a tIME chunk
    even when no tIME chunk was present in the source file.
  Fixed a problem in pngrutil.c: gray_to_rgb didn't always work with 16-bit.
  Fixed a problem in png_read_push_finish_row(), which would not skip some
    passes that it should skip, for images that are less than 3 pixels high.
  Interchanged the order of calls to png_do_swap() and png_do_shift()
    in pngwtran.c (John Cromer).
  Added #ifdef PNG_DEBUG/#endif surrounding use of PNG_DEBUG in png.h .
  Changed "bad adaptive filter type" from error to warning in pngrutil.c .
  Fixed a documentation error about default filtering with 8-bit\
 indexed-color.
  Separated the PNG_NO_STDIO macro into PNG_NO_STDIO and PNG_NO_CONSOLE_IO
    (L. Peter Deutsch).
  Added png_set_rgb_to_gray() and png_get_rgb_to_gray_status() functions.
  Added png_get_copyright() and png_get_header_version() functions.
  Revised comments on png_set_progressive_read_fn() in libpng.txt and\
 example.c
  Added information about debugging in libpng.txt and libpng.3 .
  Changed "ln -sf" to "ln -s -f" in makefile.s2x, makefile.lnx, and
    makefile.sco.
  Removed lines after Dynamic Dependencies" in makefile.aco .
  Revised makefile.dec to make a shared library (Jeremie Petit).
  Removed trailing blanks from all files.

Version 1.0.2a [January 6, 1999]
  Removed misplaced #endif and #ifdef PNG_NO_EXTERN near the end of png.h
  Added "if" tests to silence complaints about unused png_ptr in png.h and\
 png.c
  Changed "check_if_png" function in example.c to return true (nonzero) if\
 PNG.
  Changed libpng.txt to demonstrate png_sig_cmp() instead of png_check_sig()
    which is obsolete.

Version 1.0.3 [January 14, 1999]
  Added makefile.hux, for Hewlett Packard HPUX 10.20 and 11.00 (Jim Rice)
  Added a statement of Y2K compliance in png.h, libpng.3, and Y2KINFO.

Version 1.0.3a [August 12, 1999]
  Added check for PNG_READ_INTERLACE_SUPPORTED in pngread.c; issue a warning
    if an attempt is made to read an interlaced image when it's not supported.
  Added check if png_ptr->trans is defined before freeing it in pngread.c
  Modified the Y2K statement to include versions back to version 0.71
  Fixed a bug in the check for valid IHDR bit_depth/color_types in pngrutil.c
  Modified makefile.wat (added -zp8 flag, ".symbolic", changed some comments)
  Replaced leading blanks with tab characters in makefile.hux
  Changed "dworkin.wustl.edu" to "ccrc.wustl.edu" in various documents.
  Changed (float)red and (float)green to (double)red, (double)green
    in png_set_rgb_to_gray() to avoid "promotion" problems in AIX.
  Fixed a bug in pngconf.h that omitted <stdio.h> when PNG_DEBUG==0 (K\
 Bracey).
  Reformatted libpng.3 and libpngpf.3 with proper fonts (script by J.\
 vanZandt).
  Updated documentation to refer to the PNG-1.2 specification.
  Removed ansi2knr.c and left pointers to the latest source for ansi2knr.c
    in makefile.knr, INSTALL, and README (L. Peter Deutsch)
  Fixed bugs in calculation of the length of rowbytes when adding alpha
    channels to 16-bit images, in pngrtran.c (Chris Nokleberg)
  Added function png_set_user_transform_info() to store user_transform_ptr,
    user_depth, and user_channels into the png_struct, and a function
    png_get_user_transform_ptr() to retrieve the pointer (Chris Nokleberg)
  Added function png_set_empty_plte_permitted() to make libpng useable
    in MNG applications.
  Corrected the typedef for png_free_ptr in png.h (Jesse Jones).
  Correct gamma with srgb is 45455 instead of 45000 in pngrutil.c, to be
    consistent with PNG-1.2, and allow variance of 500 before complaining.
  Added assembler code contributed by Intel in file pngvcrd.c and modified
    makefile.w32 to use it (Nirav Chhatrapati, INTEL Corporation,
    Gilles Vollant)
  Changed "ln -s -f" to "ln -f -s" in the makefiles to make Solaris happy.
  Added some aliases for png_set_expand() in pngrtran.c, namely
    png_set_expand_PLTE(), png_set_expand_depth(), and png_set_expand_tRNS()
    (Greg Roelofs, in "PNG: The Definitive Guide").
  Added makefile.beo for BEOS on X86, contributed by Sander Stok.

Version 1.0.3b [August 26, 1999]
  Replaced 2147483647L several places with PNG_MAX_UINT macro, defined in\
 png.h
  Changed leading blanks to tabs in all makefiles.
  Define PNG_USE_PNGVCRD in makefile.w32, to get MMX assembler code.
  Made alternate versions of  png_set_expand() in pngrtran.c, namely
    png_set_gray_1_2_4_to_8, png_set_palette_to_rgb, and png_set_tRNS_to_alpha
    (Greg Roelofs, in "PNG: The Definitive Guide").  Deleted the 1.0.3a\
 aliases.
  Relocated start of 'extern "C"' block in png.h so it doesn't include\
 pngconf.h
  Revised calculation of num_blocks in pngmem.c to avoid a potentially
    negative shift distance, whose results are undefined in the C language.
  Added a check in pngset.c to prevent writing multiple tIME chunks.
  Added a check in pngwrite.c to detect invalid small window_bits sizes.

Version 1.0.3d [September 4, 1999]
  Fixed type casting of igamma in pngrutil.c
  Added new png_expand functions to scripts/pngdef.pas and pngos2.def
  Added a demo read_user_transform_fn that examines the row filters in\
 pngtest.c

Version 1.0.4 [September 24, 1999, not distributed publicly]
  Define PNG_ALWAYS_EXTERN in pngconf.h if __STDC__ is defined
  Delete #define PNG_INTERNAL and include "png.h" from pngasmrd.h
  Made several minor corrections to pngtest.c
  Renamed the makefiles with longer but more user friendly extensions.
  Copied the PNG copyright and license to a separate LICENSE file.
  Revised documentation, png.h, and example.c to remove reference to
    "viewing_gamma" which no longer appears in the PNG specification.
  Revised pngvcrd.c to use MMX code for interlacing only on the final pass.
  Updated pngvcrd.c to use the faster C filter algorithms from libpng-1.0.1a
  Split makefile.win32vc into two versions, makefile.vcawin32 (uses MMX
    assembler code) and makefile.vcwin32 (doesn't).
  Added a CPU timing report to pngtest.c (enabled by defining PNGTEST_TIMING)
  Added a copy of pngnow.png to the distribution.

Version 1.0.4a [September 25, 1999]
  Increase max_pixel_depth in pngrutil.c if a user transform needs it.
  Changed several division operations to right-shifts in pngvcrd.c

Version 1.0.4b [September 30, 1999]
  Added parentheses in line 3732 of pngvcrd.c
  Added a comment in makefile.linux warning about buggy -O3 in pgcc 2.95.1

Version 1.0.4c [October 1, 1999]
  Added a "png_check_version" function in png.c and pngtest.c that will\
 generate
    a helpful compiler error if an old png.h is found in the search path.
  Changed type of png_user_transform_depth|channels from int to png_byte.
  Added "Libpng is OSI Certified Open Source Software" statement to png.h

Version 1.0.4d [October 6, 1999]
  Changed 0.45 to 0.45455 in png_set_sRGB()
  Removed unused PLTE entries from pngnow.png
  Re-enabled some parts of pngvcrd.c (png_combine_row) that work properly.

Version 1.0.4e [October 10, 1999]
  Fixed sign error in pngvcrd.c (Greg Roelofs)
  Replaced some instances of memcpy with simple assignments in pngvcrd (GR-P)

Version 1.0.4f [October 15, 1999]
  Surrounded example.c code with #if 0 .. #endif to prevent people from
    inadvertently trying to compile it.
  Changed png_get_header_version() from a function to a macro in png.h
  Added type casting mostly in pngrtran.c and pngwtran.c
  Removed some pointless "ptr = NULL" in pngmem.c
  Added a "contrib" directory containing the source code from Greg's book.

Version 1.0.5 [October 15, 1999]
  Minor editing of the INSTALL and README files.

Version 1.0.5a [October 23, 1999]
  Added contrib/pngsuite and contrib/pngminus (Willem van Schaik)
  Fixed a typo in the png_set_sRGB() function call in example.c (Jan Nijtmans)
  Further optimization and bugfix of pngvcrd.c
  Revised pngset.c so that it does not allocate or free memory in the user's
    text_ptr structure.  Instead, it makes its own copy.
  Created separate write_end_info_struct in pngtest.c for a more severe test.
  Added code in pngwrite.c to free info_ptr->text[i].key to stop a memory\
 leak.

Version 1.0.5b [November 23, 1999]
  Moved PNG_FLAG_HAVE_CHUNK_HEADER, PNG_FLAG_BACKGROUND_IS_GRAY and
    PNG_FLAG_WROTE_tIME from flags to mode.
  Added png_write_info_before_PLTE() function.
  Fixed some typecasting in contrib/gregbook/*.c
  Updated scripts/makevms.com and added makevms.com to contrib/gregbook
    and contrib/pngminus (Martin Zinser)

Version 1.0.5c [November 26, 1999]
  Moved png_get_header_version from png.h to png.c, to accommodate ansi2knr.
  Removed all global arrays (according to PNG_NO_GLOBAL_ARRAYS macro), to
    accommodate making DLL's: Moved usr_png_ver from global variable to\
 function
    png_get_header_ver() in png.c.  Moved png_sig to png_sig_bytes in png.c\
 and
    eliminated use of png_sig in pngwutil.c.  Moved the various png_CHNK\
 arrays
    into pngtypes.h.  Eliminated use of global png_pass arrays.  Declared the
    png_CHNK and png_pass arrays to be "const".  Made the global arrays
    available to applications (although none are used in libpng itself) when
    PNG_NO_GLOBAL_ARRAYS is not defined or when PNG_GLOBAL_ARRAYS is defined.
  Removed some extraneous "-I" from contrib/pngminus/makefile.std
  Changed the PNG_sRGB_INTENT macros in png.h to be consistent with PNG-1.2.
  Change PNG_SRGB_INTENT to PNG_sRGB_INTENT in libpng.txt and libpng.3

Version 1.0.5d [November 29, 1999]
  Add type cast (png_const_charp) two places in png.c
  Eliminated pngtypes.h; use macros instead to declare PNG_CHNK arrays.
  Renamed "PNG_GLOBAL_ARRAYS" to "PNG_USE_GLOBAL_ARRAYS" and made available
    to applications a macro "PNG_USE_LOCAL_ARRAYS".
  comment out (with #ifdef) all the new declarations when
    PNG_USE_GLOBAL_ARRAYS is defined.
  Added PNG_EXPORT_VAR macro to accommodate making DLL's.

Version 1.0.5e [November 30, 1999]
  Added iCCP, iTXt, and sPLT support; added "lang" member to the png_text
    structure; refactored the inflate/deflate support to make adding new\
 chunks
    with trailing compressed parts easier in the future, and added new\
 functions
    png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
    png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
    NOTE: Applications that write text chunks MUST define png_text->lang
    before calling png_set_text(). It must be set to NULL if you want to
    write tEXt or zTXt chunks.  If you want your application to be able to
    run with older versions of libpng, use

      #ifdef PNG_iTXt_SUPPORTED
         png_text[i].lang = NULL;
      #endif

  Changed png_get_oFFs() and png_set_oFFs() to use signed rather than unsigned
    offsets (Eric S. Raymond).
  Combined PNG_READ_cHNK_SUPPORTED and PNG_WRITE_cHNK_SUPPORTED macros into
    PNG_cHNK_SUPPORTED and combined the three types of PNG_text_SUPPORTED
    macros, leaving the separate macros also available.
  Removed comments on #endifs at the end of many short, non-nested #if-blocks.

Version 1.0.5f [December 6, 1999]
  Changed makefile.solaris to issue a warning about potential problems when
    the ucb "ld" is in the path ahead of the ccs "ld".
  Removed "- [date]" from the "synopsis" line in libpng.3 and libpngpf.3.
  Added sCAL chunk support (Eric S. Raymond).

Version 1.0.5g [December 7, 1999]
  Fixed "png_free_spallettes" typo in png.h
  Added code to handle new chunks in pngpread.c
  Moved PNG_CHNK string macro definitions outside of PNG_NO_EXTERN block
  Added "translated_key" to png_text structure and png_write_iTXt().
  Added code in pngwrite.c to work around a newly discovered zlib bug.

Version 1.0.5h [December 10, 1999]
  NOTE: regarding the note for version 1.0.5e, the following must also
    be included in your code:
        png_text[i].translated_key = NULL;
  Unknown chunk handling is now supported.
  Option to eliminate all floating point support was added.  Some new
    fixed-point functions such as png_set_gAMA_fixed() were added.
  Expanded tabs and removed trailing blanks in source files.

Version 1.0.5i [December 13, 1999]
  Added some type casts to silence compiler warnings.
  Renamed "png_free_spalette" to "png_free_spalettes" for consistency.
  Removed leading blanks from a #define in pngvcrd.c
  Added some parameters to the new png_set_keep_unknown_chunks() function.
  Added a test for up->location != 0 in the first instance of writing
    unknown chunks in pngwrite.c
  Changed "num" to "i" in png_free_spalettes() and png_free_unknowns() to
    prevent recursion.
  Added png_free_hIST() function.
  Various patches to fix bugs in the sCAL and integer cHRM processing,
    and to add some convenience macros for use with sCAL.

Version 1.0.5j [December 21, 1999]
  Changed "unit" parameter of png_write_sCAL from png_byte to int, to work
    around buggy compilers.
  Added new type "png_fixed_point" for integers that hold float*100000 values
  Restored backward compatibility of tEXt/zTXt chunk processing:
    Restored the first four members of png_text to the same order as v.1.0.5d.
    Added members "lang_key" and "itxt_length" to png_text struct.  Set
    text_length=0 when "text" contains iTXt data.  Use the "compression"
    member to distinguish among tEXt/zTXt/iTXt types.  Added
    PNG_ITXT_COMPRESSION_NONE (1) and PNG_ITXT_COMPRESSION_zTXt(2) macros.
    The "Note" above, about backward incompatibility of libpng-1.0.5e, no
    longer applies.
  Fixed png_read|write_iTXt() to read|write parameters in the right order,
    and to write the iTXt chunk after IDAT if it appears in the end_ptr.
  Added pnggccrd.c, version of pngvcrd.c Intel assembler for gcc (Greg\
 Roelofs)
  Reversed the order of trying to write floating-point and fixed-point gAMA.

Version 1.0.5k [December 27, 1999]
  Added many parentheses, e.g., "if (a && b & c)" becomes "if (a && (b & c))"
  Added png_handle_as_unknown() function (Glenn)
  Added png_free_chunk_list() function and chunk_list and num_chunk_list\
 members
    of png_ptr.
  Eliminated erroneous warnings about multiple sPLT chunks and\
 sPLT-after-PLTE.
  Fixed a libpng-1.0.5h bug in pngrutil.c that was issuing erroneous warnings
    about ignoring incorrect gAMA with sRGB (gAMA was in fact not ignored)
  Added png_free_tRNS(); png_set_tRNS() now malloc's its own trans array\
 (ESR).
  Define png_get_int_32 when oFFs chunk is supported as well as when pCAL is.
  Changed type of proflen from png_int_32 to png_uint_32 in png_get_iCCP().

Version 1.0.5l [January 1, 2000]
  Added functions png_set_read_user_chunk_fn() and png_get_user_chunk_ptr()
    for setting a callback function to handle unknown chunks and for
    retrieving the associated user pointer (Glenn).

Version 1.0.5m [January 7, 2000]
  Added high-level functions png_read_png(), png_write_png(),\
 png_free_pixels().

Version 1.0.5n [January 9, 2000]
  Added png_free_PLTE() function, and modified png_set_PLTE() to malloc its
    own memory for info_ptr->palette.  This makes it safe for the calling
    application to free its copy of the palette any time after it calls
    png_set_PLTE().

Version 1.0.5o [January 20, 2000]
  Cosmetic changes only (removed some trailing blanks and TABs)

Version 1.0.5p [January 31, 2000]
  Renamed pngdll.mak to makefile.bd32
  Cosmetic changes in pngtest.c

Version 1.0.5q [February 5, 2000]
  Relocated the makefile.solaris warning about PATH problems.
  Fixed pngvcrd.c bug by pushing/popping registers in mmxsupport (Bruce Oberg)
  Revised makefile.gcmmx
  Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros

Version 1.0.5r [February 7, 2000]
  Removed superfluous prototype for png_get_itxt from png.h
  Fixed a bug in pngrtran.c that improperly expanded the background color.
  Return *num_text=0 from png_get_text() when appropriate, and fix\
 documentation
    of png_get_text() in libpng.txt/libpng.3.

Version 1.0.5s [February 18, 2000]
  Added "png_jmp_env()" macro to pngconf.h, to help people migrate to the
    new error handler that's planned for the next libpng release, and changed
    example.c, pngtest.c, and contrib programs to use this macro.
  Revised some of the DLL-export macros in pngconf.h (Greg Roelofs)
  Fixed a bug in png_read_png() that caused it to fail to expand some images
    that it should have expanded.
  Fixed some mistakes in the unused and undocumented INCH_CONVERSIONS\
 functions
    in pngget.c
  Changed the allocation of palette, history, and trans arrays back to
    the version 1.0.5 method (linking instead of copying) which restores
    backward compatibility with version 1.0.5.  Added some remarks about
    that in example.c.  Added "free_me" member to info_ptr and png_ptr
    and added png_free_data() function.
  Updated makefile.linux and makefile.gccmmx to make directories\
 conditionally.
  Made cosmetic changes to pngasmrd.h
  Added png_set_rows() and png_get_rows(), for use with png_read|write_png().
  Modified png_read_png() to allocate info_ptr->row_pointers only if it
    hasn't already been allocated.

Version 1.0.5t [March 4, 2000]
  Changed png_jmp_env() migration aiding macro to png_jmpbuf().
  Fixed "interlace" typo (should be "interlaced") in contrib/gregbook/read2-x\
.c
  Fixed bug with use of PNG_BEFORE_IHDR bit in png_ptr->mode, introduced when
    PNG_FLAG_HAVE_CHUNK_HEADER was moved into png_ptr->mode in version 1.0.5b
  Files in contrib/gregbook were revised to use png_jmpbuf() and to select
    a 24-bit visual if one is available, and to allow abbreviated options.
  Files in contrib/pngminus were revised to use the png_jmpbuf() macro.
  Removed spaces in makefile.linux and makefile.gcmmx, introduced in 1.0.5s

Version 1.0.5u [March 5, 2000]
  Simplified the code that detects old png.h in png.c and pngtest.c
  Renamed png_spalette (_p, _pp) to png_sPLT_t (_tp, _tpp)
  Increased precision of rgb_to_gray calculations from 8 to 15 bits and
    added png_set_rgb_to_gray_fixed() function.
  Added makefile.bc32 (32-bit Borland C++, C mode)

Version 1.0.5v [March 11, 2000]
  Added some parentheses to the png_jmpbuf macro definition.
  Updated references to the zlib home page, which has moved to\
 freesoftware.com.
  Corrected bugs in documentation regarding png_read_row() and\
 png_write_row().
  Updated documentation of png_rgb_to_gray calculations in\
 libpng.3/libpng.txt.
  Renamed makefile.borland,turboc3 back to makefile.bor,tc3 as in version\
 1.0.3,
    revised borland makefiles; added makefile.ibmvac3 and makefile.gcc\
 (Cosmin)

Version 1.0.6 [March 20, 2000]
  Minor revisions of makefile.bor, libpng.txt, and gregbook/rpng2-win.c
  Added makefile.sggcc (SGI IRIX with gcc)

Version 1.0.6d [April 7, 2000]
  Changed sprintf() to strcpy() in png_write_sCAL_s() to work without STDIO
  Added data_length parameter to png_decompress_chunk() function
  Revised documentation to remove reference to abandoned png_free_chnk\
 functions
  Fixed an error in png_rgb_to_gray_fixed()
  Revised example.c, usage of png_destroy_write_struct().
  Renamed makefile.ibmvac3 to makefile.ibmc, added libpng.icc IBM project file
  Added a check for info_ptr->free_me&PNG_FREE_TEXT when freeing text in png.c
  Simplify png_sig_bytes() function to remove use of non-ISO-C strdup().

Version 1.0.6e [April 9, 2000]
  Added png_data_freer() function.
  In the code that checks for over-length tRNS chunks, added check of
    info_ptr->num_trans as well as png_ptr->num_trans (Matthias Benckmann)
  Minor revisions of libpng.txt/libpng.3.
  Check for existing data and free it if the free_me flag is set, in\
 png_set_*()
    and png_handle_*().
  Only define PNG_WEIGHTED_FILTERS_SUPPORTED when PNG_FLOATING_POINT_SUPPORTED
    is defined.
  Changed several instances of PNG_NO_CONSOLE_ID to PNG_NO_STDIO in pngrutil.c
    and mentioned the purposes of the two macros in libpng.txt/libpng.3.

Version 1.0.6f [April 14, 2000]
  Revised png_set_iCCP() and png_set_rows() to avoid prematurely freeing data.
  Add checks in png_set_text() for NULL members of the input text structure.
  Revised libpng.txt/libpng.3.
  Removed superfluous prototype for png_set_iTXt from png.h
  Removed "else" from pngread.c, after png_error(), and changed "0" to\
 "length".
  Changed several png_errors about malformed ancillary chunks to png_warnings.

Version 1.0.6g [April 24, 2000]
  Added png_pass-* arrays to pnggccrd.c when PNG_USE_LOCAL_ARRAYS is defined.
  Relocated paragraph about png_set_background() in libpng.3/libpng.txt
    and other revisions (Matthias Benckmann)
  Relocated info_ptr->free_me, png_ptr->free_me, and other info_ptr and
    png_ptr members to restore binary compatibility with libpng-1.0.5
    (breaks compatibility with libpng-1.0.6).

Version 1.0.6h [April 24, 2000]
  Changed shared library so-number pattern from 2.x.y.z to xy.z (this builds
    libpng.so.10 & libpng.so.10.6h instead of libpng.so.2 &\
 libpng.so.2.1.0.6h)
    This is a temporary change for test purposes.

Version 1.0.6i [May 2, 2000]
  Rearranged some members at the end of png_info and png_struct, to put
    unknown_chunks_num and free_me within the original size of the png_structs
    and free_me, png_read_user_fn, and png_free_fn within the original\
 png_info,
    because some old applications allocate the structs directly instead of
    using png_create_*().
  Added documentation of user memory functions in libpng.txt/libpng.3
  Modified png_read_png so that it will use user_allocated row_pointers
    if present, unless free_me directs that it be freed, and added description
    of the use of png_set_rows() and png_get_rows() in libpng.txt/libpng.3.
  Added PNG_LEGACY_SUPPORTED macro, and #ifdef out all new (since version
    1.00) members of png_struct and png_info, to regain binary compatibility
    when you define this macro.  Capabilities lost in this event
    are user transforms (new in version 1.0.0),the user transform pointer
    (new in version 1.0.2), rgb_to_gray (new in 1.0.5), iCCP, sCAL, sPLT,
    the high-level interface, and unknown chunks support (all new in 1.0.6).
    This was necessary because of old applications that allocate the structs
    directly as authors were instructed to do in libpng-0.88 and earlier,
    instead of using png_create_*().
  Added modes PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT which
    can be used to detect codes that directly allocate the structs, and
    code to check these modes in png_read_init() and png_write_init() and
    generate a libpng error if the modes aren't set and PNG_LEGACY_SUPPORTED
    was not defined.
  Added makefile.intel and updated makefile.watcom (Pawel Mrochen)

Version 1.0.6j [May 3, 2000]
  Overloaded png_read_init() and png_write_init() with macros that convert
    calls to png_read_init_2() or png_write_init_2() that check the version
    and structure sizes.

Version 1.0.7beta11 [May 7, 2000]
  Removed the new PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT modes
    which are no longer used.
  Eliminated the three new members of png_text when PNG_LEGACY_SUPPORTED is
    defined or when neither PNG_READ_iTXt_SUPPORTED nor PNG_WRITE_iTXt_SUPPOR\
TED
    is defined.
  Made PNG_NO_READ|WRITE_iTXt the default setting, to avoid memory
    overrun when old applications fill the info_ptr->text structure directly.
  Added PNGAPI macro, and added it to the definitions of all exported\
 functions.
  Relocated version macro definitions ahead of the includes of zlib.h and
    pngconf.h in png.h.

Version 1.0.7beta12 [May 12, 2000]
  Revised pngset.c to avoid a problem with expanding the png_debug macro.
  Deleted some extraneous defines from pngconf.h
  Made PNG_NO_CONSOLE_IO the default condition when PNG_BUILD_DLL is defined.
  Use MSC _RPTn debugging instead of fprintf if _MSC_VER is defined.
  Added png_access_version_number() function.
  Check for mask&PNG_FREE_CHNK (for TEXT, SCAL, PCAL) in png_free_data().
  Expanded libpng.3/libpng.txt information about png_data_freer().

Version 1.0.7beta14 [May 17, 2000] (beta13 was not published)
  Changed pnggccrd.c and pngvcrd.c to handle bad adaptive filter types as
    warnings instead of errors, as pngrutil.c does.
  Set the PNG_INFO_IDAT valid flag in png_set_rows() so png_write_png()
    will actually write IDATs.
  Made the default PNG_USE_LOCAL_ARRAYS depend on PNG_DLL instead of WIN32.
  Make png_free_data() ignore its final parameter except when freeing data
    that can have multiple instances (text, sPLT, unknowns).
  Fixed a new bug in png_set_rows().
  Removed info_ptr->valid tests from png_free_data(), as in version 1.0.5.
  Added png_set_invalid() function.
  Fixed incorrect illustrations of png_destroy_write_struct() in example.c.

Version 1.0.7beta15 [May 30, 2000]
  Revised the deliberately erroneous Linux setjmp code in pngconf.h to produce
    fewer error messages.
  Rearranged checks for Z_OK to check the most likely path first in pngpread.c
    and pngwutil.c.
  Added checks in pngtest.c for png_create_*() returning NULL, and mentioned
    in libpng.txt/libpng.3 the need for applications to check this.
  Changed names of png_default_*() functions in pngtest to pngtest_*().
  Changed return type of png_get_x|y_offset_*() from png_uint_32 to\
 png_int_32.
  Fixed some bugs in the unused PNG_INCH_CONVERSIONS functions in pngget.c
  Set each pointer to NULL after freeing it in png_free_data().
  Worked around a problem in pngconf.h; AIX's strings.h defines an "index"
    macro that conflicts with libpng's png_color_16.index. (Dimitri
    Papadapoulos)
  Added "msvc" directory with MSVC++ project files (Simon-Pierre Cadieux).

Version 1.0.7beta16 [June 4, 2000]
  Revised the workaround of AIX string.h "index" bug.
  Added a check for overlength PLTE chunk in pngrutil.c.
  Added PNG_NO_POINTER_INDEXING macro to use array-indexing instead of pointer
    indexing in pngrutil.c and pngwutil.c to accommodate a buggy compiler.
  Added a warning in png_decompress_chunk() when it runs out of data, e.g.
    when it tries to read an erroneous PhotoShop iCCP chunk.
  Added PNG_USE_DLL macro.
  Revised the copyright/disclaimer/license notice.
  Added contrib/msvctest directory

Version 1.0.7rc1 [June 9, 2000]
  Corrected the definition of PNG_TRANSFORM_INVERT_ALPHA  (0x0400 not 0x0200)
  Added contrib/visupng directory (Willem van Schaik)

Version 1.0.7beta18 [June 23, 2000]
  Revised PNGAPI definition, and pngvcrd.c to work with __GCC__
    and do not redefine PNGAPI if it is passed in via a compiler directive.
  Revised visupng/PngFile.c to remove returns from within the Try block.
  Removed leading underscores from "_PNG_H" and "_PNG_SAVE_BSD_SOURCE" macros.
  Updated contrib/visupng/cexcept.h to version 1.0.0.
  Fixed bugs in pngwrite.c and pngwutil.c that prevented writing iCCP chunks.

Version 1.0.7rc2 [June 28, 2000]
  Updated license to include disclaimers required by UCITA.
  Fixed "DJBPP" typo in pnggccrd.c introduced in beta18.

Version 1.0.7 [July 1, 2000]
  Revised the definition of "trans_values" in libpng.3/libpng.txt

Version 1.0.8beta1 [July 8, 2000]
  Added png_free(png_ptr, key) two places in pngpread.c to stop memory leaks.
  Changed PNG_NO_STDIO to PNG_NO_CONSOLE_IO, several places in pngrutil.c and
    pngwutil.c.
  Changed PNG_EXPORT_VAR to use PNG_IMPEXP, in pngconf.h.
  Removed unused "#include <assert.h>" from png.c
  Added WindowsCE support.
  Revised pnggccrd.c to work with gcc-2.95.2 and in the Cygwin environment.

Version 1.0.8beta2 [July 10, 2000]
  Added project files to the wince directory and made further revisions
    of pngtest.c, pngrio.c, and pngwio.c in support of WindowsCE.

Version 1.0.8beta3 [July 11, 2000]
  Only set the PNG_FLAG_FREE_TRNS or PNG_FREE_TRNS flag in png_handle_tRNS()
    for indexed-color input files to avoid potential double-freeing trans\
 array
    under some unusual conditions; problem was introduced in version 1.0.6f.
  Further revisions to pngtest.c and files in the wince subdirectory.

Version 1.0.8beta4 [July 14, 2000]
  Added the files pngbar.png and pngbar.jpg to the distribution.
  Added makefile.cygwin, and cygwin support in pngconf.h
  Added PNG_NO_ZALLOC_ZERO macro (makes png_zalloc skip zeroing memory)

Version 1.0.8rc1 [July 16, 2000]
  Revised png_debug() macros and statements to eliminate compiler warnings.

Version 1.0.8 [July 24, 2000]
  Added png_flush() in pngwrite.c, after png_write_IEND().
  Updated makefile.hpux to build a shared library.

Version 1.0.9beta1 [November 10, 2000]
  Fixed typo in scripts/makefile.hpux
  Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser)
  Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser)
  Changed "cdrom.com" in documentation to "libpng.org"
  Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg).
  Changed type of "params" from voidp to png_voidp in png_read|write_png().
  Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h.
  Revised the 3 instances of WRITEFILE in pngtest.c.
  Relocated "msvc" and "wince" project subdirectories into "dll" subdirectory.
  Updated png.rc in dll/msvc project
  Revised makefile.dec to define and use LIBPATH and INCPATH
  Increased size of global png_libpng_ver[] array from 12 to 18 chars.
  Made global png_libpng_ver[], png_sig[] and png_pass_*[] arrays const.
  Removed duplicate png_crc_finish() from png_handle_bKGD() function.
  Added a warning when application calls png_read_update_info() multiple\
 times.
  Revised makefile.cygwin
  Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
  Replaced png_set_empty_plte_permitted() with png_permit_mng_features().

Version 1.0.9beta2 [November 19, 2000]
  Renamed the "dll" subdirectory "projects".
  Added borland project files to "projects" subdirectory.
  Set VS_FF_PRERELEASE and VS_FF_PATCHED flags in msvc/png.rc when\
 appropriate.
  Add error message in png_set_compression_buffer_size() when malloc fails.

Version 1.0.9beta3 [November 23, 2000]
  Revised PNG_LIBPNG_BUILD_TYPE macro in png.h, used in the msvc project.
  Removed the png_flush() in pngwrite.c that crashes some applications
    that don't set png_output_flush_fn.
  Added makefile.macosx and makefile.aix to scripts directory.

Version 1.0.9beta4 [December 1, 2000]
  Change png_chunk_warning to png_warning in png_check_keyword().
  Increased the first part of msg buffer from 16 to 18 in png_chunk_error().

Version 1.0.9beta5 [December 15, 2000]
  Added support for filter method 64 (for PNG datastreams embedded in MNG).

Version 1.0.9beta6 [December 18, 2000]
  Revised png_set_filter() to accept filter method 64 when appropriate.
  Added new PNG_HAVE_PNG_SIGNATURE bit to png_ptr->mode and use it to
    help prevent applications from using MNG features in PNG datastreams.
  Added png_permit_mng_features() function.
  Revised libpng.3/libpng.txt.  Changed "filter type" to "filter method".

Version 1.0.9rc1 [December 23, 2000]
  Revised test for PNG_HAVE_PNG_SIGNATURE in pngrutil.c
  Fixed error handling of unknown compression type in png_decompress_chunk().
  In pngconf.h, define __cdecl when _MSC_VER is defined.

Version 1.0.9beta7 [December 28, 2000]
  Changed PNG_TEXT_COMPRESSION_zTXt to PNG_COMPRESSION_TYPE_BASE several\
 places.
  Revised memory management in png_set_hIST and png_handle_hIST in a backward
    compatible manner.  PLTE and tRNS were revised similarly.
  Revised the iCCP chunk reader to ignore trailing garbage.

Version 1.0.9beta8 [January 12, 2001]
  Moved pngasmrd.h into pngconf.h.
  Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop.

Version 1.0.9beta9 [January 15, 2001]
  Added png_set_invalid, png_permit_mng_features, and png_mmx_supported to
    wince and msvc project module definition files.
  Minor revision of makefile.cygwin.
  Fixed bug with progressive reading of narrow interlaced images in pngpread.c

Version 1.0.9beta10 [January 16, 2001]
  Do not typedef png_FILE_p in pngconf.h when PNG_NO_STDIO is defined.
  Fixed "png_mmx_supported" typo in project definition files.

Version 1.0.9beta11 [January 19, 2001]
  Updated makefile.sgi to make shared library.
  Removed png_mmx_support() function and disabled PNG_MNG_FEATURES_SUPPORTED
    by default, for the benefit of DLL forward compatibility.  These will
    be re-enabled in version 1.2.0.

Version 1.0.9rc2 [January 22, 2001]
  Revised cygwin support.

Version 1.0.9 [January 31, 2001]
  Added check of cygwin's ALL_STATIC in pngconf.h
  Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos.

Version 1.0.10beta1 [March 14, 2001]
  Revised makefile.dec, makefile.sgi, and makefile.sggcc; added\
 makefile.hpgcc.
  Reformatted libpng.3 to eliminate bad line breaks.
  Added checks for _mmx_supported in the read_filter_row function of\
 pnggccrd.c
  Added prototype for png_mmx_support() near the top of pnggccrd.c
  Moved some error checking from png_handle_IHDR to png_set_IHDR.
  Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros.
  Revised png_mmx_support() function in pnggccrd.c
  Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c
  Fixed memory leak in contrib/visupng/PngFile.c
  Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version)
  Added warnings when retrieving or setting gamma=0.
  Increased the first part of msg buffer from 16 to 18 in png_chunk_warning().

Version 1.0.10rc1 [March 23, 2001]
  Changed all instances of memcpy, strcpy, and strlen to png_memcpy,\
 png_strcpy,
    and png_strlen.
  Revised png_mmx_supported() function in pnggccrd.c to return proper value.
  Fixed bug in progressive reading (pngpread.c) with small images (height <\
 8).

Version 1.0.10 [March 30, 2001]
  Deleted extraneous space (introduced in 1.0.9) from line 42 of\
 makefile.cygwin
  Added beos project files (Chris Herborth)

Version 1.0.11beta1 [April 3, 2001]
  Added type casts on several png_malloc() calls (Dimitri Papadapoulos).
  Removed a no-longer needed AIX work-around from pngconf.h
  Changed several "//" single-line comments to C-style in pnggccrd.c

Version 1.0.11beta2 [April 11, 2001]
  Removed PNGAPI from several functions whose prototypes did not have PNGAPI.
  Updated scripts/pngos2.def

Version 1.0.11beta3 [April 14, 2001]
  Added checking the results of many instances of png_malloc() for NULL

Version 1.0.11beta4 [April 20, 2001]
  Undid the changes from version 1.0.11beta3.  Added a check for NULL return
    from user's malloc_fn().
  Removed some useless type casts of the NULL pointer.
  Added makefile.netbsd

Version 1.0.11 [April 27, 2001]
  Revised makefile.netbsd

Version 1.0.12beta1 [May 14, 2001]
  Test for Windows platform in pngconf.h when including malloc.h (Emmanuel\
 Blot)
  Updated makefile.cygwin and handling of Cygwin's ALL_STATIC in pngconf.h
  Added some never-to-be-executed code in pnggccrd.c to quiet compiler\
 warnings.
  Eliminated the png_error about apps using png_read|write_init().  Instead,
    libpng will reallocate the png_struct and info_struct if they are too\
 small.
    This retains future binary compatibility for old applications written for
    libpng-0.88 and earlier.

Version 1.2.0beta1 [May 6, 2001]
  Bumped DLLNUM to 2.
  Re-enabled PNG_MNG_FEATURES_SUPPORTED and enabled PNG_ASSEMBLER_CODE_SUPPOR\
TED
    by default.
  Added runtime selection of MMX features.
  Added png_set_strip_error_numbers function and related macros.

Version 1.2.0beta2 [May 7, 2001]
  Finished merging 1.2.0beta1 with version 1.0.11
  Added a check for attempts to read or write PLTE in grayscale PNG\
 datastreams.

Version 1.2.0beta3 [May 17, 2001]
  Enabled user memory function by default.
  Modified png_create_struct so it passes user mem_ptr to user memory\
 allocator.
  Increased png_mng_features flag from png_byte to png_uint_32.
  Bumped shared-library (so-number) and dll-number to 3.

Version 1.2.0beta4 [June 23, 2001]
  Check for missing profile length field in iCCP chunk and free chunk_data
    in case of truncated iCCP chunk.
  Bumped shared-library number to 3 in makefile.sgi and makefile.sggcc
  Bumped dll-number from 2 to 3 in makefile.cygwin
  Revised contrib/gregbook/rpng*-x.c to avoid a memory leak and to exit\
 cleanly
    if user attempts to run it on an 8-bit display.
  Updated contrib/gregbook
  Use png_malloc instead of png_zalloc to allocate palette in pngset.c
  Updated makefile.ibmc
  Added some typecasts to eliminate gcc 3.0 warnings.  Changed prototypes
    of png_write_oFFS width and height from png_uint_32 to png_int_32.
  Updated example.c
  Revised prototypes for png_debug_malloc and png_debug_free in pngtest.c

Version 1.2.0beta5 [August 8, 2001]
  Revised contrib/gregbook
  Revised makefile.gcmmx
  Revised pnggccrd.c to conditionally compile some thread-unsafe code only
    when PNG_THREAD_UNSAFE_OK is defined.
  Added tests to prevent pngwutil.c from writing a bKGD or tRNS chunk with
    value exceeding 2^bit_depth-1
  Revised makefile.sgi and makefile.sggcc
  Replaced calls to fprintf(stderr,...) with png_warning() in pnggccrd.c
  Removed restriction that do_invert_mono only operate on 1-bit opaque files

Version 1.2.0 [September 1, 2001]
  Changed a png_warning() to png_debug() in pnggccrd.c
  Fixed contrib/gregbook/rpng-x.c, rpng2-x.c to avoid crash with XFreeGC().

Version 1.2.1beta1 [October 19, 2001]
  Revised makefile.std in contrib/pngminus
  Include background_1 in png_struct regardless of gamma support.
  Revised makefile.netbsd and makefile.macosx, added makefile.darwin.
  Revised example.c to provide more details about using row_callback().

Version 1.2.1beta2 [October 25, 2001]
  Added type cast to each NULL appearing in a function call, except for
    WINCE functions.
  Added makefile.so9.

Version 1.2.1beta3 [October 27, 2001]
  Removed type casts from all NULLs.
  Simplified png_create_struct_2().

Version 1.2.1beta4 [November 7, 2001]
  Revised png_create_info_struct() and png_creat_struct_2().
  Added error message if png_write_info() was omitted.
  Type cast NULLs appearing in function calls when _NO_PROTO or
    PNG_TYPECAST_NULL is defined.

Version 1.2.1rc1 [November 24, 2001]
  Type cast NULLs appearing in function calls except when PNG_NO_TYPECAST_NULL
    is defined.
  Changed typecast of "size" argument to png_size_t in pngmem.c calls to
    the user malloc_fn, to agree with the prototype in png.h
  Added a pop/push operation to pnggccrd.c, to preserve Eflag (Maxim Sobolev)
  Updated makefile.sgi to recognize LIBPATH and INCPATH.
  Updated various makefiles so "make clean" does not remove previous major
    version of the shared library.

Version 1.2.1rc2 [December 4, 2001]
  Always allocate 256-entry internal palette, hist, and trans arrays, to
    avoid out-of-bounds memory reference caused by invalid PNG datastreams.
  Added a check for prefix_length > data_length in iCCP chunk handler.

Version 1.2.1 [December 7, 2001]
  None.

Version 1.2.2beta1 [February 22, 2002]
  Fixed a bug with reading the length of iCCP profiles (Larry Reeves).
  Revised makefile.linux, makefile.gcmmx, and makefile.sgi to generate
    libpng.a, libpng12.so (not libpng.so.3), and libpng12/png.h
  Revised makefile.darwin to remove "-undefined suppress" option.
  Added checks for gamma and chromaticity values over 21474.83, which exceed
    the limit for PNG unsigned 32-bit integers when encoded.
  Revised calls to png_create_read_struct() and png_create_write_struct()
    for simpler debugging.
  Revised png_zalloc() so zlib handles errors (uses PNG_FLAG_MALLOC_NULL_MEM_\
OK)

Version 1.2.2beta2 [February 23, 2002]
  Check chunk_length and idat_size for invalid (over PNG_MAX_UINT) lengths.
  Check for invalid image dimensions in png_get_IHDR.
  Added missing "fi;" in the install target of the SGI makefiles.
  Added install-static to all makefiles that make shared libraries.
  Always do gamma compensation when image is partially transparent.

Version 1.2.2beta3 [March 7, 2002]
  Compute background.gray and background_1.gray even when color_type is RGB
    in case image gets reduced to gray later.
  Modified shared-library makefiles to install pkgconfig/libpngNN.pc.
  Export (with PNGAPI) png_zalloc, png_zfree, and png_handle_as_unknown
  Removed unused png_write_destroy_info prototype from png.h
  Eliminated incorrect use of width_mmx from pnggccrd.c in pixel_bytes == 8\
 case
  Added install-shared target to all makefiles that make shared libraries.
  Stopped a double free of palette, hist, and trans when not using free_me.
  Added makefile.32sunu for Sun Ultra 32 and makefile.64sunu for Sun Ultra 64.

Version 1.2.2beta4 [March 8, 2002]
  Compute background.gray and background_1.gray even when color_type is RGB
    in case image gets reduced to gray later (Jason Summers).
  Relocated a misplaced /bin/rm in the "install-shared" makefile targets
  Added PNG_1_0_X macro which can be used to build a 1.0.x-compatible library.

Version 1.2.2beta5 [March 26, 2002]
  Added missing PNGAPI to several function definitions.
  Check for invalid bit_depth or color_type in png_get_IHDR(), and
    check for missing PLTE or IHDR in png_push_read_chunk() (Matthias Clasen).
  Revised iTXt support to accept NULL for lang and lang_key.
  Compute gamma for color components of background even when color_type is\
 gray.
  Changed "()" to "{}" in scripts/libpng.pc.in.
  Revised makefiles to put png.h and pngconf.h only in $prefix/include/libpng\
NN
  Revised makefiles to make symlink to libpng.so.NN in addition to libpngNN.so

Version 1.2.2beta6 [March 31, 2002]

Version 1.0.13beta1 [March 31, 2002]
  Prevent png_zalloc() from trying to memset memory that it failed to acquire.
  Add typecasts of PNG_MAX_UINT in pngset_cHRM_fixed() (Matt Holgate).
  Ensure that the right function (user or default) is used to free the
    png_struct after an error in png_create_read_struct_2().

Version 1.2.2rc1 [April 7, 2002]

Version 1.0.13rc1 [April 7, 2002]
  Save the ebx register in pnggccrd.c (Sami Farin)
  Add "mem_ptr = png_ptr->mem_ptr" in png_destroy_write_struct() (Paul\
 Gardner).
  Updated makefiles to put headers in include/libpng and remove old\
 include/*.h.

Version 1.2.2 [April 15, 2002]

Version 1.0.13 [April 15, 2002]
  Revised description of png_set_filter() in libpng.3/libpng.txt.
  Revised makefile.netbsd and added makefile.neNNbsd and makefile.freebsd

Version 1.0.13patch01 [April 17, 2002]

Version 1.2.2patch01 [April 17, 2002]
  Changed ${PNGMAJ}.${PNGVER} bug to ${PNGVER} in makefile.sgi and
    makefile.sggcc
  Fixed VER -> PNGVER typo in makefile.macosx and added install-static to
    install
  Added install: target to makefile.32sunu and makefile.64sunu

Version 1.0.13patch03 [April 18, 2002]

Version 1.2.2patch03 [April 18, 2002]
  Revised 15 makefiles to link libpng.a to libpngNN.a and the include libpng
  subdirectory to libpngNN subdirectory without the full pathname.
  Moved generation of libpng.pc from "install" to "all" in 15 makefiles.

Version 1.2.3rc1 [April 28, 2002]
  Added install-man target to 15 makefiles (Dimitri Papadopolous-Orfanos).
  Added $(DESTDIR) feature to 24 makefiles (Tim Mooney)
  Fixed bug with $prefix, should be $(prefix) in makefile.hpux.
  Updated cygwin-specific portion of pngconf.h and revised makefile.cygwin
  Added a link from libpngNN.pc to libpng.pc in 15 makefiles.
  Added links from include/libpngNN/*.h to include/*.h in 24 makefiles.
  Revised makefile.darwin to make relative links without full pathname.
  Added setjmp() at the end of png_create_*_struct_2() in case user forgets
    to put one in their application.
  Restored png_zalloc() and png_zfree() prototypes to version 1.2.1 and
    removed them from module definition files.

Version 1.2.3rc2 [May 1, 2002]
  Fixed bug in reporting number of channels in pngget.c and pngset.c,
    that was introduced in version 1.2.2beta5.
  Exported png_zalloc(), png_zfree(), png_default_read(), png_default_write(),
    png_default_flush(), and png_push_fill_buffer() and included them in
    module definition files.
  Added "libpng.pc" dependency to the "install-shared" target in 15 makefiles.

Version 1.2.3rc3 [May 1, 2002]
  Revised prototype for png_default_flush()
  Remove old libpng.pc and libpngNN.pc before installing new ones.

Version 1.2.3rc4 [May 2, 2002]
  Typos in *.def files (png_default_read|write -> png_default_read|write_data)
  In makefiles, changed rm libpng.NN.pc to rm libpngNN.pc
  Added libpng-config and libpngNN-config and modified makefiles to install
    them.
  Changed $(MANPATH) to $(DESTDIR)$(MANPATH) in makefiles
  Added "Win32 DLL VB" configuration to projects/msvc/libpng.dsp

Version 1.2.3rc5 [May 11, 2002]
  Changed "error" and "message" in prototypes to "error_message" and
    "warning_message" to avoid namespace conflict.
  Revised 15 makefiles to build libpng-config from libpng-config-*.in
  Once more restored png_zalloc and png_zfree to regular nonexported form.
  Restored png_default_read|write_data, png_default_flush,\
 png_read_fill_buffer
    to nonexported form, but with PNGAPI, and removed them from module def
    files.

Version 1.2.3rc6 [May 14, 2002]
  Removed "PNGAPI" from png_zalloc() and png_zfree() in png.c
  Changed "Gz" to "Gd" in projects/msvc/libpng.dsp and zlib.dsp.
  Removed leftover libpng-config "sed" script from four makefiles.
  Revised libpng-config creating script in 16 makefiles.

Version 1.2.3 [May 22, 2002]
  Revised libpng-config target in makefile.cygwin.
  Removed description of png_set_mem_fn() from documentation.
  Revised makefile.freebsd.
  Minor cosmetic changes to 15 makefiles, e.g., $(DI) = $(DESTDIR)/$(INCDIR).
  Revised projects/msvc/README.txt
  Changed -lpng to -lpngNN in LDFLAGS in several makefiles.

Version 1.2.4beta1 [May 24, 2002]
  Added libpng.pc and libpng-config to "all:" target in 16 makefiles.
  Fixed bug in 16 makefiles: $(DESTDIR)/$(LIBPATH) to $(DESTDIR)$(LIBPATH)
  Added missing "\" before closing double quote in makefile.gcmmx.
  Plugged various memory leaks; added png_malloc_warn() and png_set_text_2()
    functions.

Version 1.2.4beta2 [June 25, 2002]
  Plugged memory leak of png_ptr->current_text (Matt Holgate).
  Check for buffer overflow before reading CRC in pngpread.c (Warwick Allison)
  Added -soname to the loader flags in makefile.dec, makefile.sgi, and
    makefile.sggcc.
  Added "test-installed" target to makefile.linux, makefile.gcmmx,
    makefile.sgi, and makefile.sggcc.

Version 1.2.4beta3 [June 28, 2002]
  Plugged memory leak of row_buf in pngtest.c when there is a png_error().
  Detect buffer overflow in pngpread.c when IDAT is corrupted with extra data.
  Added "test-installed" target to makefile.32sunu, makefile.64sunu,
    makefile.beos, makefile.darwin, makefile.dec, makefile.macosx,
    makefile.solaris, makefile.hpux, makefile.hpgcc, and makefile.so9.

Version 1.2.4rc1 and 1.0.14rc1 [July 2, 2002]
  Added "test-installed" target to makefile.cygwin and makefile.sco.
  Revised pnggccrd.c to be able to back out version 1.0.x via PNG_1_0_X macro.

Version 1.2.4 and 1.0.14 [July 8, 2002]
  Changed png_warning() to png_error() when width is too large to process.

Version 1.2.4patch01 [July 20, 2002]
  Revised makefile.cygwin to use DLL number 12 instead of 13.

Version 1.2.5beta1 [August 6, 2002]
  Added code to contrib/gregbook/readpng2.c to ignore unused chunks.
  Replaced toucan.png in contrib/gregbook (it has been corrupt since 1.0.11)
  Removed some stray *.o files from contrib/gregbook.
  Changed png_error() to png_warning() about "Too much data" in pngpread.c
    and about "Extra compressed data" in pngrutil.c.
  Prevent png_ptr->pass from exceeding 7 in png_push_finish_row().
  Updated makefile.hpgcc
  Updated png.c and pnggccrd.c handling of return from png_mmx_support()

Version 1.2.5beta2 [August 15, 2002]
  Only issue png_warning() about "Too much data" in pngpread.c when avail_in
    is nonzero.
  Updated makefiles to install a separate libpng.so.3 with its own rpath.

Version 1.2.5rc1 and 1.0.15rc1 [August 24, 2002]
  Revised makefiles to not remove previous minor versions of shared libraries.

Version 1.2.5rc2 and 1.0.15rc2 [September 16, 2002]
  Revised 13 makefiles to remove "-lz" and "-L$(ZLIBLIB)", etc., from shared
    library loader directive.
  Added missing "$OBJSDLL" line to makefile.gcmmx.
  Added missing "; fi" to makefile.32sunu.

Version 1.2.5rc3 and 1.0.15rc3 [September 18, 2002]
  Revised libpng-config script.

Version 1.2.5 and 1.0.15 [October 3, 2002]
  Revised makefile.macosx, makefile.darwin, makefile.hpgcc, and makefile.hpux,
    and makefile.aix.
  Relocated two misplaced PNGAPI lines in pngtest.c

Version 1.2.6beta1 [October 22, 2002]
  Commented out warning about uninitialized mmx_support in pnggccrd.c.
  Changed "IBMCPP__" flag to "__IBMCPP__" in pngconf.h.
  Relocated two more misplaced PNGAPI lines in pngtest.c
  Fixed memory overrun bug in png_do_read_filler() with 16-bit datastreams,
    introduced in version 1.0.2.
  Revised makefile.macosx, makefile.dec, makefile.aix, and makefile.32sunu.

Version 1.2.6beta2 [November 1, 2002]
  Added libpng-config "--ldopts" output.
  Added "AR=ar" and "ARFLAGS=rc" and changed "ar rc" to "$(AR) $(ARFLAGS)"
    in makefiles.

Version 1.2.6beta3 [July 18, 2004]
  Reverted makefile changes from version 1.2.6beta2 and some of the changes
    from version 1.2.6beta1; these will be postponed until version 1.2.7.
    Version 1.2.6 is going to be a simple bugfix release.
  Changed the one instance of "ln -sf" to "ln -f -s" in each Sun makefile.
  Fixed potential overrun in pngerror.c by using strncpy instead of memcpy.
  Added "#!/bin/sh" at the top of configure, for recognition of the
    'x' flag under Cygwin (Cosmin).
  Optimized vacuous tests that silence compiler warnings, in png.c (Cosmin).
  Added support for PNG_USER_CONFIG, in pngconf.h (Cosmin).
  Fixed the special memory handler for Borland C under DOS, in pngmem.c
    (Cosmin).
  Removed some spurious assignments in pngrutil.c (Cosmin).
  Replaced 65536 with 65536L, and 0xffff with 0xffffL, to silence warnings
    on 16-bit platforms (Cosmin).
  Enclosed shift op expressions in parentheses, to silence warnings (Cosmin).
  Used proper type png_fixed_point, to avoid problems on 16-bit platforms,
    in png_handle_sRGB() (Cosmin).
  Added compression_type to png_struct, and optimized the window size
    inside the deflate stream (Cosmin).
  Fixed definition of isnonalpha(), in pngerror.c and pngrutil.c (Cosmin).
  Fixed handling of unknown chunks that come after IDAT (Cosmin).
  Allowed png_error() and png_warning() to work even if png_ptr == NULL
    (Cosmin).
  Replaced row_info->rowbytes with row_bytes in png_write_find_filter()
    (Cosmin).
  Fixed definition of PNG_LIBPNG_VER_DLLNUM (Simon-Pierre).
  Used PNG_LIBPNG_VER and PNG_LIBPNG_VER_STRING instead of the hardcoded
    values in png.c (Simon-Pierre, Cosmin).
  Initialized png_libpng_ver[] with PNG_LIBPNG_VER_STRING (Simon-Pierre).
  Replaced PNG_LIBPNG_VER_MAJOR with PNG_LIBPNG_VER_DLLNUM in png.rc
    (Simon-Pierre).
  Moved the definition of PNG_HEADER_VERSION_STRING near the definitions
    of the other PNG_LIBPNG_VER_... symbols in png.h (Cosmin).
  Relocated #ifndef PNGAPI guards in pngconf.h (Simon-Pierre, Cosmin).
  Updated scripts/makefile.vc(a)win32 (Cosmin).
  Updated the MSVC project (Simon-Pierre, Cosmin).
  Updated the Borland C++ Builder project (Cosmin).
  Avoided access to asm_flags in pngvcrd.c, if PNG_1_0_X is defined (Cosmin).
  Commented out warning about uninitialized mmx_support in pngvcrd.c (Cosmin).
  Removed scripts/makefile.bd32 and scripts/pngdef.pas (Cosmin).
  Added extra guard around inclusion of Turbo C memory headers, in pngconf.h
    (Cosmin).
  Renamed projects/msvc/ to projects/visualc6/, and projects/borland/ to
    projects/cbuilder5/ (Cosmin).
  Moved projects/visualc6/png32ms.def to scripts/pngw32.def,
    and projects/visualc6/png.rc to scripts/pngw32.rc (Cosmin).
  Added projects/visualc6/pngtest.dsp; removed contrib/msvctest/ (Cosmin).
  Changed line endings to DOS style in cbuilder5 and visualc6 files, even
    in the tar.* distributions (Cosmin).
  Updated contrib/visupng/VisualPng.dsp (Cosmin).
  Updated contrib/visupng/cexcept.h to version 2.0.0 (Cosmin).
  Added a separate distribution with "configure" and supporting files\
 (Junichi).

Version 1.2.6beta4 [July 28, 2004]
  Added user ability to change png_size_t via a PNG_SIZE_T macro.
  Added png_sizeof() and png_convert_size() functions.
  Added PNG_SIZE_MAX (maximum value of a png_size_t variable.
  Added check in png_malloc_default() for (size_t)size != (png_uint_32)size
    which would indicate an overflow.
  Changed sPLT failure action from png_error to png_warning and abandon chunk.
  Changed sCAL and iCCP failures from png_error to png_warning and abandon.
  Added png_get_uint_31(png_ptr, buf) function.
  Added PNG_UINT_32_MAX macro.
  Renamed PNG_MAX_UINT to PNG_UINT_31_MAX.
  Made png_zalloc() issue a png_warning and return NULL on potential
    overflow.
  Turn on PNG_NO_ZALLOC_ZERO by default in version 1.2.x
  Revised "clobber list" in pnggccrd.c so it will compile under gcc-3.4.
  Revised Borland portion of png_malloc() to return NULL or issue
    png_error() according to setting of PNG_FLAG_MALLOC_NULL_MEM_OK.
  Added PNG_NO_SEQUENTIAL_READ_SUPPORTED macro to conditionally remove
    sequential read support.
  Added some "#if PNG_WRITE_SUPPORTED" blocks.
  Added #ifdef to remove some redundancy in png_malloc_default().
  Use png_malloc instead of png_zalloc to allocate the palette.

Version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004]
  Fixed buffer overflow vulnerability (CVE-2004-0597) in png_handle_tRNS().
  Fixed NULL dereference vulnerability (CVE-2004-0598) in png_handle_iCCP().
  Fixed integer overflow vulnerability (CVE-2004-0599) in png_read_png().
  Fixed some harmless bugs in png_handle_sBIT, etc, that would cause
    duplicate chunk types to go undetected.
  Fixed some timestamps in the -config version
  Rearranged order of processing of color types in png_handle_tRNS().
  Added ROWBYTES macro to calculate rowbytes without integer overflow.
  Updated makefile.darwin and removed makefile.macosx from scripts directory.
  Imposed default one million column, one-million row limits on the image
    dimensions, and added png_set_user_limits() function to override them.
  Revised use of PNG_SET_USER_LIMITS_SUPPORTED macro.
  Fixed wrong cast of returns from png_get_user_width|height_max().
  Changed some "keep the compiler happy" from empty statements to returns,
  Revised libpng.txt to remove 1.2.x stuff from the 1.0.x distribution

Version 1.0.16rc2 and 1.2.6rc2 [August 7, 2004]
  Revised makefile.darwin and makefile.solaris.  Removed makefile.macosx.
  Revised pngtest's png_debug_malloc() to use png_malloc() instead of
    png_malloc_default() which is not supposed to be exported.
  Fixed off-by-one error in one of the conversions to PNG_ROWBYTES() in
    pngpread.c.  Bug was introduced in 1.2.6rc1.
  Fixed bug in RGB to RGBX transformation introduced in 1.2.6rc1.
  Fixed old bug in RGB to Gray transformation.
  Fixed problem with 64-bit compilers by casting arguments to abs()
    to png_int_32.
  Changed "ln -sf" to "ln -f -s" in three makefiles (solaris, sco, so9).
  Changed "HANDLE_CHUNK_*" to "PNG_HANDLE_CHUNK_*" (Cosmin)
  Added "-@/bin/rm -f $(DL)/$(LIBNAME).so.$(PNGMAJ)" to 15 *NIX makefiles.
  Added code to update the row_info->colortype in png_do_read_filler() (MSB).

Version 1.0.16rc3 and 1.2.6rc3 [August 9, 2004]
  Eliminated use of "abs()" in testing cHRM and gAMA values, to avoid
    trouble with some 64-bit compilers.  Created PNG_OUT_OF_RANGE() macro.
  Revised documentation of png_set_keep_unknown_chunks().
  Check handle_as_unknown status in pngpread.c, as in pngread.c previously.
  Moved  "PNG_HANDLE_CHUNK_*" macros out of PNG_INTERNAL section of png.h
  Added "rim" definitions for CONST4 and CONST6 in pnggccrd.c

Version 1.0.16rc4 and 1.2.6rc4 [August 10, 2004]
  Fixed mistake in pngtest.c introduced in 1.2.6rc2 (declaration of
    "pinfo" was out of place).

Version 1.0.16rc5 and 1.2.6rc5 [August 10, 2004]
  Moved  "PNG_HANDLE_CHUNK_*" macros out of PNG_ASSEMBLER_CODE_SUPPORTED
    section of png.h where they were inadvertently placed in version rc3.

Version 1.2.6 and 1.0.16 [August 15, 2004]
  Revised pngtest so memory allocation testing is only done when PNG_DEBUG==1.

Version 1.2.7beta1 [August 26, 2004]
  Removed unused pngasmrd.h file.
  Removed references to uu.net for archived files.  Added references to
    PNG Spec (second edition) and the PNG ISO/IEC Standard.
  Added "test-dd" target in 15 makefiles, to run pngtest in DESTDIR.
  Fixed bug with "optimized window size" in the IDAT datastream, that
    causes libpng to write PNG files with incorrect zlib header bytes.

Version 1.2.7beta2 [August 28, 2004]
  Fixed bug with sCAL chunk and big-endian machines (David Munro).
  Undid new code added in 1.2.6rc2 to update the color_type in
    png_set_filler().
  Added png_set_add_alpha() that updates color type.

Version 1.0.17rc1 and 1.2.7rc1 [September 4, 2004]
  Revised png_set_strip_filler() to not remove alpha if color_type has alpha.

Version 1.2.7 and 1.0.17 [September 12, 2004]
  Added makefile.hp64
  Changed projects/msvc/png32ms.def to scripts/png32ms.def in makefile.cygwin

Version 1.2.8beta1 [November 1, 2004]
  Fixed bug in png_text_compress() that would fail to complete a large block.
  Fixed bug, introduced in libpng-1.2.7, that overruns a buffer during
    strip alpha operation in png_do_strip_filler().
  Added PNG_1_2_X definition in pngconf.h
  Use #ifdef to comment out png_info_init in png.c and png_read_init in
    pngread.c (as of 1.3.0)

Version 1.2.8beta2 [November 2, 2004]
  Reduce color_type to a nonalpha type after strip alpha operation in
    png_do_strip_filler().

Version 1.2.8beta3 [November 3, 2004]
  Revised definitions of PNG_MAX_UINT_32, PNG_MAX_SIZE, and PNG_MAXSUM

Version 1.2.8beta4 [November 12, 2004]
  Fixed (again) definition of PNG_LIBPNG_VER_DLLNUM in png.h (Cosmin).
  Added PNG_LIBPNG_BUILD_PRIVATE in png.h (Cosmin).
  Set png_ptr->zstream.data_type to Z_BINARY, to avoid unnecessary detection
    of data type in deflate (Cosmin).
  Deprecated but continue to support SPECIALBUILD and PRIVATEBUILD in favor of
    PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.

Version 1.2.8beta5 [November 20, 2004]
  Use png_ptr->flags instead of png_ptr->transformations to pass
    PNG_STRIP_ALPHA info to png_do_strip_filler(), to preserve ABI
    compatibility.
  Revised handling of SPECIALBUILD, PRIVATEBUILD,
    PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.

Version 1.2.8rc1 [November 24, 2004]
  Moved handling of BUILD macros from pngconf.h to png.h
  Added definition of PNG_LIBPNG_BASE_TYPE in png.h, inadvertently
    omitted from beta5.
  Revised scripts/pngw32.rc
  Despammed mailing addresses by masking "@" with "at".
  Inadvertently installed a supposedly faster test version of pngrutil.c

Version 1.2.8rc2 [November 26, 2004]
  Added two missing "\" in png.h
  Change tests in pngread.c and pngpread.c to
    if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
       png_do_read_transformations(png_ptr);

Version 1.2.8rc3 [November 28, 2004]
  Reverted pngrutil.c to version libpng-1.2.8beta5.
  Added scripts/makefile.elf with supporting code in pngconf.h for symbol
    versioning (John Bowler).

Version 1.2.8rc4 [November 29, 2004]
  Added projects/visualc7 (Simon-pierre).

Version 1.2.8rc5 [November 29, 2004]
  Fixed new typo in scripts/pngw32.rc

Version 1.2.8 [December 3, 2004]
  Removed projects/visualc7, added projects/visualc71.

Version 1.2.9beta1 [February 21, 2006]
  Initialized some structure members in pngwutil.c to avoid gcc-4.0.0\
 complaints
  Revised man page and libpng.txt to make it clear that one should not call
    png_read_end or png_write_end after png_read_png or png_write_png.
  Updated references to png-mng-implement mailing list.
  Fixed an incorrect typecast in pngrutil.c
  Added PNG_NO_READ_SUPPORTED conditional for making a write-only library.
  Added PNG_NO_WRITE_INTERLACING_SUPPORTED conditional.
  Optimized alpha-inversion loops in pngwtran.c
  Moved test for nonzero gamma outside of png_build_gamma_table() in\
 pngrtran.c
  Make sure num_trans is <= 256 before copying data in png_set_tRNS().
  Make sure num_palette is <= 256 before copying data in png_set_PLTE().
  Interchanged order of write_swap_alpha and write_invert_alpha transforms.
  Added parentheses in the definition of PNG_LIBPNG_BUILD_TYPE (Cosmin).
  Optimized zlib window flag (CINFO) in contrib/pngsuite/*.png (Cosmin).
  Updated scripts/makefile.bc32 for Borland C++ 5.6 (Cosmin).
  Exported png_get_uint_32, png_save_uint_32, png_get_uint_16,\
 png_save_uint_16,
    png_get_int_32, png_save_int_32, png_get_uint_31 (Cosmin).
  Added type cast (png_byte) in png_write_sCAL() (Cosmin).
  Fixed scripts/makefile.cygwin (Christian Biesinger, Cosmin).
  Default iTXt support was inadvertently enabled.

Version 1.2.9beta2 [February 21, 2006]
  Check for png_rgb_to_gray and png_gray_to_rgb read transformations before
    checking for png_read_dither in pngrtran.c
  Revised checking of chromaticity limits to accommodate extended RGB
    colorspace (John Denker).
  Changed line endings in some of the project files to CRLF, even in the
    "Unix" tar distributions (Cosmin).
  Made png_get_int_32 and png_save_int_32 always available (Cosmin).
  Updated scripts/pngos2.def, scripts/pngw32.def and projects/wince/png32ce.d\
ef
    with the newly exported functions.
  Eliminated distributions without the "configure" script.
  Updated INSTALL instructions.

Version 1.2.9beta3 [February 24, 2006]
  Fixed CRCRLF line endings in contrib/visupng/VisualPng.dsp
  Made libpng.pc respect EXEC_PREFIX (D. P. Kreil, J. Bowler)
  Removed reference to pngasmrd.h from Makefile.am
  Renamed CHANGES to ChangeLog.
  Renamed LICENSE to COPYING.
  Renamed ANNOUNCE to NEWS.
  Created AUTHORS file.

Version 1.2.9beta4 [March 3, 2006]
  Changed definition of PKGCONFIG from $prefix/lib to $libdir in configure.ac
  Reverted to filenames LICENSE and ANNOUNCE; removed AUTHORS and COPYING.
  Removed newline from the end of some error and warning messages.
  Removed test for sqrt() from configure.ac and configure.
  Made swap tables in pngtrans.c PNG_CONST (Carlo Bramix).
  Disabled default iTXt support that was inadvertently enabled in
    libpng-1.2.9beta1.
  Added "OS2" to list of systems that don't need underscores, in pnggccrd.c
  Removed libpng version and date from *.c files.

Version 1.2.9beta5 [March 4, 2006]
  Removed trailing blanks from source files.
  Put version and date of latest change in each source file, and changed
    copyright year accordingly.
  More cleanup of configure.ac, Makefile.am, and associated scripts.
  Restored scripts/makefile.elf which was inadvertently deleted.

Version 1.2.9beta6 [March 6, 2006]
  Fixed typo (RELEASE) in configuration files.

Version 1.2.9beta7 [March 7, 2006]
  Removed libpng.vers and libpng.sym from libpng12_la_SOURCES in Makefile.am
  Fixed inconsistent #ifdef's around png_sig_bytes() and png_set_sCAL_s()
    in png.h.
  Updated makefile.elf as suggested by debian.
  Made cosmetic changes to some makefiles, adding LN_SF and other macros.
  Made some makefiles accept "exec_prefix".

Version 1.2.9beta8 [March 9, 2006]
  Fixed some "#if defined (..." which should be "#if defined(..."
    Bug introduced in libpng-1.2.8.
  Fixed inconsistency in definition of png_default_read_data()
  Restored blank that was lost from makefile.sggcc "clean" target in beta7.
  Revised calculation of "current" and "major" for irix in ltmain.sh
  Changed "mkdir" to "MKDIR_P" in some makefiles.
  Separated PNG_EXPAND and PNG_EXPAND_tRNS.
  Added png_set_expand_gray_1_2_4_to_8() and deprecated
    png_set_gray_1_2_4_to_8() which also expands tRNS to alpha.

Version 1.2.9beta9 [March 10, 2006]
  Include "config.h" in pngconf.h when available.
  Added some checks for NULL png_ptr or NULL info_ptr (timeless)

Version 1.2.9beta10 [March 20, 2006]
  Removed extra CR from contrib/visualpng/VisualPng.dsw (Cosmin)
  Made pnggccrd.c PIC-compliant (Christian Aichinger).
  Added makefile.mingw (Wolfgang Glas).
  Revised pngconf.h MMX checking.

Version 1.2.9beta11 [March 22, 2006]
  Fixed out-of-order declaration in pngwrite.c that was introduced in beta9
  Simplified some makefiles by using LIBSO, LIBSOMAJ, and LIBSOVER macros.

Version 1.2.9rc1 [March 31, 2006]
  Defined PNG_USER_PRIVATEBUILD when including "pngusr.h" (Cosmin).
  Removed nonsensical assertion check from pngtest.c (Cosmin).

Version 1.2.9 [April 14, 2006]
  Revised makefile.beos and added "none" selector in ltmain.sh

Version 1.2.10beta1 [April 15, 2006]
  Renamed "config.h" to "png_conf.h" and revised Makefile.am to add
    -DPNG_BUILDING_LIBPNG to compile directive, and modified pngconf.h
    to include png_conf.h only when PNG_BUILDING_LIBPNG is defined.

Version 1.2.10beta2 [April 15, 2006]
  Manually updated Makefile.in and configure.  Changed png_conf.h.in
    back to config.h.

Version 1.2.10beta3 [April 15, 2006]
  Change png_conf.h back to config.h in pngconf.h.

Version 1.2.10beta4 [April 16, 2006]
  Change PNG_BUILDING_LIBPNG to PNG_CONFIGURE_LIBPNG in config/Makefile*.

Version 1.2.10beta5 [April 16, 2006]
  Added a configure check for compiling assembler code in pnggccrd.c

Version 1.2.10beta6 [April 17, 2006]
  Revised the configure check for pnggccrd.c
  Moved -DPNG_CONFIGURE_LIBPNG into @LIBPNG_DEFINES@
  Added @LIBPNG_DEFINES@ to arguments when building libpng.sym

Version 1.2.10beta7 [April 18, 2006]
  Change "exec_prefix=$prefix" to "exec_prefix=$(prefix)" in makefiles.

Version 1.2.10rc1 [April 19, 2006]
  Ensure pngconf.h doesn't define both PNG_USE_PNGGCCRD and PNG_USE_PNGVCRD
  Fixed "LN_FS" typo in makefile.sco and makefile.solaris.

Version 1.2.10rc2 [April 20, 2006]
  Added a backslash between -DPNG_CONFIGURE_LIBPNG and -DPNG_NO_ASSEMBLER_CODE
   in configure.ac and configure
  Made the configure warning about versioned symbols less arrogant.

Version 1.2.10rc3 [April 21, 2006]
  Added a note in libpng.txt that png_set_sig_bytes(8) can be used when
    writing an embedded PNG without the 8-byte signature.
  Revised makefiles and configure to avoid making links to libpng.so.*

Version 1.2.10 [April 23, 2006]
  Reverted configure to "rc2" state.

Version 1.2.11beta1 [May 31, 2006]
  scripts/libpng.pc.in contained "configure" style version info and would
    not work with makefiles.
  The shared-library makefiles were linking to libpng.so.0 instead of
    libpng.so.3 compatibility as the library.

Version 1.2.11beta2 [June 2, 2006]
  Increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
    buffer overflow.
  Fixed bug in example.c (png_set_palette_rgb -> png_set_palette_to_rgb)

Version 1.2.11beta3 [June 5, 2006]
  Prepended "#! /bin/sh" to ltmail.sh and contrib/pngminus/*.sh (Cosmin).
  Removed the accidental leftover Makefile.in~ (Cosmin).
  Avoided potential buffer overflow and optimized buffer in
    png_write_sCAL(), png_write_sCAL_s() (Cosmin).
  Removed the include directories and libraries from CFLAGS and LDFLAGS
    in scripts/makefile.gcc (Nelson A. de Oliveira, Cosmin).

Version 1.2.11beta4 [June 6, 2006]
  Allow zero-length IDAT chunks after the entire zlib datastream, but not
    after another intervening chunk type.

Version 1.0.19rc1, 1.2.11rc1 [June 13, 2006]
  Deleted extraneous square brackets from [config.h] in configure.ac

Version 1.0.19rc2, 1.2.11rc2 [June 14, 2006]
  Added prototypes for PNG_INCH_CONVERSIONS functions to png.h
  Revised INSTALL and autogen.sh
  Fixed typo in several makefiles (-W1 should be -Wl)
  Added typedef for png_int_32 and png_uint_32 on 64-bit systems.

Version 1.0.19rc3, 1.2.11rc3 [June 15, 2006]
  Removed the new typedefs for 64-bit systems (delay until version 1.4.0)
  Added one zero element to png_gamma_shift[] array in pngrtran.c to avoid
    reading out of bounds.

Version 1.0.19rc4, 1.2.11rc4 [June 15, 2006]
  Really removed the new typedefs for 64-bit systems.

Version 1.0.19rc5, 1.2.11rc5 [June 22, 2006]
  Removed png_sig_bytes entry from scripts/pngw32.def

Version 1.0.19, 1.2.11 [June 26, 2006]
  None.

Version 1.0.20, 1.2.12 [June 27, 2006]
  Really increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
    buffer overflow.

Version 1.2.13beta1 [October 2, 2006]
  Removed AC_FUNC_MALLOC from configure.ac
  Work around Intel-Mac compiler bug by setting PNG_NO_MMX_CODE in pngconf.h
  Change "logical" to "bitwise" throughout documentation.
  Detect and fix attempt to write wrong iCCP profile length (CVE-2006-7244)

Version 1.0.21, 1.2.13 [November 14, 2006]
  Fix potential buffer overflow in sPLT chunk handler.
  Fix Makefile.am to not try to link to noexistent files.
  Check all exported functions for NULL png_ptr.

Version 1.2.14beta1 [November 17, 2006]
  Relocated three misplaced tests for NULL png_ptr.
  Built Makefile.in with automake-1.9.6 instead of 1.9.2.
  Build configure with autoconf-2.60 instead of 2.59

Version 1.2.14beta2 [November 17, 2006]
  Added some typecasts in png_zalloc().

Version 1.2.14rc1 [November 20, 2006]
  Changed "strtod" to "png_strtod" in pngrutil.c

Version 1.0.22, 1.2.14    [November 27, 2006]
  Added missing "$(srcdir)" in Makefile.am and Makefile.in

Version 1.2.15beta1 [December 3, 2006]
  Generated configure with autoconf-2.61 instead of 2.60
  Revised configure.ac to update libpng.pc and libpng-config.

Version 1.2.15beta2 [December 3, 2006]
  Always export MMX asm functions, just stubs if not building pnggccrd.c

Version 1.2.15beta3 [December 4, 2006]
  Add "png_bytep" typecast to profile while calculating length in pngwutil.c

Version 1.2.15beta4 [December 7, 2006]
  Added scripts/CMakeLists.txt
  Changed PNG_NO_ASSEMBLER_CODE to PNG_NO_MMX_CODE in scripts, like 1.4.0beta

Version 1.2.15beta5 [December 7, 2006]
  Changed some instances of PNG_ASSEMBLER_* to PNG_MMX_* in pnggccrd.c
  Revised scripts/CMakeLists.txt

Version 1.2.15beta6 [December 13, 2006]
  Revised scripts/CMakeLists.txt and configure.ac

Version 1.2.15rc1 [December 18, 2006]
  Revised scripts/CMakeLists.txt

Version 1.2.15rc2 [December 21, 2006]
  Added conditional #undef jmpbuf in pngtest.c to undo #define in AIX headers.
  Added scripts/makefile.nommx

Version 1.2.15rc3 [December 25, 2006]
  Fixed shared library numbering error that was introduced in 1.2.15beta6.

Version 1.2.15rc4 [December 27, 2006]
  Fixed handling of rgb_to_gray when png_ptr->color.gray isn't set.

Version 1.2.15rc5 [December 31, 2006]
  Revised handling of rgb_to_gray.

Version 1.2.15 [January 5, 2007]
  Added some (unsigned long) typecasts in pngtest.c to avoid printing errors.

Version 1.2.16beta1 [January 6, 2007]
  Fix bugs in makefile.nommx

Version 1.2.16beta2 [January 16, 2007]
  Revised scripts/CMakeLists.txt

Version 1.2.16 [January 31, 2007]
  No changes.

Version 1.2.17beta1 [March 6, 2007]
  Revised scripts/CMakeLists.txt to install both shared and static libraries.
  Deleted a redundant line from pngset.c.

Version 1.2.17beta2 [April 26, 2007]
  Relocated misplaced test for png_ptr == NULL in pngpread.c
  Change "==" to "&" for testing PNG_RGB_TO_GRAY_ERR & PNG_RGB_TO_GRAY_WARN
    flags.
  Changed remaining instances of PNG_ASSEMBLER_* to PNG_MMX_*
  Added pngerror() when write_IHDR fails in deflateInit2().
  Added "const" to some array declarations.
  Mention examples of libpng usage in the libpng*.txt and libpng.3 documents.

Version 1.2.17rc1 [May 4, 2007]
  No changes.

Version 1.2.17rc2 [May 8, 2007]
  Moved several PNG_HAVE_* macros out of PNG_INTERNAL because applications
    calling set_unknown_chunk_location() need them.
  Changed transformation flag from PNG_EXPAND_tRNS to PNG_EXPAND in
    png_set_expand_gray_1_2_4_to_8().
  Added png_ptr->unknown_chunk to hold working unknown chunk data, so it
    can be free'ed in case of error.  Revised unknown chunk handling in
    pngrutil.c and pngpread.c to use this structure.

Version 1.2.17rc3 [May 8, 2007]
  Revised symbol-handling in configure script.

Version 1.2.17rc4 [May 10, 2007]
  Revised unknown chunk handling to avoid storing unknown critical chunks.

Version 1.0.25 [May 15, 2007]
Version 1.2.17 [May 15, 2007]
  Added "png_ptr->num_trans=0" before error return in png_handle_tRNS,
    to eliminate a vulnerability (CVE-2007-2445, CERT VU#684664)

Version 1.0.26 [May 15, 2007]
Version 1.2.18 [May 15, 2007]
  Reverted the libpng-1.2.17rc3 change to symbol-handling in configure script

Version 1.2.19beta1 [May 18, 2007]
  Changed "const static" to "static PNG_CONST" everywhere, mostly undoing
    change of libpng-1.2.17beta2.  Changed other "const" to "PNG_CONST"
  Changed some handling of unused parameters, to avoid compiler warnings.
    "if (unused == NULL) return;" becomes "unused = unused".

Version 1.2.19beta2 [May 18, 2007]
  Only use the valid bits of tRNS value in png_do_expand() (Brian Cartier)

Version 1.2.19beta3 [May 19, 2007]
  Add some "png_byte" typecasts in png_check_keyword() and write new_key
  instead of key in zTXt chunk (Kevin Ryde).

Version 1.2.19beta4 [May 21, 2007]
  Add png_snprintf() function and use it in place of sprint() for improved
    defense against buffer overflows.

Version 1.2.19beta5 [May 21, 2007]
  Fixed png_handle_tRNS() to only use the valid bits of tRNS value.
  Changed handling of more unused parameters, to avoid compiler warnings.
  Removed some PNG_CONST in pngwutil.c to avoid compiler warnings.

Version 1.2.19beta6 [May 22, 2007]
  Added some #ifdef PNG_MMX_CODE_SUPPORTED where needed in pngvcrd.c
  Added a special "_MSC_VER" case that defines png_snprintf to _snprintf

Version 1.2.19beta7 [May 22, 2007]
  Squelched png_squelch_warnings() in pnggccrd.c and added
    an #ifdef PNG_MMX_CODE_SUPPORTED block around the declarations that caused
    the warnings that png_squelch_warnings was squelching.

Version 1.2.19beta8 [May 22, 2007]
  Removed __MMX__ from test in pngconf.h.

Version 1.2.19beta9 [May 23, 2007]
  Made png_squelch_warnings() available via PNG_SQUELCH_WARNINGS macro.
  Revised png_squelch_warnings() so it might work.
  Updated makefile.sgcc and makefile.solaris; added makefile.solaris-x86.

Version 1.2.19beta10 [May 24, 2007]
  Resquelched png_squelch_warnings(), use "__attribute__((used))" instead.

Version 1.4.0beta1 [April 20, 2006]
  Enabled iTXt support (changes png_struct, thus requires so-number change).
  Cleaned up PNG_ASSEMBLER_CODE_SUPPORTED vs PNG_MMX_CODE_SUPPORTED
  Eliminated PNG_1_0_X and PNG_1_2_X macros.
  Removed deprecated functions png_read_init, png_write_init, png_info_init,
    png_permit_empty_plte, png_set_gray_1_2_4_to_8, png_check_sig, and
    removed the deprecated macro PNG_MAX_UINT.
  Moved "PNG_INTERNAL" parts of png.h and pngconf.h into pngintrn.h
  Removed many WIN32_WCE #ifdefs (Cosmin).
  Reduced dependency on C-runtime library when on Windows (Simon-Pierre)
  Replaced sprintf() with png_sprintf() (Simon-Pierre)

Version 1.4.0beta2 [April 20, 2006]
  Revised makefiles and configure to avoid making links to libpng.so.*
  Moved some leftover MMX-related defines from pngconf.h to pngintrn.h
  Updated scripts/pngos2.def, pngw32.def, and projects/wince/png32ce.def

Version 1.4.0beta3 [May 10, 2006]
  Updated scripts/pngw32.def to comment out MMX functions.
  Added PNG_NO_GET_INT_32 and PNG_NO_SAVE_INT_32 macros.
  Scripts/libpng.pc.in contained "configure" style version info and would
    not work with makefiles.
  Revised pngconf.h and added pngconf.h.in, so makefiles and configure can
    pass defines to libpng and applications.

Version 1.4.0beta4 [May 11, 2006]
  Revised configure.ac, Makefile.am, and many of the makefiles to write
    their defines in pngconf.h.

Version 1.4.0beta5 [May 15, 2006]
  Added a missing semicolon in Makefile.am and Makefile.in
  Deleted extraneous square brackets from configure.ac

Version 1.4.0beta6 [June 2, 2006]
  Increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
    buffer overflow.
  Changed sonum from 0 to 1.
  Removed unused prototype for png_check_sig() from png.h

Version 1.4.0beta7 [June 16, 2006]
  Exported png_write_sig (Cosmin).
  Optimized buffer in png_handle_cHRM() (Cosmin).
  Set pHYs = 2835 x 2835 pixels per meter, and added
    sCAL = 0.352778e-3 x 0.352778e-3 meters, in pngtest.png (Cosmin).
  Added png_set_benign_errors(), png_benign_error(), png_chunk_benign_error().
  Added typedef for png_int_32 and png_uint_32 on 64-bit systems.
  Added "(unsigned long)" typecast on png_uint_32 variables in printf lists.

Version 1.4.0beta8 [June 22, 2006]
  Added demonstration of user chunk support in pngtest.c, to support the
    public sTER chunk and a private vpAg chunk.

Version 1.4.0beta9 [July 3, 2006]
  Removed ordinals from scripts/pngw32.def and removed png_info_int and
    png_set_gray_1_2_4_to_8 entries.
  Inline call of png_get_uint_32() in png_get_uint_31().
  Use png_get_uint_31() to get vpAg width and height in pngtest.c
  Removed WINCE and Netware projects.
  Removed standalone Y2KINFO file.

Version 1.4.0beta10 [July 12, 2006]
  Eliminated automatic copy of pngconf.h to pngconf.h.in from configure and
    some makefiles, because it was not working reliably.  Instead, distribute
    pngconf.h.in along with pngconf.h and cause configure and some of the
    makefiles to update pngconf.h from pngconf.h.in.
  Added pngconf.h to DEPENDENCIES in Makefile.am

Version 1.4.0beta11 [August 19, 2006]
  Removed AC_FUNC_MALLOC from configure.ac.
  Added a warning when writing iCCP profile with mismatched profile length.
  Patched pnggccrd.c to assemble on x86_64 platforms.
  Moved chunk header reading into a separate function png_read_chunk_header()
    in pngrutil.c.  The chunk header (len+sig) is now serialized in a single
    operation (Cosmin).
  Implemented support for I/O states. Added png_ptr member io_state, and
    functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
    (Cosmin).
  Added png_get_io_chunk_name and png_get_io_state to scripts/*.def (Cosmin).
  Renamed scripts/pngw32.* to scripts/pngwin.* (Cosmin).
  Removed the include directories and libraries from CFLAGS and LDFLAGS
    in scripts/makefile.gcc (Cosmin).
  Used png_save_uint_32() to set vpAg width and height in pngtest.c (Cosmin).
  Cast to proper type when getting/setting vpAg units in pngtest.c (Cosmin).
  Added pngintrn.h to the Visual C++ projects (Cosmin).
  Removed scripts/list (Cosmin).
  Updated copyright year in scripts/pngwin.def (Cosmin).
  Removed PNG_TYPECAST_NULL and used standard NULL consistently (Cosmin).
  Disallowed the user to redefine png_size_t, and enforced a consistent use
    of png_size_t across libpng (Cosmin).
  Changed the type of png_ptr->rowbytes, PNG_ROWBYTES() and friends
    to png_size_t (Cosmin).
  Removed png_convert_size() and replaced png_sizeof with sizeof (Cosmin).
  Removed some unnecessary type casts (Cosmin).
  Changed prototype of png_get_compression_buffer_size() and
    png_set_compression_buffer_size() to work with png_size_t instead of
    png_uint_32 (Cosmin).
  Removed png_memcpy_check() and png_memset_check() (Cosmin).
  Fixed a typo (png_byte --> png_bytep) in libpng.3 and libpng.txt (Cosmin).
  Clarified that png_zalloc() does not clear the allocated memory,
    and png_zalloc() and png_zfree() cannot be PNGAPI (Cosmin).
  Renamed png_mem_size_t to png_alloc_size_t, fixed its definition in
    pngconf.h, and used it in all memory allocation functions (Cosmin).
  Renamed pngintrn.h to pngpriv.h, added a comment at the top of the file
    mentioning that the symbols declared in that file are private, and
    updated the scripts and the Visual C++ projects accordingly (Cosmin).
  Removed circular references between pngconf.h and pngconf.h.in in
    scripts/makefile.vc*win32 (Cosmin).
  Removing trailing '.' from the warning and error messages (Cosmin).
  Added pngdefs.h that is built by makefile or configure, instead of
    pngconf.h.in (Glenn).
  Detect and fix attempt to write wrong iCCP profile length.

Version 1.4.0beta12 [October 19, 2006]
  Changed "logical" to "bitwise" in the documentation.
  Work around Intel-Mac compiler bug by setting PNG_NO_MMX_CODE in pngconf.h
  Add a typecast to stifle compiler warning in pngrutil.c

Version 1.4.0beta13 [November 10, 2006]
  Fix potential buffer overflow in sPLT chunk handler.
  Fix Makefile.am to not try to link to noexistent files.

Version 1.4.0beta14 [November 15, 2006]
  Check all exported functions for NULL png_ptr.

Version 1.4.0beta15 [November 17, 2006]
  Relocated two misplaced tests for NULL png_ptr.
  Built Makefile.in with automake-1.9.6 instead of 1.9.2.
  Build configure with autoconf-2.60 instead of 2.59
  Add "install: all" in Makefile.am so "configure; make install" will work.

Version 1.4.0beta16 [November 17, 2006]
  Added a typecast in png_zalloc().

Version 1.4.0beta17 [December 4, 2006]
  Changed "new_key[79] = '\0';" to "(*new_key)[79] = '\0';" in pngwutil.c
  Add "png_bytep" typecast to profile while calculating length in pngwutil.c

Version 1.4.0beta18 [December 7, 2006]
  Added scripts/CMakeLists.txt

Version 1.4.0beta19 [May 16, 2007]
  Revised scripts/CMakeLists.txt
  Rebuilt configure and Makefile.in with newer tools.
  Added conditional #undef jmpbuf in pngtest.c to undo #define in AIX headers.
  Added scripts/makefile.nommx

Version 1.4.0beta20 [July 9, 2008]
  Moved several PNG_HAVE_* macros from pngpriv.h to png.h because applications
    calling set_unknown_chunk_location() need them.
  Moved several macro definitions from pngpriv.h to pngconf.h
  Merge with changes to the 1.2.X branch, as of 1.2.30beta04.
  Deleted all use of the MMX assembler code and Intel-licensed optimizations.
  Revised makefile.mingw

Version 1.4.0beta21 [July 21, 2008]
  Moved local array "chunkdata" from pngrutil.c to the png_struct, so
    it will be freed by png_read_destroy() in case of a read error (Kurt
    Christensen).

Version 1.4.0beta22 [July 21, 2008]
  Change "purpose" and "buffer" to png_ptr->chunkdata to avoid memory leaking.

Version 1.4.0beta23 [July 22, 2008]
  Change "chunkdata = NULL" to "png_ptr->chunkdata = NULL" several places in
    png_decompress_chunk().

Version 1.4.0beta24 [July 25, 2008]
  Change all remaining "chunkdata" to "png_ptr->chunkdata" in
    png_decompress_chunk(), and remove "chunkdata" from parameter list.
  Put a call to png_check_chunk_name() in png_read_chunk_header().
  Revised png_check_chunk_name() to reject a name with a lowercase 3rd byte.
  Removed two calls to png_check_chunk_name() occurring later in the process.
  Define PNG_NO_ERROR_NUMBERS by default in pngconf.h

Version 1.4.0beta25 [July 30, 2008]
  Added a call to png_check_chunk_name() in pngpread.c
  Reverted png_check_chunk_name() to accept a name with a lowercase 3rd byte.
  Added png_push_have_buffer() function to pngpread.c
  Eliminated PNG_BIG_ENDIAN_SUPPORTED and associated png_get_* macros.
  Made inline expansion of png_get_*() optional with PNG_USE_READ_MACROS.
  Eliminated all PNG_USELESS_TESTS and PNG_CORRECT_PALETTE_SUPPORTED code.
  Synced contrib directory and configure files with libpng-1.2.30beta06.
  Eliminated no-longer-used pngdefs.h (but it's still built in the makefiles)
  Relocated a misplaced "#endif /* PNG_NO_WRITE_FILTER */" in pngwutil.c

Version 1.4.0beta26 [August 4, 2008]
  Removed png_push_have_buffer() function in pngpread.c.  It increased the
    compiled library size slightly.
  Changed "-Wall" to "-W -Wall" in the CFLAGS in all makefiles (Cosmin Truta)
  Declared png_ptr "volatile" in pngread.c and pngwrite.c to avoid warnings.
  Updated contrib/visupng/cexcept.h to version 2.0.1
  Added PNG_LITERAL_CHARACTER macros for #, [, and ].

Version 1.4.0beta27 [August 5, 2008]
  Revised usage of PNG_LITERAL_SHARP in pngerror.c.
  Moved newline character from individual png_debug messages into the
    png_debug macros.
  Allow user to #define their own png_debug, png_debug1, and png_debug2.

Version 1.4.0beta28 [August 5, 2008]
  Revised usage of PNG_LITERAL_SHARP in pngerror.c.
  Added PNG_STRING_NEWLINE macro

Version 1.4.0beta29 [August 9, 2008]
  Revised usage of PNG_STRING_NEWLINE to work on non-ISO compilers.
  Added PNG_STRING_COPYRIGHT macro.
  Added non-ISO versions of png_debug macros.

Version 1.4.0beta30 [August 14, 2008]
  Added premultiplied alpha feature (Volker Wiendl).

Version 1.4.0beta31 [August 18, 2008]
  Moved png_set_premultiply_alpha from pngtrans.c to pngrtran.c
  Removed extra crc check at the end of png_handle_cHRM().  Bug introduced
    in libpng-1.4.0beta20.

Version 1.4.0beta32 [August 19, 2008]
  Added PNG_WRITE_FLUSH_SUPPORTED block around new png_flush() call.
  Revised PNG_NO_STDIO version of png_write_flush()

Version 1.4.0beta33 [August 20, 2008]
  Added png_get|set_chunk_cache_max() to limit the total number of sPLT,
    text, and unknown chunks that can be stored.

Version 1.4.0beta34 [September 6, 2008]
  Shortened tIME_string to 29 bytes in pngtest.c
  Fixed off-by-one error introduced in png_push_read_zTXt() function in
    libpng-1.2.30beta04/pngpread.c (Harald van Dijk)

Version 1.4.0beta35 [October 6, 2008]
  Changed "trans_values" to "trans_color".
  Changed so-number from 0 to 14.  Some OS do not like 0.
  Revised makefile.darwin to fix shared library numbering.
  Change png_set_gray_1_2_4_to_8() to png_set_expand_gray_1_2_4_to_8()
    in example.c (debian bug report)

Version 1.4.0beta36 [October 25, 2008]
  Sync with tEXt vulnerability fix in libpng-1.2.33rc02.

Version 1.4.0beta37 [November 13, 2008]
  Added png_check_cHRM in png.c and moved checking from pngget.c, pngrutil.c,
    and pngwrite.c

Version 1.4.0beta38 [November 22, 2008]
  Added check for zero-area RGB cHRM triangle in png_check_cHRM() and
    png_check_cHRM_fixed().

Version 1.4.0beta39 [November 23, 2008]
  Revised png_warning() to write its message on standard output by default
    when warning_fn is NULL.

Version 1.4.0beta40 [November 24, 2008]
  Eliminated png_check_cHRM().  Instead, always use png_check_cHRM_fixed().
  In png_check_cHRM_fixed(), ensure white_y is > 0, and removed redundant
    check for all-zero coordinates that is detected by the triangle check.

Version 1.4.0beta41 [November 26, 2008]
  Fixed string vs pointer-to-string error in png_check_keyword().
  Rearranged test expressions in png_check_cHRM_fixed() to avoid internal
    overflows.
  Added PNG_NO_CHECK_cHRM conditional.

Version 1.4.0beta42, 43 [December 1, 2008]
  Merge png_debug with version 1.2.34beta04.

Version 1.4.0beta44 [December 6, 2008]
  Removed redundant check for key==NULL before calling png_check_keyword()
    to ensure that new_key gets initialized and removed extra warning
    (Merge with version 1.2.34beta05 -- Arvan Pritchard).

Version 1.4.0beta45 [December 9, 2008]
  In png_write_png(), respect the placement of the filler bytes in an earlier
    call to png_set_filler() (Jim Barry).

Version 1.4.0beta46 [December 10, 2008]
  Undid previous change and added PNG_TRANSFORM_STRIP_FILLER_BEFORE and
    PNG_TRANSFORM_STRIP_FILLER_AFTER conditionals and deprecated
    PNG_TRANSFORM_STRIP_FILLER (Jim Barry).

Version 1.4.0beta47 [December 15, 2008]
  Support for dithering was disabled by default, because it has never
    been well tested and doesn't work very well.  The code has not
    been removed, however, and can be enabled by building libpng with
    PNG_READ_DITHER_SUPPORTED defined.

Version 1.4.0beta48 [February 14, 2009]
  Added new exported function png_calloc().
  Combined several instances of png_malloc(); png_memset() into png_calloc().
  Removed prototype for png_freeptr() that was added in libpng-1.4.0beta24
    but was never defined.

Version 1.4.0beta49 [February 28, 2009]
  Added png_fileno() macro to pngconf.h, used in pngwio.c
  Corrected order of #ifdef's in png_debug definition in png.h
  Fixed bug introduced in libpng-1.4.0beta48 with the memset arguments
    for pcal_params.
  Fixed order of #ifdef directives in the png_debug defines in png.h
    (bug introduced in libpng-1.2.34/1.4.0beta29).
  Revised comments in png_set_read_fn() and png_set_write_fn().

Version 1.4.0beta50 [March 18, 2009]
  Use png_calloc() instead of png_malloc() to allocate big_row_buf when
    reading an interlaced file, to avoid a possible UMR.
  Undid revision of PNG_NO_STDIO version of png_write_flush().  Users
    having trouble with fflush() can build with PNG_NO_WRITE_FLUSH defined
    or supply their own flush_fn() replacement.
  Revised libpng*.txt and png.h documentation about use of png_write_flush()
    and png_set_write_fn().
  Removed fflush() from pngtest.c.
  Added "#define PNG_NO_WRITE_FLUSH" to contrib/pngminim/encoder/pngusr.h

Version 1.4.0beta51 [March 21, 2009]
  Removed new png_fileno() macro from pngconf.h .

Version 1.4.0beta52 [March 27, 2009]
  Relocated png_do_chop() ahead of building gamma tables in pngrtran.c
    This avoids building 16-bit gamma tables unnecessarily.
  Removed fflush() from pngtest.c.
  Added "#define PNG_NO_WRITE_FLUSH" to contrib/pngminim/encoder/pngusr.h
  Added a section on differences between 1.0.x and 1.2.x to\
 libpng.3/libpng.txt

Version 1.4.0beta53 [April 1, 2009]
  Removed some remaining MMX macros from pngpriv.h
  Fixed potential memory leak of "new_name" in png_write_iCCP() (Ralph Giles)

Version 1.4.0beta54 [April 13, 2009]
  Added "ifndef PNG_SKIP_SETJMP_CHECK" block in pngconf.h to allow
    application code writers to bypass the check for multiple inclusion
    of setjmp.h when they know that it is safe to ignore the situation.
  Eliminated internal use of setjmp() in pngread.c and pngwrite.c
  Reordered ancillary chunks in pngtest.png to be the same as what
    pngtest now produces, and made some cosmetic changes to pngtest output.
  Eliminated deprecated png_read_init_3() and png_write_init_3() functions.

Version 1.4.0beta55 [April 15, 2009]
  Simplified error handling in pngread.c and pngwrite.c by putting
    the new png_read_cleanup() and png_write_cleanup() functions inline.

Version 1.4.0beta56 [April 25, 2009]
  Renamed "user_chunk_data" to "my_user_chunk_data" in pngtest.c to suppress
    "shadowed declaration" warning from gcc-4.3.3.
  Renamed "gamma" to "png_gamma" in pngset.c to avoid "shadowed declaration"
    warning about a global "gamma" variable in math.h on some platforms.

Version 1.4.0beta57 [May 2, 2009]
  Removed prototype for png_freeptr() that was added in libpng-1.4.0beta24
    but was never defined (again).
  Rebuilt configure scripts with autoconf-2.63 instead of 2.62
  Removed pngprefs.h and MMX from makefiles

Version 1.4.0beta58 [May 14, 2009]
  Changed pngw32.def to pngwin.def in makefile.mingw (typo was introduced
    in beta57).
  Clarified usage of sig_bit versus sig_bit_p in example.c (Vincent Torri)

Version 1.4.0beta59 [May 15, 2009]
  Reformated sources in libpng style (3-space intentation, comment format)
  Fixed typo in libpng docs (PNG_FILTER_AVE should be PNG_FILTER_AVG)
  Added sections about the git repository and our coding style to the
    documentation
  Relocated misplaced #endif in pngwrite.c, sCAL chunk handler.

Version 1.4.0beta60 [May 19, 2009]
  Conditionally compile png_read_finish_row() which is not used by
    progressive readers.
  Added contrib/pngminim/preader to demonstrate building minimal progressive
    decoder, based on contrib/gregbook with embedded libpng and zlib.

Version 1.4.0beta61 [May 20, 2009]
  In contrib/pngminim/*, renamed "makefile.std" to "makefile", since there
    is only one makefile in those directories, and revised the README files
    accordingly.
  More reformatting of comments, mostly to capitalize sentences.

Version 1.4.0beta62 [June 2, 2009]
  Added "#define PNG_NO_WRITE_SWAP" to contrib/pngminim/encoder/pngusr.h
    and "define PNG_NO_READ_SWAP" to decoder/pngusr.h and preader/pngusr.h
  Reformatted several remaining "else statement" into two lines.
  Added a section to the libpng documentation about using png_get_io_ptr()
    in configure scripts to detect the presence of libpng.

Version 1.4.0beta63 [June 15, 2009]
  Revised libpng*.txt and libpng.3 to mention calling png_set_IHDR()
    multiple times and to specify the sample order in the tRNS chunk,
    because the ISO PNG specification has a typo in the tRNS table.
  Changed several PNG_UNKNOWN_CHUNK_SUPPORTED to
    PNG_HANDLE_AS_UNKNOWN_SUPPORTED, to make the png_set_keep mechanism
    available for ignoring known chunks even when not saving unknown chunks.
  Adopted preference for consistent use of "#ifdef" and "#ifndef" versus
    "#if defined()" and "if !defined()" where possible.

Version 1.4.0beta64 [June 24, 2009]
  Eliminated PNG_LEGACY_SUPPORTED code.
  Moved the various unknown chunk macro definitions outside of the
    PNG_READ|WRITE_ANCILLARY_CHUNK_SUPPORTED blocks.

Version 1.4.0beta65 [June 26, 2009]
  Added a reference to the libpng license in each file.

Version 1.4.0beta66 [June 27, 2009]
  Refer to the libpng license instead of the libpng license in each file.

Version 1.4.0beta67 [July 6, 2009]
  Relocated INVERT_ALPHA within png_read_png() and png_write_png().
  Added high-level API transform PNG_TRANSFORM_GRAY_TO_RGB.
  Added an "xcode" project to the projects directory (Alam Arias).

Version 1.4.0beta68 [July 19, 2009]
  Avoid some tests in filter selection in pngwutil.c

Version 1.4.0beta69 [July 25, 2009]
  Simplified the new filter-selection test.  This runs faster in the
    common "PNG_ALL_FILTERS" and PNG_FILTER_NONE cases.
  Removed extraneous declaration from the new call to png_read_gray_to_rgb()
    (bug introduced in libpng-1.4.0beta67).
  Fixed up xcode project (Alam Arias)
  Added a prototype for png_64bit_product() in png.c

Version 1.4.0beta70 [July 27, 2009]
  Avoid a possible NULL dereference in debug build, in png_set_text_2().
    (bug introduced in libpng-0.95, discovered by Evan Rouault)

Version 1.4.0beta71 [July 29, 2009]
  Rebuilt configure scripts with autoconf-2.64.

Version 1.4.0beta72 [August 1, 2009]
  Replaced *.tar.lzma with *.tar.xz in distribution.  Get the xz codec
    from <http://tukaani.org/xz>.

Version 1.4.0beta73 [August 1, 2009]
  Reject attempt to write iCCP chunk with negative embedded profile length
    (JD Chen) (CVE-2009-5063).

Version 1.4.0beta74 [August 8, 2009]
  Changed png_ptr and info_ptr member "trans" to "trans_alpha".

Version 1.4.0beta75 [August 21, 2009]
  Removed an extra png_debug() recently added to png_write_find_filter().
  Fixed incorrect #ifdef in pngset.c regarding unknown chunk support.

Version 1.4.0beta76 [August 22, 2009]
  Moved an incorrectly located test in png_read_row() in pngread.c

Version 1.4.0beta77 [August 27, 2009]
  Removed lpXYZ.tar.bz2 (with CRLF), KNOWNBUG, libpng-x.y.z-KNOWNBUG.txt,
    and the "noconfig" files from the distribution.
  Moved CMakeLists.txt from scripts into the main libpng directory.
  Various bugfixes and improvements to CMakeLists.txt (Philip Lowman)

Version 1.4.0beta78 [August 31, 2009]
  Converted all PNG_NO_* tests to PNG_*_SUPPORTED everywhere except pngconf.h
  Eliminated PNG_NO_FREE_ME and PNG_FREE_ME_SUPPORTED macros.
  Use png_malloc plus a loop instead of png_calloc() to initialize
    row_pointers in png_read_png().

Version 1.4.0beta79 [September 1, 2009]
  Eliminated PNG_GLOBAL_ARRAYS and PNG_LOCAL_ARRAYS; always use local arrays.
  Eliminated PNG_CALLOC_SUPPORTED macro and always provide png_calloc().

Version 1.4.0beta80 [September 17, 2009]
  Removed scripts/libpng.icc
  Changed typecast of filler from png_byte to png_uint_16 in png_set_filler().
    (Dennis Gustafsson)
  Fixed typo introduced in beta78 in pngtest.c ("#if def " should be "#ifdef\
 ")

Version 1.4.0beta81 [September 23, 2009]
  Eliminated unused PNG_FLAG_FREE_* defines from pngpriv.h
  Expanded TAB characters in pngrtran.c
  Removed PNG_CONST from all "PNG_CONST PNG_CHNK" declarations to avoid
    compiler complaints about doubly declaring things "const".
  Changed all "#if [!]defined(X)" to "if[n]def X" where possible.
  Eliminated unused png_ptr->row_buf_size

Version 1.4.0beta82 [September 25, 2009]
  Moved redundant IHDR checking into new png_check_IHDR() in png.c
    and report all errors found in the IHDR data.
  Eliminated useless call to png_check_cHRM() from pngset.c

Version 1.4.0beta83 [September 25, 2009]
  Revised png_check_IHDR() to eliminate bogus complaint about filter_type.

Version 1.4.0beta84 [September 30, 2009]
  Fixed some inconsistent indentation in pngconf.h
  Revised png_check_IHDR() to add a test for width variable less than 32-bit.

Version 1.4.0beta85 [October 1, 2009]
  Revised png_check_IHDR() again, to check info_ptr members instead of
    the contents of the returned parameters.

Version 1.4.0beta86 [October 9, 2009]
  Updated the "xcode" project (Alam Arias).
  Eliminated a shadowed declaration of "pp" in png_handle_sPLT().

Version 1.4.0rc01 [October 19, 2009]
  Trivial cosmetic changes.

Version 1.4.0beta87 [October 30, 2009]
  Moved version 1.4.0 back into beta.

Version 1.4.0beta88 [October 30, 2009]
  Revised libpng*.txt section about differences between 1.2.x and 1.4.0
    because most of the new features have now been ported back to 1.2.41

Version 1.4.0beta89 [November 1, 2009]
  More bugfixes and improvements to CMakeLists.txt (Philip Lowman)
  Removed a harmless extra png_set_invert_alpha() from pngwrite.c
  Apply png_user_chunk_cache_max within png_decompress_chunk().
  Merged libpng-1.2.41.txt with libpng-1.4.0.txt where appropriate.

Version 1.4.0beta90 [November 2, 2009]
  Removed all remaining WIN32_WCE #ifdefs except those involving the
    time.h "tm" structure

Version 1.4.0beta91 [November 3, 2009]
  Updated scripts/pngw32.def and projects/wince/png32ce.def
  Copied projects/wince/png32ce.def to the scripts directory.
  Added scripts/makefile.wce
  Patched ltmain.sh for wince support.
  Added PNG_CONVERT_tIME_SUPPORTED macro.

Version 1.4.0beta92 [November 4, 2009]
  Make inclusion of time.h in pngconf.h depend on PNG_CONVERT_tIME_SUPPORTED
  Make #define PNG_CONVERT_tIME_SUPPORTED depend on PNG_WRITE_tIME_SUPPORTED
  Revised libpng*.txt to describe differences from 1.2.40 to 1.4.0 (instead
    of differences from 1.2.41 to 1.4.0)

Version 1.4.0beta93 [November 7, 2009]
  Added PNG_DEPSTRUCT, PNG_DEPRECATED, PNG_USE_RESULT, PNG_NORETURN, and
    PNG_ALLOCATED macros to detect deprecated direct access to the
    png_struct or info_struct members and other deprecated usage in
    applications (John Bowler).
  Updated scripts/makefile* to add "-DPNG_CONFIGURE_LIBPNG" to CFLAGS,
    to prevent warnings about direct access to png structs by libpng
    functions while building libpng.  They need to be tested, especially
    those using compilers other than gcc.
  Updated projects/visualc6 and visualc71 with "/d PNG_CONFIGURE_LIBPNG".
    They should work but still need to be updated to remove
    references to pnggccrd.c or pngvcrd.c and ASM building.
  Added README.txt to the beos, cbuilder5, netware, and xcode projects warning
    that they need to be updated, to remove references to pnggccrd.c and
    pngvcrd.c and to depend on pngpriv.h
  Removed three direct references to read_info_ptr members in pngtest.c
    that were detected by the new PNG_DEPSTRUCT macro.
  Moved the png_debug macro definitions and the png_read_destroy(),
    png_write_destroy() and png_far_to_near() prototypes from png.h
    to pngpriv.h (John Bowler)
  Moved the synopsis lines for png_read_destroy(), png_write_destroy()
    png_debug(), png_debug1(), and png_debug2() from libpng.3 to libpngpf.3.

Version 1.4.0beta94 [November 9, 2009]
  Removed the obsolete, unused pnggccrd.c and pngvcrd.c files.
  Updated CMakeLists.txt to add "-DPNG_CONFIGURE_LIBPNG" to the definitions.
  Removed dependency of pngtest.o on pngpriv.h in the makefiles.
  Only #define PNG_DEPSTRUCT, etc. in pngconf.h if not already defined.

Version 1.4.0beta95 [November 10, 2009]
  Changed png_check_sig() to !png_sig_cmp() in contrib programs.
  Added -DPNG_CONFIGURE_LIBPNG to contrib/pngminm/*/makefile
  Changed png_check_sig() to !png_sig_cmp() in contrib programs.
  Corrected the png_get_IHDR() call in contrib/gregbook/readpng2.c
  Changed pngminim/*/gather.sh to stop trying to remove pnggccrd.c and\
 pngvcrd.c
  Added dependency on pngpriv.h in contrib/pngminim/*/makefile

Version 1.4.0beta96 [November 12, 2009]
  Renamed scripts/makefile.wce to scripts/makefile.cegcc
  Revised Makefile.am to use libpng.sys while building libpng.so
    so that only PNG_EXPORT functions are exported.
  Removed the deprecated png_check_sig() function/macro.
  Removed recently removed function names from scripts/*.def
  Revised pngtest.png to put chunks in the same order written by pngtest
    (evidently the same change made in libpng-1.0beta54 was lost).
  Added PNG_PRIVATE macro definition in pngconf.h for possible future use.

Version 1.4.0beta97 [November 13, 2009]
  Restored pngtest.png to the libpng-1.4.0beta7 version.
  Removed projects/beos and netware.txt; no one seems to be supporting them.
  Revised Makefile.in

Version 1.4.0beta98 [November 13, 2009]
  Added the "xcode" project to zip distributions,
  Fixed a typo in scripts/pngwin.def introduced in beta97.

Version 1.4.0beta99 [November 14, 2009]
  Moved libpng-config.in and libpng.pc-configure.in out of the scripts
    directory, to libpng-config.in and libpng-pc.in, respectively, and
    modified Makefile.am and configure.ac accordingly.  Now "configure"
    needs nothing from the "scripts" directory.
  Avoid redefining PNG_CONST in pngconf.h

Version 1.4.0beta100 [November 14, 2009]
  Removed ASM builds from projects/visualc6 and projects/visualc71
  Removed scripts/makefile.nommx and makefile.vcawin32
  Revised CMakeLists.txt to account for new location of libpng-config.in
    and libpng-pc.in
  Updated INSTALL to reflect removal and relocation of files.

Version 1.4.0beta101 [November 14, 2009]
  Restored the binary files (*.jpg, *.png, some project files) that were
    accidentally deleted from the zip and 7z distributions when the xcode
    project was added.

Version 1.4.0beta102 [November 18, 2009]
  Added libpng-config.in and libpng-pc.in to the zip and 7z distributions.
  Fixed a typo in projects/visualc6/pngtest.dsp, introduced in beta100.
  Moved descriptions of makefiles and other scripts out of INSTALL into
    scripts/README.txt
  Updated the copyright year in scripts/pngwin.rc from 2006 to 2009.

Version 1.4.0beta103 [November 21, 2009]
  Removed obsolete comments about ASM from projects/visualc71/README_zlib.txt
  Align row_buf on 16-byte boundary in memory.
  Restored the PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED guard around the call
    to png_flush() after png_write_IEND().  See 1.4.0beta32, 1.4.0beta50
    changes above and 1.2.30, 1.2.30rc01 and rc03 in 1.2.41 CHANGES.  Someone
    needs this feature.
  Make the 'png_jmpbuf' macro expand to a call that records the correct
    longjmp function as well as returning a pointer to the setjmp
    jmp_buf buffer, and marked direct access to jmpbuf 'deprecated'.
    (John Bowler)

Version 1.4.0beta104 [November 22, 2009]
  Removed png_longjmp_ptr from scripts/*.def and libpng.3
  Rebuilt configure scripts with autoconf-2.65

Version 1.4.0beta105 [November 25, 2009]
  Use fast integer PNG_DIVIDE_BY_255() or PNG_DIVIDE_BY_65535()
    to accomplish alpha premultiplication when
    PNG_READ_COMPOSITE_NODIV_SUPPORTED is defined.
  Changed "/255" to "/255.0" in background calculations to make it clear
    that the 255 is used as a double.

Version 1.4.0beta106 [November 27, 2009]
  Removed premultiplied alpha feature.

Version 1.4.0beta107 [December 4, 2009]
  Updated README
  Added "#define PNG_NO_PEDANTIC_WARNINGS" in the libpng source files.
  Removed "-DPNG_CONFIGURE_LIBPNG" from the makefiles and projects.
  Revised scripts/makefile.netbsd, makefile.openbsd, and makefile.sco
    to put png.h and pngconf.h in $prefix/include, like the other scripts,
    instead of in $prefix/include/libpng.  Also revised makefile.sco
    to put them in $prefix/include/libpng15 instead of in
    $prefix/include/libpng/libpng15.

Version 1.4.0beta108 [December 11, 2009]
  Removed leftover "-DPNG_CONFIGURE_LIBPNG" from contrib/pngminim/*/makefile
  Relocated png_do_chop() to its original position in pngrtran.c; the
    change in version 1.2.41beta08 caused transparency to be handled wrong
    in some 16-bit datastreams (Yusaku Sugai).

Version 1.4.0beta109 [December 13, 2009]
  Added "bit_depth" parameter to the private png_build_gamma_table() function.
  Pass bit_depth=8 to png_build_gamma_table() when bit_depth is 16 but the
    PNG_16_TO_8 transform has been set, to avoid unnecessary build of 16-bit
    tables.

Version 1.4.0rc02 [December 20, 2009]
  Declared png_cleanup_needed "volatile" in pngread.c and pngwrite.c

Version 1.4.0rc03 [December 22, 2009]
  Renamed libpng-pc.in back to libpng.pc.in and revised CMakeLists.txt
    (revising the change in 1.4.0beta99)

Version 1.4.0rc04 [December 25, 2009]
  Swapped PNG_UNKNOWN_CHUNKS_SUPPORTED and PNG_HANDLE_AS_UNKNOWN_SUPPORTED
    in pngset.c to be consistent with other changes in version 1.2.38.

Version 1.4.0rc05 [December 25, 2009]
  Changed "libpng-pc.in" to "libpng.pc.in" in configure.ac, configure, and
    Makefile.in to be consistent with changes in libpng-1.4.0rc03

Version 1.4.0rc06 [December 29, 2009]
  Reverted the gamma_table changes from libpng-1.4.0beta109.
  Fixed some indentation errors.

Version 1.4.0rc07 [January 1, 2010]
  Revised libpng*.txt and libpng.3 about 1.2.x->1.4.x differences.
  Use png_calloc() instead of png_malloc(); png_memset() in pngrutil.c
  Update copyright year to 2010.

Version 1.4.0rc08 [January 2, 2010]
  Avoid deprecated references to png_ptr-io_ptr and png_ptr->error_ptr
    in pngtest.c

Version 1.4.0 [January 3, 2010]
  No changes.

Version 1.4.1beta01 [January 8, 2010]
  Updated CMakeLists.txt for consistent indentation and to avoid an
    unclosed if-statement warning (Philip Lowman).
  Revised Makefile.am and Makefile.in to remove references to Y2KINFO,
    KNOWNBUG, and libpng.la (Robert Schwebel).
  Revised the makefiles to install the same files and symbolic
    links as configure, except for libpng.la and libpng14.la.
  Make png_set|get_compression_buffer_size() available even when
    PNG_WRITE_SUPPORTED is not enabled.
  Revised Makefile.am and Makefile.in to simplify their maintenance.
  Revised scripts/makefile.linux to install a link to libpng14.so.14.1

Version 1.4.1beta02 [January 9, 2010]
  Revised the rest of the makefiles to install a link to libpng14.so.14.1

Version 1.4.1beta03 [January 10, 2010]
  Removed png_set_premultiply_alpha() from scripts/*.def

Version 1.4.1rc01 [January 16, 2010]
  No changes.

Version 1.4.1beta04 [January 23, 2010]
  Revised png_decompress_chunk() to improve speed and memory usage when
    decoding large chunks.
  Added png_set|get_chunk_malloc_max() functions.

Version 1.4.1beta05 [January 26, 2010]
  Relocated "int k" declaration in pngtest.c to minimize its scope.

Version 1.4.1beta06 [January 28, 2010]
  Revised png_decompress_chunk() to use a two-pass method suggested by
    John Bowler.

Version 1.4.1beta07 [February 6, 2010]
  Folded some long lines in the source files.
  Added defineable PNG_USER_CHUNK_CACHE_MAX, PNG_USER_CHUNK_MALLOC_MAX,
    and a PNG_USER_LIMITS_SUPPORTED flag.
  Eliminated use of png_ptr->irowbytes and reused the slot in png_ptr as
    png_ptr->png_user_chunk_malloc_max.
  Revised png_push_save_buffer() to do fewer but larger png_malloc() calls.

Version 1.4.1beta08 [February 6, 2010]
  Minor cleanup and updating of dates and copyright year.

Version 1.5.0beta01 [February 7, 2010]
  Moved declaration of png_struct into private pngstruct.h and png_info
    into pnginfo.h

Version 1.4.1beta09 and 1.5.0beta02 [February 7, 2010]
  Reverted to original png_push_save_buffer() code.

Version 1.4.1beta10 and 1.5.0beta03 [February 8, 2010]
  Return allocated "old_buffer" in png_push_save_buffer() before
    calling png_error(), to avoid a potential memory leak.
  Updated configure script to use SO number 15.

Version 1.5.0beta04 [February 9, 2010]
  Removed malformed "incomplete struct declaration" of png_info from png.h

Version 1.5.0beta05 [February 12, 2010]
  Removed PNG_DEPSTRUCT markup in pngstruct.h and pnginfo.h, and undid the
    linewrapping that it entailed.
  Revised comments in pngstruct.h and pnginfo.h and added pointers to
    the libpng license.
  Changed PNG_INTERNAL to PNG_EXPOSE_INTERNAL_STRUCTURES
  Removed the cbuilder5 project, which has not been updated to 1.4.0.

Version 1.4.1beta12 and 1.5.0beta06 [February 14, 2010]
  Fixed type declaration of png_get_chunk_malloc_max() in pngget.c (Daisuke
    Nishikawa)

Version 1.5.0beta07 [omitted]

Version 1.5.0beta08 [February 19, 2010]
  Changed #ifdef PNG_NO_STDIO_SUPPORTED to #ifdef PNG_NO_CONSOLE_IO_SUPPORTED
    wherever png_snprintf() is used to construct error and warning messages.
  Noted in scripts/makefile.mingw that it expects to be run under MSYS.
  Removed obsolete unused MMX-querying support from contrib/gregbook
  Added exported png_longjmp() function.
  Removed the AIX redefinition of jmpbuf in png.h
  Added -D_ALLSOURCE in configure.ac, makefile.aix, and CMakeLists.txt
    when building on AIX.

Version 1.5.0beta09 [February 19, 2010]
  Removed -D_ALLSOURCE from configure.ac, makefile.aix, and CMakeLists.txt.
  Changed the name of png_ptr->jmpbuf to png_ptr->png_jmpbuf in pngstruct.h

Version 1.5.0beta10 [February 25, 2010]
  Removed unused gzio.c from contrib/pngminim gather and makefile scripts
  Removed replacement error handlers from contrib/gregbook.  Because of
    the new png_longjmp() function they are no longer needed.

Version 1.5.0beta11 [March 6, 2010]
  Removed checking for already-included setjmp.h from pngconf.h
  Fixed inconsistent indentations and made numerous cosmetic changes.
  Revised the "SEE ALSO" style of libpng.3, libpngpf.3, and png.5

Version 1.5.0beta12 [March 9, 2010]
  Moved "#include png.h" inside pngpriv.h and removed "#include png.h" from
    the source files, along with "#define PNG_EXPOSE_INTERNAL_STRUCTURES"
    and "#define PNG_NO_PEDANTIC_WARNINGS" (John Bowler).
  Created new pngdebug.h and moved debug definitions there.

Version 1.5.0beta13 [March 10, 2010]
  Protect pngstruct.h, pnginfo.h, and pngdebug.h from being included twice.
  Revise the "#ifdef" blocks in png_inflate() so it will compile when neither
    PNG_USER_CHUNK_MALLOC_MAX nor PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
    is defined.
  Removed unused png_measure_compressed_chunk() from pngpriv.h and libpngpf.3
  Moved the 'config.h' support from pngconf.h to pngpriv.h
  Removed PNGAPI from the png_longjmp_ptr typedef.
  Eliminated dependence of pngtest.c on the private pngdebug.h file.
  Make all png_debug macros into *unterminated* statements or
    expressions (i.e. a trailing ';' must always be added) and correct
    the format statements in various png_debug messages.

Version 1.5.0beta14 [March 14, 2010]
  Removed direct access to png_ptr->io_ptr from the Windows code in pngtest.c
  Revised Makefile.am to account for recent additions and replacements.
  Corrected CE and OS/2 DEF files (scripts/png*def) for symbols removed and
    added ordinal numbers to the Windows DEF file and corrected the duplicated
    ordinal numbers on CE symbols that are commented out.
  Added back in export symbols that can be present in the Windows build but
    are disabled by default.
  PNG_EXPORT changed to include an 'ordinal' field for DEF file generation.
    PNG_CALLBACK added to make callback definitions uniform.  PNGAPI split
    into PNGCAPI (base C form), PNGAPI (exports) and PNGCBAPI (callbacks),
    and appropriate changes made to all files.  Cygwin builds re-hinged to
    allow procedure call standard changes and to remove the need for the DEF
    file (fixes build on Cygwin).
  Enabled 'attribute' warnings that are relevant to library APIs and\
 callbacks.
  Changed rules for generation of the various symbol files and added a new
    rule for a DEF file (which is also added to the distribution).
  Updated the symbol file generation to stop it adding spurious spaces
    to EOL (coming from preprocessor macro expansion).  Added a facility
    to join tokens in the output and rewrite *.dfn to use this.
  Eliminated scripts/*.def in favor of libpng.def; updated projects/visualc71
    and removed scripts/makefile.cygwin.
  Made PNG_BUILD_DLL safe: it can be set whenever a DLL is being built.
  Removed the include of sys/types.h - apparently unnecessary now on the
    platforms on which it happened (all but Mac OS and RISC OS).
  Moved the Mac OS test into pngpriv.h (the only place it is used.)

Version 1.5.0beta15 [March 17, 2010]
  Added symbols.chk target to Makefile.am to validate the symbols in png.h
    against the new DEF file scripts/symbols.def.
  Changed the default DEF file back to pngwin.def.
  Removed makefile.mingw.
  Eliminated PNG_NO_EXTERN and PNG_ALL_EXTERN

Version 1.5.0beta16 [April 1, 2010]
  Make png_text_struct independent of PNG_iTXt_SUPPORTED, so that
    fields are initialized in all configurations.  The READ/WRITE
    macros (PNG_(READ|WRITE)_iTXt_SUPPORTED) still function as
    before to disable code to actually read or write iTXt chunks
    and iTXt_SUPPORTED can be used to detect presence of either
    read or write support (but it is probably better to check for
    the one actually required - read or write.)
  Combined multiple png_warning() calls for a single error.
  Restored the macro definition of png_check_sig().

Version 1.5.0beta17 [April 17, 2010]
  Added some "(long)" typecasts to printf calls in png_handle_cHRM().
  Documented the fact that png_set_dither() was disabled since libpng-1.4.0.
  Reenabled png_set_dither() but renamed it to png_set_quantize() to reflect
    more accurately what it actually does.  At the same time, renamed
    the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros to
    PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS.
  Added some "(long)" typecasts to printf calls in png_handle_cHRM().
  Freeze build-time only configuration in the build.
    In all prior versions of libpng most configuration options
    controlled by compiler #defines had to be repeated by the
    application code that used libpng.  This patch changes this
    so that compilation options that can only be changed at build
    time are frozen in the build.  Options that are compiler
    dependent (and those that are system dependent) are evaluated
    each time - pngconf.h holds these.  Options that can be changed
    per-file in the application are in png.h.  Frozen options are
    in the new installed header file pnglibconf.h (John Bowler)
  Removed the xcode project because it has not been updated to work
    with libpng-1.5.0.
  Removed the ability to include optional pngusr.h

Version 1.5.0beta18 [April 17, 2010]
  Restored the ability to include optional pngusr.h
  Moved replacements for png_error() and png_warning() from the
    contrib/pngminim project to pngerror.c, for use when warnings or
    errors are disabled via PNG_NO_WARN or PNG_NO_ERROR_TEXT, to avoid
    storing unneeded error/warning text.
  Updated contrib/pngminim project to work with the new pnglibconf.h
  Added some PNG_NO_* defines to contrib/pngminim/*/pngusr.h to save space.

Version 1.5.0beta19 [April 24, 2010]
  Added PNG_{READ,WRITE}_INT_FUNCTIONS_SUPPORTED.  This allows the functions
    to read and write ints to be disabled independently of\
 PNG_USE_READ_MACROS,
    which allows libpng to be built with the functions even though the default
    is to use the macros - this allows applications to choose at app build
    time whether or not to use macros (previously impossible because the
    functions weren't in the default build.)
  Changed Windows calling convention back to __cdecl for API functions.
    For Windows/x86 platforms only:
      __stdcall is no longer needed for Visual Basic, so libpng-1.5.0 uses
      __cdecl throughout (both API functions and callbacks) on Windows/x86
      platforms.
  Replaced visualc6 and visualc71 projects with new vstudio project
  Relaxed the overly-restrictive permissions of some files.

Version 1.5.0beta20 [April 24, 2010]
  Relaxed more overly-restrictive permissions of some files.

Version 1.5.0beta21 [April 27, 2010]
  Removed some unwanted binary bytes and changed CRLF to NEWLINE in the new
    vstudio project files, and some trivial editing of some files in the
    scripts directory.
  Set PNG_NO_READ_BGR, PNG_NO_IO_STATE, and PNG_NO_TIME_RFC1123 in
    contrib/pngminim/decoder/pngusr.h to make a smaller decoder application.

Version 1.5.0beta22 [April 28, 2010]
  Fixed dependencies of GET_INT_32 - it does not require READ_INT_FUNCTIONS
    because it has a macro equivalent.
  Improved the options.awk script; added an "everything off" option.
  Revised contrib/pngminim to use the "everything off" option in pngusr.dfa.

Version 1.5.0beta23 [April 29, 2010]
  Corrected PNG_REMOVED macro to take five arguments.
    The macro was documented with two arguments (name,ordinal), however
    the symbol checking .dfn files assumed five arguments.  The five
    argument form seems more useful so it is changed to that.
  Corrected PNG_UNKNOWN_CHUNKS_SUPPORTED to PNG_HANDLE_AS_UNKNOWN_SUPPORTED
    in gregbook/readpng2.c
  Corrected protection of png_get_user_transform_ptr. The API declaration in
    png.h is removed if both READ and WRITE USER_TRANSFORM are turned off
    but was left defined in pngtrans.c
  Added logunsupported=1 to cause pnglibconf.h to document disabled options.
    This makes the installed pnglibconf.h more readable but causes no
    other change.  The intention is that users of libpng will find it
    easier to understand if an API they need is missing.
  Include png_reset_zstream() in png.c only when PNG_READ_SUPPORTED is\
 defined.
  Removed dummy_inflate.c from contrib/pngminim/encoder
  Removed contrib/pngminim/*/gather.sh; gathering is now done in the makefile.

Version 1.5.0beta24 [May 7, 2010]
  Use bitwise "&" instead of arithmetic mod in pngrutil.c calculation of the
    offset of the png_ptr->rowbuf pointer into png_ptr->big_row_buf.
  Added more blank lines for readability.

Version 1.5.0beta25 [June 18, 2010]
  In pngpread.c: png_push_have_row() add check for new_row > height
  Removed the now-redundant check for out-of-bounds new_row from example.c

Version 1.5.0beta26 [June 18, 2010]
  In pngpread.c: png_push_process_row() add check for too many rows.

Version 1.5.0beta27 [June 18, 2010]
  Removed the check added in beta25 as it is now redundant.

Version 1.5.0beta28 [June 20, 2010]
  Rewrote png_process_IDAT_data to consistently treat extra data as warnings
    and handle end conditions more cleanly.
  Removed the new (beta26) check in png_push_process_row().

Version 1.5.0beta29 [June 21, 2010]
  Revised scripts/options.awk to work on Sunos (but still doesn't work)
  Added comment to options.awk and contrib/pngminim/*/makefile to try nawk.

Version 1.5.0beta30 [June 22, 2010]
  Stop memory leak when reading a malformed sCAL chunk.

Version 1.5.0beta31 [June 26, 2010]
  Revised pngpread.c patch of beta28 to avoid an endless loop.
  Removed some trailing blanks.

Version 1.5.0beta32 [June 26, 2010]
  Removed leftover scripts/options.patch and scripts/options.rej

Version 1.5.0beta33 [July 6, 3010]
  Made FIXED and FLOATING options consistent in the APIs they enable and
    disable.  Corrected scripts/options.awk to handle both command line
    options and options specified in the .dfa files.
  Changed char *msg to PNG_CONST char *msg in pngrutil.c
  Make png_set_sRGB_gAMA_and_cHRM set values using either the fixed or
    floating point APIs, but not both.
  Reversed patch to remove error handler when the jmp_buf is stored in the
    main program structure, not the png_struct.
    The error handler is needed because the default handler in libpng will
    always use the jmp_buf in the library control structure; this is never
    set.  The gregbook code is a useful example because, even though it
    uses setjmp/longjmp, it shows how error handling can be implemented
    using control mechanisms not directly supported by libpng.  The
    technique will work correctly with mechanisms such as Microsoft
    Structure Exceptions or C++ exceptions (compiler willing - note that gcc
    does not by default support interworking of C and C++ error handling.)
  Reverted changes to call png_longjmp in contrib/gregbook where it is not
    appropriate.  If mainprog->jmpbuf is used by setjmp, then png_longjmp
    cannot be used.
  Changed "extern PNG_EXPORT" to "PNG_EXPORT" in png.h (Jan Nijtmans)
  Changed "extern" to "PNG_EXTERN" in pngpriv.h (except for the 'extern "C"\
 {')

Version 1.5.0beta34 [July 12, 2010]
  Put #ifndef PNG_EXTERN, #endif around the define PNG_EXTERN in pngpriv.h

Version 1.5.0beta35 [July 24, 2010]
  Removed some newly-added TAB characters.
  Added -DNO_PNG_SNPRINTF to CFLAGS in scripts/makefile.dj2
  Moved the definition of png_snprintf() outside of the enclosing
    #ifdef blocks in pngconf.h

Version 1.5.0beta36 [July 29, 2010]
  Patches by John Bowler:
  Fixed point APIs are now supported throughout (no missing APIs).
  Internal fixed point arithmetic support exists for all internal floating
    point operations.
  sCAL validates the floating point strings it is passed.
  Safe, albeit rudimentary, Watcom support is provided by PNG_API_RULE==2
  Two new APIs exist to get the number of passes without turning on the
    PNG_INTERLACE transform and to get the number of rows in the current
    pass.
  A new test program, pngvalid.c, validates the gamma code.
  Errors in the 16-bit gamma correction (overflows) have been corrected.
  cHRM chunk testing is done consistently (previously the floating point
    API bypassed it, because the test really didn't work on FP, now the test
    is performed on the actual values to be stored in the PNG file so it
    works in the FP case too.)
  Most floating point APIs now simply call the fixed point APIs after
    converting the values to the fixed point form used in the PNG file.
  The standard headers no longer include zlib.h, which is currently only
    required for pngstruct.h and can therefore be internal.
  Revised png_get_int_32 to undo the PNG two's complement representation of
    negative numbers.

Version 1.5.0beta37 [July 30, 2010]
  Added a typecast in png_get_int_32() in png.h and pngrutil.h to avoid
    a compiler warning.
  Replaced oFFs 0,0 with oFFs -10,20 in pngtest.png

Version 1.5.0beta38 [July 31, 2010]
  Implemented remaining "_fixed" functions.
  Corrected a number of recently introduced warnings mostly resulting from
    safe but uncast assignments to shorter integers.  Also added a zlib
    VStudio release library project because the latest zlib Official Windows
    build does not include such a thing.
  Revised png_get_int_16() to be similar to png_get_int_32().
  Restored projects/visualc71.

Version 1.5.0beta39 [August 2, 2010]
  VisualC/GCC warning fixes, VisualC build fixes
  The changes include support for function attributes in VC in addition to
    those already present in GCC - necessary because without these some
    warnings are unavoidable.  Fixes include signed/unsigned fixes in
    pngvalid and checks with gcc -Wall -Wextra -Wunused.
  VC requires function attributes on function definitions as well as
    declarations, PNG_FUNCTION has been added to enable this and the
    relevant function definitions changed.

Version 1.5.0beta40 [August 6, 2010]
  Correct use of _WINDOWS_ in pngconf.h
  Removed png_mem_ #defines; they are no longer used.
  Added the sRGB chunk to pngtest.png

Version 1.5.0beta41 [August 11, 2010]
  Added the cHRM chunk to pngtest.png
  Don't try to use version-script with cygwin/mingw.
  Revised contrib/gregbook to work under cygwin/mingw.

Version 1.5.0beta42 [August 18, 2010]
  Add .dll.a to the list of extensions to be symlinked by Makefile.am (Yaakov)
  Made all API functions that have const arguments and constant string
    literal pointers declare them (John Bowler).

Version 1.5.0beta43 [August 20, 2010]
  Removed spurious tabs, shorten long lines (no source change)
    Also added scripts/chkfmt to validate the format of all the files that can
    reasonably be validated (it is suggested to run "make distclean" before
    checking, because some machine generated files have long lines.)
  Reformatted the CHANGES file to be more consistent throughout.
  Made changes to address various issues identified by GCC, mostly
    signed/unsigned and shortening problems on assignment but also a few
    difficult to optimize (for GCC) loops.
  Fixed non-GCC fixed point builds.  In png.c a declaration was misplaced
    in an earlier update.  Fixed to declare the auto variables at the head.
  Use cexcept.h in pngvalid.c.

Version 1.5.0beta44 [August 24, 2010]
  Updated CMakeLists.txt to use CMAKE_INSTALL_LIBDIR variable; useful for
    installing libpng in /usr/lib64 (Funda Wang).
  Revised CMakeLists.txt to put the man pages in share/man/man* not man/man*
  Revised CMakeLists.txt to make symlinks instead of copies when installing.
  Changed PNG_LIB_NAME from pngNN to libpngNN in CMakeLists.txt (Philip\
 Lowman)
  Implemented memory checks within pngvalid
  Reformatted/rearranged pngvalid.c to assist use of progressive reader.
  Check interlaced images in pngvalid
  Clarified pngusr.h comments in pnglibconf.dfa
  Simplified the pngvalid error-handling code now that cexcept.h is in place.
  Implemented progressive reader in pngvalid.c for standard tests
  Implemented progressive read in pngvalid.c gamma tests
  Turn on progressive reader in pngvalid.c by default and tidy code.

Version 1.5.0beta45 [August 26, 2010]
  Added an explicit make step to projects/vstudio for pnglibconf.h
    Also corrected zlib.vcxproj into which Visual Studio had introduced
    what it calls an "authoring error".  The change to make pnglibconf.h
    simply copies the file; in the future it may actually generate the
    file from scripts/pnglibconf.dfa as the other build systems do.
  Changed pngvalid to work when floating point APIs are disabled
  Renamed the prebuilt scripts/pnglibconf.h to scripts/pnglibconf.h.prebuilt
  Supply default values for PNG_USER_PRIVATEBUILD and PNG_USER_DLLFNAME_POSTF\
IX
    in pngpriv.h in case the user neglected to define them in their pngusr.h

Version 1.5.0beta46 [August 28, 2010]
  Added new private header files to libpng_sources in CMakeLists.txt
  Added PNG_READ_16BIT, PNG_WRITE_16BIT, and PNG_16BIT options.
  Added reference to scripts/pnglibconf.h.prebuilt in the visualc71 project.

Version 1.5.0beta47 [September 11, 2010]
  Fixed a number of problems with 64-bit compilation reported by Visual
    Studio 2010 (John Bowler).

Version 1.5.0beta48 [October 4, 2010]
  Updated CMakeLists.txt (Philip Lowman).
  Revised autogen.sh to recognize and use $AUTOCONF, $AUTOMAKE, $AUTOHEADER,
    $AUTOPOINT, $ACLOCAL and $LIBTOOLIZE
  Fixed problem with symbols creation in Makefile.am which was assuming that
    all versions of ccp write to standard output by default (Martin Banky).\
 The
    bug was introduced in libpng-1.2.9beta5.
  Removed unused mkinstalldirs.

Version 1.5.0beta49 [October 8, 2010]
  Undid Makefile.am revision of 1.5.0beta48.

Version 1.5.0beta50 [October 14, 2010]
  Revised Makefile.in to account for mkinstalldirs being removed.
  Added some "(unsigned long)" typecasts in printf statements in pngvalid.c.
  Suppressed a compiler warning in png_handle_sPLT().
  Check for out-of-range text compression mode in png_set_text().

Version 1.5.0beta51 [October 15, 2010]
  Changed embedded dates to "(PENDING RELEASE) in beta releases (and future
    rc releases) to minimize the difference between releases.

Version 1.5.0beta52 [October 16, 2010]
  Restored some of the embedded dates (in png.h, png.c, documentation, etc.)

Version 1.5.0beta53 [October 18, 2010]
  Updated INSTALL to mention using "make maintainer-clean" and to remove
    obsolete statement about a custom ltmain.sh
  Disabled "color-tests" by default in Makefile.am so it will work with
    automake versions earlier than 1.11.1
  Use document name "libpng-manual.txt" instead of "libpng-<version>.txt"
    to simplify version differences.
  Removed obsolete remarks about setjmp handling from INSTALL.
  Revised and renamed the typedef in png.h and png.c that was designed
    to catch library and header mismatch.

Version 1.5.0beta54 [November 10, 2010]
  Require 48 bytes, not 64 bytes, for big_row_buf in overflow checks.
  Used a consistent structure for the pngget.c functions.

Version 1.5.0beta55 [November 21, 2010]
  Revised png_get_uint_32, png_get_int_32, png_get_uint_16 (Cosmin)
  Moved reading of file signature into png_read_sig (Cosmin)
  Fixed atomicity of chunk header serialization (Cosmin)
  Added test for io_state in pngtest.c (Cosmin)
  Added "#!/bin/sh" at the top of contrib/pngminim/*/gather.sh scripts.
  Changes to remove gcc warnings (John Bowler)
    Certain optional gcc warning flags resulted in warnings in libpng code.
    With these changes only -Wconversion and -Wcast-qual cannot be turned on.
    Changes are trivial rearrangements of code.  -Wconversion is not possible
    for pngrutil.c (because of the widespread use of += et al on variables
    smaller than (int) or (unsigned int)) and -Wcast-qual is not possible
    with pngwio.c and pngwutil.c because the 'write' callback and zlib
    compression both fail to declare their input buffers with 'const'.

Version 1.5.0beta56 [December 7, 2010]
  Added the private PNG_UNUSED() macro definition in pngpriv.h.
  Added some commentary about PNG_EXPORT in png.h and pngconf.h
  Revised PNG_EXPORT() macro and added PNG_EXPORTA() macro, with the
    objective of simplifying and improving the cosmetic appearance of png.h.
  Fixed some incorrect "=" macro names in pnglibconf.dfa
  Included documentation of changes in 1.5.0 from 1.4.x in libpng-manual.txt

Version 1.5.0beta57 [December 9, 2010]
  Documented the pngvalid gamma error summary with additional comments and
    print statements.
  Improved missing symbol handling in checksym.awk; symbols missing in both
    the old and new files can now be optionally ignored, treated as errors
    or warnings.
  Removed references to pngvcrd.c and pnggccrd.c from the vstudio project.
  Updated "libpng14" to "libpng15" in the visualc71 project.
  Enabled the strip16 tests in pngvalid.`
  Don't display test results (except PASS/FAIL) when running "make test".
    Instead put them in pngtest-log.txt
  Added "--with-zprefix=<string>" to configure.ac
  Updated the prebuilt configuration files to autoconf version 2.68

Version 1.5.0beta58 [December 19, 2010]
  Fixed interlace image handling and add test cases (John Bowler)
  Fixed the clean rule in Makefile.am to remove pngtest-log.txt
  Made minor changes to work around warnings in gcc 3.4

Version 1.5.0rc01 [December 27, 2010]
  No changes.

Version 1.5.0rc02 [December 27, 2010]
  Eliminated references to the scripts/*.def files in project/visualc71.

Version 1.5.0rc03 [December 28, 2010]
  Eliminated scripts/*.def and revised Makefile.am accordingly

Version 1.5.0rc04 [December 29, 2010]
  Fixed bug in background transformation handling in pngrtran.c (it was
    looking for the flag in png_ptr->transformations instead of in
    png_ptr->flags) (David Raymond).

Version 1.5.0rc05 [December 31, 2010]
  Fixed typo in a comment in CMakeLists.txt (libpng14 => libpng15) (Cosmin)

Version 1.5.0rc06 [January 4, 2011]
  Changed the new configure option "zprefix=string" to "zlib-prefix=string"

Version 1.5.0rc07 [January 4, 2011]
  Updated copyright year.

Version 1.5.0 [January 6, 2011]
  No changes.

version 1.5.1beta01 [January 8, 2011]
  Added description of png_set_crc_action() to the manual.
  Added a note in the manual that the type of the iCCP profile was changed
    from png_charpp to png_bytepp in png_get_iCCP().  This change happened
    in version 1.5.0beta36 but is not noted in the CHANGES.  Similarly,
    it was changed from png_charpp to png_const_bytepp in png_set_iCCP().
  Ensure that png_rgb_to_gray ignores palette mapped images, if libpng
    internally happens to call it with one, and fixed a failure to handle
    palette mapped images correctly.  This fixes CVE-2690.

Version 1.5.1beta02 [January 14, 2011]
  Fixed a bug in handling of interlaced images (bero at arklinux.org).
  Updated CMakeLists.txt (Clifford Yapp)

Version 1.5.1beta03 [January 14, 2011]
  Fixed typecasting of some png_debug() statements (Cosmin)

Version 1.5.1beta04 [January 16, 2011]
  Updated documentation of png_set|get_tRNS() (Thomas Klausner).
  Mentioned in the documentation that applications must #include "zlib.h"
    if they need access to anything in zlib.h, and that a number of
    macros such as png_memset() are no longer accessible by applications.
  Corrected pngvalid gamma test "sample" function to access all of the color
    samples of each pixel, instead of sampling the red channel three times.
  Prefixed variable names index, div, exp, gamma with "png_" to avoid "shadow"
    warnings, and (mistakenly) changed png_exp() to exp().

Version 1.5.1beta05 [January 16, 2011]
  Changed variable names png_index, png_div, png_exp, and png_gamma to
    char_index, divisor, exp_b10, and gamma_val, respectively, and
    changed exp() back to png_exp().

Version 1.5.1beta06 [January 20, 2011]
  Prevent png_push_crc_skip() from hanging while reading an unknown chunk
    or an over-large compressed zTXt chunk with the progressive reader.
  Eliminated more GCC "shadow" warnings.
  Revised png_fixed() in png.c to avoid compiler warning about reaching the
    end without returning anything.

Version 1.5.1beta07 [January 22, 2011]
  In the manual, describe the png_get_IHDR() arguments in the correct order.
  Added const_png_structp and const_png_infop types, and used them in
    prototypes for most png_get_*() functions.

Version 1.5.1beta08 [January 23, 2011]
  Added png_get_io_chunk_type() and deprecated png_get_io_chunk_name()
  Added synopses for the IO_STATE functions and other missing synopses
    to the manual. Removed the synopses from libpngpf.3 because they
    were out of date and no longer useful.  Better information can be
    obtained by reading the prototypes and comments in pngpriv.h
  Attempted to fix cpp on Solaris with S. Studio 12 cc, fix build
    Added a make macro DFNCPP that is a CPP that will accept the tokens in
    a .dfn file and adds configure stuff to test for such a CPP.  ./configure
    should fail if one is not available.
  Corrected const_png_ in png.h to png_const_ to avoid polluting the\
 namespace.
  Added png_get_current_row_number and png_get_current_pass_number for the
    benefit of the user transform callback.
  Added png_process_data_pause and png_process_data_skip for the benefit of
    progressive readers that need to stop data processing or want to optimize
    skipping of unread data (e.g., if the reader marks a chunk to be skipped.)

Version 1.5.1beta09 [January 24, 2011]
  Enhanced pngvalid, corrected an error in gray_to_rgb, corrected doc error.
    pngvalid contains tests of transforms, which tests are currently disabled
    because they are incompletely tested.  gray_to_rgb was failing to expand
    the bit depth for smaller bit depth images; this seems to be a long
    standing error and resulted, apparently, in invalid output
    (CVE-2011-0408, CERT VU#643140).  The documentation did not accurately
    describe what libpng really does when converting RGB to gray.

Version 1.5.1beta10 [January 27, 2010]
  Fixed incorrect examples of callback prototypes in the manual, that were
    introduced in libpng-1.0.0.
  In addition the order of the png_get_uint macros with respect to the
    relevant function definitions has been reversed.  This helps the
    preprocessing of the symbol files be more robust.  Furthermore, the
    symbol file preprocessing now uses -DPNG_NO_USE_READ_MACROS even when
    the library may actually be built with PNG_USE_READ_MACROS; this stops
    the read macros interfering with the symbol file format.
  Made the manual, synopses, and function prototypes use the function
    argument names file_gamma, int_file_gamma, and srgb_intent consistently.

Version 1.5.1beta11 [January 28, 2011]
  Changed PNG_UNUSED from "param=param;" to "{if(param){}}".
  Corrected local variable type in new API png_process_data_skip()
    The type was self-evidently incorrect but only causes problems on 64-bit
    architectures.
  Added transform tests to pngvalid and simplified the arguments.

Version 1.5.1rc01 [January 29, 2011]
  No changes.

Version 1.5.1rc02 [January 31, 2011]
  Added a request in the manual that applications do not use "png_" or
    "PNG_" to begin any of their own symbols.
  Changed PNG_UNUSED to "(void)param;" and updated the commentary in pngpriv.h

Version 1.5.1 [February 3, 2011]
  No changes.

Version 1.5.2beta01 [February 13, 2011]
  More -Wshadow fixes for older gcc compilers.  Older gcc versions apparently
    check formal parameters names in function declarations (as well as
    definitions) to see if they match a name in the global namespace.
  Revised PNG_EXPORTA macro to not use an empty parameter, to accommodate the
    old VisualC++ preprocessor.
  Turned on interlace handling in png_read_png().
  Fixed gcc pedantic warnings.
  Handle longjmp in Cygwin.
  Fixed png_get_current_row_number() in the interlaced case.
  Cleaned up ALPHA flags and transformations.
  Implemented expansion to 16 bits.

Version 1.5.2beta02 [February 19, 2011]
  Fixed mistake in the descriptions of user read_transform and write_transform
    function prototypes in the manual.  The row_info struct is png_row_infop.
  Reverted png_get_current_row_number() to previous (1.5.2beta01) behavior.
  Corrected png_get_current_row_number documentation
  Fixed the read/write row callback documentation.
    This documents the current behavior, where the callback is called after
    every row with information pertaining to the next row.

Version 1.5.2beta03 [March 3, 2011]
  Fixed scripts/makefile.vcwin32
  Updated contrib/pngsuite/README to add the word "modify".
  Define PNG_ALLOCATED to blank when _MSC_VER<1300.

Version 1.5.2rc01 [March 19, 2011]
  Define remaining attributes to blank when MSC_VER<1300.
  ifdef out mask arrays in pngread.c when interlacing is not supported.

Version 1.5.2rc02 [March 22, 2011]
  Added a hint to try CPP=/bin/cpp if "cpp -E" fails in scripts/pnglibconf.mak
    and in contrib/pngminim/*/makefile, eg., on SunOS 5.10, and removed\
 "strip"
    from the makefiles.
  Fixed a bug (present since libpng-1.0.7) that makes png_handle_sPLT() fail
    to compile when PNG_NO_POINTER_INDEXING is defined (Chubanov Kirill)

Version 1.5.2rc03 [March 24, 2011]
  Don't include standard header files in png.h while building the symbol\
 table,
    to avoid cpp failure on SunOS (introduced PNG_BUILDING_SYMBOL_TABLE\
 macro).

Version 1.5.2 [March 31, 2011]
  No changes.

Version 1.5.3beta01 [April 1, 2011]
  Re-initialize the zlib compressor before compressing non-IDAT chunks.
  Added API functions (png_set_text_compression_level() and four others) to
    set parameters for zlib compression of non-IDAT chunks.

Version 1.5.3beta02 [April 3, 2011]
  Updated scripts/symbols.def with new API functions.
  Only compile the new zlib re-initializing code when text or iCCP is
    supported, using PNG_WRITE_COMPRESSED_TEXT_SUPPORTED macro.
  Improved the optimization of the zlib CMF byte (see libpng-1.2.6beta03).
  Optimize the zlib CMF byte in non-IDAT compressed chunks

Version 1.5.3beta03 [April 16, 2011]
  Fixed gcc -ansi -pedantic compile. A strict ANSI system does not have
    snprintf, and the "__STRICT_ANSI__" detects that condition more reliably
    than __STDC__ (John Bowler).
  Removed the PNG_PTR_NORETURN attribute because it too dangerous. It tells
    the compiler that a user supplied callback (the error handler) does not
    return, yet there is no guarantee in practice that the application code
    will correctly implement the error handler because the compiler only
    issues a warning if there is a mistake (John Bowler).
  Removed the no-longer-used PNG_DEPSTRUCT macro.
  Updated the zlib version to 1.2.5 in the VStudio project.
  Fixed 64-bit builds where png_uint_32 is smaller than png_size_t in
    pngwutil.c (John Bowler).
  Fixed bug with stripping the filler or alpha channel when writing, that
    was introduced in libpng-1.5.2beta01 (bug report by Andrew Church).

Version 1.5.3beta04 [April 27, 2011]
  Updated pngtest.png with the new zlib CMF optimization.
  Cleaned up conditional compilation code and of background/gamma handling
    Internal changes only except a new option to avoid compiling the
    png_build_grayscale_palette API (which is not used at all internally.)
    The main change is to move the transform tests (READ_TRANSFORMS,
    WRITE_TRANSFORMS) up one level to the caller of the APIs.  This avoids
    calls to spurious functions if all transforms are disabled and slightly
    simplifies those functions.  Pngvalid modified to handle this.
    A minor change is to stop the strip_16 and expand_16 interfaces from
    disabling each other; this allows the future alpha premultiplication
    code to use 16-bit intermediate values while still producing 8-bit output.
    png_do_background and png_do_gamma have been simplified to take a single
    pointer to the png_struct rather than pointers to every item required
    from the png_struct. This makes no practical difference to the internal
    code.
  A serious bug in the pngvalid internal routine 'standard_display_init' has
    been fixed - this failed to initialize the red channel and accidentally
    initialized the alpha channel twice.
  Changed png_struct jmp_buf member name from png_jmpbuf to tmp_jmpbuf to
    avoid a possible clash with the png_jmpbuf macro on some platforms.

Version 1.5.3beta05 [May 6, 2011]
  Added the "_POSIX_SOURCE" feature test macro to ensure libpng sees the
    correct API. _POSIX_SOURCE is defined in pngpriv.h, pngtest.c and
    pngvalid.c to ensure that POSIX conformant systems disable non-POSIX APIs.
  Removed png_snprintf and added formatted warning messages.  This change adds
    internal APIs to allow png_warning messages to have parameters without
    requiring the host OS to implement snprintf.  As a side effect the
    dependency of the tIME-supporting RFC1132 code on stdio is removed and
    PNG_NO_WARNINGS does actually work now.
  Pass "" instead of '\0' to png_default_error() in png_err().  This mistake
    was introduced in libpng-1.2.20beta01.  This fixes CVE-2011-2691.
  Added PNG_WRITE_OPTIMIZE_CMF_SUPPORTED macro to make the zlib "CMF" byte
    optimization configurable.
  IDAT compression failed if preceded by a compressed text chunk (bug
    introduced in libpng-1.5.3beta01-02).  This was because the attempt to
    reset the zlib stream in png_write_IDAT happened after the first IDAT
    chunk had been deflated - much too late.  In this change internal
    functions were added to claim/release the z_stream and, hopefully, make
    the code more robust.  Also deflateEnd checking is added - previously
    libpng would ignore an error at the end of the stream.

Version 1.5.3beta06 [May 8, 2011]
  Removed the -D_ALL_SOURCE from definitions for AIX in CMakeLists.txt
  Implemented premultiplied alpha support: png_set_alpha_mode API

Version 1.5.3beta07 [May 11, 2011]
  Added expand_16 support to the high level interface.
  Added named value and 'flag' gamma support to png_set_gamma.  Made a minor
    change from the previous (unreleased) ABI/API to hide the exact value used
    for Macs - it's not a good idea to embed this in the ABI!
  Moved macro definitions for PNG_HAVE_IHDR, PNG_HAVE_PLTE, and PNG_AFTER_IDAT
    from pngpriv.h to png.h because they must be visible to applications
    that call png_set_unknown_chunks().
  Check for up->location !PNG_AFTER_IDAT when writing unknown chunks
    before IDAT.

Version 1.5.3beta08 [May 16, 2011]
  Improved "pngvalid --speed" to exclude more of pngvalid from the time.
  Documented png_set_alpha_mode(), other changes in libpng.3/libpng-manual.txt
  The cHRM chunk now sets the defaults for png_set_rgb_to_gray() (when\
 negative
    parameters are supplied by the caller), while in the absence of cHRM
    sRGB/Rec 709 values are still used.  This introduced a divide-by-zero
    bug in png_handle_cHRM().
  The bKGD chunk no longer overwrites the background value set by
    png_set_background(), allowing the latter to be used before the file
    header is read. It never performed any useful function to override
    the default anyway.
  Added memory overwrite and palette image checks to pngvalid.c
    Previously palette image code was poorly checked. Since the transformation
    code has a special palette path in most cases this was a severe weakness.
  Minor cleanup and some extra checking in pngrutil.c and pngrtran.c. When
    expanding an indexed image, always expand to RGBA if transparency is
    present.

Version 1.5.3beta09 [May 17, 2011]
  Reversed earlier 1.5.3 change of transformation order; move png_expand_16
    back where it was.  The change doesn't work because it requires 16-bit
    gamma tables when the code only generates 8-bit ones.  This fails
    silently; the libpng code just doesn't do any gamma correction.  Moving
    the tests back leaves the old, inaccurate, 8-bit gamma calculations, but
    these are clearly better than none!

Version 1.5.3beta10 [May 20, 2011]

  png_set_background() and png_expand_16() did not work together correctly.
    This problem is present in 1.5.2; if png_set_background is called with
    need_expand false and the matching 16 bit color libpng erroneously just
    treats it as an 8-bit color because of where png_do_expand_16 is in the
    transform list.  This simple fix reduces the supplied colour to 8-bits,
    so it gets smashed, but this is better than the current behavior.
  Added tests for expand16, more fixes for palette image tests to pngvalid.
    Corrects the code for palette image tests and disables attempts to
    validate palette colors.

Version 1.5.3rc01 [June 3, 2011]
  No changes.

Version 1.5.3rc02 [June 8, 2011]
  Fixed uninitialized memory read in png_format_buffer() (Bug report by
    Frank Busse, CVE-2011-2501, related to CVE-2004-0421).

Version 1.5.3beta11 [June 11, 2011]
  Fixed png_handle_sCAL which is broken in 1.5. This fixes CVE 2011-2692.
  Added sCAL to pngtest.png
  Revised documentation about png_set_user_limits() to say that it also\
 affects
    png writing.
  Revised handling of png_set_user_limits() so that it can increase the
    limit beyond the PNG_USER_WIDTH|HEIGHT_MAX; previously it could only
    reduce it.
  Make the 16-to-8 scaling accurate. Dividing by 256 with no rounding is
    wrong (high by one) 25% of the time. Dividing by 257 with rounding is
    wrong in 128 out of 65536 cases. Getting the right answer all the time
    without division is easy.
  Added "_SUPPORTED" to the PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION macro.
  Added projects/owatcom, an IDE project for OpenWatcom to replace
    scripts/makefile.watcom.  This project works with OpenWatcom 1.9. The
    IDE autogenerates appropriate makefiles (libpng.mk) for batch processing.
    The project is configurable, unlike the Visual Studio project, so long
    as the developer has an awk.
  Changed png_set_gAMA to limit the gamma value range so that the inverse
    of the stored value cannot overflow the fixed point representation,
    and changed other things OpenWatcom warns about.
  Revised pngvalid.c to test PNG_ALPHA_MODE_SUPPORTED correctly. This allows
    pngvalid to build when ALPHA_MODE is not supported, which is required if
    it is to build on libpng 1.4.
  Removed string/memory macros that are no longer used and are not
    necessarily fully supportable, particularly png_strncpy and png_snprintf.
  Added log option to pngvalid.c and attempted to improve gamma messages.

Version 1.5.3 [omitted]
  People found the presence of a beta release following an rc release
    to be confusing; therefore we bump the version to libpng-1.5.4beta01
    and there will be no libpng-1.5.3 release.

Version 1.5.4beta01 [June 14, 2011]
  Made it possible to undefine PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
    to get the same (inaccurate) output as libpng-1.5.2 and earlier.
  Moved definitions of PNG_HAVE_IHDR, PNG_AFTER_IDAT, and PNG_HAVE_PLTE
    outside of an unknown-chunk block in png.h because they are also
    needed for other uses.

Version 1.5.4beta02 [June 14, 2011]
  Fixed and clarified LEGACY 16-to-8 scaling code.
  Added png_set_chop_16() API, to match inaccurate results from previous
    libpng versions.
  Removed the ACCURATE and LEGACY options (they are no longer useable)
  Use the old scaling method for background if png_set_chop_16() was
    called.
  Made png_set_chop_16() API removeable by disabling PNG_CHOP_16_TO_8_SUPPORT\
ED

Version 1.5.4beta03 [June 15, 2011]
  Fixed a problem in png_do_expand_palette() exposed by optimization in
    1.5.3beta06
  Also removed a spurious and confusing "trans" member ("trans") from\
 png_info.
  The palette expand optimization prevented expansion to an intermediate RGBA
    form if tRNS was present but alpha was marked to be stripped; this exposed
    a check for tRNS in png_do_expand_palette() which is inconsistent with the
    code elsewhere in libpng.
  Correction to the expand_16 code; removed extra instance of
    png_set_scale_16_to_8 from pngpriv.h

Version 1.5.4beta04 [June 16, 2011]
  Added a missing "#ifdef PNG_READ_BACKGROUND_SUPPORTED/#endif" in pngrtran.c
  Added PNG_TRANSFORM_CHOP_16 to the high-level read transforms.
  Made PNG_READ_16_TO_8_ACCURATE_SCALE configurable again.  If this is
    not enabled, png_set_strip_16() and png_do_scale_16_to_8() aren't built.
  Revised contrib/visupng, gregbook, and pngminim to demonstrate chop_16_to_8

Version 1.5.4beta05 [June 16, 2011]
  Renamed png_set_strip_16() to png_set_scale_16() and renamed
    png_set_chop_16() to png_set_strip(16) in an attempt to minimize the
    behavior changes between libpng14 and libpng15.

Version 1.5.4beta06 [June 18, 2011]
  Fixed new bug that was causing both strip_16 and scale_16 to be applied.

Version 1.5.4beta07 [June 19, 2011]
  Fixed pngvalid, simplified macros, added checking for 0 in sCAL.
    The ACCURATE scale macro is no longer defined in 1.5 - call the
    png_scale_16_to_8 API.  Made sure that PNG_READ_16_TO_8 is still defined
    if the png_strip_16_to_8 API is present.  png_check_fp_number now
    maintains some state so that positive, negative and zero values are
    identified.  sCAL uses these to be strictly spec conformant.

Version 1.5.4beta08 [June 23, 2011]
  Fixed pngvalid if ACCURATE_SCALE is defined.
  Updated scripts/pnglibconf.h.prebuilt.

Version 1.5.4rc01 [June 30, 2011]
  Define PNG_ALLOCATED to "restrict" only if MSC_VER >= 1400.

Version 1.5.4 [July 7, 2011]
  No changes.

Version 1.5.5beta01 [July 13, 2011]
  Fixed some typos and made other minor changes in the manual.
  Updated contrib/pngminus/makefile.std (Samuli Souminen)

Version 1.5.5beta02 [July 14, 2011]
  Revised Makefile.am and Makefile.in to look in the right directory for
    pnglibconf.h.prebuilt

Version 1.5.5beta03 [July 27, 2011]
  Enabled compilation with g++ compiler.  This compiler does not recognize
    the file extension, so it always compiles with C++ rules.  Made minor
    changes to pngrutil.c to cast results where C++ expects it but C does not.
  Minor editing of libpng.3 and libpng-manual.txt.

Version 1.5.5beta04 [July 29, 2011]
  Revised CMakeLists.txt (Clifford Yapp)
  Updated commentary about the png_rgb_to_gray() default coefficients
    in the manual and in pngrtran.c

Version 1.5.5beta05 [August 17, 2011]
  Prevent unexpected API exports from non-libpng DLLs on Windows.  The "_DLL"
    is removed from the test of whether a DLL is being built (this erroneously
    caused the libpng APIs to be marked as DLL exports in static builds under
    Microsoft Visual Studio).  Almost all of the libpng building configuration
    is moved from pngconf.h to pngpriv.h, but PNG_DLL_EXPORT remains in
    pngconf.h, though, so that it is colocated with the import definition (it
    is no longer used anywhere in the installed headers).  The VStudio project
    definitions have been cleaned up: "_USRDLL" has been removed from the
    static library builds (this was incorrect), and PNG_USE_DLL has been added
    to pngvalid to test the functionality (pngtest does not supply it,
    deliberately).  The spurious "_EXPORTS" has been removed from the
    libpng build (all these errors were a result of copy/paste between project
    configurations.)
  Added new types and internal functions for CIE RGB end point handling to
    pngpriv.h (functions yet to be implemented).

Version 1.5.5beta06 [August 26, 2011]
  Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set in CMakeLists.txt
    (Clifford Yap)
  Fixes to rgb_to_gray and cHRM XYZ APIs (John Bowler):
    The rgb_to_gray code had errors when combined with gamma correction.
    Some pixels were treated as true grey when they weren't and such pixels
    and true grey ones were not gamma corrected (the original value of the
    red component was used instead).  APIs to get and set cHRM using color
    space end points have been added and the rgb_to_gray code that defaults
    based on cHRM, and the divide-by-zero bug in png_handle_cHRM (CERT
    VU#477046, CVE-2011-3328, introduced in 1.5.4) have been corrected.
  A considerable number of tests has been added to pngvalid for the
    rgb_to_gray transform.
  Arithmetic errors in rgb_to_gray whereby the calculated gray value was
    truncated to the bit depth rather than rounded have been fixed except in
    the 8-bit non-gamma-corrected case (where consistency seems more important
    than correctness.)  The code still has considerable inaccuracies in the
    8-bit case because 8-bit linear arithmetic is used.

Version 1.5.5beta07 [September 7, 2011]
  Added "$(ARCH)" option to makefile.darwin
  Added SunOS support to configure.ac and Makefile.am
  Changed png_chunk_benign_error() to png_warning() in png.c, in
    png_XYZ_from_xy_checked().

Version 1.5.5beta08 [September 10, 2011]
  Fixed 64-bit compilation errors (gcc). The errors fixed relate
    to conditions where types that are 32 bits in the GCC 32-bit
    world (uLong and png_size_t) become 64 bits in the 64-bit
    world.  This produces potential truncation errors which the
    compiler correctly flags.
  Relocated new HAVE_SOLARIS_LD definition in configure.ac
  Constant changes for 64-bit compatibility (removal of L suffixes). The
    16-bit cases still use "L" as we don't have a 16-bit test system.

Version 1.5.5rc01 [September 15, 2011]
  Removed "L" suffixes in pngpriv.h

Version 1.5.5 [September 22, 2011]
  No changes.

Version 1.5.6beta01 [September 22, 2011]
  Fixed some 64-bit type conversion warnings in pngrtran.c
  Moved row_info from png_struct to a local variable.
  The various interlace mask arrays have been made into arrays of
    bytes and made PNG_CONST and static (previously some arrays were
    marked PNG_CONST and some weren't).
  Additional checks have been added to the transform code to validate the
    pixel depths after the transforms on both read and write.
  Removed some redundant code from pngwrite.c, in png_destroy_write_struct().
  Changed chunk reading/writing code to use png_uint_32 instead of\
 png_byte[4].
    This removes the need to allocate temporary strings for chunk names on
    the stack in the read/write code.  Unknown chunk handling still uses the
    string form because this is exposed in the API.

Version 1.5.6beta02 [September 26, 2011]
  Added a note in the manual the png_read_update_info() must be called only
    once with a particular info_ptr.
  Fixed a typo in the definition of the new PNG_STRING_FROM_CHUNK(s,c) macro.

Version 1.5.6beta03 [September 28, 2011]
  Revised test-pngtest.sh to report FAIL when pngtest fails.
  Added "--strict" option to pngtest, to report FAIL when the failure is
    only because the resulting valid files are different.
  Revised CMakeLists.txt to work with mingw and removed some material from
    CMakeLists.txt that is no longer useful in libpng-1.5.

Version 1.5.6beta04 [October 5, 2011]
  Fixed typo in Makefile.in and Makefile.am ("-M Wl" should be "-M -Wl")."

Version 1.5.6beta05 [October 12, 2011]
  Speed up png_combine_row() for interlaced images. This reduces the\
 generality
    of the code, allowing it to be optimized for Adam7 interlace.  The masks
    passed to png_combine_row() are now generated internally, avoiding
    some code duplication and localizing the interlace handling somewhat.
  Align png_struct::row_buf - previously it was always unaligned, caused by
    a bug in the code that attempted to align it; the code needs to subtract
    one from the pointer to take account of the filter byte prepended to
    each row.
  Optimized png_combine_row() when rows are aligned. This gains a small
    percentage for 16-bit and 32-bit pixels in the typical case where the
    output row buffers are appropriately aligned. The optimization was not
    previously possible because the png_struct buffer was always misaligned.
  Fixed bug in png_write_chunk_header() debug print, introduced in\
 1.5.6beta01.

Version 1.5.6beta06 [October 17, 2011]
  Removed two redundant tests for uninitialized row.
  Fixed a relatively harmless memory overwrite in compressed text writing
    with a 1 byte zlib buffer.
  Add ability to call png_read_update_info multiple times to pngvalid.c.
  Fixes for multiple calls to png_read_update_info. These fixes attend to
    most of the errors revealed in pngvalid, however doing the gamma work
    twice results in inaccuracies that can't be easily fixed.  There is now
    a warning in the code if this is going to happen.
  Turned on multiple png_read_update_info in pngvalid transform tests.
  Prevent libpng from overwriting unused bits at the end of the image when
    it is not byte aligned, while reading. Prior to libpng-1.5.6 libpng would
    overwrite the partial byte at the end of each row if the row width was not
    an exact multiple of 8 bits and the image is not interlaced.

Version 1.5.6beta07 [October 21, 2011]
  Made png_ptr->prev_row an aligned pointer into png_ptr->big_prev_row
    (Mans Rullgard).

Version 1.5.6rc01 [October 26, 2011]
  Changed misleading "Missing PLTE before cHRM" warning to "Out of place cHRM"

Version 1.5.6rc02 [October 27, 2011]
  Added LSR() macro to defend against buggy compilers that evaluate non-taken
    code branches and complain about out-of-range shifts.

Version 1.5.6rc03 [October 28, 2011]
  Renamed the LSR() macro to PNG_LSR() and added PNG_LSL() macro.
  Fixed compiler warnings with Intel and MSYS compilers. The logical shift
    fix for Microsoft Visual C is required by other compilers, so this
    enables that fix for all compilers when using compile-time constants.
    Under MSYS 'byte' is a name declared in a system header file, so we
    changed the name of a local variable to avoid the warnings that result.
  Added #define PNG_ALIGN_TYPE PNG_ALIGN_NONE to contrib/pngminim/*/pngusr.h

Version 1.5.6 [November 3, 2011]
  No changes.

Version 1.5.7beta01 [November 4, 2011]
  Added support for ARM processor, when decoding all PNG up-filtered rows
    and any other-filtered rows with 3 or 4 bytes per pixel (Mans Rullgard).
  Fixed bug in pngvalid on early allocation failure; fixed type cast in
    pngmem.c; pngvalid would attempt to call png_error() if the allocation
    of a png_struct or png_info failed. This would probably have led to a
    crash.  The pngmem.c implementation of png_malloc() included a cast
    to png_size_t which would fail on large allocations on 16-bit systems.
  Fix for the preprocessor of the Intel C compiler. The preprocessor
    splits adjacent @ signs with a space; this changes the concatenation
    token from @-@-@ to PNG_JOIN; that should work with all compiler
    preprocessors.
  Paeth filter speed improvements from work by Siarhei Siamashka. This
    changes the 'Paeth' reconstruction function to improve the GCC code
    generation on x86. The changes are only part of the suggested ones;
    just the changes that definitely improve speed and remain simple.
    The changes also slightly increase the clarity of the code.

Version 1.5.7beta02 [November 11, 2011]
  Check compression_type parameter in png_get_iCCP and remove spurious
    casts. The compression_type parameter is always assigned to, so must
    be non-NULL. The cast of the profile length potentially truncated the
    value unnecessarily on a 16-bit int system, so the cast of the (byte)
    compression type to (int) is specified by ANSI-C anyway.
  Fixed FP division by zero in pngvalid.c; the 'test_pixel' code left
    the sBIT fields in the test pixel as 0, which resulted in a floating
    point division by zero which was irrelevant but causes systems where
    FP exceptions cause a crash. Added code to pngvalid to turn on FP
    exceptions if the appropriate glibc support is there to ensure this is
    tested in the future.
  Updated scripts/pnglibconf.mak and scripts/makefile.std to handle the
    new PNG_JOIN macro.
  Added versioning to pnglibconf.h comments.
  Simplified read/write API initial version; basic read/write tested on
    a variety of images, limited documentation (in the header file.)
  Installed more accurate linear to sRGB conversion tables. The slightly
    modified tables reduce the number of 16-bit values that
    convert to an off-by-one 8-bit value.  The "makesRGB.c" code that was used
    to generate the tables is now in a contrib/sRGBtables sub-directory.

Version 1.5.7beta03 [November 17, 2011]
  Removed PNG_CONST from the sRGB table declarations in pngpriv.h and png.c
  Added run-time detection of NEON support.
  Added contrib/libtests; includes simplified API test and timing test and
    a color conversion utility for rapid checking of failed 'pngstest'\
 results.
  Multiple transform bug fixes plus a work-round for double gamma correction.
    libpng does not support more than one transform that requires linear data
    at once - if this is tried typically the results is double gamma
    correction. Since the simplified APIs can need rgb to gray combined with
    a compose operation it is necessary to do one of these outside the main
    libpng transform code. This check-in also contains fixes to various bugs
    in the simplified APIs themselves and to some bugs in compose and rgb to
    gray (on palette) itself.
  Fixes for C++ compilation using g++ When libpng source is compiled
    using g++. The compiler imposes C++ rules on the C source; thus it
    is desirable to make the source work with either C or C++ rules
    without throwing away useful error information.  This change adds
    png_voidcast to allow C semantic (void*) cases or the corresponding
    C++ static_cast operation, as appropriate.
  Added --noexecstack to assembler file compilation. GCC does not set
    this on assembler compilation, even though it does on C compilation.
    This creates security issues if assembler code is enabled; the
    work-around is to set it by default in the flags for $(CCAS)
  Work around compilers that don't support declaration of const data. Some
    compilers fault 'extern const' data declarations (because the data is
    not initialized); this turns on const-ness only for compilers where
    this is known to work.

Version 1.5.7beta04 [November 17, 2011]
  Since the gcc driver does not recognize the --noexecstack flag, we must
    use the -Wa prefix to have it passed through to the assembler.
    Also removed a duplicate setting of this flag.
  Added files that were omitted from the libpng-1.5.7beta03 zip distribution.

Version 1.5.7beta05 [November 25, 2011]
  Removed "zTXt" from warning in generic chunk decompression function.
  Validate time settings passed to png_set_tIME() and png_convert_to_rfc1123()
    (Frank Busse). Note: This prevented CVE-2015-7981 from affecting
    libpng-1.5.7 and later.
  Added MINGW support to CMakeLists.txt
  Reject invalid compression flag or method when reading the iTXt chunk.
  Backed out 'simplified' API changes. The API seems too complex and there
    is a lack of consensus or enthusiasm for the proposals.  The API also
    reveals significant bugs inside libpng (double gamma correction and the
    known bug of being unable to retrieve a corrected palette). It seems
    better to wait until the bugs, at least, are corrected.
  Moved pngvalid.c into contrib/libtests
  Rebuilt Makefile.in, configure, etc., with autoconf-2.68

Version 1.5.7rc01 [December 1, 2011]
  Replaced an "#if" with "#ifdef" in pngrtran.c
  Revised #if PNG_DO_BC block in png.c (use #ifdef and add #else)

Version 1.5.7rc02 [December 5, 2011]
  Revised project files and contrib/pngvalid/pngvalid.c to account for
    the relocation of pngvalid into contrib/libtests.
  Revised pngconf.h to use " __declspec(restrict)" only when MSC_VER >= 1400,
    as in libpng-1.5.4.
  Put CRLF line endings in the owatcom project files.

Version 1.5.7rc03 [December 7, 2011]
  Updated CMakeLists.txt to account for the relocation of pngvalid.c

Version 1.5.7 [December 15, 2011]
  Minor fixes to pngvalid.c for gcc 4.6.2 compatibility to remove warnings
    reported by earlier versions.
  Fixed minor memset/sizeof errors in pngvalid.c.

Version 1.6.0beta01 [December 15, 2011]
  Removed machine-generated configure files from the GIT repository (they will
    continue to appear in the tarball distributions and in the libpng15 and
    earlier GIT branches).
  Restored the new 'simplified' API, which was started in libpng-1.5.7beta02
    but later deleted from libpng-1.5.7beta05.
  Added example programs for the new 'simplified' API.
  Added ANSI-C (C90) headers and require them, and take advantage of the
    change. Also fixed some of the projects/* and contrib/* files that needed
    updates for libpng16 and the move of pngvalid.c.
    With this change the required ANSI-C header files are assumed to exist:\
 the
    implementation must provide float.h, limits.h, stdarg.h and stddef.h and
    libpng relies on limits.h and stddef.h existing and behaving as defined
    (the other two required headers aren't used).  Non-ANSI systems that don't
    have stddef.h or limits.h will have to provide an appropriate fake
    containing the relevant types and #defines.
  Dropped support for 16-bit platforms. The use of FAR/far has been eliminated
    and the definition of png_alloc_size_t is now controlled by a flag so
    that 'small size_t' systems can select it if necessary.  Libpng 1.6 may
    not currently work on such systems -- it seems likely that it will
    ask 'malloc' for more than 65535 bytes with any image that has a
    sufficiently large row size (rather than simply failing to read such
    images).
  New tools directory containing tools used to generate libpng code.
  Fixed race conditions in parallel make builds. With higher degrees of
    parallelism during 'make' the use of the same temporary file names such
    as 'dfn*' can result in a race where a temporary file from one arm of the
    build is deleted or overwritten in another arm.  This changes the
    temporary files for suffix rules to always use $* and ensures that the
    non-suffix rules use unique file names.

Version 1.6.0beta02 [December 21, 2011]
  Correct configure builds where build and source directories are separate.
    The include path of 'config.h' was erroneously made relative in pngvalid.c
    in libpng 1.5.7.

Version 1.6.0beta03 [December 22, 2011]
  Start-up code size improvements, error handler flexibility. These changes
    alter how the tricky allocation of the initial png_struct and png_info
    structures are handled. png_info is now handled in pretty much the same
    way as everything else, except that the allocations handle NULL return
    silently.  png_struct is changed in a similar way on allocation and on
    deallocation a 'safety' error handler is put in place (which should never
    be required).  The error handler itself is changed to permit mismatches
    in the application and libpng error buffer size; however, this means a
    silent change to the API to return the jmp_buf if the size doesn't match
    the size from the libpng compilation; libpng now allocates the memory and
    this may fail.  Overall these changes result in slight code size
    reductions; however, this is a reduction in code that is always executed
    so is particularly valuable.  Overall on a 64-bit system the libpng DLL
    decreases in code size by 1733 bytes.  pngerror.o increases in size by
    about 465 bytes because of the new functionality.
  Added png_convert_to_rfc1123_buffer() and deprecated png_convert_to_rfc1123\
()
    to avoid including a spurious buffer in the png_struct.

Version 1.6.0beta04 [December 30, 2011]
  Regenerated configure scripts with automake-1.11.2
  Eliminated png_info_destroy(). It is now used only in png.c and only calls
    one other internal function and memset().
  Enabled png_get_sCAL_fixed() if floating point APIs are enabled. Previously
    it was disabled whenever internal fixed point arithmetic was selected,
    which meant it didn't exist even on systems where FP was available but not
    preferred.
  Added pngvalid.c compile time checks for const APIs.
  Implemented 'restrict' for png_info and png_struct. Because of the way
    libpng works both png_info and png_struct are always accessed via a
    single pointer.  This means adding C99 'restrict' to the pointer gives
    the compiler some opportunity to optimize the code.  This change allows
    that.
  Moved AC_MSG_CHECKING([if libraries can be versioned]) later to the proper
    location in configure.ac (Gilles Espinasse).
  Changed png_memcpy to C assignment where appropriate. Changed all those
    uses of png_memcpy that were doing a simple assignment to assignments
    (all those cases where the thing being copied is a non-array C L-value).
  Added some error checking to png_set_*() routines.
  Removed the reference to the non-exported function png_memcpy() from
    example.c.
  Fixed the Visual C 64-bit build - it requires jmp_buf to be aligned, but
    it had become misaligned.
  Revised contrib/pngminus/pnm2png.c to avoid warnings when png_uint_32
    and unsigned long are of different sizes.

Version 1.6.0beta05 [January 15, 2012]
  Updated manual with description of the simplified API (copied from png.h)
  Fix bug in pngerror.c: some long warnings were being improperly truncated
    (CVE-2011-3464, bug introduced in libpng-1.5.3beta05).

Version 1.6.0beta06 [January 24, 2012]
  Added palette support to the simplified APIs. This commit
    changes some of the macro definitions in png.h, app code
    may need corresponding changes.
  Increased the formatted warning buffer to 192 bytes.
  Added color-map support to simplified API. This is an initial version for
    review; the documentation has not yet been updated.
  Fixed Min/GW uninstall to remove libpng.dll.a

Version 1.6.0beta07 [January 28, 2012]
  Eliminated Intel icc/icl compiler warnings. The Intel (GCC derived)
    compiler issues slightly different warnings from those issued by the
    current vesions of GCC. This eliminates those warnings by
    adding/removing casts and small code rewrites.
  Updated configure.ac from autoupdate: added --enable-werror option.
    Also some layout regularization and removal of introduced tab characters
    (replaced with 3-character indentation).  Obsolete macros identified by
    autoupdate have been removed; the replacements are all in 2.59 so
    the pre-req hasn't been changed.  --enable-werror checks for support
    for -Werror (or the given argument) in the compiler.  This mimics the
    gcc configure option by allowing -Werror to be turned on safely; without
    the option the tests written in configure itself fail compilation because
    they cause compiler warnings.
  Rewrote autogen.sh to run autoreconf instead of running tools one-by-one.
  Conditionalize the install rules for MINGW and CYGWIN in CMakeLists.txt and
    set CMAKE_LIBRARY_OUTPUT_DIRECTORY to "lib" on all platforms (C. Yapp).
  Freeze libtool files in the 'scripts' directory. This version of autogen.sh
    attempts to dissuade people from running it when it is not, or should not,
    be necessary.  In fact, autogen.sh does not work when run in a libpng
    directory extracted from a tar distribution anymore. You must run it in
    a GIT clone instead.
  Added two images to contrib/pngsuite (1-bit and 2-bit transparent\
 grayscale),
    and renamed three whose names were inconsistent with those in
    pngsuite/README.txt.

Version 1.6.0beta08 [February 1, 2012]
  Fixed Image::colormap misalignment in pngstest.c
  Check libtool/libtoolize version number (2.4.2) in configure.ac
  Divide test-pngstest.sh into separate pngstest runs for basic and
    transparent images.
  Moved automake options to AM_INIT_AUTOMAKE in configure.ac
  Added color-tests, silent-rules (Not yet implemented in Makefile.am) and
    version checking to configure.ac
  Improved pngstest speed by not doing redundant tests and add const to
    the background parameter of png_image_finish_read. The --background
    option is now done automagically only when required, so that commandline
    option no longer exists.
  Cleaned up pngpriv.h to consistently declare all functions and data.
    Also eliminated PNG_CONST_DATA, which is apparently not needed but we
    can't be sure until it is gone.
  Added symbol prefixing that allows all the libpng external symbols
    to be prefixed (suggested by Reuben Hawkins).
  Updated "ftbb*.png" list in the owatcom and vstudio projects.
  Fixed 'prefix' builds on clean systems. The generation of pngprefix.h
    should not require itself.
  Updated INSTALL to explain that autogen.sh must be run in a GIT clone,
    not in a libpng directory extracted from a tar distribution.

Version 1.6.0beta09 [February 1, 2012]
  Reverted the prebuilt configure files to libpng-1.6.0beta05 condition.

Version 1.6.0beta10 [February 3, 2012]
  Added Z_SOLO for zlib-1.2.6+ and correct pngstest tests
  Updated list of test images in CMakeLists.txt
  Updated the prebuilt configure files to current condition.
  Revised INSTALL information about autogen.sh; it works in tar distributions.

Version 1.6.0beta11 [February 16, 2012]
  Fix character count in pngstest command in projects/owatcom/pngstest.tgt
  Revised test-pngstest.sh to report PASS/FAIL for each image.
  Updated documentation about the simplified API.
  Corrected estimate of error in libpng png_set_rgb_to_gray API.  The API is
    extremely inaccurate for sRGB conversions because it uses an 8-bit
    intermediate linear value and it does not use the sRGB transform, so it
    suffers from the known instability in gamma transforms for values close
    to 0 (see Poynton).  The net result is that the calculation has a maximum
    error of 14.99/255; 0.5/255^(1/2.2).  pngstest now uses 15 for the
    permitted 8-bit error. This may still not be enough because of arithmetic
    error.
  Removed some unused arrays (with #ifdef) from png_read_push_finish_row().
  Fixed a memory overwrite bug in simplified read of RGB PNG with
    non-linear gamma Also bugs in the error checking in pngread.c and changed
    quite a lot of the checks in pngstest.c to be correct; either correctly
    written or not over-optimistic.  The pngstest changes are insufficient to
    allow all possible RGB transforms to be passed; pngstest cmppixel needs
    to be rewritten to make it clearer which errors it allows and then changed
    to permit known inaccuracies.
  Removed tests for no-longer-used *_EMPTY_PLTE_SUPPORTED from pngstruct.h
  Fixed fixed/float API export conditionals. 1) If FIXED_POINT or
    FLOATING_POINT options were switched off, png.h ended up with lone ';'
    characters.  This is not valid ANSI-C outside a function.  The ';'
    characters have been moved inside the definition of PNG_FP_EXPORT and
    PNG_FIXED_EXPORT. 2) If either option was switched off, the declaration
    of the corresponding functions were completely omitted, even though some
    of them are still used internally.  The result is still valid, but
    produces warnings from gcc with some warning options (including -Wall).\
 The
    fix is to cause png.h to declare the functions with PNG_INTERNAL_FUNCTION
    when png.h is included from pngpriv.h.
  Check for invalid palette index while reading paletted PNG.  When one is
    found, issue a warning and increase png_ptr->num_palette accordingly.
    Apps are responsible for checking to see if that happened.

Version 1.6.0beta12 [February 18, 2012]
  Do not increase num_palette on invalid_index.
  Relocated check for invalid palette index to pngrtran.c, after unpacking
    the sub-8-bit pixels.
  Fixed CVE-2011-3026 buffer overrun bug.  This bug was introduced when
    iCCP chunk support was added at libpng-1.0.6. Deal more correctly with the
    test on iCCP chunk length. Also removed spurious casts that may hide
    problems on 16-bit systems.

Version 1.6.0beta13 [February 24, 2012]
  Eliminated redundant png_push_read_tEXt|zTXt|iTXt|unknown code from
    pngpread.c and use the sequential png_handle_tEXt, etc., in pngrutil.c;
    now that png_ptr->buffer is inaccessible to applications, the special
    handling is no longer useful.
  Added PNG_SAFE_LIMITS feature to pnglibconf.dfa, pngpriv.h, and new
    pngusr.dfa to reset the user limits to safe ones if PNG_SAFE_LIMITS is
    defined.  To enable, use "CPPFLAGS=-DPNG_SAFE_LIMITS_SUPPORTED=1" on the
    configure command or put #define PNG_SAFE_LIMITS_SUPPORTED in
    pnglibconf.h.prebuilt and pnglibconf.h.

Version 1.6.0beta14 [February 27, 2012]
  Added information about the new limits in the manual.
  Updated Makefile.in

Version 1.6.0beta15 [March 2, 2012]
  Removed unused "current_text" members of png_struct and the png_free()
    of png_ptr->current_text from pngread.c
  Rewrote pngstest.c for substantial speed improvement.
  Fixed transparent pixel and 16-bit rgb tests in pngstest and removed a
    spurious check in pngwrite.c
  Added PNG_IMAGE_FLAG_FAST for the benefit of applications that store
    intermediate files, or intermediate in-memory data, while processing
    image data with the simplified API.  The option makes the files larger
    but faster to write and read.  pngstest now uses this by default; this
    can be disabled with the --slow option.
  Improved pngstest fine tuning of error numbers, new test file generator.
    The generator generates images that test the full range of sample values,
    allow the error numbers in pngstest to be tuned and checked.  makepng
    also allows generation of images with extra chunks, although this is
    still work-in-progress.
  Added check for invalid palette index while reading.
  Fixed some bugs in ICC profile writing. The code should now accept
    all potentially valid ICC profiles and reject obviously invalid ones.
    It now uses png_error() to do so rather than casually writing a PNG
    without the necessary color data.
  Removed whitespace from the end of lines in all source files and scripts.

Version 1.6.0beta16 [March 6, 2012]
  Relocated palette-index checking function from pngrutil.c to pngtrans.c
  Added palette-index checking while writing.
  Changed png_inflate() and calling routines to avoid overflow problems.
    This is an intermediate check-in that solves the immediate problems and
    introduces one performance improvement (avoiding a copy via\
 png_ptr->zbuf.)
    Further changes will be made to make ICC profile handling more secure.
  Fixed build warnings (MSVC, GCC, GCC v3). Cygwin GCC with default options
    declares 'index' as a global, causing a warning if it is used as a local
    variable.  GCC 64-bit warns about assigning a (size_t) (unsigned 64-bit)
    to an (int) (signed 32-bit).  MSVC, however, warns about using the
    unary '-' operator on an unsigned value (even though it is well defined
    by ANSI-C to be ~x+1).  The padding calculation was changed to use a
    different method.  Removed the tests on png_ptr->pass.
  Added contrib/libtests/tarith.c to test internal arithmetic functions from
    png.c. This is a libpng maintainer program used to validate changes to the
    internal arithmetic functions.
  Made read 'inflate' handling like write 'deflate' handling. The read
    code now claims and releases png_ptr->zstream, like the write code.
    The bug whereby the progressive reader failed to release the zstream
    is now fixed, all initialization is delayed, and the code checks for
    changed parameters on deflate rather than always calling
    deflatedEnd/deflateInit.
  Validate the zTXt strings in pngvalid.
  Added code to validate the windowBits value passed to deflateInit2().
    If the call to deflateInit2() is wrong a png_warning will be issued
    (in fact this is harmless, but the PNG data produced may be sub-optimal).

Version 1.6.0beta17 [March 10, 2012]
  Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition. 
  Reject all iCCP chunks after the first, even if the first one is invalid.
  Deflate/inflate was reworked to move common zlib calls into single
    functions [rw]util.c.  A new shared keyword check routine was also added
    and the 'zbuf' is no longer allocated on progressive read.  It is now
    possible to call png_inflate() incrementally.  A warning is no longer
    issued if the language tag or translated keyword in the iTXt chunk
    has zero length.
  If benign errors are disabled use maximum window on ancillary inflate.
    This works round a bug introduced in 1.5.4 where compressed ancillary
    chunks could end up with a too-small windowBits value in the deflate
    header.

Version 1.6.0beta18 [March 16, 2012]
  Issue a png_benign_error() instead of png_warning() about bad palette index.
  In pngtest, treat benign errors as errors if "-strict" is present.
  Fixed an off-by-one error in the palette index checking function.
  Fixed a compiler warning under Cygwin (Windows-7, 32-bit system)
  Revised example.c to put text strings in a temporary character array
    instead of directly assigning string constants to png_textp members.
    This avoids compiler warnings when -Wwrite-strings is enabled.
  Added output flushing to aid debugging under Visual Studio. Unfortunately
    this is necessary because the VS2010 output window otherwise simply loses
    the error messages on error (they weren't flushed to the window before
    the process exited, apparently!)
  Added configuration support for benign errors and changed the read
    default. Also changed some warnings in the iCCP and sRGB handling
    from to benign errors. Configuration now makes read benign
    errors warnings and write benign errors to errors by default (thus
    changing the behavior on read).  The simplified API always forces
    read benign errors to warnings (regardless of the system default, unless
    this is disabled in which case the simplified API can't be built.)

Version 1.6.0beta19 [March 18, 2012]
  Work around for duplicate row start calls; added warning messages.
    This turns on PNG_FLAG_DETECT_UNINITIALIZED to detect app code that
    fails to call one of the 'start' routines (not enabled in libpng-1.5
    because it is technically an API change, since it did normally work
    before.)  It also makes duplicate calls to png_read_start_row (an
    internal function called at the start of the image read) benign, as
    they were before changes to use png_inflate_claim. Somehow webkit is
    causing this to happen; this is probably a mis-feature in the zlib
    changes so this commit is only a work-round.
  Removed erroneous setting of DETECT_UNINITIALIZED and added more
    checks. The code now does a png_error if an attempt is made to do the
    row initialization twice; this is an application error and it has
    serious consequences because the transform data in png_struct is
    changed by each call.
  Added application error reporting and added chunk names to read
    benign errors; also added --strict to pngstest - not enabled
    yet because a warning is produced.
  Avoid the double gamma correction warning in the simplified API.
    This allows the --strict option to pass in the pngstest checks

Version 1.6.0beta20 [March 29, 2012]
  Changed chunk handler warnings into benign errors, incrementally load iCCP
  Added checksum-icc.c to contrib/tools
  Prevent PNG_EXPAND+PNG_SHIFT doing the shift twice.
  Recognize known sRGB ICC profiles while reading; prefer writing the
    iCCP profile over writing the sRGB chunk, controlled by the
    PNG_sRGB_PROFILE_CHECKS option.
  Revised png_set_text_2() to avoid potential memory corruption (fixes
    CVE-2011-3048, also known as CVE-2012-3425).

Version 1.6.0beta21 [April 27, 2012]
  Revised scripts/makefile.darwin: use system zlib; remove quotes around
    architecture list; add missing ppc architecture; add architecture options
    to shared library link; don't try to create a shared lib based on missing
    RELEASE variable.
  Enable png_set_check_for_invalid_index() for both read and write.
  Removed #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED in pngpriv.h around
    declaration of png_handle_unknown().
  Added -lssp_nonshared in a comment in scripts/makefile.freebsd
    and changed deprecated NOOBJ and NOPROFILE to NO_OBJ and NO_PROFILE.

Version 1.6.0beta22 [May 23, 2012]
  Removed need for -Wno-cast-align with clang.  clang correctly warns on
    alignment increasing pointer casts when -Wcast-align is passed. This
    fixes the cases that clang warns about either by eliminating the
    casts from png_bytep to png_uint_16p (pngread.c), or, for pngrutil.c
    where the cast is previously verified or pngstest.c where it is OK, by
    introducing new png_aligncast macros to do the cast in a way that clang
    accepts.

Version 1.6.0beta23 [June 6, 2012]
  Revised CMakeLists.txt to not attempt to make a symlink under mingw.
  Made fixes for new optimization warnings from gcc 4.7.0. The compiler
    performs an optimization which is safe; however it then warns about it.
    Changing the type of 'palette_number' in pngvalid.c removes the warning.
  Do not depend upon a GCC feature macro being available for use in generating
    the linker mapfile symbol prefix.
  Improved performance of new do_check_palette_indexes() function (only
    update the value when it actually increases, move test for whether
    the check is wanted out of the function.

Version 1.6.0beta24 [June 7, 2012]
  Don't check palette indexes if num_palette is 0 (as it can be in MNG files).

Version 1.6.0beta25 [June 16, 2012]
  Revised png_set_keep_unknown_chunks() so num_chunks < 0 means ignore all
    unknown chunks and all known chunks except for IHDR, PLTE, tRNS, IDAT,
    and IEND.  Previously it only meant ignore all unknown chunks, the
    same as num_chunks == 0. Revised png_image_skip_unused_chunks() to
    provide a list of chunks to be processed instead of a list of chunks to
    ignore.  Revised contrib/gregbook/readpng2.c accordingly.

Version 1.6.0beta26 [July 10, 2012]
  Removed scripts/makefile.cegcc from the *.zip and *.7z distributions; it
    depends on configure, which is not included in those archives.
  Moved scripts/chkfmt to contrib/tools.
  Changed "a+w" to "u+w" in Makefile.in to fix CVE-2012-3386.

Version 1.6.0beta27 [August 11, 2012]
  Do not compile PNG_DEPRECATED, PNG_ALLOC and PNG_PRIVATE when __GNUC__ < 3.
  Do not use __restrict when GNUC is <= 3.1
  Removed references to png_zalloc() and png_zfree() from the manual.
  Fixed configurations where floating point is completely disabled.  Because
    of the changes to support symbol prefixing PNG_INTERNAL_FUNCTION declares
    floating point APIs during libpng builds even if they are completely
    disabled. This requires the png floating point types (png_double*) to be
    declared even though the functions are never actually defined.  This
    change provides a dummy definition so that the declarations work, yet any
    implementation will fail to compile because of an incomplete type.
  Re-eliminated the use of strcpy() in pngtest.c.  An unnecessary use of
    strcpy() was accidentally re-introduced in libpng16; this change replaces
    it with strncpy().
  Eliminated use of png_sizeof(); use sizeof() instead.
  Use a consistent style for (sizeof type) and (sizeof (array))
  Cleanup of png_set_filler().  This function does very different things on
    read and write.  In libpng 1.6 the two cases can be distinguished and
    considerable code cleanup, and extra error checking, is possible.  This
    makes calls on the write side that have no effect be ignored with a
    png_app_error(), which can be disabled in the app using
    png_set_benign_errors(), and removes the spurious use of usr_channels
    on the read side.
  Insist on autotools 1.12.1 for git builds because there are security issues
    with 1.12 and insisting on anything less would allow 1.12 to be used.
  Removed info_ptr->signature[8] from WRITE-only builds.
  Add some conditions for compiling png_fixed().  This is a small function
    but it requires "-lm" on some platforms.
  Cause pngtest --strict to fail on any warning from libpng (not just errors)
    and cause it not to fail at the comparison step if libpng lacks support
    for writing chunks that it reads from the input (currently only\
 implemented
    for compressed text chunks).
  Make all three "make check" test programs work without READ or WRITE\
 support.
    Now "make check" will succeed even if libpng is compiled with\
 -DPNG_NO_READ
    or -DPNG_NO_WRITE.  The tests performed are reduced, but the basic reading
    and writing of a PNG file is always tested by one or more of the tests.
  Consistently use strlen(), memset(), memcpy(), and memcmp() instead of the
    png_strlen(), png_memset(), png_memcpy(), and png_memcmp() macros.
  Removed the png_sizeof(), png_strlen(), png_memset(), png_memcpy(), and
    png_memcmp() macros.
  Work around gcc 3.x and Microsoft Visual Studio 2010 complaints. Both object
    to the split initialization of num_chunks.

Version 1.6.0beta28 [August 29, 2012]
  Unknown handling fixes and clean up. This adds more correct option
    control of the unknown handling, corrects the pre-existing bug where
    the per-chunk 'keep' setting is ignored and makes it possible to skip
    IDAT chunks in the sequential reader (broken in earlier 1.6 versions).
    There is a new test program, test-unknown.c, which is a work in progress
    (not currently part of the test suite).  Comments in the header files now
    explain how the unknown handling works.
  Allow fine grain control of unknown chunk APIs. This change allows
    png_set_keep_unknown_chunks() to be turned off if not required and causes
    both read and write to behave appropriately (on read this is only possible
    if the user callback is used to handle unknown chunks).  The change
    also removes the support for storing unknown chunks in the info_struct
    if the only unknown handling enabled is via the callback, allowing libpng
    to be configured with callback reading and none of the unnecessary code.
  Corrected fix for unknown handling in pngtest. This reinstates the
    libpng handling of unknown chunks other than vpAg and sTER (including
    unsafe-to-copy chunks which were dropped before) and eliminates the
    repositioning of vpAg and sTER in pngtest.png by changing pngtest.png
    (so the chunks are where libpng would put them).
  Added "tunknown" test and corrected a logic error in png_handle_unknown()
    when SAVE support is absent.  Moved the shell test scripts for
    contrib/libtests from the libpng top directory to contrib/libtests.
    png_handle_unknown() must always read or skip the chunk, if
    SAVE_UNKNOWN_CHUNKS is turned off *and* the application does not set
    a user callback an unknown chunk will not be read, leading to a read
    error, which was revealed by the "tunknown" test.
  Cleaned up and corrected ICC profile handling.
    contrib/libtests/makepng: corrected 'rgb' and 'gray' cases.  profile_error
    messages could be truncated; made a correct buffer size calculation and
    adjusted pngerror.c appropriately. png_icc_check_* checking improved;
    changed the functions to receive the correct color type of the PNG on read
    or write and check that it matches the color space of the profile (despite
    what the comments said before, there is danger in assuming the app will
    cope correctly with an RGB profile on a grayscale image and, since it
    violates the PNG spec, allowing it is certain to produce inconsistent
    app behavior and might even cause app crashes.) Check that profiles
    contain the tags needed to process the PNG (tags all required by the ICC
    spec). Removed unused PNG_STATIC from pngpriv.h.

Version 1.6.0beta29 [September 4, 2012]
  Fixed the simplified API example programs to add the *colormap parameter
    to several of he API and improved the error message if the version field
    is not set.
  Added contrib/examples/* to the *.zip and *.7z distributions.
  Updated simplified API synopses and description of the png_image structure
    in the manual.
  Made makepng and pngtest produce identical PNGs, add "--relaxed" option
    to pngtest. The "--relaxed" option turns off the benign errors that are
    enabled by default in pre-RC builds. makepng can now write ICC profiles
    where the length has not been extended to a multiple of 4, and pngtest
    now intercepts all libpng errors, allowing the previously-introduced
    "--strict test" on no warnings to actually work.
  Improved ICC profile handling including cHRM chunk generation and fixed
    Cygwin+MSVC build errors. The ICC profile handling now includes more
    checking.  Several errors that caused rejection of the profile are now
    handled with a warning in such a way that the invalid profiles will be
    read by default in release (but not pre-RC) builds but will not be
    written by default.  The easy part of handling the cHRM chunk is written,
    where the ICC profile contains the required data.  The more difficult
    part plus guessing a gAMA value requires code to pass selected RGB values
    through the profile.

Version 1.6.0beta30 [October 24, 2012]
  Changed ICC profile matrix/vector types to not depend on array type rules.
    By the ANSI-C standard the new types should be identical to the previous
    versions, and all known versions of gcc tested with the previous versions
    except for GCC-4.2.1 work with this version.  The change makes the ANSI-C
    rule that const applied to an array of elements applies instead to the
    elements in the array moot by explicitly applying const to the base
    elements of the png_icc_matrix and png_icc_vector types. The accidental
    (harmless) 'const' previously applied to the parameters of two of the
    functions have also been removed.
  Added a work around for GCC 4.2 optimization bug.
  Marked the broken (bad white point) original HP sRGB profiles correctly and
    correct comments.
  Added -DZ_SOLO to contrib/pngminim/*/makefile to work with zlib-1.2.7
  Use /MDd for vstudio debug builds. Also added pngunkown to the vstudio
    builds, fixed build errors and corrected a minor exit code error in
    pngvalid if the 'touch' file name is invalid.
  Add updated WARNING file to projects/vstudio from libpng 1.5/vstudio
  Fixed build when using #define PNG_NO_READ_GAMMA in png_do_compose() in
    pngrtran.c (Domani Hannes).

Version 1.6.0beta31 [November 1, 2012]
  Undid the erroneous change to vstudio/pngvalid build in libpng-1.6.0beta30.
  Made pngvalid so that it will build outside the libpng source tree.
  Made builds -DPNG_NO_READ_GAMMA compile (the unit tests still fail).
  Made PNG_NO_READ_GAMMA switch off interfaces that depend on READ_GAMMA.
    Prior to 1.6.0 switching off READ_GAMMA did unpredictable things to the
    interfaces that use it (specifically, png_do_background in 1.4 would
    simply display composite for grayscale images but do composition
    with the incorrect arithmetic for color ones). In 1.6 the semantic
    of -DPNG_NO_READ_GAMMA is changed to simply disable any interface that
    depends on it; this obliges people who set it to consider whether they
    really want it off if they happen to use any of the interfaces in
    question (typically most users who disable it won't).
  Fixed GUIDs in projects/vstudio. Some were duplicated or missing,
    resulting in VS2010 having to update the files.
  Removed non-working ICC profile support code that was mostly added to
    libpng-1.6.0beta29 and beta30. There was too much code for too little
    gain; implementing full ICC color correction may be desirable but is left
    up to applications.

Version 1.6.0beta32 [November 25, 2012]
  Fixed an intermittent SEGV in pngstest due to an uninitialized array\
 element.
  Added the ability for contrib/libtests/makepng.c to make a PNG with just one
    color. This is useful for debugging pngstest color inaccuracy reports.
  Fixed error checking in the simplified write API (Olaf van der Spek)
  Made png_user_version_check() ok to use with libpng version 1.10.x and\
 later.

Version 1.6.0beta33 [December 15, 2012]
  Fixed typo in png.c (PNG_SET_CHUNK_MALLOC_MAX should be PNG_CHUNK_MALLOC_MA\
X)
    that causes the MALLOC_MAX limit not to work (John Bowler)
  Change png_warning() to png_app_error() in pngwrite.c and comment the
    fall-through condition.
  Change png_warning() to png_app_warning() in png_write_tRNS().
  Rearranged the ARM-NEON optimizations: Isolated the machine specific code
    to the hardware subdirectory and added comments to pngrutil.c so that
    implementors of other optimizations know what to do.
  Fixed cases of unquoted DESTDIR in Makefile.am
  Rebuilt Makefile.in, etc., with autoconf-2.69 and automake-1.12.5.

Version 1.6.0beta34 [December 19, 2012]
  Cleaned up whitespace in the synopsis portion of the manpage "libpng.3"
  Disassembled the version number in scripts/options.awk (necessary for
    building on SunOs).

Version 1.6.0beta35 [December 23, 2012]
  Made default Zlib compression settings be configurable. This adds #defines\
 to
    pnglibconf.h to control the defaults.
  Fixed Windows build issues, enabled ARM compilation. Various warnings issued
    by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old
    GCCs.) ARM support is enabled by default in zlib.props (unsupported by
    Microsoft) and ARM compilation is made possible by deleting the check for
    x86. The test programs cannot be run because they are not signed.

Version 1.6.0beta36 [January 2, 2013]
  Discontinued distributing libpng-1.x.x.tar.bz2.
  Discontinued distributing libpng-1.7.0-1.6.0-diff.txt and similar.
  Rebuilt configure with autoconf-2.69 (inadvertently not done in beta33)
  Fixed 'make distcheck' on SUN OS - libpng.so was not being removed

Version 1.6.0beta37 [January 10, 2013]
  Fixed conceivable but difficult to repro overflow. Also added two test
    programs to generate and test a PNG which should have the problem.

Version 1.6.0beta39 [January 19, 2013]
  Again corrected attempt at overflow detection in png_set_unknown_chunks()
  (CVE-2013-7353).  Added overflow detection in png_set_sPLT() and
  png_set_text_2() (CVE-2013-7354).

Version 1.6.0beta40 [January 20, 2013]
  Use consistent handling of overflows in text, sPLT and unknown png_set_*\
 APIs

Version 1.6.0rc01 [January 26, 2013]
  No changes.

Version 1.6.0rc02 [February 4, 2013]
  Added png_get_palette_max() function.

Version 1.6.0rc03 [February 5, 2013]
  Fixed the png_get_palette_max API.

Version 1.6.0rc04 [February 7, 2013]
  Turn serial tests back on (recently turned off by autotools upgrade).

Version 1.6.0rc05 [February 8, 2013]
  Update manual about png_get_palette_max().

Version 1.6.0rc06 [February 9, 2013]
  Fixed missing dependency in --prefix builds The intermediate
    internal 'prefix.h' file can only be generated correctly after
    pnglibconf.h, however the dependency was not in Makefile.am.  The
    symptoms are unpredictable depending on the order make chooses to
    build pngprefix.h and pnglibconf.h, often the error goes unnoticed
    because there is a system pnglibconf.h to use instead.

Version 1.6.0rc07 [February 10, 2013]
  Enclosed the new png_get_palette_max in #ifdef PNG_GET_PALETTE_MAX_SUPPORTED
    block, and revised pnglibconf.h and pnglibconf.h.prebuilt accordingly.

Version 1.6.0rc08 [February 10, 2013]
  Fix typo in png.h #ifdef

Version 1.6.0 [February 14, 2013]
  No changes.

Version 1.6.1beta01 [February 16, 2013]
  Made symbol prefixing work with the ARM neon optimizations. Also allow
    pngpriv.h to be included for preprocessor definitions only, so it can
    be used in non-C/C++ files. Back ported from libpng 1.7.
  Made sRGB check numbers consistent.
  Ported libpng 1.5 options.awk/dfn file handling to 1.6, fixed one bug.
  Removed cc -E workround, corrected png_get_palette_max API Tested on
    SUN OS cc 5.9, which demonstrates the tokenization problem previously
    avoided by using /lib/cpp.  Since all .dfn output is now protected in
    double quotes unless it is to be macro substituted the fix should
    work everywhere.
  Enabled parallel tests - back ported from libpng-1.7.
  scripts/pnglibconf.dfa formatting improvements back ported from libpng17.
  Fixed a race condition in the creation of the build 'scripts' directory
    while building with a parallel make.
  Use approved/supported Android method to check for NEON, use Linux/POSIX
    1003.1 API to check /proc/self/auxv avoiding buffer allocation and other
    library calls (ported from libpng15).

Version 1.6.1beta02 [February 19, 2013]
  Use parentheses more consistently in "#if defined(MACRO)" tests.
  Folded long lines.
  Reenabled code to allow zero length PLTE chunks for MNG.

Version 1.6.1beta03 [February 22, 2013]
  Fixed ALIGNED_MEMORY support.
  Added a new configure option:
    --enable-arm-neon=always will stop the run-time checks. New checks
    within arm/arm_init.c will cause the code not to be compiled unless
    __ARM_NEON__ is set. This should make it fail safe (if someone asks
    for it on then the build will fail if it can't be done.)
  Updated the INSTALL document.

Version 1.6.1beta04 [February 27, 2013]
  Revised INSTALL to recommend using CPPFLAGS instead of INCLUDES.
  Revised scripts/makefile.freebsd to respect ZLIBLIB and ZLIBINC.
  Revised scripts/dfn.awk to work with the buggy MSYS awk that has trouble
    with CRLF line endings.

Version 1.6.1beta05 [March 1, 2013]
  Avoid a possible memory leak in contrib/gregbook/readpng.c

Version 1.6.1beta06 [March 4, 2013]
  Better documentation of unknown handling API interactions.
  Corrected Android builds and corrected libpng.vers with symbol
    prefixing.  It also makes those tests compile and link on Android.
  Added an API png_set_option() to set optimization options externally,
    providing an alternative and general solution for the non-portable
    run-time tests used by the ARM Neon code, using the PNG_ARM_NEON option.
  The order of settings vs options in pnglibconf.h is reversed to allow
    settings to depend on options and options can now set (or override) the
    defaults for settings.

Version 1.6.1beta07 [March 7, 2013]
  Corrected simplified API default gamma for color-mapped output, added
    a flag to change default. In 1.6.0 when the simplified API was used
    to produce color-mapped output from an input image with no gamma
    information the gamma assumed for the input could be different from
    that assumed for non-color-mapped output.  In particular 16-bit depth
    input files were assumed to be sRGB encoded, whereas in the 'direct'
    case they were assumed to have linear data.  This was an error.  The
    fix makes the simplified API treat all input files the same way and
    adds a new flag to the png_image::flags member to allow the
    application/user to specify that 16-bit files contain sRGB data
    rather than the default linear.
  Fixed bugs in the pngpixel and makepng test programs.

Version 1.6.1beta08 [March 7, 2013]
  Fixed CMakelists.txt to allow building a single variant of the library
    (Claudio Bley):
  Introduced a PNG_LIB_TARGETS variable that lists all activated library
    targets.  It is an error if this variable ends up empty, ie. you have
    to build at least one library variant.
  Made the *_COPY targets only depend on library targets actually being build.
  Use PNG_LIB_TARGETS to unify a code path.
  Changed the CREATE_SYMLINK macro to expect the full path to a file as the
    first argument. When symlinking the filename component of that path is
    determined and used as the link target.
  Use copy_if_different in the CREATE_SYMLINK macro.

Version 1.6.1beta09 [March 13, 2013]
  Eliminated two warnings from the Intel C compiler. The warnings are
    technically valid, although a reasonable treatment of division would
    show it to be incorrect.

Version 1.6.1rc01 [March 21, 2013]
  No changes.

Version 1.6.1 [March 28, 2013]
  No changes.

Version 1.6.2beta01 [April 14, 2013]
  Updated documentation of 1.5.x to 1.6.x changes in iCCP chunk handling.
  Fixed incorrect warning of excess deflate data. End condition - the
    warning would be produced if the end of the deflate stream wasn't read
    in the last row.  The warning is harmless.
  Corrected the test on user transform changes on read. It was in the
    png_set of the transform function, but that doesn't matter unless the
    transform function changes the rowbuf size, and that is only valid if
    transform_info is called.
  Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c
    (Flavio Medeiros).
  Corrected length written to uncompressed iTXt chunks (Samuli Suominen).
    Bug was introduced in libpng-1.6.0.

Version 1.6.2rc01 [April 18, 2013]
  Added contrib/tools/fixitxt.c, to repair the erroneous iTXt chunk length
    written by libpng-1.6.0 and 1.6.1.
  Disallow storing sRGB information when the sRGB is not supported.

Version 1.6.2rc02 [April 18, 2013]
  Merge pngtest.c with libpng-1.7.0

Version 1.6.2rc03 [April 22, 2013]
  Trivial spelling cleanup.

Version 1.6.2rc04 and 1.6.2rc05 [omitted]

Version 1.6.2rc06 [April 24, 2013]
  Reverted to version 1.6.2rc03.  Recent changes to arm/neon support
    have been ported to libpng-1.7.0beta09 and will reappear in version
    1.6.3beta01.

Version 1.6.2 [April 25, 2013]
  No changes.

Version 1.6.3beta01 [April 25, 2013]
  Revised stack marking in arm/filter_neon.S and configure.ac.
  Ensure that NEON filter stuff is completely disabled when switched 'off'.
    Previously the ARM NEON specific files were still built if the option
    was switched 'off' as opposed to being explicitly disabled.

Version 1.6.3beta02 [April 26, 2013]
  Test for 'arm*' not just 'arm' in the host_cpu configure variable.
  Rebuilt the configure scripts.

Version 1.6.3beta03 [April 30, 2013]
  Expanded manual paragraph about writing private chunks, particularly
    the need to call png_set_keep_unknown_chunks() when writing them.
  Avoid dereferencing NULL pointer possibly returned from
    png_create_write_struct() (Andrew Church).

Version 1.6.3beta05 [May 9, 2013]
  Calculate our own zlib windowBits when decoding rather than trusting the
    CMF bytes in the PNG datastream.
  Added an option to force maximum window size for inflating, which was
    the behavior of libpng15 and earlier, via a new PNG_MAXIMUM_INFLATE_WINDOW
    option for png_set_options().
  Added png-fix-itxt and png-fix-too-far-back to the built programs and
    removed warnings from the source code and timepng that are revealed as
    a result.
  Detect wrong libpng versions linked to png-fix-too-far-back, which currently
    only works with libpng versions that can be made to reliably fail when
    the deflate data contains an out-of-window reference.  This means only
    1.6 and later.
  Fixed gnu issues: g++ needs a static_cast, gcc 4.4.7 has a broken warning
    message which it is easier to work round than ignore.
  Updated contrib/pngminus/pnm2png.c (Paul Stewart):
    Check for EOF
    Ignore "#" delimited comments in input file to pnm2png.c.
    Fixed whitespace handling
    Added a call to png_set_packing()
    Initialize dimension values so if sscanf fails at least we have known
      invalid values.
  Attempt to detect configuration issues with png-fix-too-far-back, which
    requires both the correct libpng and the correct zlib to function
    correctly.
  Check ZLIB_VERNUM for mismatches, enclose #error in quotes
  Added information in the documentation about problems with and fixes for
    the bad CRC and bad iTXt chunk situations.

Version 1.6.3beta06 [May 12, 2013]
  Allow contrib/pngminus/pnm2png.c to compile without WRITE_INVERT and
    WRITE_PACK supported (writes error message that it can't read P1 or
    P4 PBM files).
  Improved png-fix-too-far-back usage message, added --suffix option.
  Revised contrib/pngminim/*/makefile to generate pnglibconf.h with the
    right zlib header files.
  Separated CPPFLAGS and CFLAGS in contrib/pngminim/*/makefile

Version 1.6.3beta07 [June 8, 2013]
  Removed a redundant test in png_set_IHDR().
  Added set(CMAKE_CONFIGURATION_TYPES ...) to CMakeLists.txt (Andrew Hundt)
  Deleted set(CMAKE_BUILD_TYPE) block from CMakeLists.txt
  Enclose the prototypes for the simplified write API in
    #ifdef PNG_STDIO_SUPPORTED/#endif
  Make ARM NEON support work at compile time (not just configure time).
    This moves the test on __ARM_NEON__ into pngconf.h to avoid issues when
    using a compiler that compiles for multiple architectures at one time.
  Removed PNG_FILTER_OPTIMIZATIONS and PNG_ARM_NEON_SUPPORTED from
    pnglibconf.h, allowing more of the decisions to be made internally
    (pngpriv.h) during the compile.  Without this, symbol prefixing is broken
    under certain circumstances on ARM platforms.  Now only the API parts of
    the optimizations ('check' vs 'api') are exposed in the public header\
 files
    except that the new setting PNG_ARM_NEON_OPT documents how libpng makes\
 the
    decision about whether or not to use the optimizations.
  Protect symbol prefixing against CC/CPPFLAGS/CFLAGS usage.
    Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
    on __ARM_NEON__ from configure time to compile time.  This breaks symbol
    prefixing because the definition of the special png_init_filter_functions
    call was hidden at configure time if the relevant compiler arguments are
    passed in CFLAGS as opposed to CC.  This change attempts to avoid all
    the confusion that would result by declaring the init function even when
    it is not used, so that it will always get prefixed.

Version 1.6.3beta08 [June 18, 2013]
  Revised libpng.3 so that "doclifter" can process it.

Version 1.6.3beta09 [June 27, 2013]
  Revised example.c to illustrate use of PNG_DEFAULT_sRGB and PNG_GAMMA_MAC_18
    as parameters for png_set_gamma().  These have been available since
    libpng-1.5.4.
  Renamed contrib/tools/png-fix-too-far-back.c to pngfix.c and revised it
    to check all compressed chunks known to libpng.

Version 1.6.3beta10 [July 5, 2013]
  Updated documentation to show default behavior of benign errors correctly.
  Only compile ARM code when PNG_READ_SUPPORTED is defined.
  Fixed undefined behavior in contrib/tools/pngfix.c and added new strip
    option. pngfix relied on undefined behavior and even a simple change from
    gcc to g++ caused it to fail.  The new strip option 'unsafe' has been
    implemented and is the default if --max is given.  Option names have
    been clarified, with --strip=transform now stripping the bKGD chunk,
    which was stripped previously with --strip=unused.
  Added all documented chunk types to pngpriv.h
  Unified pngfix.c source with libpng17.

Version 1.6.3rc01 [July 11, 2013]
  No changes.

Version 1.6.3 [July 18, 2013]
  Revised manual about changes in iTXt chunk handling made in libpng-1.6.0.
  Added "/* SAFE */" comments in pngrutil.c and pngrtran.c where warnings
    may be erroneously issued by code-checking applications.

Version 1.6.4beta01 [August 21, 2013]
  Added information about png_set_options() to the manual.
  Delay calling png_init_filter_functions() until a row with nonzero filter
    is found.

Version 1.6.4beta02 [August 30, 2013]
  Fixed inconsistent conditional compilation of png_chunk_unknown_handling()
    prototype, definition, and usage.  Made it depend on
    PNG_HANDLE_AS_UNKNOWN_SUPPORTED everywhere.

Version 1.6.4rc01 [September 5, 2013]
  No changes.

Version 1.6.4 [September 12, 2013]
  No changes.

Version 1.6.5 [September 14, 2013]
  Removed two stray lines of code from arm/arm_init.c.

Version 1.6.6 [September 16, 2013]
  Removed two stray lines of code from arm/arm_init.c, again.

Version 1.6.7beta01 [September 30, 2013]
  Revised unknown chunk code to correct several bugs in the NO_SAVE_/NO_WRITE
    combination
  Allow HANDLE_AS_UNKNOWN to work when other options are configured off. Also
    fixed the pngminim makefiles to work when $(MAKEFLAGS) contains stuff
    which terminates the make options (as by default in recent versions of
    Gentoo).
  Avoid up-cast warnings in pngvalid.c. On ARM the alignment requirements of
    png_modifier are greater than that of png_store and as a consequence
    compilation of pngvalid.c results in a warning about increased alignment
    requirements because of the bare cast to (png_modifier*). The code is\
 safe,
    because the pointer is known to point to a stack allocated png_modifier,
    but this change avoids the warning.
  Fixed default behavior of ARM_NEON_API. If the ARM NEON API option was
    compiled without the CHECK option it defaulted to on, not off.
  Check user callback behavior in pngunknown.c. Previous versions compiled
    if SAVE_UNKNOWN was not available but did nothing since the callback
    was never implemented.
  Merged pngunknown.c with 1.7 version and back ported 1.7 improvements/fixes

Version 1.6.7beta02 [October 12, 2013]
  Made changes for compatibility with automake 1.14:
    1) Added the 'compile' program to the list of programs that must be\
 cleaned
       in autogen.sh
    2) Added 'subdir-objects' which causes .c files in sub-directories to be
       compiled such that the corresponding .o files are also in the
       sub-directory.  This is because automake 1.14 warns that the
       current behavior of compiling to the top level directory may be removed
       in the future.
    3) Updated dependencies on pnglibconf.h to match the new .o locations and
       added all the files in contrib/libtests and contrib/tools that depend
       on pnglibconf.h
    4) Added 'BUILD_SOURCES = pnglibconf.h'; this is the automake recommended
       way of handling the dependencies of sources that are machine generated;
       unfortunately it only works if the user does 'make all' or 'make\
 check',
       so the dependencies (3) are still required.
  Cleaned up (char*) casts of zlib messages. The latest version of the Intel C
    compiler complains about casting a string literal as (char*), so copied\
 the
    treatment of z_const from the library code into pngfix.c
  Simplified error message code in pngunknown. The simplification has the
    useful side effect of avoiding a bogus warning generated by the latest
    version of the Intel C compiler (it objects to
    condition ? string-literal : string-literal).
  Make autogen.sh work with automake 1.13 as well as 1.14. Do this by always
    removing the 1.14 'compile' script but never checking for it.

Version 1.6.7beta03 [October 19, 2013]
  Added ARMv8 support (James Yu <james.yu at linaro.org>).  Added file
    arm/filter_neon_intrinsics.c; enable with -mfpu=neon.
  Revised pngvalid to generate size images with as many filters as it can
    manage, limited by the number of rows.
  Cleaned up ARM NEON compilation handling. The tests are now in pngpriv.h
    and detect the broken GCC compilers.

Version 1.6.7beta04 [October 26, 2013]
  Allow clang derived from older GCC versions to use ARM intrinsics. This
    causes all clang builds that use -mfpu=neon to use the intrinsics code,
    not the assembler code.  This has only been tested on iOS 7. It may be
    necessary to exclude some earlier clang versions but this seems unlikely.
  Changed NEON implementation selection mechanism. This allows assembler
    or intrinsics to be turned on at compile time during the build by defining
    PNG_ARM_NEON_IMPLEMENTATION to the correct value (2 or 1).  This macro
    is undefined by default and the build type is selected in pngpriv.h.

Version 1.6.7rc01 [November 2, 2013]
  No changes.

Version 1.6.7rc02 [November 7, 2013]
  Fixed #include in filter_neon_intrinsics.c and ctype macros. The ctype char
    checking macros take an unsigned char argument, not a signed char.

Version 1.6.7 [November 14, 2013]
  No changes.

Version 1.6.8beta01 [November 24, 2013]
  Moved prototype for png_handle_unknown() in pngpriv.h outside of
    the #ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED/#endif block.
  Added "-Wall" to CFLAGS in contrib/pngminim/*/makefile
  Conditionally compile some unused functions reported by -Wall in
    pngminim.
  Fixed 'minimal' builds. Various obviously useful minimal configurations
    don't build because of missing contrib/libtests test programs and
    overly complex dependencies in scripts/pnglibconf.dfa. This change
    adds contrib/conftest/*.dfa files that can be used in automatic build
    scripts to ensure that these configurations continue to build.
  Enabled WRITE_INVERT and WRITE_PACK in contrib/pngminim/encoder.
  Fixed pngvalid 'fail' function declaration on the Intel C Compiler.
    This reverts to the previous 'static' implementation and works round
    the 'unused static function' warning by using PNG_UNUSED().

Version 1.6.8beta02 [November 30, 2013]
  Removed or marked PNG_UNUSED some harmless "dead assignments" reported
    by clang scan-build.
  Changed tabs to 3 spaces in png_debug macros and changed '"%s"m'
    to '"%s" m' to improve portability among compilers.
  Changed png_free_default() to free() in pngtest.c

Version 1.6.8rc01 [December 12, 2013]
  Tidied up pngfix inits and fixed pngtest no-write builds.

Version 1.6.8rc02 [December 14, 2013]
  Handle zero-length PLTE chunk or NULL palette with png_error()
    instead of png_chunk_report(), which by default issues a warning
    rather than an error, leading to later reading from a NULL pointer
    (png_ptr->palette) in png_do_expand_palette(). This is CVE-2013-6954
    and VU#650142.  Libpng-1.6.1 through 1.6.7 are vulnerable.
    Libpng-1.6.0 and earlier do not have this bug.

Version 1.6.8 [December 19, 2013]
  No changes.

Version 1.6.9beta01 [December 26, 2013]
  Bookkeeping: Moved functions around (no changes). Moved transform
    function definitions before the place where they are called so that
    they can be made static. Move the intrapixel functions and the
    grayscale palette builder out of the png?tran.c files. The latter
    isn't a transform function and is no longer used internally, and the
    former MNG specific functions are better placed in pngread/pngwrite.c
  Made transform implementation functions static. This makes the internal
    functions called by png_do_{read|write}_transformations static. On an
    x86-64 DLL build (Gentoo Linux) this reduces the size of the text
    segment of the DLL by 1208 bytes, about 0.6%. It also simplifies
    maintenance by removing the declarations from pngpriv.h and allowing
    easier changes to the internal interfaces.
  Rebuilt configure scripts with automake-1.14.1 and autoconf-2.69
    in the tar distributions.

Version 1.6.9beta02 [January 1, 2014]
  Added checks for libpng 1.5 to pngvalid.c.  This supports the use of
    this version of pngvalid in libpng 1.5
  Merged with pngvalid.c from libpng-1.7 changes to create a single
    pngvalid.c
  Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner).
  Merged pngrio.c, pngtrans.c, pngwio.c, and pngerror.c with libpng-1.7.0
  Merged libpng-1.7.0 changes to make no-interlace configurations work
    with test programs.
  Revised pngvalid.c to support libpng 1.5, which does not support the
    PNG_MAXIMUM_INFLATE_WINDOW option, so #define it out when appropriate in
    pngvalid.c
  Allow unversioned links created on install to be disabled in configure.
    In configure builds 'make install' changes/adds links like png.h
    and libpng.a to point to the newly installed, versioned, files (e.g.
    libpng17/png.h and libpng17.a). Three new configure options and some
    rearrangement of Makefile.am allow creation of these links to be disabled.

Version 1.6.9beta03 [January 10, 2014]
  Removed potentially misleading warning from png_check_IHDR().

Version 1.6.9beta04 [January 20, 2014]
  Updated scripts/makefile.* to use CPPFLAGS (Cosmin).
  Added clang attribute support (Cosmin).

Version 1.6.9rc01 [January 28, 2014]
  No changes.

Version 1.6.9rc02 [January 30, 2014]
  Quiet an uninitialized memory warning from VC2013 in png_get_png().

Version 1.6.9 [February 6, 2014]

Version 1.6.10beta01 [February 9, 2014]
  Backported changes from libpng-1.7.0beta30 and beta31:
  Fixed a large number of instances where PNGCBAPI was omitted from
    function definitions.
  Added pngimage test program for png_read_png() and png_write_png()
    with two new test scripts.
  Removed dependence on !PNG_READ_EXPAND_SUPPORTED for calling
    png_set_packing() in png_read_png().
  Fixed combination of ~alpha with shift. On read invert alpha, processing
    occurred after shift processing, which causes the final values to be
    outside the range that should be produced by the shift. Reversing the
    order on read makes the two transforms work together correctly and mirrors
    the order used on write.
  Do not read invalid sBIT chunks. Previously libpng only checked sBIT
    values on write, so a malicious PNG writer could therefore cause
    the read code to return an invalid sBIT chunk, which might lead to
    application errors or crashes.  Such chunks are now skipped (with
    chunk_benign_error).
  Make png_read_png() and png_write_png() prototypes in png.h depend
    upon PNG_READ_SUPPORTED and PNG_WRITE_SUPPORTED.
  Support builds with unsupported PNG_TRANSFORM_* values.  All of the
    PNG_TRANSFORM_* values are always defined in png.h and, because they
    are used for both read and write in some cases, it is not reliable
    to #if out ones that are totally unsupported. This change adds error
    detection in png_read_image() and png_write_image() to do a
    png_app_error() if the app requests something that cannot be done
    and it adds corresponding code to pngimage.c to handle such options
    by not attempting to test them.

Version 1.6.10beta02 [February 23, 2014]
  Moved redefines of png_error(), png_warning(), png_chunk_error(),
    and png_chunk_warning() from pngpriv.h to png.h to make them visible
    to libpng-calling applications.
  Moved OS dependent code from arm/arm_init.c, to allow the included
    implementation of the ARM NEON discovery function to be set at
    build-time and provide sample implementations from the current code in the
    contrib/arm-neon subdirectory. The __linux__ code has also been changed to
    compile and link on Android by using /proc/cpuinfo, and the old linux code
    is in contrib/arm-neon/linux-auxv.c.  The new code avoids POSIX and Linux
    dependencies apart from opening /proc/cpuinfo and is C90 compliant.
  Check for info_ptr == NULL early in png_read_end() so we don't need to
    run all the png_handle_*() and depend on them to return if info_ptr ==\
 NULL.
    This improves the performance of png_read_end(png_ptr, NULL) and makes
    it more robust against future programming errors.
  Check for __has_extension before using it in pngconf.h, to
    support older Clang versions (Jeremy Sequoia).
  Treat CRC error handling with png_set_crc_action(), instead of with
    png_set_benign_errors(), which has been the case since libpng-1.6.0beta18.
  Use a user warning handler in contrib/gregbook/readpng2.c instead of\
 default,
    so warnings will be put on stderr even if libpng has CONSOLE_IO disabled.
  Added png_ptr->process_mode = PNG_READ_IDAT_MODE in png_push_read_chunk
    after recognizing the IDAT chunk, which avoids an infinite loop while
    reading a datastream whose first IDAT chunk is of zero-length.
    This fixes CERT VU#684412 and CVE-2014-0333.
  Don't recognize known sRGB profiles as sRGB if they have been hacked,
    but don't reject them and don't issue a copyright violation warning.

Version 1.6.10beta03 [February 25, 2014]
  Moved some documentation from png.h to libpng.3 and libpng-manual.txt
  Minor editing of contrib/arm-neon/README and contrib/examples/*.c

Version 1.6.10rc01 [February 27, 2014]
  Fixed typos in the manual and in scripts/pnglibconf.dfa (CFLAGS -> CPPFLAGS
    and PNG_USR_CONFIG -> PNG_USER_CONFIG).

Version 1.6.10rc02 [February 28, 2014]
  Removed unreachable return statement after png_chunk_error()
    in pngrutil.c

Version 1.6.10rc03 [March 4, 2014]
  Un-deprecated png_data_freer().

Version 1.6.10 [March 6, 2014]
  No changes.

Version 1.6.11beta01 [March 17, 2014]
  Use "if (value != 0)" instead of "if (value)" consistently.
  Changed ZlibSrcDir from 1.2.5 to 1.2.8 in projects/vstudio.
  Moved configuration information from the manual to the INSTALL file.

Version 1.6.11beta02 [April 6, 2014]
  Removed #if/#else/#endif from inside two pow() calls in pngvalid.c because
    they were handled improperly by Portland Group's PGI-14.1 - PGI-14.3
    when using its "__builtin_pow()" function.
  Silence 'unused parameter' build warnings (Cosmin Truta).
  $(CP) is now used alongside $(RM_F).  Also, use 'copy' instead of 'cp'
    where applicable, and applied other minor makefile changes (Cosmin).
  Don't warn about invalid dimensions exceeding user limits (Cosmin).
  Allow an easy replacement of the default pre-built configuration
    header with a custom header, via the make PNGLIBCONF_H_PREBUILT
    macro (Cosmin).

Version 1.6.11beta03 [April 6, 2014]
  Fixed a typo in pngrutil.c, introduced in libpng-1.5.6, that interferes
    with "blocky" expansion of sub-8-bit interlaced PNG files (Eric Huss).
  Optionally use  __builtin_bswap16() in png_do_swap().

Version 1.6.11beta04 [April 19, 2014]
  Made progressive reading of interlaced images consistent with the
    behavior of the sequential reader and consistent with the manual, by
    moving some code out of the PNG_READ_INTERLACING_SUPPORTED blocks. The
    row_callback now receives the proper pass number and unexpanded rows, when
    png_combine_row() isn't built or used, and png_set_interlace_handling()
    is not called.
  Allow PNG_sRGB_PROFILE_CHECKING = (-1) to mean no sRGB profile checking.

Version 1.6.11beta05 [April 26, 2014]
  Do not reject ICC V2 profiles that lack padding (Kai-Uwe Behrmann).
  Relocated closing bracket of the sRGB profile test loop to avoid getting
    "Not recognizing known sRGB profile that has been edited" warning for
    ICC V2 profiles that lack the MD5 signature in the profile header.

Version 1.6.11beta06 [May 19, 2014]
  Added PNG_SKIP_sRGB_CHECK_PROFILE choice for png_set_option().

Version 1.6.11rc01 [May 27, 2014]
  No changes.

Version 1.6.11rc02 [June 3, 2014]
  Test ZLIB_VERNUM instead of PNG_ZLIB_VERNUM in contrib/tools/pngfix.c

Version 1.6.11 [June 5, 2014]
  No changes.

Version 1.6.12rc01 [June 6, 2014]
  Relocated new code from 1.6.11beta06 in png.c to a point after the
    declarations (Max Stepin).

Version 1.6.12rc02 [June 7, 2014]
  Changed file permissions of contrib/tools/intgamma.sh,
    test-driver, and compile from 0644 to 0755 (Cosmin).

Version 1.6.12rc03 [June 8, 2014]
  Ensure "__has_attribute()" macro exists before trying to use it with
    old clang compilers (MacPorts Ticket #43939).

Version 1.6.12 [June 12, 2014]
  No changes.

Version 1.6.13beta01 [July 4, 2014]
  Quieted -Wsign-compare and -Wclobber compiler warnings in
    contrib/pngminus/*.c
  Added "(void) png_ptr;" where needed in contrib/gregbook to quiet
    compiler complaints about unused pointers.
  Split a long output string in contrib/gregbook/rpng2-x.c.
  Added "PNG_SET_OPTION" requirement for sRGB chunk support to pnglibconf.dfa,
    Needed for write-only support (John Bowler).
  Changed "if defined(__ARM_NEON__)" to
    "if (defined(__ARM_NEON__) || defined(__ARM_NEON))" (James Wu).
  Fixed clang no-warning builds: png_digit was defined but never used.
    
Version 1.6.13beta02 [July 21, 2014]
  Fixed an incorrect separator ("/" should be "\") in scripts/makefile.vcwin32
    (bug report from Wolfgang S. Kechel).  Bug was introduced in\
 libpng-1.6.11.
    Also fixed makefile.bc32, makefile.bor, makefile.msc, makefile.intel, and
    makefile.tc3 similarly.

Version 1.6.13beta03 [August 3, 2014]
  Removed scripts/makefile.elf. It has not worked since libpng-1.5.0beta14
    due to elimination of the PNG_FUNCTION_EXPORT and PNG_DATA_EXPORT
    definitions from pngconf.h.
  Ensure that CMakeLists.txt makes the target "lib" directory before making
    symbolic link into it (SourceForge bug report #226 by Rolf Timmermans).

Version 1.6.13beta04 [August 8, 2014]
  Added opinion that the ECCN (Export Control Classification Number) for
    libpng is EAR99 to the README file.
  Eliminated use of "$<" in makefile explicit rules, when copying
    $PNGLIBCONF_H_PREBUILT.  This does not work on some versions of make;
    bug introduced in libpng version 1.6.11.

Version 1.6.13rc01 [August 14, 2014]
  Made "ccopts" agree with "CFLAGS" in scripts/makefile.hp* and makefile.*sunu

Version 1.6.13 [August 21, 2014]
  No changes.

Version 1.6.14beta01 [September 14, 2014]
  Guard usage of png_ptr->options with #ifdef PNG_SET_OPTION_SUPPORTED.
  Do not build contrib/tools/pngfix.c when PNG_SETJMP_NOT_SUPPORTED,
    to allow "make" to complete without setjmp support (bug report by
    Claudio Fontana)
  Add "#include <setjmp.h>" to contrib/tools/pngfix.c (John Bowler)

Version 1.6.14beta02 [September 18, 2014]
  Use nanosleep() instead of usleep() in contrib/gregbook/rpng2-x.c
    because usleep() is deprecated.
  Define usleep() in contrib/gregbook/rpng2-x.c if not already defined
    in unistd.h and nanosleep() is not available; fixes error introduced
    in libpng-1.6.13.
  Disable floating point exception handling in pngvalid.c when
    PNG_FLOATING_ARITHMETIC is not supported (bug report by "zootus
    at users.sourceforge.net").

Version 1.6.14beta03 [September 19, 2014]
  Define FE_DIVBYZERO, FE_INVALID, and FE_OVERFLOW in pngvalid.c if not
    already defined.  Revert floating point exception handling in pngvalid.c
    to version 1.6.14beta01 behavior.

Version 1.6.14beta04 [September 27, 2014]
  Fixed incorrect handling of the iTXt compression flag in pngrutil.c
    (bug report by Shunsaku Hirata).  Bug was introduced in libpng-1.6.0.

Version 1.6.14beta05 [October 1, 2014]
  Added "option READ_iCCP enables READ_COMPRESSED_TEXT" to pnglibconf.dfa

Version 1.6.14beta06 [October 5, 2014]
  Removed unused "text_len" parameter from private function png_write_zTXt().
  Conditionally compile some code in png_deflate_claim(), when
    PNG_WARNINGS_SUPPORTED and PNG_ERROR_TEXT_SUPPORTED are disabled.
  Replaced repeated code in pngpread.c with PNG_PUSH_SAVE_BUFFER_IF_FULL.
  Added "chunk iTXt enables TEXT" and "chunk zTXt enables TEXT"
    to pnglibconf.dfa.
  Removed "option READ_COMPRESSED_TEXT enables READ_TEXT" from pnglibconf.dfa,
    to make it possible to configure a libpng that supports iCCP but not TEXT.

Version 1.6.14beta07 [October 7, 2014]
  Removed "option WRITE_COMPRESSED_TEXT enables WRITE_TEXT" from\
 pnglibconf.dfa
  Only mark text chunks as written after successfully writing them.

Version 1.6.14rc01 [October 15, 2014]
  Fixed some typos in comments.

Version 1.6.14rc02 [October 17, 2014]
  Changed png_convert_to_rfc_1123() to png_convert_to_rfc_1123_buffer()
    in the manual, to reflect the change made in libpng-1.6.0.
  Updated README file to explain that direct access to the png_struct
    and info_struct members has not been permitted since libpng-1.5.0.

Version 1.6.14 [October 23, 2014]
  No changes.

Version 1.6.15beta01 [October 29, 2014]
  Changed "if (!x)" to "if (x == 0)" and "if (x)" to "if (x != 0)"
  Simplified png_free_data().
  Added missing "ptr = NULL" after some instances of png_free().

Version 1.6.15beta02 [November 1, 2014]
  Changed remaining "if (!x)" to "if (x == 0)" and "if (x)" to "if (x != 0)"

Version 1.6.15beta03 [November 3, 2014]
  Added PNG_USE_ARM_NEON configuration flag (Marcin Juszkiewicz).

Version 1.6.15beta04 [November 4, 2014]
  Removed new PNG_USE_ARM_NEON configuration flag and made a one-line
    revision to configure.ac to support ARM on aarch64 instead (John Bowler).

Version 1.6.15beta05 [November 5, 2014]
  Use png_get_libpng_ver(NULL) instead of PNG_LIBPNG_VER_STRING in
    example.c, pngtest.c, and applications in the contrib directory.
  Fixed an out-of-range read in png_user_version_check() (Bug report from
    Qixue Xiao, CVE-2015-8540).
  Simplified and future-proofed png_user_version_check().
  Fixed GCC unsigned int->float warnings. Various versions of GCC
    seem to generate warnings when an unsigned value is implicitly
    converted to double. This is probably a GCC bug but this change
    avoids the issue by explicitly converting to (int) where safe.
  Free all allocated memory in pngimage. The file buffer cache was left
    allocated at the end of the program, harmless but it causes memory
    leak reports from clang.
  Fixed array size calculations to avoid warnings. At various points
    in the code the number of elements in an array is calculated using
    sizeof.  This generates a compile time constant of type (size_t) which
    is then typically assigned to an (unsigned int) or (int). Some versions
    of GCC on 64-bit systems warn about the apparent narrowing, even though
    the same compiler does apparently generate the correct, in-range,
    numeric constant.  This adds appropriate, safe, casts to make the
    warnings go away.

Version 1.6.15beta06 [November 6, 2014]
  Reverted use png_get_libpng_ver(NULL) instead of PNG_LIBPNG_VER_STRING
    in the manual, example.c, pngtest.c, and applications in the contrib
    directory.  It was incorrect advice.

Version 1.6.15beta07 [November 7, 2014]
  Removed #ifdef PNG_16BIT_SUPPORTED/#endif around png_product2(); it is
    needed by png_reciprocal2().
  Added #ifdef PNG_16BIT_SUPPORTED/#endif around png_log16bit() and
    png_do_swap().
  Changed all "#endif /* PNG_FEATURE_SUPPORTED */" to "#endif /* FEATURE */"

Version 1.6.15beta08 [November 8, 2014]
  More housecleaning in *.h

Version 1.6.15rc01 [November 13, 2014]

Version 1.6.15rc02 [November 14, 2014]
  The macros passed in the command line to Borland make were ignored if
    similarly-named macros were already defined in makefiles. This behavior
    is different from POSIX make and other make programs.  Surround the
    macro definitions with ifndef guards (Cosmin).

Version 1.6.15rc03 [November 16, 2014]
  Added "-D_CRT_SECURE_NO_WARNINGS" to CFLAGS in scripts/makefile.vcwin32.
  Removed the obsolete $ARCH variable from scripts/makefile.darwin.

Version 1.6.15 [November 20, 2014]
  No changes.

Version 1.6.16beta01 [December 14, 2014]
  Added ".align 2" to arm/filter_neon.S to support old GAS assemblers that
    don't do alignment correctly.
  Revised Makefile.am and scripts/symbols.dfn to work with MinGW/MSYS
    (Bob Friesenhahn).

Version 1.6.16beta02 [December 15, 2014]
  Revised Makefile.am and scripts/*.dfn again to work with MinGW/MSYS;
    renamed scripts/*.dfn to scripts/*.c (John Bowler).

Version 1.6.16beta03 [December 21, 2014]
  Quiet a "comparison always true" warning in pngstest.c (John Bowler).

Version 1.6.16rc01 [December 21, 2014]
  Restored a test on width that was removed from png.c at libpng-1.6.9
    (Bug report by Alex Eubanks, CVE-2015-0973).

Version 1.6.16rc02 [December 21, 2014]
  Undid the update to pngrutil.c in 1.6.16rc01.

Version 1.6.16rc03 [December 21, 2014]
  Fixed an overflow in png_combine_row() with very wide interlaced images
    (Bug report and fix by John Bowler, CVE-2014-9495).

Version 1.6.16 [December 22, 2014]
  No changes.

Version 1.6.17beta01 [January 29, 2015]
  Removed duplicate PNG_SAFE_LIMITS_SUPPORTED handling from pngconf.h
  Corrected the width limit calculation in png_check_IHDR().
  Removed user limits from pngfix. Also pass NULL pointers to
    png_read_row to skip the unnecessary row de-interlace stuff.
  Added testing of png_set_packing() to pngvalid.c
  Regenerated configure scripts in the *.tar distributions with libtool-2.4.4
  Implement previously untested cases of libpng transforms in pngvalid.c
  Fixed byte order in png_do_read_filler() with 16-bit input. Previously
    the high and low bytes of the filler, from png_set_filler() or from
    png_set_add_alpha(), were read in the wrong order.
  Made the check for out-of-range values in png_set_tRNS() detect
    values that are exactly 2^bit_depth, and work on 16-bit platforms.
  Merged some parts of libpng-1.6.17beta01 and libpng-1.7.0beta47.
  Added #ifndef __COVERITY__ where needed in png.c, pngrutil.c and
    pngset.c to avoid warnings about dead code.
  Added "& 0xff" to many instances of expressions that are typecast
    to (png_byte), to avoid Coverity warnings.

Version 1.6.17beta02 [February 7, 2015]
  Work around one more Coverity-scan dead-code warning.
  Do not build png_product2() when it is unused.

Version 1.6.17beta03 [February 17, 2015]
  Display user limits in the output from pngtest.
  Eliminated the PNG_SAFE_LIMITS macro and restored the 1-million-column
    and 1-million-row default limits in pnglibconf.dfa, that can be reset
    by the user at build time or run time.  This provides a more robust
    defense against DOS and as-yet undiscovered overflows.

Version 1.6.17beta04 [February 21, 2015]
  Added PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED macro, on by default.
  Allow user to call png_get_IHDR() with NULL arguments (Reuben Hawkins).
  Rebuilt configure scripts with automake-1.15 and libtool-2.4.6

Version 1.6.17beta05 [February 25, 2015]
  Restored compiling of png_reciprocal2 with PNG_NO_16BIT.

Version 1.6.17beta06 [February 27, 2015]
  Moved png_set_filter() prototype into a PNG_WRITE_SUPPORTED block
    of png.h.
  Avoid runtime checks when converting integer to png_byte with
    Visual Studio (Sergey Kosarevsky)

Version 1.6.17rc01 [March 4, 2015]
  No changes.

Version 1.6.17rc02 [March 9, 2015]
  Removed some comments that the configure script did not handle
    properly from scripts/pnglibconf.dfa and pnglibconf.h.prebuilt.
  Free the unknown_chunks structure even when it contains no data.

Version 1.6.17rc03 [March 12, 2015]
  Updated CMakeLists.txt to add OSX framework, change YES/NO to ON/OFF
    for consistency, and remove some useless tests (Alexey Petruchik).

Version 1.6.17rc04 [March 16, 2015]
  Remove pnglibconf.h, pnglibconf.c, and pnglibconf.out instead of
    pnglibconf.* in "make clean" (Cosmin).
  Fix bug in calculation of maxbits, in png_write_sBIT, introduced
    in libpng-1.6.17beta01 (John Bowler).

Version 1.6.17rc05 [March 21, 2015]
  Define PNG_FILTER_* and PNG_FILTER_VALUE_* in png.h even when WRITE
    is not supported (John Bowler).  This fixes an error introduced in
    libpng-1.6.17beta06.
  Reverted "& 0xff" additions of version 1.6.17beta01. Libpng passes
    the Coverity scan without them.

Version 1.6.17rc06 [March 23, 2015]
  Remove pnglibconf.dfn and pnglibconf.pre with "make clean".
  Reformatted some "&0xff" instances to "& 0xff".
  Fixed simplified 8-bit-linear to sRGB alpha. The calculated alpha
    value was wrong.  It's not clear if this affected the final stored
    value; in the obvious code path the upper and lower 8-bits of the
    alpha value were identical and the alpha was truncated to 8-bits
    rather than dividing by 257 (John Bowler).

Version 1.6.17 [March 26, 2015]
  No changes.

Version 1.6.18beta01 [April 1, 2015]
  Removed PNG_SET_CHUNK_[CACHE|MALLOC]_LIMIT_SUPPORTED macros.  They
    have been combined with PNG_SET_USER_LIMITS_SUPPORTED (resolves
    bug report by Andrew Church).
  Fixed rgb_to_gray checks and added tRNS checks to pngvalid.c.  This
    fixes some arithmetic errors that caused some tests to fail on
    some 32-bit platforms (Bug reports by Peter Breitenlohner [i686]
    and Petr Gajdos [i586]).

Version 1.6.18beta02 [April 26, 2015]
  Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
    (Bug report by Viktor Szakats).

Version 1.6.18beta03 [May 6, 2015]
  Replaced "unexpected" with an integer (0xabadca11) in pngset.c
    where a long was expected, to avoid a compiler warning when PNG_DEBUG > 1.
  Added contrib/examples/simpleover.c, to demonstrate how to handle
    alpha compositing of multiple images, using the "simplified API"
    and an example PNG generation tool, contrib/examples/genpng.c
    (John Bowler).

Version 1.6.18beta04 [May 20, 2015]
  PNG_RELEASE_BUILD replaces tests where the code depended on the build base
    type and can be defined on the command line, allowing testing in beta
    builds (John Bowler).
  Avoid Coverity issue 80858 (REVERSE NULL) in pngtest.c PNG_DEBUG builds.
  Avoid a harmless potential integer overflow in png_XYZ_from_xy() (Bug
    report from Christopher Ferris).

Version 1.6.18beta05 [May 31, 2015]
  Backport filter selection code from libpng-1.7.0beta51, to combine
    sub_row, up_row, avg_row, and paeth_row into try_row and tst_row.
  Changed png_voidcast(), etc., to voidcast(), etc., in contrib/tools/pngfix.c
    to avoid confusion with the libpng private macros.
  Fixed old cut&paste bug in the weighted filter selection code in
    pngwutil.c, introduced in libpng-0.95, March 1997.

Version 1.6.18beta06 [June 1, 2015]
  Removed WRITE_WEIGHTED_FILTERED code, to save a few kbytes of the
    compiled library size. It never worked properly and as far as we can
    tell, no one uses it. The png_set_filter_heuristics() and
    png_set_filter_heuristics_fixed() APIs are retained but deprecated
    and do nothing.

Version 1.6.18beta07 [June 6, 2015]
  Removed non-working progressive reader 'skip' function. This
    function has apparently never been used. It was implemented
    to support back-door modification of png_struct in libpng-1.4.x
    but (because it does nothing and cannot do anything) was apparently
    never tested (John Bowler).
  Fixed cexcept.h in which GCC 5 now reports that one of the auto
    variables in the Try macro needs to be volatile to prevent value
    being lost over the setjmp (John Bowler).
  Fixed NO_WRITE_FILTER and -Wconversion build breaks (John Bowler).
  Fix g++ build breaks (John Bowler).
  Quieted some Coverity issues in pngfix.c, png-fix-itxt.c, pngvalid.c,
    pngstest.c, and pngimage.c. Most seem harmless, but png-fix-itxt
    would only work with iTXt chunks with length 255 or less.
  Added #ifdef's to contrib/examples programs so people don't try
    to compile them without the minimum required support enabled
    (suggested by Flavio Medeiros).

Version 1.6.18beta08 [June 30, 2015]
  Eliminated the final two Coverity defects (insecure temporary file
    handling in contrib/libtests/pngstest.c; possible overflow of
    unsigned char in contrib/tools/png-fix-itxt.c). To use the "secure"
    file handling, define PNG_USE_MKSTEMP, otherwise "tmpfile()" will
    be used.
  Removed some unused WEIGHTED_FILTER macros from png.h and pngstruct.h

Version 1.6.18beta09 [July 5, 2015]
  Removed some useless typecasts from contrib/tools/png-fix-itxt.c
  Fixed a new signed-unsigned comparison in pngrtran.c (Max Stepin).
  Replaced arbitrary use of 'extern' with #define PNG_LINKAGE_*.  To
    preserve API compatibility, the new defines all default to "extern"
    (requested by Jan Nijtmans).

Version 1.6.18rc01 [July 9, 2015]
  Belatedly added Mans Rullgard and James Yu to the list of Contributing
    Authors.

Version 1.6.18rc02 [July 12, 2015]
  Restored unused FILTER_HEURISTIC macros removed at libpng-1.6.18beta08
    to png.h to avoid compatibility warnings.

Version 1.6.18rc03 [July 15, 2015]
  Minor changes to the man page

Version 1.6.18 [July 23, 2015]
  No changes.

Version 1.6.19beta01 [July 30, 2015]
  Updated obsolete information about the simplified API macros in the
    manual pages (Bug report by Arc Riley).
  Avoid potentially dereferencing NULL info_ptr in png_info_init_3().
  Rearranged png.h to put the major sections in the same order as
    in libpng17.
  Eliminated unused PNG_COST_SHIFT, PNG_WEIGHT_SHIFT, PNG_COST_FACTOR, and
    PNG_WEIGHT_FACTOR macros.
  Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
    (Bug report by Viktor Szakats).  Several warnings remain and are
    unavoidable, where we test for overflow.
  Fixed potential leak of png_pixels in contrib/pngminus/pnm2png.c
  Fixed uninitialized variable in contrib/gregbook/rpng2-x.c

Version 1.6.19beta02 [August 19, 2015]
  Moved config.h.in~ from the "libpng_autotools_files" list to the
    "libpng_autotools_extra" list in autogen.sh because it was causing a
    false positive for missing files (bug report by Robert C. Seacord).
  Removed unreachable "break" statements in png.c, pngread.c, and pngrtran.c
    to suppress clang warnings (Bug report by Viktor Szakats).
  Fixed some bad links in the man page.
  Changed "n bit" to "n-bit" in comments.
  Added signed/unsigned 16-bit safety net. This removes the dubious
    0x8000 flag definitions on 16-bit systems. They aren't supported
    yet the defs *probably* work, however it seems much safer to do this
    and be advised if anyone, contrary to advice, is building libpng 1.6
    on a 16-bit system. It also adds back various switch default clauses
    for GCC; GCC errors out if they are not present (with an appropriately
    high level of warnings).
  Safely convert num_bytes to a png_byte in png_set_sig_bytes() (Robert
    Seacord).
  Fixed the recently reported 1's complement security issue by replacing
    the value that is illegal in the PNG spec, in both signed and unsigned
    values, with 0. Illegal unsigned values (anything greater than or equal
    to  0x80000000) can still pass through, but since these are not illegal
    in ANSI-C (unlike 0x80000000 in the signed case) the checking that
    occurs later can catch them (John Bowler).

Version 1.6.19beta03 [September 26, 2015]
  Fixed png_save_int_32 when int is not 2's complement (John Bowler).
  Updated libpng16 with all the recent test changes from libpng17,
    including changes to pngvalid.c to ensure that the original,
    distributed, version of contrib/visupng/cexcept.h can be used
    (John Bowler).
  pngvalid contains the correction to the use of SAVE/STORE_
    UNKNOWN_CHUNKS; a bug revealed by changes in libpng 1.7. More
    tests contain the --strict option to detect warnings and the
    pngvalid-standard test has been corrected so that it does not
    turn on progressive-read. There is a separate test which does
    that. (John Bowler)
  Also made some signed/unsigned fixes.
  Make pngstest error limits version specific. Splitting the machine
    generated error structs out to a file allows the values to be updated
    without changing pngstest.c itself. Since libpng 1.6 and 1.7 have
    slightly different error limits this simplifies maintenance. The
    makepngs.sh script has also been updated to more accurately reflect
    current problems in libpng 1.7 (John Bowler).
  Incorporated new test PNG files into make check.  tests/pngstest-*
    are changed so that the new test files are divided into 8 groups by
    gamma and alpha channel.  These tests have considerably better code
    and pixel-value coverage than contrib/pngsuite; however,coverage is
    still incomplete (John Bowler).
  Removed the '--strict' in 1.6 because of the double-gamma-correction
    warning, updated pngstest-errors.h for the errors detected with the
    new contrib/testspngs PNG test files (John Bowler).

Version 1.6.19beta04 [October 15, 2015]
  Worked around rgb-to-gray issues in libpng 1.6.  The previous
    attempts to ignore the errors in the code aren't quite enough to
    deal with the 'channel selection' encoding added to libpng 1.7; abort.
    pngvalid.c is changed to drop this encoding in prior versions.
  Fixed 'pow' macros in pngvalid.c. It is legal for 'pow' to be a
    macro, therefore the argument list cannot contain preprocessing
    directives.  Make sure pow is a function where this happens. This is
    a minimal safe fix, the issue only arises in non-performance-critical
    code (bug report by Curtis Leach, fix by John Bowler).
  Added sPLT support to pngtest.c

Version 1.6.19rc01 [October 23, 2015]
  No changes.

Version 1.6.19rc02 [October 31, 2015]
  Prevent setting or writing over-length PLTE chunk (Cosmin Truta).
  Silently truncate over-length PLTE chunk while reading.
  Libpng incorrectly calculated the output rowbytes when the application
    decreased either the number of channels or the bit depth (or both) in
    a user transform.  This was safe; libpng overallocated buffer space
   (potentially by quite a lot; up to 4 times the amount required) but,
   from 1.5.4 on, resulted in a png_error (John Bowler).

Version 1.6.19rc03 [November 3, 2015]
  Fixed some inconsequential cut-and-paste typos in png_set_cHRM_XYZ_fixed().
  Clarified COPYRIGHT information to state explicitly that versions
    are derived from previous versions.
  Removed much of the long list of previous versions from png.h and
    libpng.3.

Version 1.6.19rc04 [November 5, 2015]
  Fixed new bug with CRC error after reading an over-length palette
    (bug report by Cosmin Truta) (CVE-2015-8126).

Version 1.6.19 [November 12, 2015]
  Cleaned up coding style in png_handle_PLTE().

Version 1.6.20beta01 [November 20, 2015]
  Avoid potential pointer overflow/underflow in png_handle_sPLT() and
    png_handle_pCAL() (Bug report by John Regehr).

Version 1.6.20beta02 [November 23, 2015]
  Fixed incorrect implementation of png_set_PLTE() that uses png_ptr
    not info_ptr, that left png_set_PLTE() open to the CVE-2015-8126
    vulnerability.  Fixes CVE-2015-8472.

Version 1.6.20beta03 [November 24, 2015]
  Backported tests from libpng-1.7.0beta69.

Version 1.6.20rc01 [November 26, 2015]
  Fixed an error in handling of bad zlib CMINFO field in pngfix, found by
    American Fuzzy Lop, reported by Brian Carpenter.  inflate() doesn't
    immediately fault a bad CMINFO field; instead a 'too far back' error
    happens later (at least some times).  pngfix failed to limit CMINFO to
    the allowed values but then assumed that window_bits was in range,
    triggering an assert. The bug is mostly harmless; the PNG file cannot
    be fixed.

Version 1.6.20rc02 [November 29, 2015]
  In libpng 1.6 zlib initialization was changed to use the window size
    in the zlib stream, not a fixed value. This causes some invalid images,
    where CINFO is too large, to display 'correctly' if the rest of the
    data is valid.  This provides a workaround for zlib versions where the
    error arises (ones that support the API change to use the window size
    in the stream).

Version 1.6.20 [December 3, 2015]
  No changes.

Version 1.6.21beta01 [December 11, 2015]
  Fixed syntax "$(command)" in tests/pngstest that some shells other than
    bash could not parse (Bug report by Nelson Beebe). Use `command` instead.

Version 1.6.21beta02 [December 14, 2015]
  Moved png_check_keyword() from pngwutil.c to pngset.c
  Removed LE/BE dependencies in pngvalid, to 'fix' the current problem
    in the BigEndian tests by not testing it, making the BE code the same 
    as the LE version.
  Fixes to pngvalid for various reduced build configurations (eliminate unused
    statics) and a fix for the case in rgb_to_gray when the digitize option
    reduces graylo to 0, producing a large error.

Version 1.6.21beta03 [December 18, 2015]
  Widened the 'limit' check on the internally calculated error limits in
    the 'DIGITIZE' case (the code used prior to 1.7 for rgb_to_gray error
    checks) and changed the check to only operate in non-release builds
    (base build type not RC or RELEASE.)
  Fixed undefined behavior in pngvalid.c, undefined because
    (png_byte) << shift is undefined if it changes the signed bit
    (because png_byte is promoted to int). The libpng exported functions
    png_get_uint_32 and png_get_uint_16 handle this. (Bug reported by
    David Drysdale as a result of reports from UBSAN in clang 3.8).
  This changes pngvalid to use BE random numbers; this used to produce
    errors but these should not be fixed as a result of the previous changes.

Version 1.6.21rc01 [January 4, 2016]
  In projects/vstudio, combined readme.txt and WARNING into README.txt

Version 1.6.21rc02 [January 7, 2016]
  Relocated assert() in contrib/tools/pngfix.c, bug found by American
    Fuzzy Lop, reported by Brian Carpenter.
  Marked 'limit' UNUSED in transform_range_check().  This only affects
    release builds.

Version 1.6.21 [January 15, 2016]
  Worked around a false-positive Coverity issue in pngvalid.c.

Version 1.6.22beta01 [January 23, 2016]
  Changed PNG_USE_MKSTEMP to __COVERITY__ to select alternate
    "tmpfile()" implementation in contrib/libtests/pngstest.c
  Fixed NO_STDIO build of pngunknown.c to skip calling png_init_io()
    if there is no stdio.h support.
  Added a png_image_write_to_memory() API and a number of assist macros
    to allow an application that uses the simplified API write to bypass
    stdio and write directly to memory.
  Added some warnings (png.h) and some check code to detect *possible*
    overflow in the ROW_STRIDE and simplified image SIZE macros.  This
    disallows image width/height/format that *might* overflow.  This is
    a quiet API change that limits in-memory image size (uncompressed) to
    less than 4GByte and image row size (stride) to less than 2GByte.
  Revised workaround for false-positive Coverity issue in pngvalid.c.

Version 1.6.22beta02 [February 8, 2016]
  Only use exit(77) in configure builds.
  Corrected error in PNG_IMAGE_PNG_SIZE_MAX. This new macro underreported
    the palette size because it failed to take into account that the memory
    palette has to be expanded to full RGB when it is written to PNG.
  Updated CMakeLists.txt, added supporting scripts/gen*.cmake.in
    and test.cmake.in (Roger Leigh).
  Relaxed limit checks on gamma values in pngrtran.c. As suggested in
    the comments gamma values outside the range currently permitted
    by png_set_alpha_mode are useful for HDR data encoding.  These values
    are already permitted by png_set_gamma so it is reasonable caution to
    extend the png_set_alpha_mode range as HDR imaging systems are starting
    to emerge.

Version 1.6.22beta03 [March 9, 2016]
  Added a common-law trademark notice and export control information
    to the LICENSE file, png.h, and the man page.
  Restored "& 0xff" in png_save_uint_16() and png_save_uint_32() that
    were accidentally removed from libpng-1.6.17. 
  Changed PNG_INFO_cHNK and PNG_FREE_cHNK from 0xnnnn to 0xnnnnU in png.h
    (Robert C. Seacord).
  Removed dubious "#if INT_MAX" test from png.h that was added to
    libpng-1.6.19beta02 (John Bowler).
  Add ${INCLUDES} in scripts/genout.cmake.in (Bug report by Nixon Kwok).
  Updated LICENSE to say files in the contrib directory are not
    necessarily under the libpng license, and that some makefiles have
    other copyright owners.
  Added INTEL-SSE2 support (Mike Klein and Matt Sarett, Google, Inc.).
  Made contrib/libtests/timepng more robust.  The code no longer gives
    up/fails on invalid PNG data, it just skips it (with error messages).
    The code no longer fails on PNG files with data beyond IEND.  Options
    exist to use png_read_png (reading the whole image, not by row) and, in
    that case, to apply any of the supported transforms.  This makes for
    more realistic testing; the decoded data actually gets used in a
    meaningful fashion (John Bowler).
  Fixed some misleading indentation (Krishnaraj Bhat).

Version 1.6.22beta04 [April 5, 2016]
  Force GCC compilation to C89 if needed (Dagobert Michelsen).
  SSE filter speed improvements for bpp=3:
    memcpy-free implementations of load3() / store3().
    call load3() only when needed at the end of a scanline.

Version 1.6.22beta05 [April 27, 2016]
  Added PNG_FAST_FILTERS macro (defined as
    PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP).
  Various fixes for contrib/libtests/timepng.c
  Moved INTEL-SSE code from pngpriv.h into contrib/intel/intel_sse.patch.
  Fixed typo (missing underscore) in #define PNG_READ_16_TO_8_SUPPORTED
    (Bug report by Y.Ohashik).

Version 1.6.22beta06 [May 5, 2016]
  Rebased contrib/intel_sse.patch.
  Quieted two Coverity issues in contrib/libtests/timepng.c.
  Fixed issues with scripts/genout.cmake.in (David Capello, Nixon Kwok):
    Added support to use multiple directories in ZLIBINCDIR variable,
    Fixed CMAKE_C_FLAGS with multiple values when genout is compiled on MSVC,
    Fixed pnglibconf.c compilation on OS X including the sysroot path.

Version 1.6.22rc01 [May 14, 2016]
  No changes.

Version 1.6.22rc02 [May 16, 2016]
  Removed contrib/timepng from default build; it does not build on platforms
    that don't supply clock_gettime().

Version 1.6.22rc03 [May 17, 2016]
  Restored contrib/timepng to default build but check for the presence
    of clock_gettime() in configure.ac and Makefile.am.

Version 1.6.22 [May 26, 2016]
  No changes.

Version 1.6.23beta01 [May 29, 2016]
  Stop a potential memory leak in png_set_tRNS() (Bug report by Ted Ying).
  Fixed the progressive reader to handle empty first IDAT chunk properly
    (patch by Timothy Nikkel).  This bug was introduced in libpng-1.6.0 and
    only affected the libpng16 branch.
  Added tests in pngvalid.c to check zero-length IDAT chunks in various
    positions.  Fixed the sequential reader to handle these more robustly
    (John Bowler).

Version 1.6.23rc01 [June 2, 2016]
  Corrected progressive read input buffer in pngvalid.c. The previous version
    the code invariably passed just one byte at a time to libpng.  The intent
    was to pass a random number of bytes in the range 0..511.
  Moved sse2 prototype from pngpriv.h to contrib/intel/intel_sse.patch.
  Added missing ")" in pngerror.c (Matt Sarrett).

Version 1.6.23rc02 [June 4, 2016]
  Fixed undefined behavior in png_push_save_buffer(). Do not call
    memcpy() with a null source, even if count is zero (Leon Scroggins III).

Version 1.6.23 [June 9, 2016]
  Fixed bad link to RFC2083 in png.5 (Nikola Forro).

Version 1.6.24beta01 [June 11, 2016]
  Avoid potential overflow of the PNG_IMAGE_SIZE macro.  This macro
    is not used within libpng, but is used in some of the examples.

Version 1.6.24beta02 [June 23, 2016]
  Correct filter heuristic overflow handling. This was broken when the
    write filter code was moved out-of-line; if there is a single filter and
    the heuristic sum overflows the calculation of the filtered line is not
    completed.  In versions prior to 1.6 the code was duplicated in-line
    and the check not performed, so the filter operation completed; however,
    in the multi-filter case where the sum is performed the 'none' filter\
 would
    be selected if all the sums overflowed, even if it wasn't in the filter
    list.  The fix to the first problem is simply to provide PNG_SIZE_MAX as
    the current lmins sum value; this means the sum can never exceed it and
    overflows silently.  A reasonable compiler that does choose to inline
    the code will simply eliminate the sum check.
  The fix to the second problem is to use high precision arithmetic (this is
    implemented in 1.7), however a simple safe fix here is to chose the lowest
    numbered filter in the list from png_set_filter (this only works if the
    first problem is also fixed) (John Bowler).
  Use a more efficient absolute value calculation on SSE2 (Matthieu Darbois).
  Fixed the case where PNG_IMAGE_BUFFER_SIZE can overflow in the application
    as a result of the application using an increased 'row_stride'; previously
    png_image_finish_read only checked for overflow on the base calculation of
    components.  (I.e. it checked for overflow of a 32-bit number on the total
    number of pixel components in the output format, not the possibly padded\
 row
    length and not the number of bytes, which for linear formats is twice the
    number of components.)
  MSVC does not like '-(unsigned)', so replaced it with 0U-(unsigned)
  MSVC does not like (uInt) = -(unsigned) (i.e. as an initializer), unless
    the conversion is explicitly invoked by a cast.
  Put the SKIP definition in the correct place. It needs to come after the
    png.h include (see all the other .c files in contrib/libtests) because it
    depends on PNG_LIBPNG_VER.
  Removed the three compile warning options from the individual project
    files into the zlib.props globals.  It increases the warning level from 4
    to All and adds a list of the warnings that need to be turned off.  This\
 is
    semi-documentary; the intent is to tell libpng users which warnings have
    been examined and judged non-fixable at present.  The warning about
    structure padding is fixable, but it would be a significant change (moving
    structure members around).

Version 1.6.24beta03 [July 4, 2016]
  Optimized absolute value calculation in filter selection, similar to
    code in the PAETH decoder in pngrutil.c. Build with PNG_USE_ABS to
    use this.
  Added pngcp to the build together with a pngcp.dfa configuration test.
  Added high resolution timing to pngcp.
  Added "Common linking failures" section to INSTALL.
  Relocated misplaced #endif in png.c sRGB profile checking.
  Fixed two Coverity issues in pngcp.c.

Version 1.6.24beta04 [July 8, 2016]
  Avoid filter-selection heuristic sum calculations in cases where only one
    filter is a candidate for selection. This trades off code size (added
    private png_setup_*_row_only() functions) for speed.

Version 1.6.24beta05 [July 13, 2016]
  Fixed some indentation to comply with our coding style.
  Added contrib/tools/reindent.

Version 1.6.24beta06 [July 18, 2016]
  Fixed more indentation to comply with our coding style.
  Eliminated unnecessary tests of boolean png_isaligned() vs 0.

Version 1.6.24rc01 [July 25, 2016]
  No changes.

Version 1.6.24rc02 [August 1, 2016]
  Conditionally compile SSE2 headers in contrib/intel/intel_sse.patch
  Conditionally compile png_decompress_chunk().

Version 1.6.24rc03 [August 2, 2016]
  Conditionally compile ARM_NEON headers in pngpriv.h
  Updated contrib/intel/intel_sse.patch

Version 1.6.24[August 4, 2016]
  No changes.

Version 1.6.25beta01 [August 12, 2016]
  Reject oversized iCCP profile immediately.
  Cleaned up PNG_DEBUG compile of pngtest.c.
  Conditionally compile png_inflate().

Version 1.6.25beta02 [August 18, 2016]
  Don't install pngcp; it conflicts with pngcp in the pngtools package.
  Minor editing of INSTALL, (whitespace, added copyright line)

Version 1.6.25rc01 [August 24, 2016]
  No changes.

Version 1.6.25rc02 [August 29, 2016]
  Added MIPS support (Mandar Sahastrabuddhe <Mandar.Sahastrabuddhe@imgtec.com\
>).
  Only the UP filter is currently implemented.

Version 1.6.25rc03 [August 29, 2016]
  Rebased contrib/intel/intel_sse.patch after the MIPS implementation.

Version 1.6.25rc04 [August 30, 2016]
  Added MIPS support for SUB, AVG, and PAETH filters (Mandar Sahastrabuddhe).

Version 1.6.25rc05 [August 30, 2016]
  Rebased contrib/intel/intel_sse.patch after the MIPS implementation update..

Version 1.6.25 [September 1, 2016]
  No changes.

Version 1.6.26beta01 [September 26, 2016]
  Fixed handling zero length IDAT in pngfix (bug report by Agostino Sarubbo,
    bugfix by John Bowler).
  Do not issue a png_error() on read in png_set_pCAL() because png_handle_pCAL
    has allocated memory that libpng needs to free.
  Conditionally compile png_set_benign_errors() in pngread.c and pngtest.c
  Issue a png_benign_error instead of a png_error on ADLER32 mismatch
    while decoding compressed data chunks.
  Changed PNG_ZLIB_VERNUM to ZLIB_VERNUM in pngpriv.h, pngstruct.h, and
    pngrutil.c.
  If CRC handling of critical chunks has been set to PNG_CRC_QUIET_USE,
    ignore the ADLER32 checksum in the IDAT chunk as well as the chunk CRCs.
  Issue png_benign_error() on ADLER32 checksum mismatch instead of\
 png_error().
  Add tests/badcrc.png and tests/badadler.png to tests/pngtest.
  Merged pngtest.c with libpng-1.7.0beta84/pngtest.c

Version 1.6.26beta02 [October 1, 2016]
  Updated the documentation about CRC and ADLER32 handling.
  Quieted 117 warnings from clang-3.8 in pngtrans.c, pngread.c,
     pngwrite.c, pngunknown.c, and pngvalid.c.
  Quieted 58 (out of 144) -Wconversion compiler warnings by changing
    flag definitions in pngpriv.h from 0xnnnn to 0xnnnnU and trivial changes
    in png.c, pngread.c, and pngwutil.c.

Version 1.6.26beta03 [October 2, 2016]
  Removed contrib/libtests/*.orig and *.rej that slipped into the tarballs.
  Quieted the 86 remaining -Wconversion compiler warnings by
    revising the png_isaligned() macro and trivial changes in png.c,
    pngerror.c, pngget.c, pngmem.c, pngset.c, pngrtran.c, pngrutil.c,
    pngwtran.c, pngwrite.c, and pngwutil.c.

Version 1.6.26beta04 [October 3, 2016]
  Quieted (bogus?) clang warnings about "absolute value has no effect"
    when PNG_USE_ABS is defined.
  Fixed offsets in contrib/intel/intel_sse.patch

Version 1.6.26beta05 [October 6, 2016]
  Changed integer constant 4294967294 to unsigned 4294967294U in pngconf.h
    to avoid a signed/unsigned compare in the preprocessor.

Version 1.6.26beta06 [October 7, 2016]
  Use zlib-1.2.8.1 inflateValidate() instead of inflateReset2() to
    optionally avoid ADLER32 evaluation.

Version 1.6.26rc01 [October 12, 2016]
  No changes.

Version 1.6.26 [October 20, 2016]
  Cosmetic change, "ptr != 0" to "ptr != NULL" in png.c and pngrutil.c
  Despammed email addresses (replaced "@" with " at ").

Version 1.6.27beta01 [November 2, 2016]
  Restrict the new ADLER32-skipping to IDAT chunks.  It broke iCCP chunk
    handling: an erroneous iCCP chunk would throw a png_error and reject the
    entire PNG image instead of rejecting just the iCCP chunk with a warning,
    if built with zlib-1.2.8.1.

Version 1.6.27rc01 [December 27, 2016]
  Control ADLER32 checking with new PNG_IGNORE_ADLER32 option. Fixes
    an endless loop when handling erroneous ADLER32 checksums; bug
    introduced in libpng-1.6.26.
  Removed the use of a macro containing the pre-processor 'defined'
    operator.  It is unclear whether this is valid; a macro that
    "generates" 'defined' is not permitted, but the use of the word
    "generates" within the C90 standard seems to imply more than simple
    substitution of an expression itself containing a well-formed defined
    operation.
  Added ARM support to CMakeLists.txt (Andreas Franek).

Version 1.6.27 [December 29, 2016]
  Fixed a potential null pointer dereference in png_set_text_2() (bug report
    and patch by Patrick Keshishian, CVE-2016-10087).

Version 1.6.28rc01 [January 3, 2017]
  Fixed arm/aarch64 detection in CMakeLists.txt (Gianfranco Costamagna).
  Added option to Cmake build allowing a custom location of zlib to be
    specified in a scenario where libpng is being built as a subproject
    alongside zlib by another project (Sam Serrels).
  Changed png_ptr->options from a png_byte to png_uint_32, to accommodate
    up to 16 options.

Version 1.6.28rc02 [January 4, 2017]
  Added "include(GNUInstallDirs)" to CMakeLists.txt (Gianfranco Costamagna).
  Moved SSE2 optimization code into the main libpng source directory.
    Configure libpng with "configure --enable-intel-sse" or compile
    libpng with "-DPNG_INTEL_SSE" in CPPFLAGS to enable it.

Version 1.6.28rc03 [January 4, 2017]
  Backed out the SSE optimization and last CMakeLists.txt to allow time for\
 QA.

Version 1.6.28 [January 5, 2017]
  No changes.

Version 1.6.29beta01 [January 12, 2017]
  Readded "include(GNUInstallDirs)" to CMakeLists.txt (Gianfranco Costamagna).
  Moved SSE2 optimization code into the main libpng source directory.
    Configure libpng with "configure --enable-intel-sse" or compile
    libpng with "-DPNG_INTEL_SSE" in CPPFLAGS to enable it.
  Simplified conditional compilation in pngvalid.c, for AIX (Michael Felt).

Version 1.6.29beta02 [February 22, 2017]
  Avoid conditional directives that break statements in pngrutil.c (Romero
    Malaquias)
  The contrib/examples/pngtopng.c recovery code was in the wrong "if"
    branches; the comments were correct.
  Added code for PowerPC VSX optimisation (Vadim Barkov).

Version 1.6.29beta03 [March 1, 2017]
  Avoid potential overflow of shift operations in png_do_expand() (Aaron\
 Boxer).
  Change test ZLIB_VERNUM >= 0x1281 to ZLIB_VERNUM >= 0x1290 in pngrutil.c
    because Solaris 11 distributes zlib-1.2.8.f that is older than 1.2.8.1,
    as suggested in zlib FAQ, item 24.
  Suppress clang warnings about implicit sign changes in png.c

Version 1.6.29 [March 16, 2017]
  No changes.

Version 1.6.30beta01 [April 1, 2017]
  Added missing "$(CPPFLAGS)" to the compile line for c.pic.o in
    makefile.linux and makefile.solaris-x86 (Cosmin).
  Revised documentation of png_get_error_ptr() in the libpng manual.
  Silence clang -Wcomma and const drop warnings (Viktor Szakats).
  Update Sourceforge URLs in documentation (https instead of http).

Version 1.6.30beta02 [April 22, 2017]
  Document need to check for integer overflow when allocating a pixel
    buffer for multiple rows in contrib/gregbook, contrib/pngminus,
    example.c, and in the manual (suggested by Jaeseung Choi). This
    is similar to the bug reported against pngquant in CVE-2016-5735.
  Removed reference to the obsolete PNG_SAFE_LIMITS macro in the\
 documentation.

Version 1.6.30beta03 [May 22, 2017]
  Check for integer overflow in contrib/visupng and contrib/tools/genpng.
  Do not double evaluate CMAKE_SYSTEM_PROCESSOR in CMakeLists.txt.
  Test CMAKE_HOST_WIN32 instead of WIN32 in CMakeLists.txt.
  Fix some URL in documentation.

Version 1.6.30beta04 [June 7, 2017]
  Avoid writing an empty IDAT when the last IDAT exactly fills the
    compression buffer (bug report by Brian Baird). This bug was
    introduced in libpng-1.6.0.

Version 1.6.30rc01 [June 14, 2017]
  No changes.

Version 1.6.30rc02 [June 25, 2017]
  Update copyright year in pnglibconf.h, make ltmain.sh executable.
  Add a reference to the libpng.download site in README.

Version 1.6.30 [June 28, 2017]
  No changes.

Version 1.6.31beta01 [July 5, 2017]
  Guard the definition of _POSIX_SOURCE in pngpriv.h (AIX already defines it;
    bug report by Michael Felt).
  Revised pngpriv.h to work around failure to compile arm/filter_neon.S
    ("typedef" directive is unrecognized by the assembler). The problem
    was introduced in libpng-1.6.30beta01.
  Added "Requires: zlib" to libpng.pc.in (Pieter Neerincx).
  Added special case for FreeBSD in arm/filter_neon.S (Maya Rashish).

Version 1.6.31beta02 [July 8, 2017]
  Added instructions for disabling hardware optimizations in INSTALL.
  Added "--enable-hardware-optimizations" configuration flag to enable
    or disable all hardware optimizations with one flag.

Version 1.6.31beta03 [July 9, 2017]
  Updated CMakeLists.txt to add INTEL_SSE and MIPS_MSA platforms.
  Changed "int" to "png_size_t" in intel/filter_sse2.c to prevent
    possible integer overflow (Bug report by John Bowler).
  Quieted "declaration after statement" warnings in intel/filter_sse2.c.
  Added scripts/makefile-linux-opt, which has hardware optimizations enabled.

Version 1.6.31beta04 [July 11, 2017]
  Removed one of the GCC-7.1.0 'strict-overflow' warnings that result when
    integers appear on both sides of a compare.  Worked around the others by
    forcing the strict-overflow setting in the relevant functions to a level
    where they are not reported (John Bowler).
  Changed "FALL THROUGH" comments to "FALLTHROUGH" because GCC doesn't like
    the space.
  Worked around some C-style casts from (void*) because g++ 5.4.0 objects
    to them.
  Increased the buffer size for 'sprint' to pass the gcc 7.1.0 'sprint
    overflow' check that is on by default with -Wall -Wextra.

Version 1.6.31beta05 [July 13, 2017]
  Added eXIf chunk support.

Version 1.6.31beta06 [July 17, 2017]
  Added a minimal eXIf chunk (with Orientation and FocalLengthIn35mmFilm
    tags) to pngtest.png.

Version 1.6.31beta07 [July 18, 2017]
  Revised the eXIf chunk in pngtest.png to fix "Bad IFD1 Directory" warning.

Version 1.6.31rc01 [July 19, 2017]
  No changes.

Version 1.6.31rc02 [July 25, 2017]
  Fixed typo in example.c (png_free_image should be png_image_free) (Bug
    report by John Smith)

Version 1.6.31 [July 27, 2017]
  No changes.

Version 1.6.32beta01 [July 31, 2017]
  Avoid possible NULL dereference in png_handle_eXIf when benign_errors
    are allowed. Avoid leaking the input buffer "eXIf_buf".
  Eliminated png_ptr->num_exif member from pngstruct.h and added num_exif
    to arguments for png_get_eXIf() and png_set_eXIf().
  Added calls to png_handle_eXIf(() in pngread.c and png_write_eXIf() in
    pngwrite.c, and made various other fixes to png_write_eXIf().
  Changed name of png_get_eXIF and png_set_eXIf() to png_get_eXIf_1() and
    png_set_eXIf_1(), respectively, to avoid breaking API compatibility
    with libpng-1.6.31.

Version 1.6.32beta02 [August 1, 2017]
  Updated contrib/libtests/pngunknown.c with eXIf chunk.

Version 1.6.32beta03 [August 2, 2017]
  Initialized btoa[] in pngstest.c
  Stop memory leak when returning from png_handle_eXIf() with an error
    (Bug report from the OSS-fuzz project).

Version 1.6.32beta04 [August 2, 2017]
  Replaced local eXIf_buf with info_ptr-eXIf_buf in png_handle_eXIf().
  Update libpng.3 and libpng-manual.txt about eXIf functions.

Version 1.6.32beta05 [August 2, 2017]
  Restored png_get_eXIf() and png_set_eXIf() to maintain API compatibility.

Version 1.6.32beta06 [August 2, 2017]
  Removed png_get_eXIf_1() and png_set_eXIf_1().

Version 1.6.32beta07 [August 3, 2017]
  Check length of all chunks except IDAT against user limit to fix an
    OSS-fuzz issue (Fixes CVE-2017-12652).

Version 1.6.32beta08 [August 3, 2017]
  Check length of IDAT against maximum possible IDAT size, accounting
    for height, rowbytes, interlacing and zlib/deflate overhead.
  Restored png_get_eXIf_1() and png_set_eXIf_1(), because strlen(eXIf_buf)
    does not work (the eXIf chunk data can contain zeroes).

Version 1.6.32beta09 [August 3, 2017]
  Require cmake-2.8.8 in CMakeLists.txt. Revised symlink creation,
    no longer using deprecated cmake LOCATION feature (Clifford Yapp).
  Fixed five-byte error in the calculation of IDAT maximum possible size.
  
Version 1.6.32beta10 [August 5, 2017]
  Moved chunk-length check into a png_check_chunk_length() private
    function (Suggested by Max Stepin).
  Moved bad pngs from tests to contrib/libtests/crashers
  Moved testing of bad pngs into a separate tests/pngtest-badpngs script
  Added the --xfail (expected FAIL) option to pngtest.c. It writes XFAIL
    in the output but PASS for the libpng test.
  Require cmake-3.0.2 in CMakeLists.txt (Clifford Yapp).
  Fix "const" declaration info_ptr argument to png_get_eXIf_1() and the
    num_exif argument to png_get_eXIf_1() (Github Issue 171).

Version 1.6.32beta11 [August 7, 2017]
  Added "eXIf" to "chunks_to_ignore[]" in png_set_keep_unknown_chunks().
  Added huge_IDAT.png and empty_ancillary_chunks.png to testpngs/crashers.
  Make pngtest --strict, --relax, --xfail options imply -m (multiple).
  Removed unused chunk_name parameter from png_check_chunk_length().
  Relocated setting free_me for eXIf data, to stop an OSS-fuzz leak.
  Initialize profile_header[] in png_handle_iCCP() to fix OSS-fuzz issue.
  Initialize png_ptr->row_buf[0] to 255 in png_read_row() to fix OSS-fuzz UMR.
  Attempt to fix a UMR in png_set_text_2() to fix OSS-fuzz issue.
  Increase minimum zlib stream from 9 to 14 in png_handle_iCCP(), to account
    for the minimum 'deflate' stream, and relocate the test to a point
    after the keyword has been read.
  Check that the eXIf chunk has at least 2 bytes and begins with "II" or "MM".

Version 1.6.32rc01 [August 18, 2017]
  Added a set of "huge_xxxx_chunk.png" files to contrib/testpngs/crashers,
    one for each known chunk type, with length = 2GB-1.
  Check for 0 return from png_get_rowbytes() and added some (size_t) typecasts
    in contrib/pngminus/*.c to stop some Coverity issues (162705, 162706,
    and 162707).
  Renamed chunks in contrib/testpngs/crashers to avoid having files whose
    names differ only in case; this causes problems with some platforms
    (github issue #172).

Version 1.6.32rc02 [August 22, 2017]
  Added contrib/oss-fuzz directory which contains files used by the oss-fuzz
    project (https://github.com/google/oss-fuzz/tree/master/projects/libpng).

Version 1.6.32 [August 24, 2017]
  No changes.

Version 1.6.33beta01 [August 28, 2017]
  Added PNGMINUS_UNUSED macro to contrib/pngminus/p*.c and added missing
    parenthesis in contrib/pngminus/pnm2png.c (bug report by Christian Hesse).
  Fixed off-by-one error in png_do_check_palette_indexes() (Bug report
    by Mick P., Source Forge Issue #269).

Version 1.6.33beta02 [September 3, 2017]
  Initialize png_handler.row_ptr in contrib/oss-fuzz/libpng_read_fuzzer.cc
    to fix shortlived oss-fuzz issue 3234.
  Compute a larger limit on IDAT because some applications write a deflate
    buffer for each row (Bug report by Andrew Church).
  Use current date (DATE) instead of release-date (RDATE) in last
    changed date of contrib/oss-fuzz files.
  Enabled ARM support in CMakeLists.txt (Bernd Kuhls).

Version 1.6.33beta03 [September 14, 2017]
  Fixed incorrect typecast of some arguments to png_malloc() and
    png_calloc() that were png_uint_32 instead of png_alloc_size_t
    (Bug report by "irwir" in Github libpng issue #175).
  Use pnglibconf.h.prebuilt when building for ANDROID with cmake (Github
    issue 162, by rcdailey).

Version 1.6.33rc01 [September 20, 2017]
  Initialize memory allocated by png_inflate to zero, using memset, to
    stop an oss-fuzz "use of uninitialized value" detection in\
 png_set_text_2()
    due to truncated iTXt or zTXt chunk.
  Initialize memory allocated by png_read_buffer to zero, using memset, to
    stop an oss-fuzz "use of uninitialized value" detection in
    png_icc_check_tag_table() due to truncated iCCP chunk.
  Removed a redundant test (suggested by "irwir" in Github issue #180).

Version 1.6.33rc02 [September 23, 2017]
  Added an interlaced version of each file in contrib/pngsuite.
  Relocate new memset() call in pngrutil.c.
  Removed more redundant tests (suggested by "irwir" in Github issue #180).
  Add support for loading images with associated alpha in the Simplified
    API (Samuel Williams).

Version 1.6.33 [September 28, 2017]
  Revert contrib/oss-fuzz/libpng_read_fuzzer.cc to libpng-1.6.32 state.
  Initialize png_handler.row_ptr in contrib/oss-fuzz/libpng_read_fuzzer.cc
  Add end_info structure and png_read_end() to the libpng fuzzer.

Version 1.6.34 [September 29, 2017]
  Removed contrib/pngsuite/i*.png; some of them caused test failures.

Version 1.6.35beta01 [March 6, 2018]
  Restored 21 of the contrib/pngsuite/i*.png, which do not cause test
    failures. Placed the remainder in contrib/pngsuite/interlaced/i*.png.
  Added calls to png_set_*() transforms commonly used by browsers to
    the fuzzer.
  Removed some unnecessary brackets in pngrtran.c
  Fixed miscellaneous typos (Patch by github user "luzpaz").
  Change "ASM C" to "C ASM" in CMakeLists.txt
  Fixed incorrect handling of bKGD chunk in sub-8-bit files (Cosmin)
  Added hardware optimization directories to zip and 7z distributions.
  Fixed incorrect bitmask for options.
  Fixed many spelling typos.

Version 1.6.35beta02 [March 28, 2018]
  Make png_get_iCCP consistent with man page (allow compression-type argument
  to be NULL, bug report by Lenard Szolnoki).

Version 1.6.35 [July 15, 2018]
  Replaced the remaining uses of png_size_t with size_t (Cosmin)
  Fixed the calculation of row_factor in png_check_chunk_length
    (reported by Thuan Pham in SourceForge issue #278)
  Added missing parentheses to a macro definition
    (suggested by "irwir" in GitHub issue #216)

Version 1.6.36 [December 1, 2018]
  Optimized png_do_expand_palette for ARM processors.
  Improved performance by around 10-22% on a recent ARM Chromebook.
    (Contributed by Richard Townsend, ARM Holdings)
  Fixed manipulation of machine-specific optimization options.
    (Contributed by Vicki Pfau)
  Used memcpy instead of manual pointer arithmetic on Intel SSE2.
    (Contributed by Samuel Williams)
  Fixed build errors with MSVC on ARM64.
    (Contributed by Zhijie Liang)
  Fixed detection of libm in CMakeLists.
    (Contributed by Cameron Cawley)
  Fixed incorrect creation of pkg-config file in CMakeLists.
    (Contributed by Kyle Bentley)
  Fixed the CMake build on Windows MSYS by avoiding symlinks.
  Fixed a build warning on OpenBSD.
    (Contributed by Theo Buehler)
  Fixed various typos in comments.
    (Contributed by "luz.paz")
  Raised the minimum required CMake version from 3.0.2 to 3.1.
  Removed yet more of the vestigial support for pre-ANSI C compilers.
  Removed ancient makefiles for ancient systems that have been broken
    across all previous libpng-1.6.x versions.
  Removed the Y2K compliance statement and the export control
    information.
  Applied various code style and documentation fixes.

Version 1.6.37 [April 14, 2019]
  Fixed a use-after-free vulnerability (CVE-2019-7317) in png_image_free.
  Fixed a memory leak in the ARM NEON implementation of png_do_expand_palette.
  Fixed a memory leak in pngtest.c.
  Fixed two vulnerabilities (CVE-2018-14048, CVE-2018-14550) in
    contrib/pngminus; refactor.
  Changed the license of contrib/pngminus to MIT; refresh makefile and docs.
    (Contributed by Willem van Schaik)
  Fixed a typo in the libpng license v2.
    (Contributed by Miguel Ojeda)
  Added makefiles for AddressSanitizer-enabled builds.
  Cleaned up various makefiles.

Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
Subscription is required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe.

\
changes-type: text/plain
url: http://libpng.org/pub/png/libpng.html
doc-url: http://libpng.org/pub/png/libpng-manual.txt
src-url: https://sourceforge.net/projects/libpng
package-url: https://github.com/build2-packaging/libpng
email: png-mng-implement@lists.sourceforge.net; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: libz ^1.2.1100
bootstrap-build:
\
project = libpng

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: libpng/libpng-1.6.37+1.tar.gz
sha256sum: 738f5d0dad12b8680f066163cfc0ae0f9938828626b65a0d8ffd52a7d88c1af9
:
name: libpq
version: 9.6.5+6
project: postgresql
summary: PostgreSQL C API client library
license: PostgreSQL License; Permissive free software license.
topics: C, PostgreSQL, SQL, relational database
description:
\
PostgreSQL is an object-relational SQL database management system with libpq
being its C client library. Applications can use this library to pass queries
to the PostgreSQL backend server and to receive the results of those queries
using the C programming language. For more information see:

https://www.postgresql.org/

This package contains the original libpq library source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

Send questions, bug reports, or any other feedback about the library itself to
the PostgreSQL mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of PostgreSQL for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/postgresql/

\
description-type: text/plain
url: https://www.postgresql.org/
doc-url: https://www.postgresql.org/docs/9.6/static/libpq.html
src-url: https://git.build2.org/cgit/packaging/postgresql/libpq/tree/
package-url: https://git.build2.org/cgit/packaging/postgresql/
email: pgsql-general@postgresql.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : Copyright (c) 2016-2019 Code Synthesis Ltd
# license   : PostgreSQL License; see accompanying COPYRIGHT file

project = libpq

using version
using config
using dist
using test
using install

# PostgreSQL releases (for quite a long time) had the 3-component versions,
# where the first 2 components denote a major version and the third one the
# minor version. This has changed starting from version 10, with the major
# version represented by a single component. Minor releases are guaranteed to
# be backwards-compatible and contain only bug fixes. See also:
#
# https://www.postgresql.org/support/versioning/
#
# There is no document that describes libpq ABI versioning and compatibility
# rules, so everything that follows is just a guess.
#
# The library naming schema on POSIX is libpq.so.<so_major>.<so_minor> with
# the so_minor number incremented with each major release unless the so_major
# number is incremented, in which case it is reset to 0. It is unclear when
# the so_major is incremented (it, for example, hasn't been in the 9.6 to
# 10 transition).
#
# The <so_major>.<so_minor> pair constitutes the version of the ABI that is
# backwards-compatible between PostgreSQL minor releases. However, we can not
# deduce the ABI version from the release major version and will have to check
# it for each major release by examining the SO_MAJOR_VERSION and
# SO_MINOR_VERSION variables in src/interfaces/libpq/Makefile.
#
if ($version.major == 9 && $version.minor == 6)
{
  abi_major = 5
  abi_minor = 9
}
else
  fail "increment the ABI version?"

abi_version = $abi_major.$abi_minor

\
root-build:
\
# file      : build/root.build
# copyright : Copyright (c) 2016-2019 Code Synthesis Ltd
# license   : PostgreSQL License; see accompanying COPYRIGHT file

c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: postgresql/libpq-9.6.5+6.tar.gz
sha256sum: affa52bb58fb3db4399b0fed2d96b5b1619c384528d169472c890abc3ac2accd
:
name: libpq
version: 12.1.0+2
upstream-version: 12.1
project: postgresql
summary: PostgreSQL C API client library
license: PostgreSQL License; Permissive free software license.
topics: C, PostgreSQL, SQL, relational database
description:
\
PostgreSQL is an object-relational SQL database management system with libpq
being its C client library. Applications can use this library to pass queries
to the PostgreSQL backend server and to receive the results of those queries
using the C programming language. For more information see:

https://www.postgresql.org/

This package contains the original libpq library source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the PostgreSQL mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of PostgreSQL for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/postgresql/

\
description-type: text/plain
url: https://www.postgresql.org/
doc-url: https://www.postgresql.org/docs/12/libpq.html
src-url: https://git.build2.org/cgit/packaging/postgresql/postgresql/tree/lib\
pq/
package-url: https://git.build2.org/cgit/packaging/postgresql/
email: pgsql-general@postgresql.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libcrypto >= 1.1.1
depends: libssl >= 1.1.1
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

project = libpq

using version
using config
using dist
using test
using install

# PostgreSQL releases (for quite a long time) had the 3-component versions,
# where the first 2 components denoted a major version and the third one --
# the minor version. This has changed starting from version 10, with the major
# version represented by a single component. Minor releases are guaranteed to
# be backwards-compatible and contain only bug fixes. See also:
#
# https://www.postgresql.org/support/versioning/
#
# Note that the release version is not a semantic version and we will map it\
 to
# the standard version as <major>.<minor>.0.
#
# There is no document that describes libpq ABI versioning and compatibility
# rules, so everything that follows is implied from
# src/interfaces/libpq/Makefile.
#
# The library naming schema on Linux is libpq.so.<so_major>.<so_minor>
# (SO_MAJOR_VERSION and SO_MINOR_VERSION in the Makefile). So presumably
# so_major is incremented on backwards-incompatible ABI changes (it hasn't
# been for the several last major version releases). And so_minor is equal to
# the package major version.
#
if ($version.major == 12 && $version.minor == 1)
{
  abi_major = 5
  abi_minor = 12
}
else
  fail "increment the ABI version?"

\
root-build:
\
# file      : build/root.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

# We rely on this in macros/options deduction (see
# libpq/{buildfile,pg_config.h} for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: postgresql/libpq-12.1.0+2.tar.gz
sha256sum: 38748563a4fb7e13b8aea44e63832dedbf469c182df5dce20d1e498e7dab7b45
:
name: libpq
version: 14.0.0+1
upstream-version: 14.0
project: postgresql
summary: PostgreSQL C API client library
license: PostgreSQL; Permissive free software license.
topics: C, PostgreSQL, SQL, relational database
description:
\
PostgreSQL is an object-relational SQL database management system with libpq
being its C client library. Applications can use this library to pass queries
to the PostgreSQL backend server and to receive the results of those queries
using the C programming language. For more information see:

https://www.postgresql.org/

This package contains the original libpq library source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the PostgreSQL mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of PostgreSQL for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/postgresql/

\
description-type: text/plain
url: https://www.postgresql.org/
doc-url: https://www.postgresql.org/docs/14/libpq.html
src-url: https://git.build2.org/cgit/packaging/postgresql/postgresql/tree/lib\
pq/
package-url: https://git.build2.org/cgit/packaging/postgresql/
email: pgsql-general@postgresql.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: libcrypto >= 1.1.1
depends: libssl >= 1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

project = libpq

using version
using config
using dist
using test
using install

# PostgreSQL releases (for quite a long time) had the 3-component versions,
# where the first 2 components denoted a major version and the third one --
# the minor version. This has changed starting from version 10, with the major
# version represented by a single component. Minor releases are guaranteed to
# be backwards-compatible and contain only bug fixes. See also:
#
# https://www.postgresql.org/support/versioning/
#
# Note that the release version is not a semantic version and we will map it\
 to
# the standard version as <major>.<minor>.0.
#
# There is no document that describes libpq ABI versioning and compatibility
# rules, so everything that follows is implied from
# src/interfaces/libpq/Makefile.
#
# The library naming schema on Linux is libpq.so.<so_major>.<so_minor>
# (SO_MAJOR_VERSION and SO_MINOR_VERSION in the Makefile). So presumably
# so_major is incremented on backwards-incompatible ABI changes (it hasn't
# been for the several last major version releases). And so_minor is equal to
# the package major version.
#
if ($version.major == 14 && $version.minor == 0)
{
  abi_major = 5
  abi_minor = 14
}
else
  fail "increment the ABI version?"

\
root-build:
\
# file      : build/root.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

# We rely on this in macros/options deduction (see
# libpq/{buildfile,pg_config.h} for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: postgresql/libpq-14.0.0+1.tar.gz
sha256sum: b2d05925015b6a03dce44d4a2ec040b735868edcc25779dabee0376f4f43e1dd
:
name: libpq
version: 14.1.0+7
upstream-version: 14.1
project: postgresql
summary: PostgreSQL C API client library
license: PostgreSQL; Permissive free software license.
topics: C, PostgreSQL, SQL, relational database
description:
\
PostgreSQL is an object-relational SQL database management system with libpq
being its C client library. Applications can use this library to pass queries
to the PostgreSQL backend server and to receive the results of those queries
using the C programming language. For more information see:

https://www.postgresql.org/

This package contains the original libpq library source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the PostgreSQL mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of PostgreSQL for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/postgresql/

\
description-type: text/plain
url: https://www.postgresql.org/
doc-url: https://www.postgresql.org/docs/14/libpq.html
src-url: https://git.build2.org/cgit/packaging/postgresql/postgresql/tree/lib\
pq/
package-url: https://git.build2.org/cgit/packaging/postgresql/
email: pgsql-general@lists.postgresql.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcrypto >= 1.1.1
depends: libssl >= 1.1.1
builds: all relocatable
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

project = libpq

using version
using config
using dist
using test
using install

# PostgreSQL releases (for quite a long time) had the 3-component versions,
# where the first 2 components denoted a major version and the third one --
# the minor version. This has changed starting from version 10, with the major
# version represented by a single component. Minor releases are guaranteed to
# be backwards-compatible and contain only bug fixes. See also:
#
# https://www.postgresql.org/support/versioning/
#
# Note that the release version is not a semantic version and we will map it\
 to
# the standard version as <major>.<minor>.0.
#
# There is no document that describes libpq ABI versioning and compatibility
# rules, so everything that follows is implied from
# src/interfaces/libpq/Makefile.
#
# The library naming schema on Linux is libpq.so.<so_major>.<so_minor>
# (SO_MAJOR_VERSION and SO_MINOR_VERSION in the Makefile). So presumably
# so_major is incremented on backwards-incompatible ABI changes (it hasn't
# been for the several last major version releases). And so_minor is equal to
# the package major version.
#
if ($version.major == 14 && $version.minor == 1)
{
  abi_major = 5
  abi_minor = 14
}
else
  fail "increment the ABI version?"

\
root-build:
\
# file      : build/root.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

# We rely on this in macros/options deduction (see
# libpq/{buildfile,pg_config.h} for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
debian-to-downstream-version: /(.*)/\1.0/
fedora-to-downstream-version: /(.*)/\1.0/
location: postgresql/libpq-14.1.0+7.tar.gz
sha256sum: e000a6b1fdc5ae87a09e0fb47ae11165ba4a326b6ac98a7b6fda8ebdfae67f1c
:
name: libQt5Core
version: 5.15.10+1
project: Qt5
summary: Qt5 core library
license: LGPL-3.0-only
license: GPL-2.0-or-later
license: other: available source
description:
\
# libQt5Core

This package contains the Qt5 core library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.10
depends: * xxd >= 8.2.0
depends: libdouble-conversion ^3.2.0
depends: libicuuc >= 65.1.0
depends: libicui18n >= 65.1.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt5Core

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt5Core.debug ?= false

\
debian-name: qtbase5-dev
fedora-name: qt5-qtbase-devel
location: Qt5/libQt5Core-5.15.10+1.tar.gz
sha256sum: 15f331541119daaa44abbe6435a15623fec6fd08621edbb8cf12c6d12ae67f45
:
name: libQt5Core
version: 5.15.12+1
project: Qt5
summary: Qt5 core library
license: LGPL-3.0-only
license: GPL-2.0-or-later
license: other: available source
description:
\
# libQt5Core

This package contains the Qt5 core library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.12
depends: * xxd >= 8.2.0
depends: libdouble-conversion ^3.2.0
depends: libicuuc >= 65.1.0
depends: libicui18n >= 65.1.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt5Core

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt5Core.debug ?= false

\
debian-name: qtbase5-dev
fedora-name: qt5-qtbase-devel
location: Qt5/libQt5Core-5.15.12+1.tar.gz
sha256sum: 3e69380ad6386a0f3d69721d8e79738918a66f65fe91e872a8c5a1956db7f0d6
:
name: libQt5Gui
version: 5.15.10+1
project: Qt5
summary: Qt5 GUI library
license: LGPL-3.0-only
license: GPL-2.0-or-later
license: other: available source
description:
\
# libQt5Gui

This package contains the Qt5 GUI library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.10
depends: * Qt5Rcc == 5.15.10
depends: libQt5Core == 5.15.10
depends: libfreetype ^2.11.1
depends: libharfbuzz ^4.2.0
depends: libjpeg-turbo ^2.1.3
depends: libmd4c ^0.4.8
depends: libz ^1.2.1100
tests: libQt5GuiTests == 5.15.10
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt5Gui

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt5Gui.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class  == 'macos')

if ($build.mode != 'skeleton')
{
  # Path to libQt5Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt5Core%lib{Qt5CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt5Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt5Moc%exe{qt5moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt5Rcc%exe{qt5rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt5Gui.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS       \\
                 -DQT_NO_JAVA_STYLE_ITERATORS   \\
                 -DQT_NO_LINKED_LIST            \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    cc.poptions += -DUNICODE -D_UNICODE         \\
                   -DWIN32                      \\
                   -D_CRT_SECURE_NO_WARNINGS    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ and 3rdparty/ (which are at the root\
 level
  # and are shared between QtGui/ and QtGuiPlugins/).
  #
  hxx{mkspecs/* 3rdparty/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtGuiPlugins/
  {
    platforms/
    {
      cxx.poptions =+ "-I$out_root/QtGuiPlugins" "-I$src_root/QtGuiPlugins"

      # Poptions used in multiple scopes (but not for all objects).
      #
      platforms_poptions =                                              \\
        -DQT_ASCII_CAST_WARNINGS                                        \\
        -DQT_NO_CAST_TO_ASCII                                           \\
        -DQT_BUILDING_QT                                                \\
        -DQT_DISABLE_DEPRECATED_BEFORE=($windows ? 0x040800 : 0x050000) \\
        -DQT_DEPRECATED_WARNINGS_SINCE=0x060000                         \\
        -DQT_MOC_COMPAT                                                 \\
        -DQT_USE_QSTRINGBUILDER

      if ($cxx.class == 'gcc')
        cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden
    }

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }
} # $build.mode != 'skeleton'

\
debian-name: qtbase5-dev
fedora-name: qt5-qtbase-devel
location: Qt5/libQt5Gui-5.15.10+1.tar.gz
sha256sum: 52de102223de8f68f6635f5e9c31a9a628f687e387a608a944de9fedd2cbe83b
:
name: libQt5Gui
version: 5.15.12+1
project: Qt5
summary: Qt5 GUI library
license: LGPL-3.0-only
license: GPL-2.0-or-later
license: other: available source
description:
\
# libQt5Gui

This package contains the Qt5 GUI library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.12
depends: * Qt5Rcc == 5.15.12
depends: libQt5Core == 5.15.12
depends: libfreetype ^2.11.1
depends: libharfbuzz ^4.2.0
depends: libjpeg-turbo ^2.1.3
depends: libmd4c ^0.4.8
depends: libz ^1.2.1100
tests: libQt5GuiTests == 5.15.12
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt5Gui

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt5Gui.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class  == 'macos')

if ($build.mode != 'skeleton')
{
  # Path to libQt5Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt5Core%lib{Qt5CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt5Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt5Moc%exe{qt5moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt5Rcc%exe{qt5rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt5Gui.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS       \\
                 -DQT_NO_JAVA_STYLE_ITERATORS   \\
                 -DQT_NO_LINKED_LIST            \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    cc.poptions += -DUNICODE -D_UNICODE         \\
                   -DWIN32                      \\
                   -D_CRT_SECURE_NO_WARNINGS    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ and 3rdparty/ (which are at the root\
 level
  # and are shared between QtGui/ and QtGuiPlugins/).
  #
  hxx{mkspecs/* 3rdparty/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtGuiPlugins/
  {
    platforms/
    {
      cxx.poptions =+ "-I$out_root/QtGuiPlugins" "-I$src_root/QtGuiPlugins"

      # Poptions used in multiple scopes (but not for all objects).
      #
      platforms_poptions =                                              \\
        -DQT_ASCII_CAST_WARNINGS                                        \\
        -DQT_NO_CAST_TO_ASCII                                           \\
        -DQT_BUILDING_QT                                                \\
        -DQT_DISABLE_DEPRECATED_BEFORE=($windows ? 0x040800 : 0x050000) \\
        -DQT_DEPRECATED_WARNINGS_SINCE=0x060000                         \\
        -DQT_MOC_COMPAT                                                 \\
        -DQT_USE_QSTRINGBUILDER

      if ($cxx.class == 'gcc')
        cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden
    }

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }
} # $build.mode != 'skeleton'

\
debian-name: qtbase5-dev
fedora-name: qt5-qtbase-devel
location: Qt5/libQt5Gui-5.15.12+1.tar.gz
sha256sum: 8efd04ea49da648d0812180653f45c8e97759db4e640dd9c0d3f66c6b8683fec
:
name: libQt5GuiTests
version: 5.15.10+1
project: Qt5
summary: Tests for libQt5Gui
license: MIT
description:
\
# libQt5GuiTests

Tests for package libQt5Gui.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt5
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.10
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt5GuiTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt5/libQt5GuiTests-5.15.10+1.tar.gz
sha256sum: 6f34120b9abe107e2e4f17f3b3b09f8a2080f9ef1af13f0c107c04677076c47b
:
name: libQt5GuiTests
version: 5.15.12+1
project: Qt5
summary: Tests for libQt5Gui
license: MIT
description:
\
# libQt5GuiTests

Tests for package libQt5Gui.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt5
email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.12
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt5GuiTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt5/libQt5GuiTests-5.15.12+1.tar.gz
sha256sum: d80a8a81eb97fb77034d2c07a76586e22f327a211c17c48f270661f140212a74
:
name: libQt5Widgets
version: 5.15.10+1
project: Qt5
summary: Qt5 GUI widgets library
license: LGPL-3.0-only
license: GPL-2.0-or-later
license: other: available source
description:
\
# libQt5Widgets

This package contains the Qt5 Widgets library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.10
depends: * Qt5Rcc == 5.15.10
depends: * Qt5Uic == 5.15.10
depends: libQt5Core == 5.15.10
depends: libQt5Gui == 5.15.10
tests: libQt5WidgetsTests == 5.15.10
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt5Widgets

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt5Widgets.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class  == 'macos')

if ($build.mode != 'skeleton')
{
  # Path to libQt5Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt5Core%lib{Qt5CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt5Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt5Moc%exe{qt5moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt5Rcc%exe{qt5rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  # Define the QtWidgets user interface definition file type.
  #
  define ui: file
  ui{*}: extension = ui

  import! [metadata] uic = Qt5Uic%exe{qt5uic}

  # Rule to run uic on a QtWidgets user interface definition file (foo.ui ->
  # ui_foo.h).
  #
  hxx{~'/ui_(.*)/'}: ui{~'/.*\1/'} $uic
  {{
    $uic -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt5Widgets.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS       \\
                 -DQT_NO_JAVA_STYLE_ITERATORS   \\
                 -DQT_NO_LINKED_LIST            \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    cc.poptions += -DUNICODE -D_UNICODE         \\
                   -DWIN32                      \\
                   -D_CRT_SECURE_NO_WARNINGS    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ (which is at the root level and is\
 shared
  # between QtWidgets/ and QtWidgetsPlugins/).
  #
  hxx{mkspecs/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtWidgetsPlugins/
  {
    if ($cxx.class == 'gcc')
      cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden
  }
} # $build.mode != 'skeleton'

\
debian-name: qtbase5-dev
fedora-name: qt5-qtbase-devel
location: Qt5/libQt5Widgets-5.15.10+1.tar.gz
sha256sum: 40859e05ad8ee2c12f8fa424f2af65342e0e8d9d17ef0eede1efc37b126206cb
:
name: libQt5Widgets
version: 5.15.12+1
project: Qt5
summary: Qt5 GUI widgets library
license: LGPL-3.0-only
license: GPL-2.0-or-later
license: other: available source
description:
\
# libQt5Widgets

This package contains the Qt5 Widgets library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.12
depends: * Qt5Rcc == 5.15.12
depends: * Qt5Uic == 5.15.12
depends: libQt5Core == 5.15.12
depends: libQt5Gui == 5.15.12
tests: libQt5WidgetsTests == 5.15.12
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt5Widgets

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt5Widgets.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class  == 'macos')

if ($build.mode != 'skeleton')
{
  # Path to libQt5Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt5Core%lib{Qt5CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt5Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt5Moc%exe{qt5moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt5Rcc%exe{qt5rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  # Define the QtWidgets user interface definition file type.
  #
  define ui: file
  ui{*}: extension = ui

  import! [metadata] uic = Qt5Uic%exe{qt5uic}

  # Rule to run uic on a QtWidgets user interface definition file (foo.ui ->
  # ui_foo.h).
  #
  hxx{~'/ui_(.*)/'}: ui{~'/.*\1/'} $uic
  {{
    $uic -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt5Widgets.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS       \\
                 -DQT_NO_JAVA_STYLE_ITERATORS   \\
                 -DQT_NO_LINKED_LIST            \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    cc.poptions += -DUNICODE -D_UNICODE         \\
                   -DWIN32                      \\
                   -D_CRT_SECURE_NO_WARNINGS    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ (which is at the root level and is\
 shared
  # between QtWidgets/ and QtWidgetsPlugins/).
  #
  hxx{mkspecs/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtWidgetsPlugins/
  {
    if ($cxx.class == 'gcc')
      cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden
  }
} # $build.mode != 'skeleton'

\
debian-name: qtbase5-dev
fedora-name: qt5-qtbase-devel
location: Qt5/libQt5Widgets-5.15.12+1.tar.gz
sha256sum: ee555d7674def160ffedb5b9c4b0ef1f5f51f3cadc78b4981ab574fd68244ef9
:
name: libQt5WidgetsTests
version: 5.15.10+1
project: Qt5
summary: Tests for libQt5Widgets
license: MIT
description:
\
# libQt5WidgetsTests

Tests for package libQt5Widgets.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt5
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.10
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt5WidgetsTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt5/libQt5WidgetsTests-5.15.10+1.tar.gz
sha256sum: 204ee08a0932d6a70fd136c45232b8377baec7c58fb78c5332d9c84a740015e5
:
name: libQt5WidgetsTests
version: 5.15.12+1
project: Qt5
summary: Tests for libQt5Widgets
license: MIT
description:
\
# libQt5WidgetsTests

Tests for package libQt5Widgets.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt5
email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt5Moc == 5.15.12
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt5WidgetsTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt5/libQt5WidgetsTests-5.15.12+1.tar.gz
sha256sum: f277190b0aa25c6d0cc61f4ea0a84a87a0ce41d8015fd135e9af43b7d6fd8dce
:
name: libQt6Core
version: 6.4.3+1
project: Qt6
summary: Qt6 core library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Core

This package contains the Qt6 core library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.4.3
depends: * xxd >= 8.2.0
depends: libdouble-conversion ^3.2.0
depends: libb2 >= 0.98.1
depends: libicuuc >= 65.1.0
depends: libicui18n >= 65.1.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Core

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Core.debug ?= false

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Core-6.4.3+1.tar.gz
sha256sum: 1f1e9834a26bfefcc8d34991eedc383f2ed99c6c72d33a342676fd7fdd456c05
:
name: libQt6Core
version: 6.5.2
project: Qt6
summary: Qt6 core library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Core

This package contains the Qt6 core library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.5.2
depends: * xxd >= 8.2.0
depends: libdouble-conversion ^3.2.0
depends: libb2 >= 0.98.1
depends: libicuuc >= 65.1.0
depends: libicui18n >= 65.1.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Core

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Core.debug ?= false

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Core-6.5.2.tar.gz
sha256sum: 52983f1b244719f11951e30b0c9101a6617487f6b5057924b64e700b8ddd4b28
:
name: libQt6Core
version: 6.7.3
project: Qt6
summary: Qt6 core library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Core

This package contains the Qt6 core library.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.7.3
depends: * xxd >= 8.2.0
depends: libdouble-conversion ^3.2.0
depends: libb2 >= 0.98.1
depends: libicuuc >= 65.1.0
depends: libicui18n >= 65.1.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Core

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx
using cxx.predefs

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Core.debug ?= false

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Core-6.7.3.tar.gz
sha256sum: 645e458abf5425755a79c077c660ed28fc7a17ce839f088509d3fa52f01f91a5
:
name: libQt6Gui
version: 6.4.3+1
project: Qt6
summary: Qt6 GUI library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Gui

This package contains the Qt6 GUI library and the plugins it uses.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.4.3
depends: * Qt6Rcc == 6.4.3
depends: libQt6Core == 6.4.3
depends: libfreetype ^2.11.1
depends: libharfbuzz ^4.2.0
depends: libjpeg-turbo ^2.1.3
depends: libmd4c ^0.4.8
depends: libz ^1.2.1100
tests: libQt6GuiTests == 6.4.3
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Gui

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Gui.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class == 'macos')
unix    = ($cxx.target.class != 'windows')

if ($build.mode != 'skeleton')
{
  # Path to libQt6Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt6Core%lib{Qt6CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt6Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt6Moc%exe{qt6moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt6Rcc%exe{qt6rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt6Gui.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS                                    \
           \\
                 -DQT_DEPRECATED_WARNINGS_SINCE=0x070000                     \
           \\
                 -DQT_DISABLE_DEPRECATED_BEFORE=($windows ? 0x040800 :\
 0x050000)        \\
                 -DQT_LEAN_HEADERS=1                                         \
           \\
                 -DQT_NO_JAVA_STYLE_ITERATORS                                \
           \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    # Qt6 supports only Windows 10 and newer. Although the Qt headers do
    # define WINVER and _WIN32_WINNT (the minimum Windows version supported)
    # to 0x0A00 if they're undefined, mingw defines them to Windows 7 before
    # Qt can do it.
    #
    cc.poptions += -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00        \\
                   -DUNICODE -D_UNICODE                         \\
                   -DWIN32                                      \\
                   -D_CRT_SECURE_NO_WARNINGS                    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ and 3rdparty/ (which are at the root\
 level
  # and are shared between QtGui/ and QtGuiPlugins/).
  #
  hxx{mkspecs/* 3rdparty/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtGuiPlugins/
  {
    platforms/
    {
      cxx.poptions =+ "-I$out_root/QtGuiPlugins" "-I$src_root/QtGuiPlugins"

      # Poptions used in private libraries (that is, ones that are more like
      # regular Qt libraries (QtCore, QtGui) and less like plugin libraries).
      #
      privlib_poptions = -DQT_ASCII_CAST_WARNINGS       \\
                         -DQT_NO_CAST_TO_ASCII          \\
                         -DQT_BUILDING_QT               \\
                         -DQT_MOC_COMPAT                \\
                         -DQT_USE_QSTRINGBUILDER

      if ($cxx.class == 'gcc')
        cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden
    }

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }
} # $build.mode != 'skeleton'

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Gui-6.4.3+1.tar.gz
sha256sum: 5995039443b343bc55b19c59bad8d2a194061eac82882bdd25336d6211467e3a
:
name: libQt6Gui
version: 6.5.2
project: Qt6
summary: Qt6 GUI library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Gui

This package contains the Qt6 GUI library and the plugins it uses.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.5.2
depends: * Qt6Rcc == 6.5.2
depends: libQt6Core == 6.5.2
depends: libfreetype ^2.11.1
depends: libharfbuzz ^4.2.0
depends: libjpeg-turbo ^2.1.3
depends: libmd4c ^0.4.8
depends: libz ^1.2.1100
tests: libQt6GuiTests == 6.5.2
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Gui

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Gui.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class == 'macos')
unix    = ($cxx.target.class != 'windows')

if ($build.mode != 'skeleton')
{
  # Path to libQt6Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt6Core%lib{Qt6CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt6Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt6Moc%exe{qt6moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt6Rcc%exe{qt6rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt6Gui.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS                                    \
   \\
                 -DQT_WARN_DEPRECATED_UP_TO=0x070000                         \
   \\
                 -DQT_DISABLE_DEPRECATED_UP_TO=($windows ? 0x040800 :\
 0x050000) \\
                 -DQT_LEAN_HEADERS=1                                         \
   \\
                 -DQT_NO_JAVA_STYLE_ITERATORS                                \
   \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT                    \
   \\
                 -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH                  \
   \\
                 -DQT_NO_AS_CONST=1

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    # Qt6 supports only Windows 10 and newer. Although the Qt headers do
    # define WINVER and _WIN32_WINNT (the minimum Windows version supported)
    # to 0x0A00 if they're undefined, mingw defines them to Windows 7 before
    # Qt can do it.
    #
    cc.poptions += -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00        \\
                   -DUNICODE -D_UNICODE                         \\
                   -DWIN32                                      \\
                   -D_CRT_SECURE_NO_WARNINGS                    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ and 3rdparty/ (which are at the root\
 level
  # and are shared between QtGui/ and QtGuiPlugins/).
  #
  hxx{mkspecs/* 3rdparty/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtGuiPlugins/
  {
    platforms/
    {
      cxx.poptions =+ "-I$out_root/QtGuiPlugins" "-I$src_root/QtGuiPlugins"

      # Poptions used in private libraries (that is, ones that are more like
      # regular Qt libraries (QtCore, QtGui) and less like plugin libraries).
      #
      privlib_poptions = -DQT_ASCII_CAST_WARNINGS       \\
                         -DQT_NO_CAST_TO_ASCII          \\
                         -DQT_BUILDING_QT               \\
                         -DQT_MOC_COMPAT                \\
                         -DQT_USE_QSTRINGBUILDER

      if ($cxx.class == 'gcc')
        cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden
    }

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }
} # $build.mode != 'skeleton'

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Gui-6.5.2.tar.gz
sha256sum: 539b0b75123e99ae813e7a677c609f6affd3dd40b96c4e62433f263745246fcb
:
name: libQt6Gui
version: 6.7.3
project: Qt6
summary: Qt6 GUI library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Gui

This package contains the Qt6 GUI library and the plugins it uses.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.7.3
depends: * Qt6Rcc == 6.7.3
depends: libQt6Core == 6.7.3
depends: libfreetype ^2.11.1
depends: libharfbuzz ^4.2.0
depends: libjpeg-turbo ^2.1.3
depends: libmd4c ^0.4.8
depends: libz ^1.2.1100
tests: libQt6GuiTests == 6.7.3
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Gui

using version
using config
using test
using install
using dist

\
root-build:
\
using in

using c

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Gui.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class == 'macos')
unix    = ($cxx.target.class != 'windows')

if ($build.mode != 'skeleton')
{
  # Path to libQt6Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt6Core%lib{Qt6CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt6Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt6Moc%exe{qt6moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt6Rcc%exe{qt6rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt6Gui.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  # Don't install headers in mkspecs/ and 3rdparty/ (which are at the root\
 level
  # and are shared between QtGui/ and QtGuiPlugins/).
  #
  hxx{mkspecs/* 3rdparty/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtGuiPlugins/
  {
    platforms/
    {
      cxx.poptions =+ "-I$out_root/QtGuiPlugins" "-I$src_root/QtGuiPlugins"

      if ($cxx.class == 'gcc')
        cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden
    }

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }

  source build/common.build

} # $build.mode != 'skeleton'

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Gui-6.7.3.tar.gz
sha256sum: 39fe6b493cfcb0f8267463b75eb08050badab494f0d213ff94766ea6ea39807b
:
name: libQt6GuiTests
version: 6.4.3+1
project: Qt6
summary: Tests for libQt6Gui
license: MIT
description:
\
# libQt6GuiTests

Tests for package libQt6Gui.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt6
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.4.3
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt6GuiTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt6/libQt6GuiTests-6.4.3+1.tar.gz
sha256sum: 10109a3a52b90489cfaddecdfc045dd636d5ee09f76901678d504c1cf0fee75c
:
name: libQt6GuiTests
version: 6.5.2
project: Qt6
summary: Tests for libQt6Gui
license: MIT
description:
\
# libQt6GuiTests

Tests for package libQt6Gui.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt6
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.5.2
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt6GuiTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt6/libQt6GuiTests-6.5.2.tar.gz
sha256sum: 5262a7bbfbc81306efc4657a5cab4ed59f14f62a9fd5302e5886c31e53da1727
:
name: libQt6GuiTests
version: 6.7.3
project: Qt6
summary: Tests for libQt6Gui
license: MIT
description:
\
# libQt6GuiTests

Tests for package libQt6Gui.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt6
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.7.3
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt6GuiTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt6/libQt6GuiTests-6.7.3.tar.gz
sha256sum: ebfb1fdfb7a735ec8bb0c002df086c0ec70634811e6bf488d3f129fd0b96ea87
:
name: libQt6Widgets
version: 6.4.3+1
project: Qt6
summary: Qt6 GUI widgets library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Widgets

This package contains the Qt6 Widgets library and the plugins it uses.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.4.3
depends: * Qt6Rcc == 6.4.3
depends: * Qt6Uic == 6.4.3
depends: libQt6Core == 6.4.3
depends: libQt6Gui == 6.4.3
tests: libQt6WidgetsTests == 6.4.3
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Widgets

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Widgets.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class  == 'macos')

if ($build.mode != 'skeleton')
{
  # Path to libQt6Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt6Core%lib{Qt6CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt6Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt6Moc%exe{qt6moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt6Rcc%exe{qt6rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  # Define the QtWidgets user interface definition file type.
  #
  define ui: file
  ui{*}: extension = ui

  import! [metadata] uic = Qt6Uic%exe{qt6uic}

  # Rule to run uic on a QtWidgets user interface definition file (foo.ui ->
  # ui_foo.h).
  #
  hxx{~'/ui_(.*)/'}: ui{~'/.*\1/'} $uic
  {{
    $uic -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt6Widgets.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS                                    \
           \\
                 -DQT_DEPRECATED_WARNINGS_SINCE=0x070000                     \
           \\
                 -DQT_DISABLE_DEPRECATED_BEFORE=($windows ? 0x040800 :\
 0x050000)        \\
                 -DQT_LEAN_HEADERS=1                                         \
           \\
                 -DQT_NO_JAVA_STYLE_ITERATORS                                \
           \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    # Qt6 supports only Windows 10 and newer. Although the Qt headers do
    # define WINVER and _WIN32_WINNT (the minimum Windows version supported)
    # to 0x0A00 if they're undefined, mingw defines them to Windows 7 before
    # Qt can do it.
    #
    cc.poptions += -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00        \\
                   -DUNICODE -D_UNICODE                         \\
                   -DWIN32                                      \\
                   -D_CRT_SECURE_NO_WARNINGS                    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ (which is at the root level and is\
 shared
  # between QtWidgets/ and QtWidgetsPlugins/).
  #
  hxx{mkspecs/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtWidgetsPlugins/
  {
    if ($cxx.class == 'gcc')
      cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }
} # $build.mode != 'skeleton'

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Widgets-6.4.3+1.tar.gz
sha256sum: deb0a386f60e66885756c80adadb9969c0659abd9b5464f800880b20297711c4
:
name: libQt6Widgets
version: 6.5.2
project: Qt6
summary: Qt6 GUI widgets library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Widgets

This package contains the Qt6 Widgets library and the plugins it uses.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.5.2
depends: * Qt6Rcc == 6.5.2
depends: * Qt6Uic == 6.5.2
depends: libQt6Core == 6.5.2
depends: libQt6Gui == 6.5.2
tests: libQt6WidgetsTests == 6.5.2
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Widgets

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Widgets.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class  == 'macos')

if ($build.mode != 'skeleton')
{
  # Path to libQt6Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt6Core%lib{Qt6CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt6Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt6Moc%exe{qt6moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt6Rcc%exe{qt6rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  # Define the QtWidgets user interface definition file type.
  #
  define ui: file
  ui{*}: extension = ui

  import! [metadata] uic = Qt6Uic%exe{qt6uic}

  # Rule to run uic on a QtWidgets user interface definition file (foo.ui ->
  # ui_foo.h).
  #
  hxx{~'/ui_(.*)/'}: ui{~'/.*\1/'} $uic
  {{
    $uic -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt6Widgets.debug
    cc.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cc.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cc.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cc.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cc.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cc.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cc.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cc.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cc.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cc.coptions += -fno-keep-inline-dllexport
    }
  }

  cc.poptions += -DQT_DEPRECATED_WARNINGS                                    \
   \\
                 -DQT_WARN_DEPRECATED_UP_TO=0x070000                         \
   \\
                 -DQT_DISABLE_DEPRECATED_UP_TO=($windows ? 0x040800 :\
 0x050000) \\
                 -DQT_LEAN_HEADERS=1                                         \
   \\
                 -DQT_NO_JAVA_STYLE_ITERATORS                                \
   \\
                 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT                    \
   \\
                 -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH                  \
   \\
                 -DQT_NO_AS_CONST=1

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  if $windows
  {
    # Qt6 supports only Windows 10 and newer. Although the Qt headers do
    # define WINVER and _WIN32_WINNT (the minimum Windows version supported)
    # to 0x0A00 if they're undefined, mingw defines them to Windows 7 before
    # Qt can do it.
    #
    cc.poptions += -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00        \\
                   -DUNICODE -D_UNICODE                         \\
                   -DWIN32                                      \\
                   -D_CRT_SECURE_NO_WARNINGS                    \\
                   -D_USE_MATH_DEFINES

    if ($cxx.target.system == 'mingw32')
      cc.poptions += -DMINGW_HAS_SECURE_API=1
    else
      cc.poptions += -D_ENABLE_EXTENDED_ALIGNED_STORAGE
  }
  else
    cc.poptions += -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE

  # Don't install headers in mkspecs/ (which is at the root level and is\
 shared
  # between QtWidgets/ and QtWidgetsPlugins/).
  #
  hxx{mkspecs/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtWidgetsPlugins/
  {
    if ($cxx.class == 'gcc')
      cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }
} # $build.mode != 'skeleton'

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Widgets-6.5.2.tar.gz
sha256sum: 95a1b64d4a6abd0783debb9546e2be96b5f99db814b17175d481e8b69c0e9d2c
:
name: libQt6Widgets
version: 6.7.3
project: Qt6
summary: Qt6 GUI widgets library
license: LGPL-3.0-only
license: GPL-2.0-only
license: GPL-3.0-only
license: other: available source
description:
\
# libQt6Widgets

This package contains the Qt6 Widgets library and the plugins it uses.

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.7.3
depends: * Qt6Rcc == 6.7.3
depends: * Qt6Uic == 6.7.3
depends: libQt6Core == 6.7.3
depends: libQt6Gui == 6.7.3
tests: libQt6WidgetsTests == 6.7.3
builds: default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -freebsd; No X11 on CI.
builds: -wasm; Not supported.
bootstrap-build:
\
project = libQt6Widgets

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# If true, build without -DQT_NO_DEBUG.
#
config [bool] config.libQt6Widgets.debug ?= false

linux   = ($cxx.target.class == 'linux')
bsd     = ($cxx.target.class == 'bsd')
windows = ($cxx.target.class == 'windows')
macos   = ($cxx.target.class  == 'macos')

if ($build.mode != 'skeleton')
{
  # Path to libQt6Core's moc_predefs.h header.
  #
  import! [metadata, rule_hint=cxx.link] corelib = libQt6Core%lib{Qt6CorePriv\
ate}
  moc_predefs_path = $($corelib: libQt6Core.moc_predefs_path)

  # Define the .moc file type (C++ source file generated by moc from a C++
  # source file).
  #
  define moc: cxx
  moc{*}: extension = moc

  import! [metadata] moc = Qt6Moc%exe{qt6moc}

  # Rule to run moc on a header file (foo.h -> moc_foo.cpp).
  #
  # Use -f to override the path moc uses to #include the input file, which is
  # relative to the output directory, with just the name of the input file.
  #
  # Also add the exported search directories for Qt dependencies' headers (via
  # libul{*Meta}, declared as appropriate in the various buildfiles) because
  # some code will be skipped by MOC unless certain Qt features are enabled.
  #
  # Pass --no-notes to suppress "No relevant classes found. No output
  # generated" messages.
  #
  cxx{~'/moc_(.+)/'}: hxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    # Note: exclude libul{*Meta} from update during match not to mess up its
    #       for-install'ness.
    #
    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         -f $leaf($s) --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on a source file (foo.cpp -> foo.moc).
  #
  moc{~'/(.+)/'}: cxx{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Rule to run moc on an Objective-C++ source file (foo.mm -> foo.moc).
  #
  moc{~'/(.+)/'}: mm{~'/\1/'} libul{~'/.+Meta/'} $moc
  {{
    o = $path($>[0])
    t = $(o).t

    dep_incl = $cxx.lib_poptions($<[1])

    depdb hash $dep_incl

    depdb dyndep                                                \\
      --byproduct --drop-cycles --what=header --default-type=h  \\
      --update-exclude ($<[1])                                  \\
      --file $t

    s = $path($<[0])

    sys_incl = $regex.apply($cxx.sys_hdr_dirs, '(.+)', '-I\1')

    $moc --no-notes                                     \\
         --include $moc_predefs_path                    \\
         $cc.poptions $cxx.poptions $dep_incl $sys_incl \\
         --output-dep-file --dep-file-path $t -o $o $s
  }}

  # Define the Qt resource collection file type.
  #
  define qrc: file
  qrc{*}: extension = qrc

  import! [metadata] rcc = Qt6Rcc%exe{qt6rcc}

  # Rule to run rcc on a Qt resource collection file (foo.qrc -> qrc_foo.cpp).
  #
  # Extract the dependencies of the .qrc file on the resource files it
  # declares using rcc's --depfile option.
  #
  cxx{~'/qrc_(.*)/'}: qrc{~'/.*\1/'} $rcc
  {{
    o = $path($>[0])
    t = $(o).t

    depdb dyndep --byproduct --file $t

    $rcc -name $name($<[0]) --depfile $t -o $path($>[0]) $path($<[0])
  }}

  # Define the QtWidgets user interface definition file type.
  #
  define ui: file
  ui{*}: extension = ui

  import! [metadata] uic = Qt6Uic%exe{qt6uic}

  # Rule to run uic on a QtWidgets user interface definition file (foo.ui ->
  # ui_foo.h).
  #
  hxx{~'/ui_(.*)/'}: ui{~'/.*\1/'} $uic
  {{
    $uic -o $path($>[0]) $path($<[0])
  }}

  if! $config.libQt6Widgets.debug
    cxx.poptions += -DQT_NO_DEBUG

  # Every directory under mkspecs/ contains a unique `qplatformdefs.h`.
  #
  # Note that Mac OS with GCC is not supported by upstream (see README-DEV for
  # details).
  #
  switch $cxx.target.class, $cxx.id, $cxx.target.system
  {
    case 'linux', 'gcc'
      cxx.poptions =+ "-I$src_root/mkspecs/linux-g++"
    case 'linux', 'clang'
      cxx.poptions =+ "-I$src_root/mkspecs/linux-clang"
    case 'macos', 'clang-apple'
      cxx.poptions =+ "-I$src_root/mkspecs/macx-clang"
    case 'bsd', 'clang', 'freebsd'
      cxx.poptions =+ "-I$src_root/mkspecs/freebsd-clang"
    case 'bsd', 'gcc', 'openbsd'
      cxx.poptions =+ "-I$src_root/mkspecs/openbsd-g++"
    case 'bsd', 'gcc', 'netbsd'
      cxx.poptions =+ "-I$src_root/mkspecs/netbsd-g++"
    case 'windows', 'msvc'
      cxx.poptions =+ "-I$src_root/mkspecs/win32-msvc"
    case 'windows', 'msvc-clang' | 'clang'
      cxx.poptions =+ "-I$src_root/mkspecs/win32-clang-msvc"
    case 'windows', 'gcc', 'mingw32'
    {
      cxx.poptions =+ "-I$src_root/mkspecs/win32-g++"
      cxx.coptions += -fno-keep-inline-dllexport
    }
  }

  # Disable exceptions.
  #
  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += -fno-exceptions
    }
    case 'msvc'
    {
      cxx.poptions += -DQT_NO_EXCEPTIONS
      cxx.coptions += /EHs- /EHc-
    }
  }

  # Don't install headers in mkspecs/ (which is at the root level and is\
 shared
  # between QtWidgets/ and QtWidgetsPlugins/).
  #
  hxx{mkspecs/*}: install = false

  # Common options, etc., for all the plugins.
  #
  QtWidgetsPlugins/
  {
    if ($cxx.class == 'gcc')
      cxx.coptions += -fvisibility=hidden -fvisibility-inlines-hidden

    # Don't install any plugin headers (for static linking the API is\
 presumably
    # declared by the Qt plugin infrastructure).
    #
    hxx{*}: install = false
  }

  source build/common.build

} # $build.mode != 'skeleton'

\
debian-name: qt6-base-dev
fedora-name: qt6-qtbase-devel
location: Qt6/libQt6Widgets-6.7.3.tar.gz
sha256sum: b1f28b48eae84bbc4fd3e370ff59924e9cfbf1045604da8bb3dc4eb40f7adaba
:
name: libQt6WidgetsTests
version: 6.4.3+1
project: Qt6
summary: Tests for libQt6Widgets
license: MIT
description:
\
# libQt6WidgetsTests

Tests for package libQt6Widgets.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt6
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.4.3
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt6WidgetsTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt6/libQt6WidgetsTests-6.4.3+1.tar.gz
sha256sum: f714bc416bfd93e66d52b1b6d52b671fe18083702e8a2d31c2aaa3383900c7a2
:
name: libQt6WidgetsTests
version: 6.5.2
project: Qt6
summary: Tests for libQt6Widgets
license: MIT
description:
\
# libQt6WidgetsTests

Tests for package libQt6Widgets.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt6
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.5.2
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt6WidgetsTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt6/libQt6WidgetsTests-6.5.2.tar.gz
sha256sum: 1c4d0bd3495f21f2f90fe2346dcaf6aef428d88060f3ef7d062ac8d2ba20212c
:
name: libQt6WidgetsTests
version: 6.7.3
project: Qt6
summary: Tests for libQt6Widgets
license: MIT
description:
\
# libQt6WidgetsTests

Tests for package libQt6Widgets.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/Qt6
email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: * Qt6Moc == 6.7.3
builds: default
builds: -( +macos &gcc ); See README-DEV.
bootstrap-build:
\
project = libQt6WidgetsTests

using version
using config
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Qt6/libQt6WidgetsTests-6.7.3.tar.gz
sha256sum: 2325e7e292da17a056efc0a0880a00ee4e61ed1458be7b06026074c9bdedc3d2
:
name: libsfml-graphics
version: 2.5.1+2
project: sfml
summary: The SFML Graphics module.
license: Zlib
topics: C++, SFML
description:
\
[![SFML logo](https://www.sfml-dev.org/images/logo.png)](https://www.sfml-dev\
.org)

# sfml-graphics build2 package

[![cppget](https://img.shields.io/website/https/cppget.org/libsfml-graphics.s\
vg?down_message=offline&label=cppget.org&up_color=blue&up_message=online)](ht\
tps://cppget.org/libsfml-graphics)

[SFML](https://www.sfml-dev.org) is a simple, fast, cross-platform and\
 object-oriented multimedia API. It provides access to windowing, graphics,\
 audio and network. It is written in C++, and has bindings for various\
 languages such as C, .Net, Ruby, Python.

This project builds and defines the build2 package for the `Graphics` module\
 of SFML.

## Usage

Add `sfml-graphics` to your build2 `manifest` file.

```
depends: libsfml-graphics ^2.5.1
```

You can specify your target platform directly or let build2 try to\
 auto-detect your system:

```
config.libsfml_graphics.platform = # SFML platform identifier
```

Supported platform identifiers are:

```
linux
macos
windows
freebsd
openbsd
netbsd
android
ios
```

You can determine if you want to use OpenGLES (default is `false`).

```
config.libsfml_graphics.use_opengles = # true or false
```

## Dependencies

This module requires certain

On Unix based system these are:

* `libx11-dev`
* `libxrandr-dev`
* `libudev-dev`
* `libegl-dev` and `libgles-dev` if OpenGLES is activates

\
description-type: text/markdown;variant=GFM
url: https://www.sfml-dev.org
doc-url: https://www.sfml-dev.org/documentation/2.5.1/group__graphics.php
src-url: https://github.com/SFML
package-url: https://github.com/build2-packaging/sfml
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsfml-window == 2.5.1
depends: libfreetype ^2.11.0
depends: stb_image ^2.26.0
depends: stb_image_write ^1.15.0
builds: default
bootstrap-build:
\
project = libsfml-graphics

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = inl
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

# auto detect SFML platform and store in sfml_platform
source build/sfml_platform_config.build

config [string] config.libsfml_graphics.platform ?= $sfml_platform
config [bool] config.libsfml_graphics.use_opengles ?= false


# set sfml_platform to configured value and do validation check
sfml_platform = $config.libsfml_graphics.platform
source build/sfml_platform_check.build

\
sfml_platform_check-build:
\
# check if the sfml platform has a valid value
switch $sfml_platform
{
    case 'windows'
    case 'linux'
    case 'macos'
    case 'freebsd'
    case 'openbsd'
    case 'android'
    case 'ios'
    {
        # do nothing, these are all valid
    }
    default
        fail "Invalid SFML platform '$sfml_platform'"

}


\
sfml_platform_config-build:
\
# supported values are currently:
#
# linux, macos, windows, freebsd, openbsd
# netbsd, android, ios
sfml_platform =

# detect SFML platform based on the target class
switch $cxx.target.class
{
    case 'windows'
        sfml_platform = 'windows'
    case 'linux'
        sfml_platform = 'linux'
    case 'macos'
        sfml_platform = 'macos'
    case 'bsd'
        sfml_platform = 'freebsd'
}

if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS

\
location: sfml/libsfml-graphics-2.5.1+2.tar.gz
sha256sum: 62187c4395b1852ae1be1c5fd9cae7b76bdbb6df1716e8dcc8d01ab018642bed
:
name: libsfml-network
version: 2.5.1+2
project: sfml
summary: The SFML Network module.
license: Zlib
topics: C++, SFML
description:
\
[![SFML logo](https://www.sfml-dev.org/images/logo.png)](https://www.sfml-dev\
.org)

# sfml-network build2 package

[![cppget](https://img.shields.io/website/https/cppget.org/libsfml-network.sv\
g?down_message=offline&label=cppget.org&up_color=blue&up_message=online)](htt\
ps://cppget.org/libsfml-network)

[SFML](https://www.sfml-dev.org) is a simple, fast, cross-platform and\
 object-oriented multimedia API. It provides access to windowing, graphics,\
 audio and network. It is written in C++, and has bindings for various\
 languages such as C, .Net, Ruby, Python.

This project builds and defines the build2 package for the `Network` module\
 of SFML.

## Usage

Add `sfml-network` to your build2 `manifest` file.

```
depends: libsfml-network ^2.5.1
```

You can specify your target platform directly or let build2 try to\
 auto-detect your system:

```
config.libsfml_network.platform = # SFML platform identifier
```

Supported platform identifiers are:

```
linux
macos
windows
freebsd
openbsd
netbsd
android
ios
```

You can determine if you want to use OpenGLES (default is `false`).

```
config.libsfml_network.use_opengles = # true or false
```

## Dependencies

This module requires certain

On Unix based system these are:

* `libx11-dev`
* `libxrandr-dev`
* `libudev-dev`
* `libegl-dev` and `libgles-dev` if OpenGLES is activates

\
description-type: text/markdown;variant=GFM
url: https://www.sfml-dev.org
doc-url: https://www.sfml-dev.org/documentation/2.5.1/group__network.php
src-url: https://github.com/SFML
package-url: https://github.com/build2-packaging/sfml
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsfml-system == 2.5.1
builds: default
bootstrap-build:
\
project = libsfml-network

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = inl

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

# auto detect SFML platform and store in sfml_platform
source build/sfml_platform_config.build

config [string] config.libsfml_network.platform ?= $sfml_platform

# set sfml_platform to configured value and do validation check
sfml_platform = $config.libsfml_network.platform
source build/sfml_platform_check.build

\
sfml_platform_check-build:
\
# check if the sfml platform has a valid value
switch $sfml_platform
{
    case 'windows'
    case 'linux'
    case 'macos'
    case 'freebsd'
    case 'openbsd'
    case 'android'
    case 'ios'
    {
        # do nothing, these are all valid
    }
    default
        fail "Invalid SFML platform '$sfml_platform'"

}


\
sfml_platform_config-build:
\
# supported values are currently:
#
# linux, macos, windows, freebsd, openbsd
# netbsd, android, ios
sfml_platform =

# detect SFML platform based on the target class
switch $cxx.target.class
{
    case 'windows'
        sfml_platform = 'windows'
    case 'linux'
        sfml_platform = 'linux'
    case 'macos'
        sfml_platform = 'macos'
    case 'bsd'
        sfml_platform = 'freebsd'
}

if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS

\
location: sfml/libsfml-network-2.5.1+2.tar.gz
sha256sum: 07a4d46f7b7f8b7d7ea5b3f90a29b63fe509b1caf14492a4dc0a024761b908aa
:
name: libsfml-system
version: 2.5.1+2
project: sfml
summary: The SFML System module.
license: Zlib
topics: C++, SFML
description:
\
[![SFML logo](https://www.sfml-dev.org/images/logo.png)](https://www.sfml-dev\
.org)

# sfml-system build2 package

[![cppget](https://img.shields.io/website/https/cppget.org/libsfml-system.svg\
?down_message=offline&label=cppget.org&up_color=blue&up_message=online)](http\
s://cppget.org/libsfml-system)

[SFML](https://www.sfml-dev.org) is a simple, fast, cross-platform and\
 object-oriented multimedia API. It provides access to windowing, graphics,\
 audio and network. It is written in C++, and has bindings for various\
 languages such as C, .Net, Ruby, Python.

This project builds and defines the build2 package for the `System` module of\
 SFML.

## Usage

Add `sfml-system` to your build2 `manifest` file.

```
depends: libsfml-system ^2.5.1
```

You can specify your target platform directly or let build2 try to\
 auto-detect your system:

```
config.libsfml_system.platform = # SFML platform identifier
```

Supported platform identifiers are:

```
linux
macos
windows
freebsd
openbsd
netbsd
android
ios
```

\
description-type: text/markdown;variant=GFM
url: https://www.sfml-dev.org
doc-url: https://www.sfml-dev.org/documentation/2.5.1/group__system.php
src-url: https://github.com/SFML
package-url: https://github.com/build2-packaging/sfml
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: default
bootstrap-build:
\
project = libsfml-system

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = inl
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

# auto detect SFML platform and store in sfml_platform
source build/sfml_platform_config.build

config [string] config.libsfml_system.platform ?= $sfml_platform

# set sfml_platform to configured value and do validation check
sfml_platform = $config.libsfml_system.platform
source build/sfml_platform_check.build

\
sfml_platform_check-build:
\
# check if the sfml platform has a valid value
switch $sfml_platform
{
    case 'windows'
    case 'linux'
    case 'macos'
    case 'freebsd'
    case 'openbsd'
    case 'android'
    case 'ios'
    {
        # do nothing, these are all valid
    }
    default
        fail "Invalid SFML platform '$sfml_platform'"

}


\
sfml_platform_config-build:
\
# supported values are currently:
#
# linux, macos, windows, freebsd, openbsd
# netbsd, android, ios
sfml_platform =

# detect SFML platform based on the target class
switch $cxx.target.class
{
    case 'windows'
        sfml_platform = 'windows'
    case 'linux'
        sfml_platform = 'linux'
    case 'macos'
        sfml_platform = 'macos'
    case 'bsd'
        sfml_platform = 'freebsd'
}

if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS

\
location: sfml/libsfml-system-2.5.1+2.tar.gz
sha256sum: e116f6e598c0a2576a683c76877407ae01dc9e8ed95ece25e391025bcf462cd6
:
name: libsfml-window
version: 2.5.1+2
project: sfml
summary: The SFML Window module.
license: Zlib
topics: C++, SFML
description:
\
[![SFML logo](https://www.sfml-dev.org/images/logo.png)](https://www.sfml-dev\
.org)

# sfml-window build2 package

[![cppget](https://img.shields.io/website/https/cppget.org/libsfml-window.svg\
?down_message=offline&label=cppget.org&up_color=blue&up_message=online)](http\
s://cppget.org/libsfml-window)

[SFML](https://www.sfml-dev.org) is a simple, fast, cross-platform and\
 object-oriented multimedia API. It provides access to windowing, graphics,\
 audio and network. It is written in C++, and has bindings for various\
 languages such as C, .Net, Ruby, Python.

This project builds and defines the build2 package for the `Window` module of\
 SFML.

## Usage

Add `sfml-window` to your build2 `manifest` file.

```
depends: libsfml-window ^2.5.1
```

You can specify your target platform directly or let build2 try to\
 auto-detect your system:

```
config.libsfml_window.platform = # SFML platform identifier
```

Supported platform identifiers are:

```
linux
macos
windows
freebsd
openbsd
netbsd
android
ios
```

You can determine if you want to use OpenGLES (default is `false`).

```
config.libsfml_window.use_opengles = # true or false
```

## Dependencies

This module requires certain

On Unix based system these are:

* `libx11-dev`
* `libxrandr-dev`
* `libudev-dev`
* `libegl-dev` and `libgles-dev` if OpenGLES is activates

\
description-type: text/markdown;variant=GFM
url: https://www.sfml-dev.org
doc-url: https://www.sfml-dev.org/documentation/2.5.1/group__window.php
src-url: https://github.com/SFML
package-url: https://github.com/build2-packaging/sfml
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsfml-system == 2.5.1
builds: default
bootstrap-build:
\
project = libsfml-window

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
cxx{*}: extension = cpp
ixx{*}: extension = inl

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

# auto detect SFML platform and store in sfml_platform
source build/sfml_platform_config.build

config [string] config.libsfml_window.platform ?= $sfml_platform
config [bool] config.libsfml_window.use_opengles ?= false

# set sfml_platform to configured value and do validation check
sfml_platform = $config.libsfml_window.platform
source build/sfml_platform_check.build

\
sfml_platform_check-build:
\
# check if the sfml platform has a valid value
switch $sfml_platform
{
    case 'windows'
    case 'linux'
    case 'macos'
    case 'freebsd'
    case 'openbsd'
    case 'android'
    case 'ios'
    {
        # do nothing, these are all valid
    }
    default
        fail "Invalid SFML platform '$sfml_platform'"

}


\
sfml_platform_config-build:
\
# supported values are currently:
#
# linux, macos, windows, freebsd, openbsd
# netbsd, android, ios
sfml_platform =

# detect SFML platform based on the target class
switch $cxx.target.class
{
    case 'windows'
        sfml_platform = 'windows'
    case 'linux'
        sfml_platform = 'linux'
    case 'macos'
        sfml_platform = 'macos'
    case 'bsd'
        sfml_platform = 'freebsd'
}

if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS

\
location: sfml/libsfml-window-2.5.1+2.tar.gz
sha256sum: 6671cab1edaa7bb54208f46a31d0e82ca4ef61e54ef4b10f08a245a7ef76a5e9
:
name: libsodium
version: 1.0.18+12
summary: A modern, portable, easy to use crypto library.
license: ISC
url: https://doc.libsodium.org/
doc-url: https://libsodium.gitbook.io/doc/
src-url: https://github.com/jedisct1/libsodium
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = libsodium

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

h{*}: c.importable = true

config [bool] config.libsodium.avx2 ?= false
config [bool] config.libsodium.rdrnd ?= false

\
location: libsodium/libsodium-1.0.18+12.tar.gz
sha256sum: 05ba3d0e0e11bdde23452d01b6a78ce417a81c3fde795cc1109aeaa6163d6d87
:
name: libsqlite3
version: 3.18.2+7
project: sqlite
summary: SQL database engine as an in-process C library
license: public domain
keywords: sql database embeddable serverless self-contained
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/c3ref/intro.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/libsqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.9.0
depends: * bpkg >= 0.9.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = libsqlite3

# SQLite releases usually have 3-component versions but once in a while they
# will make a 4-component release for what appears to be important bug fixes
# only. So instead of dragging the fourth component around (and confusing a
# lot of people in the process) we will always have three components and will
# handle an occasional bugfix release with a revision.
#
# See also: https://www.sqlite.org/versionnumbers.html
#
# The SQLite documentation says that as long as the major version stays the
# same, then it is backwards-compatible. And since we have the major version
# already embedded into the library name, it doesn't make much sense to repeat
# it.
#
# Note, however, that the binary-compatible API doesn't mean all the builds of
# SQLite are binary-compatible since they can be built with different sets of
# enabled/disabled functionality. In fact, one easy way to break backwards-
# compatibility is to disable some feature that was previously enabled.
#
# So what we seem to need is not an ABI version but an ABI id that identifies
# a specific set of features. And this will not be easy/possible if we want
# to use platform-native versioning (e.g., libsqlite3.so.<num> on Linux). The
# only way to make this work would be to "reserve" some range for build2-based
# builds (e.g., 1000-2000 so that we will have libsqlite3.so.1000; that sure
# looks weird).
#
# Another alternative is to use platform-neutral versioning by embedding the
# id into the library name, similar to '3'. This is probably better since
# there is no "newer" semantics here. While ideally we should use something
# like -build2-0 (i.e., "build2 build, id 0"), that will look rather ugly. So
# we will use just the number but start with -1 in order not to clash with .0
# used by the autotools build (which becomes -0 on, e.g., Windows; I don't
# believe it will ever be incremented though).
#
abi_major = 1

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.class == 'msvc')
{
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS
  c.coptions += /wd4251 /wd4275 /wd4800
}

\
location: sqlite/libsqlite3-3.18.2+7.tar.gz
sha256sum: c2931e8d12f3d344c5a11754f2ef5e15c005bb5abe7b2f16438a046e8d3da118
:
name: libsqlite3
version: 3.27.2+2
project: sqlite
summary: SQL database engine as an in-process C library
license: blessing; SQLite Blessing.
topics: C, SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/c3ref/intro.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/libsqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = libsqlite3

# SQLite releases usually have 3-component versions but once in a while they
# will make a 4-component release for what appears to be important bug fixes
# only. So instead of dragging the fourth component around (and confusing a
# lot of people in the process) we will always have three components and will
# handle an occasional bugfix release with a revision.
#
# See also: https://www.sqlite.org/versionnumbers.html
#
# The SQLite documentation says that as long as the major version stays the
# same, then it is backwards-compatible. And since we have the major version
# already embedded into the library name, it doesn't make much sense to repeat
# it.
#
# Note, however, that the binary-compatible API doesn't mean all the builds of
# SQLite are binary-compatible since they can be built with different sets of
# enabled/disabled functionality. In fact, one easy way to break backwards-
# compatibility is to disable some feature that was previously enabled.
#
# So what we seem to need is not an ABI version but an ABI id that identifies
# a specific set of features. And this will not be easy/possible if we want
# to use platform-native versioning (e.g., libsqlite3.so.<num> on Linux). The
# only way to make this work would be to "reserve" some range for build2-based
# builds (e.g., 1000-2000 so that we will have libsqlite3.so.1000; that sure
# looks weird).
#
# Another alternative is to use platform-neutral versioning by embedding the
# id into the library name, similar to '3'. This is probably better since
# there is no "newer" semantics here. While ideally we should use something
# like -build2-0 (i.e., "build2 build, id 0"), that will look rather ugly. So
# we will use just the number but start with -1 in order not to clash with .0
# used by the autotools build (which becomes -0 on, e.g., Windows; I don't
# believe it will ever be incremented though).
#
abi_major = 1

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: sqlite/libsqlite3-3.27.2+2.tar.gz
sha256sum: 49dd20ae3494cb8f01e649fd2d7206def93d43cdfc7572a9be30657351357613
:
name: libsqlite3
version: 3.35.5
project: sqlite
summary: SQL database engine as an in-process C library
license: blessing; SQLite Blessing.
topics: C, SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/c3ref/intro.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/libsqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = libsqlite3

# SQLite releases usually have 3-component versions but once in a while they
# will make a 4-component release for what appears to be important bug fixes
# only. So instead of dragging the fourth component around (and confusing a
# lot of people in the process) we will always have three components and will
# handle an occasional bugfix release with a revision.
#
# See also: https://www.sqlite.org/versionnumbers.html
#
# The SQLite documentation says that as long as the major version stays the
# same, then it is backwards-compatible. And since we have the major version
# already embedded into the library name, it doesn't make much sense to repeat
# it.
#
# Note, however, that the binary-compatible API doesn't mean all the builds of
# SQLite are binary-compatible since they can be built with different sets of
# enabled/disabled functionality. In fact, one easy way to break backwards-
# compatibility is to disable some feature that was previously enabled.
#
# So what we seem to need is not an ABI version but an ABI id that identifies
# a specific set of features. And this will not be easy/possible if we want
# to use platform-native versioning (e.g., libsqlite3.so.<num> on Linux). The
# only way to make this work would be to "reserve" some range for build2-based
# builds (e.g., 1000-2000 so that we will have libsqlite3.so.1000; that sure
# looks weird).
#
# Another alternative is to use platform-neutral versioning by embedding the
# id into the library name, similar to '3'. This is probably better since
# there is no "newer" semantics here. While ideally we should use something
# like -build2-0 (i.e., "build2 build, id 0"), that will look rather ugly. So
# we will use just the number but start with -1 in order not to clash with .0
# used by the autotools build (which becomes -0 on, e.g., Windows; I don't
# believe it will ever be incremented though).
#
abi_major = 1

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: sqlite/libsqlite3-3.35.5.tar.gz
sha256sum: d40810bdfd537f6579ced2b1e17cabef5ed05f6738961757c58600509c702093
:
name: libsqlite3
version: 3.39.4+1
project: sqlite
summary: SQL database engine as an in-process C library
license: blessing; SQLite Blessing.
topics: C, SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/c3ref/intro.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/libsqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = libsqlite3

# SQLite releases usually have 3-component versions but once in a while they
# will make a 4-component release for what appears to be important bug fixes
# only. So instead of dragging the fourth component around (and confusing a
# lot of people in the process) we will always have three components and will
# handle an occasional bugfix release with a revision.
#
# See also: https://www.sqlite.org/versionnumbers.html
#
# The SQLite documentation says that as long as the major version stays the
# same, then it is backwards-compatible. And since we have the major version
# already embedded into the library name, it doesn't make much sense to repeat
# it.
#
# Note, however, that the binary-compatible API doesn't mean all the builds of
# SQLite are binary-compatible since they can be built with different sets of
# enabled/disabled functionality. In fact, one easy way to break backwards-
# compatibility is to disable some feature that was previously enabled.
#
# So what we seem to need is not an ABI version but an ABI id that identifies
# a specific set of features. And this will not be easy/possible if we want
# to use platform-native versioning (e.g., libsqlite3.so.<num> on Linux). The
# only way to make this work would be to "reserve" some range for build2-based
# builds (e.g., 1000-2000 so that we will have libsqlite3.so.1000; that sure
# looks weird).
#
# Another alternative is to use platform-neutral versioning by embedding the
# id into the library name, similar to '3'. This is probably better since
# there is no "newer" semantics here. While ideally we should use something
# like -build2-0 (i.e., "build2 build, id 0"), that will look rather ugly. So
# we will use just the number but start with -1 in order not to clash with .0
# used by the autotools build (which becomes -0 on, e.g., Windows; I don't
# believe it will ever be incremented though).
#
abi_major = 1

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: sqlite/libsqlite3-3.39.4+1.tar.gz
sha256sum: 617e5ad5e15ec7ae034675c6b6d8a7744559a63138ad368ab1223bdcaf6434f9
:
name: libsqlite3
version: 3.45.3+2
project: sqlite
summary: SQL database engine as an in-process C library
license: blessing; SQLite Blessing.
topics: C, SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/c3ref/intro.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/libsqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = libsqlite3

# SQLite releases usually have 3-component versions but once in a while they
# will make a 4-component release for what appears to be important bug fixes
# only. So instead of dragging the fourth component around (and confusing a
# lot of people in the process) we will always have three components and will
# handle an occasional bugfix release with a revision.
#
# See also: https://www.sqlite.org/versionnumbers.html
#
# The SQLite documentation says that as long as the major version stays the
# same, then it is backwards-compatible. And since we have the major version
# already embedded into the library name, it doesn't make much sense to repeat
# it.
#
# Note, however, that the binary-compatible API doesn't mean all the builds of
# SQLite are binary-compatible since they can be built with different sets of
# enabled/disabled functionality. In fact, one easy way to break backwards-
# compatibility is to disable some feature that was previously enabled.
#
# So what we seem to need is not an ABI version but an ABI id that identifies
# a specific set of features. And this will not be easy/possible if we want
# to use platform-native versioning (e.g., libsqlite3.so.<num> on Linux). The
# only way to make this work would be to "reserve" some range for build2-based
# builds (e.g., 1000-2000 so that we will have libsqlite3.so.1000; that sure
# looks weird).
#
# Another alternative is to use platform-neutral versioning by embedding the
# id into the library name, similar to '3'. This is probably better since
# there is no "newer" semantics here. While ideally we should use something
# like -build2-0 (i.e., "build2 build, id 0"), that will look rather ugly. So
# we will use just the number but start with -1 in order not to clash with .0
# used by the autotools build (which becomes -0 on, e.g., Windows; I don't
# believe it will ever be incremented though).
#
abi_major = 1

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: sqlite/libsqlite3-3.45.3+2.tar.gz
sha256sum: 5555accbbd0ad89e5c91ed08e12c987781169cdaf186e7e745afc0745b9012be
:
name: libsqlite3
version: 3.51.2
project: sqlite
summary: SQL database engine as an in-process C library
license: blessing; SQLite Blessing.
topics: C, SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/c3ref/intro.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/libsqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = libsqlite3

# SQLite releases usually have 3-component versions but once in a while they
# will make a 4-component release for what appears to be important bug fixes
# only. So instead of dragging the fourth component around (and confusing a
# lot of people in the process) we will always have three components and will
# handle an occasional bugfix release with a revision.
#
# See also: https://www.sqlite.org/versionnumbers.html
#
# The SQLite documentation says that as long as the major version stays the
# same, then it is backwards-compatible. And since we have the major version
# already embedded into the library name, it doesn't make much sense to repeat
# it.
#
# Note, however, that the binary-compatible API doesn't mean all the builds of
# SQLite are binary-compatible since they can be built with different sets of
# enabled/disabled functionality. In fact, one easy way to break backwards-
# compatibility is to disable some feature that was previously enabled.
#
# So what we seem to need is not an ABI version but an ABI id that identifies
# a specific set of features. And this will not be easy/possible if we want
# to use platform-native versioning (e.g., libsqlite3.so.<num> on Linux). The
# only way to make this work would be to "reserve" some range for build2-based
# builds (e.g., 1000-2000 so that we will have libsqlite3.so.1000; that sure
# looks weird).
#
# Another alternative is to use platform-neutral versioning by embedding the
# id into the library name, similar to '3'. This is probably better since
# there is no "newer" semantics here. While ideally we should use something
# like -build2-0 (i.e., "build2 build, id 0"), that will look rather ugly. So
# we will use just the number but start with -1 in order not to clash with .0
# used by the autotools build (which becomes -0 on, e.g., Windows; I don't
# believe it will ever be incremented though).
#
abi_major = 1

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: sqlite/libsqlite3-3.51.2.tar.gz
sha256sum: b65a940e51a0c2b0b9e30eb2372e5fab12f74b6b13b236b61de4083cffe2817e
:
name: libsqlite3
version: 3.51.3+1
project: sqlite
summary: SQL database engine as an in-process C library
license: blessing; SQLite Blessing.
topics: C, SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/c3ref/intro.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/libsqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = libsqlite3

# SQLite releases usually have 3-component versions but once in a while they
# will make a 4-component release for what appears to be important bug fixes
# only. So instead of dragging the fourth component around (and confusing a
# lot of people in the process) we will always have three components and will
# handle an occasional bugfix release with a revision.
#
# See also: https://www.sqlite.org/versionnumbers.html
#
# The SQLite documentation says that as long as the major version stays the
# same, then it is backwards-compatible. And since we have the major version
# already embedded into the library name, it doesn't make much sense to repeat
# it.
#
# Note, however, that the binary-compatible API doesn't mean all the builds of
# SQLite are binary-compatible since they can be built with different sets of
# enabled/disabled functionality. In fact, one easy way to break backwards-
# compatibility is to disable some feature that was previously enabled.
#
# So what we seem to need is not an ABI version but an ABI id that identifies
# a specific set of features. And this will not be easy/possible if we want
# to use platform-native versioning (e.g., libsqlite3.so.<num> on Linux). The
# only way to make this work would be to "reserve" some range for build2-based
# builds (e.g., 1000-2000 so that we will have libsqlite3.so.1000; that sure
# looks weird).
#
# Another alternative is to use platform-neutral versioning by embedding the
# id into the library name, similar to '3'. This is probably better since
# there is no "newer" semantics here. While ideally we should use something
# like -build2-0 (i.e., "build2 build, id 0"), that will look rather ugly. So
# we will use just the number but start with -1 in order not to clash with .0
# used by the autotools build (which becomes -0 on, e.g., Windows; I don't
# believe it will ever be incremented though).
#
abi_major = 1

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: sqlite/libsqlite3-3.51.3+1.tar.gz
sha256sum: 911f53389daad0ab0bd0421f185507392d363afbf0fe0ef45b37a7fdf90d33e5
:
name: libsqlite_orm
version: 1.8.1+1
project: sqlite_orm
summary: SQLite ORM light header only library for modern C++
license: AGPL-3.0-only
topics: C++, SQLite
description:
\
<p align="center">
  <img src="https://github.com/fnc12/sqlite_orm/blob/master/logo.png"\
 alt="Sublime's custom image" width="557"/>
</p>

[![C++](https://img.shields.io/badge/c++-%2300599C.svg?style=for-the-badge&lo\
go=c%2B%2B&logoColor=white)](https://en.cppreference.com/w/)
[![SQLite](https://img.shields.io/badge/sqlite-%2307405e.svg?style=for-the-ba\
dge&logo=sqlite&logoColor=white)](https://www.sqlite.org/index.html)
[![GitHub Actions](https://img.shields.io/badge/githubactions-%232671E5.svg?s\
tyle=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/fn\
c12/sqlite_orm/actions)
[![CMake](https://img.shields.io/badge/CMake-%23008FBA.svg?style=for-the-badg\
e&logo=cmake&logoColor=white)](https://github.com/fnc12/sqlite_orm/blob/dev/C\
MakeLists.txt)
[![Stack Overflow](https://img.shields.io/badge/-Stackoverflow-FE7A16?style=f\
or-the-badge&logo=stack-overflow&logoColor=white)](https://stackoverflow.com/\
search?q=sqlite_orm)
[![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&log\
o=paypal&logoColor=white)](https://paypal.me/fnc12)
[![Twitter](https://img.shields.io/badge/sqlite_orm-%231DA1F2.svg?style=for-t\
he-badge&logo=Twitter&logoColor=white)](https://twitter.com/sqlite_orm)
[![Patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&l\
ogo=patreon&logoColor=white)](https://patreon.com/fnc12)

# SQLite ORM
SQLite ORM light header only library for modern C++. Please read the license\
 precisely. The project has AGPL license for open source project and MIT\
 license after purchasing it for 50$ (using [PayPal](https://paypal.me/fnc12)\
 or any different way (contact using email fnc12@me.com)).

# Status
| Branch | Travis | Appveyor |
| :----- | :----- | :------- |
| [`master`](https://github.com/fnc12/sqlite_orm/tree/master) | [![Build\
 Status](https://travis-ci.org/fnc12/sqlite_orm.svg?branch=master)](https://t\
ravis-ci.org/fnc12/sqlite_orm) | [![Build status](https://ci.appveyor.com/api\
/projects/status/github/fnc12/sqlite_orm?branch=master&svg=true)](https://ci.\
appveyor.com/project/fnc12/sqlite-orm/history) | | | [![Website](https://img.\
shields.io/badge/official-website-brightgreen.svg)](https://github.com/fnc12/\
sqlite_orm/) |
| [`dev`](https://github.com/fnc12/sqlite_orm/tree/dev) | [![Build\
 Status](https://travis-ci.org/fnc12/sqlite_orm.svg?branch=dev)](https://trav\
is-ci.org/fnc12/sqlite_orm) | [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/github/fnc12/sqlite_orm?branch=dev&svg=true)](https://ci.appvey\
or.com/project/fnc12/sqlite-orm/history) | | | [![Website](https://img.shield\
s.io/badge/official-website-brightgreen.svg)](https://github.com/fnc12/sqlite\
_orm/tree/dev) |

# Advantages

* **No raw string queries**
* **Intuitive syntax**
* **Comfortable interface - one code line per single query**
* **Built with modern C++14 features (no macros and external scripts)**
* **CRUD support**
* **Pure select query support**
* **Prepared statements support**
* **UNION, EXCEPT and INTERSECT support**
* **STL compatible**
* **Custom types binding support**
* **BLOB support** - maps to `std::vector<char>` or one can bind your custom\
 type
* **FOREIGN KEY support**
* **Composite key support**
* **JOIN support**
* **Transactions support**
* **Migrations functionality**
* **Powerful conditions**
* **ORDER BY and LIMIT, OFFSET support**
* **GROUP BY / DISTINCT support**
* **INDEX support**
* **Follows single responsibility principle** - no need write code inside\
 your data model classes
* **Easy integration** - single header only lib.
* **The only dependency** - libsqlite3
* **C++ standard code style**
* **In memory database support** - provide `:memory:` or empty filename
* **COLLATE support**
* **Limits setting/getting support**
* **User defined functions support**

`sqlite_orm` library allows to create easy data model mappings to your\
 database schema. It is built to manage (CRUD) objects with a primary key and\
 without it. It also allows you to specify table names and column names\
 explicitly no matter how your classes actually named. Take a look at example:

```c++

struct User{
    int id;
    std::string firstName;
    std::string lastName;
    int birthDate;
    std::unique_ptr<std::string> imageUrl;
    int typeId;
};

struct UserType {
    int id;
    std::string name;
};

```

So we have database with predefined schema like 

`CREATE TABLE users (id integer primary key autoincrement, first_name text\
 not null, last_name text not null, birth_date integer not null, image_url\
 text, type_id integer not null)`

`CREATE TABLE user_types (id integer primary key autoincrement, name text not\
 null DEFAULT 'name_placeholder')`

Now we tell `sqlite_orm` library about our schema and provide database\
 filename. We create `storage` service object that has CRUD interface. Also\
 we create every table and every column. All code is intuitive and\
 minimalistic.

```c++

using namespace sqlite_orm;
auto storage = make_storage("db.sqlite",
                            make_table("users",
                                       make_column("id", &User::id,\
 primary_key().autoincrement()),
                                       make_column("first_name",\
 &User::firstName),
                                       make_column("last_name",\
 &User::lastName),
                                       make_column("birth_date",\
 &User::birthDate),
                                       make_column("image_url",\
 &User::imageUrl),
                                       make_column("type_id", &User::typeId)),
                            make_table("user_types",
                                       make_column("id", &UserType::id,\
 primary_key().autoincrement()),
                                       make_column("name", &UserType::name,\
 default_value("name_placeholder"))));
```

Too easy isn't it? You do not have to specify mapped type explicitly - it is\
 deduced from your member pointers you pass during making a column (for\
 example: `&User::id`). To create a column you have to pass two arguments at\
 least: its name in the table and your mapped class member pointer. You can\
 also add extra arguments to tell your storage about column's constraints\
 like `primary_key`, `autoincrement`, `default_value`, `unique` or\
 `generated_always_as` (order isn't important; `not_null` is deduced from\
 type automatically).

More details about making storage can be found in [tutorial](https://github.c\
om/fnc12/sqlite_orm/wiki/Making-a-storage).

If your datamodel classes have private or protected members to map to sqlite\
 then you can make a storage with setter and getter functions. More info in\
 the [example](https://github.com/fnc12/sqlite_orm/blob/master/examples/priva\
te_class_members.cpp).

# CRUD

Let's create and insert new `User` into our database. First we need to create\
 a `User` object with any id and call `insert` function. It will return id of\
 just created user or throw exception if something goes wrong.

```c++
User user{-1, "Jonh", "Doe", 664416000, std::make_unique<std::string>("url_to\
_heaven"), 3 };
    
auto insertedId = storage.insert(user);
cout << "insertedId = " << insertedId << endl;      //  insertedId = 8
user.id = insertedId;

User secondUser{-1, "Alice", "Inwonder", 831168000, {} , 2};
insertedId = storage.insert(secondUser);
secondUser.id = insertedId;

```

Note: if we need to insert a new user with specified id call\
 `storage.replace(user);` instead of `insert`.

Next let's get our user by id.

```c++
try{
    auto user = storage.get<User>(insertedId);
    cout << "user = " << user.firstName << " " << user.lastName << endl;
}catch(std::system_error e) {
    cout << e.what() << endl;
}catch(...){
    cout << "unknown exeption" << endl;
}
```

Probably you may not like throwing exceptions. Me too. Exception\
 `std::system_error` is thrown because return type in `get` function is not\
 nullable. You can use alternative version `get_pointer` which returns\
 `std::unique_ptr` and doesn't throw `not_found_exception` if nothing found -\
 just returns `nullptr`.

```c++
if(auto user = storage.get_pointer<User>(insertedId)){
    cout << "user = " << user->firstName << " " << user->lastName << endl;
}else{
    cout << "no user with id " << insertedId << endl;
}
```

`std::unique_ptr` is used as optional in `sqlite_orm`. Of course there is\
 class optional in C++14 located at `std::experimental::optional`. But we\
 don't want to use it until it is `experimental`.

We can also update our user. It updates row by id provided in `user` object\
 and sets all other non `primary_key` fields to values stored in the passed\
 `user` object. So you can just assign members to `user` object you want and\
 call `update`

```c++
user.firstName = "Nicholas";
user.imageUrl = "https://cdn1.iconfinder.com/data/icons/man-icon-set/100/man_\
icon-21-512.png"
storage.update(user);
```

Also there is a non-CRUD update version `update_all`:

```c++
storage.update_all(set(c(&User::lastName) = "Hardey",
                       c(&User::typeId) = 2),
                   where(c(&User::firstName) == "Tom"));
```

And delete. To delete you have to pass id only, not whole object. Also we\
 need to explicitly tell which class of object we want to delete. Function\
 name is `remove` not `delete` cause `delete` is a reserved word in C++.

```c++
storage.remove<User>(insertedId)
```

Also we can extract all objects into `std::vector`.

```c++
auto allUsers = storage.get_all<User>();
cout << "allUsers (" << allUsers.size() << "):" << endl;
for(auto &user : allUsers) {
    cout << storage.dump(user) << endl; //  dump returns std::string with\
 json-like style object info. For example: { id : '1', first_name : 'Jonh',\
 last_name : 'Doe', birth_date : '664416000', image_url : 'https://cdn1.iconf\
inder.com/data/icons/man-icon-set/100/man_icon-21-512.png', type_id : '3' }
}
```

And one can specify return container type explicitly: let's get all users in\
 `std::list`, not `std::vector`:

```c++
auto allUsersList = storage.get_all<User, std::list<User>>();
```

Container must be STL compatible (must have `push_back(T&&)` function in this\
 case).

`get_all` can be too heavy for memory so you can iterate row by row (i.e.\
 object by object):

```c++
for(auto &user : storage.iterate<User>()) {
    cout << storage.dump(user) << endl;
}
```

`iterate` member function returns adapter object that has `begin` and `end`\
 member functions returning iterators that fetch object on dereference\
 operator call.

CRUD functions `get`, `get_pointer`, `remove`, `update` (not `insert`) work\
 only if your type has a primary key column. If you try to `get` an object\
 that is mapped to your storage but has no primary key column a\
 `std::system_error` will be thrown cause `sqlite_orm` cannot detect an id.\
 If you want to know how to perform a storage without primary key take a look\
 at `date_time.cpp` example in `examples` folder.

# Prepared statements

Prepared statements are strongly typed.

```c++
//  SELECT doctor_id
//  FROM visits
//  WHERE LENGTH(patient_name) > 8
auto selectStatement = storage.prepare(select(&Visit::doctor_id,\
 where(length(&Visit::patient_name) > 8)));
cout << "selectStatement = " << selectStatement.sql() << endl;  //  prints\
 "SELECT doctor_id FROM ..."
auto rows = storage.execute(selectStatement); //  rows is std::vector<decltyp\
e(Visit::doctor_id)>

//  SELECT doctor_id
//  FROM visits
//  WHERE LENGTH(patient_name) > 11
get<0>(selectStatement) = 11;
auto rows2 = storage.execute(selectStatement);
```
`get<N>(statement)` function call allows you to access fields to bind them to\
 your statement.

# Aggregate Functions

```c++
//  SELECT AVG(id) FROM users
auto averageId = storage.avg(&User::id);    
cout << "averageId = " << averageId << endl;        //  averageId = 4.5
    
//  SELECT AVG(birth_date) FROM users
auto averageBirthDate = storage.avg(&User::birthDate);  
cout << "averageBirthDate = " << averageBirthDate << endl;      // \
 averageBirthDate = 6.64416e+08
  
//  SELECT COUNT(*) FROM users
auto usersCount = storage.count<User>();    
cout << "users count = " << usersCount << endl;     //  users count = 8

//  SELECT COUNT(id) FROM users
auto countId = storage.count(&User::id);    
cout << "countId = " << countId << endl;        //  countId = 8

//  SELECT COUNT(image_url) FROM users
auto countImageUrl = storage.count(&User::imageUrl);   
cout << "countImageUrl = " << countImageUrl << endl;      //  countImageUrl =\
 5

//  SELECT GROUP_CONCAT(id) FROM users
auto concatedUserId = storage.group_concat(&User::id);      
cout << "concatedUserId = " << concatedUserId << endl;      // \
 concatedUserId = 1,2,3,4,5,6,7,8

//  SELECT GROUP_CONCAT(id, "---") FROM users
auto concatedUserIdWithDashes = storage.group_concat(&User::id, "---");     
cout << "concatedUserIdWithDashes = " << concatedUserIdWithDashes << endl;   \
   //  concatedUserIdWithDashes = 1---2---3---4---5---6---7---8

//  SELECT MAX(id) FROM users
if(auto maxId = storage.max(&User::id)){    
    cout << "maxId = " << *maxId <<endl;    //  maxId = 12  (maxId is\
 std::unique_ptr<int>)
}else{
    cout << "maxId is null" << endl;
}
    
//  SELECT MAX(first_name) FROM users
if(auto maxFirstName = storage.max(&User::firstName)){ 
    cout << "maxFirstName = " << *maxFirstName << endl; //  maxFirstName =\
 Jonh (maxFirstName is std::unique_ptr<std::string>)
}else{
    cout << "maxFirstName is null" << endl;
}

//  SELECT MIN(id) FROM users
if(auto minId = storage.min(&User::id)){    
    cout << "minId = " << *minId << endl;   //  minId = 1 (minId is\
 std::unique_ptr<int>)
}else{
    cout << "minId is null" << endl;
}

//  SELECT MIN(last_name) FROM users
if(auto minLastName = storage.min(&User::lastName)){
    cout << "minLastName = " << *minLastName << endl;   //  minLastName = Doe
}else{
    cout << "minLastName is null" << endl;
}

//  SELECT SUM(id) FROM users
if(auto sumId = storage.sum(&User::id)){    //  sumId is std::unique_ptr<int>
    cout << "sumId = " << *sumId << endl;
}else{
    cout << "sumId is null" << endl;
}

//  SELECT TOTAL(id) FROM users
auto totalId = storage.total(&User::id);
cout << "totalId = " << totalId << endl;    //  totalId is double (always)
```

# Where conditions

You also can select objects with custom where conditions with `=`, `!=`, `>`,\
 `>=`, `<`, `<=`, `IN`, `BETWEEN` and `LIKE`.

For example: let's select users with id lesser than 10:

```c++
//  SELECT * FROM users WHERE id < 10
auto idLesserThan10 = storage.get_all<User>(where(c(&User::id) < 10));
cout << "idLesserThan10 count = " << idLesserThan10.size() << endl;
for(auto &user : idLesserThan10) {
    cout << storage.dump(user) << endl;
}
```

Or select all users who's first name is not equal "John":

```c++
//  SELECT * FROM users WHERE first_name != 'John'
auto notJohn = storage.get_all<User>(where(c(&User::firstName) != "John"));
cout << "notJohn count = " << notJohn.size() << endl;
for(auto &user : notJohn) {
    cout << storage.dump(user) << endl;
}
```

By the way one can implement not equal in a different way using C++ negation\
 operator:

```c++
auto notJohn2 = storage.get_all<User>(where(not (c(&User::firstName) ==\
 "John")));
```

You can use `!` and `not` in this case cause they are equal. Also you can\
 chain several conditions with `and` and `or` operators. Let's try to get\
 users with query with conditions like `where id >= 5 and id <= 7 and not id\
 = 6`:

```c++
auto id5and7 = storage.get_all<User>(where(c(&User::id) <= 7 and c(&User::id)\
 >= 5 and not (c(&User::id) == 6)));
cout << "id5and7 count = " << id5and7.size() << endl;
for(auto &user : id5and7) {
    cout << storage.dump(user) << endl;
}
```

Or let's just export two users with id 10 or id 16 (of course if these users\
 exist):

```c++
auto id10or16 = storage.get_all<User>(where(c(&User::id) == 10 or\
 c(&User::id) == 16));
cout << "id10or16 count = " << id10or16.size() << endl;
for(auto &user : id10or16) {
    cout << storage.dump(user) << endl;
}
```

In fact you can chain together any number of different conditions with any\
 operator from `and`, `or` and `not`. All conditions are templated so there\
 is no runtime overhead. And this makes `sqlite_orm` the most powerful\
 **sqlite** C++ ORM library!

Moreover you can use parentheses to set the priority of query conditions:

```c++
auto cuteConditions = storage.get_all<User>(where((c(&User::firstName) ==\
 "John" or c(&User::firstName) == "Alex") and c(&User::id) == 4));  //  where\
 (first_name = 'John' or first_name = 'Alex') and id = 4
cout << "cuteConditions count = " << cuteConditions.size() << endl; // \
 cuteConditions count = 1
cuteConditions = storage.get_all<User>(where(c(&User::firstName) == "John" or\
 (c(&User::firstName) == "Alex" and c(&User::id) == 4)));   //  where\
 first_name = 'John' or (first_name = 'Alex' and id = 4)
cout << "cuteConditions count = " << cuteConditions.size() << endl; // \
 cuteConditions count = 2
```

Also we can implement `get` by id with `get_all` and `where` like this:

```c++
//  SELECT * FROM users WHERE ( 2 = id )
auto idEquals2 = storage.get_all<User>(where(2 == c(&User::id)));
cout << "idEquals2 count = " << idEquals2.size() << endl;
if(idEquals2.size()){
    cout << storage.dump(idEquals2.front()) << endl;
}else{
    cout << "user with id 2 doesn't exist" << endl;
}
```

Lets try the `IN` operator:

```c++
//  SELECT * FROM users WHERE id IN (2, 4, 6, 8, 10)
auto evenLesserTen10 = storage.get_all<User>(where(in(&User::id, {2, 4, 6, 8,\
 10})));
cout << "evenLesserTen10 count = " << evenLesserTen10.size() << endl;
for(auto &user : evenLesserTen10) {
    cout << storage.dump(user) << endl;
}

//  SELECT * FROM users WHERE last_name IN ("Doe", "White")
auto doesAndWhites = storage.get_all<User>(where(in(&User::lastName, {"Doe",\
 "White"})));
cout << "doesAndWhites count = " << doesAndWhites.size() << endl;
for(auto &user : doesAndWhites) {
    cout << storage.dump(user) << endl;
}
```

And `BETWEEN`:

```c++
//  SELECT * FROM users WHERE id BETWEEN 66 AND 68
auto betweenId = storage.get_all<User>(where(between(&User::id, 66, 68)));
cout << "betweenId = " << betweenId.size() << endl;
for(auto &user : betweenId) {
    cout << storage.dump(user) << endl;
}
```

And even `LIKE`:

```c++
//  SELECT * FROM users WHERE last_name LIKE 'D%'
auto whereNameLike = storage.get_all<User>(where(like(&User::lastName,\
 "D%")));
cout << "whereNameLike = " << whereNameLike.size() << endl;
for(auto &user : whereNameLike) {
    cout << storage.dump(user) << endl;
}
```

Looks like magic but it works very simple. Cute function `c` (column) takes a\
 class member pointer and returns a special expression middle object that can\
 be used with operators overloaded in `::sqlite_orm` namespace. Operator\
 overloads act just like functions

* is_equal
* is_not_equal
* greater_than
* greater_or_equal
* lesser_than
* lesser_or_equal
* is_null
* is_not_null

that simulate binary comparison operator so they take 2 arguments: left hand\
 side and right hand side. Arguments may be either member pointer of mapped\
 class or any other expression (core/aggregate function, literal or\
 subexpression). Binary comparison functions map arguments to text to be\
 passed to sqlite engine to process query. Member pointers are being mapped\
 to column names and literals/variables/constants to '?' and then are bound\
 automatically. Next `where` function places brackets around condition and\
 adds "WHERE" keyword before condition text. Next resulted string appends to\
 a query string and is being processed further.

If you omit `where` function in `get_all` it will return all objects from a\
 table:

```c++
auto allUsers = storage.get_all<User>();
```

Also you can use `remove_all` function to perform `DELETE FROM ... WHERE`\
 query with the same type of conditions.

```c++
storage.remove_all<User>(where(c(&User::id) < 100));
```

# Raw select

If you need to extract only a single column (`SELECT %column_name% FROM\
 %table_name% WHERE %conditions%`) you can use a non-CRUD `select` function:

```c++

//  SELECT id FROM users
auto allIds = storage.select(&User::id);    
cout << "allIds count = " << allIds.size() << endl; //  allIds is\
 std::vector<int>
for(auto &id : allIds) {
    cout << id << " ";
}
cout << endl;

//  SELECT id FROM users WHERE last_name = 'Doe'
auto doeIds = storage.select(&User::id, where(c(&User::lastName) == "Doe"));
cout << "doeIds count = " << doeIds.size() << endl; //  doeIds is\
 std::vector<int>
for(auto &doeId : doeIds) {
    cout << doeId << " ";
}
cout << endl;

//  SELECT last_name FROM users WHERE id < 300
auto allLastNames = storage.select(&User::lastName, where(c(&User::id) <\
 300));    
cout << "allLastNames count = " << allLastNames.size() << endl; // \
 allLastNames is std::vector<std::string>
for(auto &lastName : allLastNames) {
    cout << lastName << " ";
}
cout << endl;

//  SELECT id FROM users WHERE image_url IS NULL
auto idsWithoutUrls = storage.select(&User::id, where(is_null(&User::imageUrl\
)));
for(auto id : idsWithoutUrls) {
    cout << "id without image url " << id << endl;
}

//  SELECT id FROM users WHERE image_url IS NOT NULL
auto idsWithUrl = storage.select(&User::id, where(is_not_null(&User::imageUrl\
)));
for(auto id : idsWithUrl) {
    cout << "id with image url " << id << endl;
}
auto idsWithUrl2 = storage.select(&User::id, where(not is_null(&User::imageUr\
l)));
assert(std::equal(idsWithUrl2.begin(),
                  idsWithUrl2.end(),
                  idsWithUrl.begin()));
```

Also you're able to select several column in a vector of tuples. Example:

```c++
//  `SELECT first_name, last_name FROM users WHERE id > 250 ORDER BY id`
auto partialSelect = storage.select(columns(&User::firstName,\
 &User::lastName),
                                    where(c(&User::id) > 250),
                                    order_by(&User::id));
cout << "partialSelect count = " << partialSelect.size() << endl;
for(auto &t : partialSelect) {
    auto &firstName = std::get<0>(t);
    auto &lastName = std::get<1>(t);
    cout << firstName << " " << lastName << endl;
}
```

# ORDER BY support

ORDER BY query option can be applied to `get_all` and `select` functions just\
 like `where` but with `order_by` function. It can be mixed with WHERE in a\
 single query. Examples:

```c++
//  `SELECT * FROM users ORDER BY id`
auto orderedUsers = storage.get_all<User>(order_by(&User::id));
cout << "orderedUsers count = " << orderedUsers.size() << endl;
for(auto &user : orderedUsers) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id < 250 ORDER BY first_name`
auto orderedUsers2 = storage.get_all<User>(where(c(&User::id) < 250),\
 order_by(&User::firstName));
cout << "orderedUsers2 count = " << orderedUsers2.size() << endl;
for(auto &user : orderedUsers2) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id > 100 ORDER BY first_name ASC`
auto orderedUsers3 = storage.get_all<User>(where(c(&User::id) > 100),\
 order_by(&User::firstName).asc());
cout << "orderedUsers3 count = " << orderedUsers3.size() << endl;
for(auto &user : orderedUsers3) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users ORDER BY id DESC`
auto orderedUsers4 = storage.get_all<User>(order_by(&User::id).desc());
cout << "orderedUsers4 count = " << orderedUsers4.size() << endl;
for(auto &user : orderedUsers4) {
    cout << storage.dump(user) << endl;
}

//  `SELECT first_name FROM users ORDER BY ID DESC`
auto orderedFirstNames = storage.select(&User::firstName, order_by(&User::id)\
.desc());
cout << "orderedFirstNames count = " << orderedFirstNames.size() << endl;
for(auto &firstName : orderedFirstNames) {
    cout << "firstName = " << firstName << endl;
}
```

# LIMIT and OFFSET

There are three available versions of `LIMIT`/`OFFSET` options:

- LIMIT %limit%
- LIMIT %limit% OFFSET %offset%
- LIMIT %offset%, %limit%

All these versions available with the same interface:

```c++
//  `SELECT * FROM users WHERE id > 250 ORDER BY id LIMIT 5`
auto limited5 = storage.get_all<User>(where(c(&User::id) > 250),
                                      order_by(&User::id),
                                      limit(5));
cout << "limited5 count = " << limited5.size() << endl;
for(auto &user : limited5) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id > 250 ORDER BY id LIMIT 5, 10`
auto limited5comma10 = storage.get_all<User>(where(c(&User::id) > 250),
                                             order_by(&User::id),
                                             limit(5, 10));
cout << "limited5comma10 count = " << limited5comma10.size() << endl;
for(auto &user : limited5comma10) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id > 250 ORDER BY id LIMIT 5 OFFSET 10`
auto limit5offset10 = storage.get_all<User>(where(c(&User::id) > 250),
                                            order_by(&User::id),
                                            limit(5, offset(10)));
cout << "limit5offset10 count = " << limit5offset10.size() << endl;
for(auto &user : limit5offset10) {
    cout << storage.dump(user) << endl;
}
```

Please beware that queries `LIMIT 5, 10` and `LIMIT 5 OFFSET 10` mean\
 different. `LIMIT 5, 10` means `LIMIT 10 OFFSET 5`.

# JOIN support

You can perform simple `JOIN`, `CROSS JOIN`, `INNER JOIN`, `LEFT JOIN` or\
 `LEFT OUTER JOIN` in your query. Instead of joined table specify mapped\
 type. Example for doctors and visits:

```c++
//  SELECT a.doctor_id, a.doctor_name,
//      c.patient_name, c.vdate
//  FROM doctors a
//  LEFT JOIN visits c
//  ON a.doctor_id=c.doctor_id;
auto rows = storage2.select(columns(&Doctor::id, &Doctor::name,\
 &Visit::patientName, &Visit::vdate),
                            left_join<Visit>(on(c(&Doctor::id) ==\
 &Visit::doctorId)));  //  one `c` call is enough cause operator overloads\
 are templated
for(auto &row : rows) {
    cout << std::get<0>(row) << '\t' << std::get<1>(row) << '\t' <<\
 std::get<2>(row) << '\t' << std::get<3>(row) << endl;
}
cout << endl;
```

Simple `JOIN`:

```c++
//  SELECT a.doctor_id,a.doctor_name,
//      c.patient_name,c.vdate
//  FROM doctors a
//  JOIN visits c
//  ON a.doctor_id=c.doctor_id;
rows = storage2.select(columns(&Doctor::id, &Doctor::name,\
 &Visit::patientName, &Visit::vdate),
                       join<Visit>(on(c(&Doctor::id) == &Visit::doctorId)));
for(auto &row : rows) {
    cout << std::get<0>(row) << '\t' << std::get<1>(row) << '\t' <<\
 std::get<2>(row) << '\t' << std::get<3>(row) << endl;
}
cout << endl;
```

Two `INNER JOIN`s in one query:

```c++
//  SELECT
//      trackid,
//      tracks.name AS Track,
//      albums.title AS Album,
//      artists.name AS Artist
//  FROM
//      tracks
//  INNER JOIN albums ON albums.albumid = tracks.albumid
//  INNER JOIN artists ON artists.artistid = albums.artistid;
auto innerJoinRows2 = storage.select(columns(&Track::trackId, &Track::name,\
 &Album::title, &Artist::name),
                                     inner_join<Album>(on(c(&Album::albumId)\
 == &Track::albumId)),
                                     inner_join<Artist>(on(c(&Artist::artistI\
d) == &Album::artistId)));
//  innerJoinRows2 is std::vector<std::tuple<decltype(Track::trackId),\
 decltype(Track::name), decltype(Album::title), decltype(Artist::name)>>
```

More join examples can be found in [examples folder](https://github.com/fnc12\
/sqlite_orm/blob/master/examples/left_and_inner_join.cpp).

# Migrations functionality

There are no explicit `up` and `down` functions that are used to be used in\
 migrations. Instead `sqlite_orm` offers `sync_schema` function that takes\
 responsibility of comparing actual db file schema with one you specified in\
 `make_storage` call and if something is not equal it alters or drops/creates\
 schema.

```c++
storage.sync_schema();
//  or
storage.sync_schema(true);
```

Please beware that `sync_schema` doesn't guarantee that data will be saved.\
 It *tries* to save it only. Below you can see rules list that `sync_schema`\
 follows during call:
* if there are excess tables exist in db they are ignored (not dropped)
* every table from storage is compared with it's db analog and 
    * if table doesn't exist it is created
    * if table exists its colums are being compared with table_info from db\
 and
        * if there are columns in db that do not exist in storage (excess)\
 table will be dropped and recreated if `preserve` is `false`, and table will\
 be copied into temporary table without excess columns, source table will be\
 dropped, copied table will be renamed to source table (sqlite remove column\
 technique) if `preserve` is `true`. `preserve` is the first argument in\
 `sync_schema` function. It's default value is `false`. Beware that setting\
 it to `true` may take time for copying table rows.
        * if there are columns in storage that do not exist in db they will\
 be added using 'ALTER TABLE ... ADD COLUMN ...' command and table data will\
 not be dropped but if any of added columns is null but has not default value\
 table will be dropped and recreated
        * if there is any column existing in both db and storage but differs\
 by any of properties (type, pk, notnull) table will be dropped and recreated\
 (dflt_value isn't checked cause there can be ambiguity in default values,\
 please beware).

The best practice is to call this function right after storage creation.

# Transactions

There are three ways to begin and commit/rollback transactions:
* explicitly call `begin_transaction();`, `rollback();` or `commit();`\
 functions
* use `transaction` function which begins transaction implicitly and takes a\
 lambda argument which returns true for commit and false for rollback. All\
 storage calls performed in lambda can be commited or rollbacked by returning\
 `true` or `false`.
* use `transaction_guard` function which returns a guard object which works\
 just like `lock_guard` for `std::mutex`.

Example for explicit call:

```c++
auto secondUser = storage.get<User>(2);

storage.begin_transaction();
secondUser.typeId = 3;
storage.update(secondUser);
storage.rollback(); //  or storage.commit();

secondUser = storage.get<decltype(secondUser)>(secondUser.id);
assert(secondUser.typeId != 3);
```

Example for implicit call:

```c++
storage.transaction([&] () mutable {    //  mutable keyword allows make\
 non-const function calls
    auto secondUser = storage.get<User>(2);
    secondUser.typeId = 1;
    storage.update(secondUser);
    auto gottaRollback = bool(rand() % 2);
    if(gottaRollback){  //  dummy condition for test
        return false;   //  exits lambda and calls ROLLBACK
    }
    return true;        //  exits lambda and calls COMMIT
});
```

The second way guarantees that `commit` or `rollback` will be called. You can\
 use either way.

Trancations are useful with `changes` sqlite function that returns number of\
 rows modified.

```c++
storage.transaction([&] () mutable {
    storage.remove_all<User>(where(c(&User::id) < 100));
    auto usersRemoved = storage.changes();
    cout << "usersRemoved = " << usersRemoved << endl;
    return true;
});
```

It will print a number of deleted users (rows). But if you call `changes`\
 without a transaction and your database is located in file not in RAM the\
 result will be 0 always cause `sqlite_orm` opens and closes connection every\
 time you call a function without a transaction.

Also a `transaction` function returns `true` if transaction is commited and\
 `false` if it is rollbacked. It can be useful if your next actions depend on\
 transaction result:

```c++
auto commited = storage.transaction([&] () mutable {    
    auto secondUser = storage.get<User>(2);
    secondUser.typeId = 1;
    storage.update(secondUser);
    auto gottaRollback = bool(rand() % 2);
    if(gottaRollback){  //  dummy condition for test
        return false;   //  exits lambda and calls ROLLBACK
    }
    return true;        //  exits lambda and calls COMMIT
});
if(commited){
    cout << "Commited successfully, go on." << endl;
}else{
    cerr << "Commit failed, process an error" << endl;
}
```

Example for `transaction_guard` function:

```c++
try{
  auto guard = storage.transaction_guard(); //  calls BEGIN TRANSACTION and\
 returns guard object
  user.name = "Paul";
  auto notExisting = storage.get<User>(-1); //  exception is thrown here,\
 guard calls ROLLBACK in its destructor
  guard.commit();
}catch(...){
  cerr << "exception" << endl;
}
```

# In memory database

To manage in memory database just provide `:memory:` or `""` instead as\
 filename to `make_storage`.

# Comparison with other C++ libs

|   |sqlite_orm|[SQLiteCpp](https://github.com/SRombauts/SQLiteCpp)|[hiberlit\
e](https://github.com/paulftw/hiberlite)|[ODB](https://www.codesynthesis.com/\
products/odb/)|
|---|:---:|:---:|:---:|:---:|
|Schema sync|yes|no|yes|no|
|Single responsibility principle|yes|yes|no|no|
|STL compatible|yes|no|no|no|
|No raw string queries|yes|no|yes|yes|
|Transactions|yes|yes|no|yes|
|Custom types binding|yes|no|yes|yes|
|Doesn't use macros and/or external codegen scripts|yes|yes|no|no|
|Aggregate functions|yes|yes|no|yes|
|Prepared statements|yes|yes|no|no|

# Notes

To work well your data model class must be default constructable and must not\
 have const fields mapped to database cause they are assigned during queries.\
 Otherwise code won't compile on line with member assignment operator.

For more details please check the project [wiki](https://github.com/fnc12/sql\
ite_orm/wiki).

# Installation

**Note**: Installation is not necessary if you plan to use the fetchContent\
 method, see below in Usage.

Use a popular package manager like [vcpkg](https://github.com/Microsoft/vcpkg\
) and just install it with the `vcpkg install sqlite-orm` command.

Or you build it from source:

```bash
git clone https://github.com/fnc12/sqlite_orm.git sqlite_orm
cd sqlite_orm
cmake -B build
cmake --build build --target install
```
You might need admin rights for the last command.

# Usage

## CMake

If you use cmake, there are two supported ways how to use it with cmake (if\
 another works as well or should be supported, open an issue). 

Either way you choose, the include path as well as the dependency sqlite3\
 will be set automatically on your target. So usage is straight forward, but\
 you need to have installed sqlite3 on your system (see Requirements below)

## Find Package

If you have installed the lib system wide and it's in your PATH, you can use\
 find_package to include it in cmake. It will make a target\
 `sqlite_orm::sqlite_orm` available which you can link against. Have a look\
 at examples/find_package for a full example.

```cmake
find_package(SqliteOrm REQUIRED)

target_link_libraries(main PRIVATE sqlite_orm::sqlite_orm)
```

## Fetch Content (Recommended)

Alternatively, cmake can download the project directly from github during\
 configure stage and therefore you don't need to install the lib before.
Againt a target `sqlite_orm::sqlite_orm` will be available which you can link\
 against. Have a look at examples/fetch_content for a full example.

## No CMake

If you want to use the lib directly with Make or something else, just set the\
 inlcude path correctly (should be correct on Linux already), so\
 `sqlite_orm/sqlite_orm.h` is found. As this is a header only lib, there is\
 nothing more you have to do.

# Requirements

* C++14 compatible compiler (not C++11 cause of templated lambdas in the lib).
* Sqlite3 installed on your system and in the path, so cmake can find it (or\
 linked to you project if you don't use cmake)

# Video from conference

[![Video from conference](https://img.youtube.com/vi/ngsilquWgpo/0.jpg)](http\
s://www.youtube.com/watch?v=ngsilquWgpo)

# SqliteMan

In case you need a native SQLite client for macOS or Windows 10 you can use\
 SqliteMan https://sqliteman.dev. It is not a commercial. It is a free native\
 client being developed by the maintainer of this repo.

\
description-type: text/markdown;variant=GFM
url: https://sqliteorm.com/
doc-url: https://sqliteorm.com/docs
src-url: https://github.com/fnc12/sqlite_orm
package-url: https://github.com/build2-packaging/sqlite_orm
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsqlite3 ^3.0.0
requires: c++14
tests: libsqlite_orm-tests
builds: &( +clang-14+ +gcc +msvc )
bootstrap-build:
\
project = libsqlite_orm

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h

# Assume headers are importable unless stated otherwise.
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

\
location: sqlite_orm/libsqlite_orm-1.8.1+1.tar.gz
sha256sum: 8977f95ac7a8d6912ea91204afdea2a754097d61bc805b35db703a32e60b0369
:
name: libsqlite_orm-tests
version: 1.8.1+1
project: sqlite_orm
summary: Tests for the SQLite ORM library.
license: AGPL-3.0-only
topics: C++, SQLite
description:
\
<p align="center">
  <img src="https://github.com/fnc12/sqlite_orm/blob/master/logo.png"\
 alt="Sublime's custom image" width="557"/>
</p>

[![C++](https://img.shields.io/badge/c++-%2300599C.svg?style=for-the-badge&lo\
go=c%2B%2B&logoColor=white)](https://en.cppreference.com/w/)
[![SQLite](https://img.shields.io/badge/sqlite-%2307405e.svg?style=for-the-ba\
dge&logo=sqlite&logoColor=white)](https://www.sqlite.org/index.html)
[![GitHub Actions](https://img.shields.io/badge/githubactions-%232671E5.svg?s\
tyle=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/fn\
c12/sqlite_orm/actions)
[![CMake](https://img.shields.io/badge/CMake-%23008FBA.svg?style=for-the-badg\
e&logo=cmake&logoColor=white)](https://github.com/fnc12/sqlite_orm/blob/dev/C\
MakeLists.txt)
[![Stack Overflow](https://img.shields.io/badge/-Stackoverflow-FE7A16?style=f\
or-the-badge&logo=stack-overflow&logoColor=white)](https://stackoverflow.com/\
search?q=sqlite_orm)
[![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&log\
o=paypal&logoColor=white)](https://paypal.me/fnc12)
[![Twitter](https://img.shields.io/badge/sqlite_orm-%231DA1F2.svg?style=for-t\
he-badge&logo=Twitter&logoColor=white)](https://twitter.com/sqlite_orm)
[![Patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&l\
ogo=patreon&logoColor=white)](https://patreon.com/fnc12)

# SQLite ORM
SQLite ORM light header only library for modern C++. Please read the license\
 precisely. The project has AGPL license for open source project and MIT\
 license after purchasing it for 50$ (using [PayPal](https://paypal.me/fnc12)\
 or any different way (contact using email fnc12@me.com)).

# Status
| Branch | Travis | Appveyor |
| :----- | :----- | :------- |
| [`master`](https://github.com/fnc12/sqlite_orm/tree/master) | [![Build\
 Status](https://travis-ci.org/fnc12/sqlite_orm.svg?branch=master)](https://t\
ravis-ci.org/fnc12/sqlite_orm) | [![Build status](https://ci.appveyor.com/api\
/projects/status/github/fnc12/sqlite_orm?branch=master&svg=true)](https://ci.\
appveyor.com/project/fnc12/sqlite-orm/history) | | | [![Website](https://img.\
shields.io/badge/official-website-brightgreen.svg)](https://github.com/fnc12/\
sqlite_orm/) |
| [`dev`](https://github.com/fnc12/sqlite_orm/tree/dev) | [![Build\
 Status](https://travis-ci.org/fnc12/sqlite_orm.svg?branch=dev)](https://trav\
is-ci.org/fnc12/sqlite_orm) | [![Build status](https://ci.appveyor.com/api/pr\
ojects/status/github/fnc12/sqlite_orm?branch=dev&svg=true)](https://ci.appvey\
or.com/project/fnc12/sqlite-orm/history) | | | [![Website](https://img.shield\
s.io/badge/official-website-brightgreen.svg)](https://github.com/fnc12/sqlite\
_orm/tree/dev) |

# Advantages

* **No raw string queries**
* **Intuitive syntax**
* **Comfortable interface - one code line per single query**
* **Built with modern C++14 features (no macros and external scripts)**
* **CRUD support**
* **Pure select query support**
* **Prepared statements support**
* **UNION, EXCEPT and INTERSECT support**
* **STL compatible**
* **Custom types binding support**
* **BLOB support** - maps to `std::vector<char>` or one can bind your custom\
 type
* **FOREIGN KEY support**
* **Composite key support**
* **JOIN support**
* **Transactions support**
* **Migrations functionality**
* **Powerful conditions**
* **ORDER BY and LIMIT, OFFSET support**
* **GROUP BY / DISTINCT support**
* **INDEX support**
* **Follows single responsibility principle** - no need write code inside\
 your data model classes
* **Easy integration** - single header only lib.
* **The only dependency** - libsqlite3
* **C++ standard code style**
* **In memory database support** - provide `:memory:` or empty filename
* **COLLATE support**
* **Limits setting/getting support**
* **User defined functions support**

`sqlite_orm` library allows to create easy data model mappings to your\
 database schema. It is built to manage (CRUD) objects with a primary key and\
 without it. It also allows you to specify table names and column names\
 explicitly no matter how your classes actually named. Take a look at example:

```c++

struct User{
    int id;
    std::string firstName;
    std::string lastName;
    int birthDate;
    std::unique_ptr<std::string> imageUrl;
    int typeId;
};

struct UserType {
    int id;
    std::string name;
};

```

So we have database with predefined schema like 

`CREATE TABLE users (id integer primary key autoincrement, first_name text\
 not null, last_name text not null, birth_date integer not null, image_url\
 text, type_id integer not null)`

`CREATE TABLE user_types (id integer primary key autoincrement, name text not\
 null DEFAULT 'name_placeholder')`

Now we tell `sqlite_orm` library about our schema and provide database\
 filename. We create `storage` service object that has CRUD interface. Also\
 we create every table and every column. All code is intuitive and\
 minimalistic.

```c++

using namespace sqlite_orm;
auto storage = make_storage("db.sqlite",
                            make_table("users",
                                       make_column("id", &User::id,\
 primary_key().autoincrement()),
                                       make_column("first_name",\
 &User::firstName),
                                       make_column("last_name",\
 &User::lastName),
                                       make_column("birth_date",\
 &User::birthDate),
                                       make_column("image_url",\
 &User::imageUrl),
                                       make_column("type_id", &User::typeId)),
                            make_table("user_types",
                                       make_column("id", &UserType::id,\
 primary_key().autoincrement()),
                                       make_column("name", &UserType::name,\
 default_value("name_placeholder"))));
```

Too easy isn't it? You do not have to specify mapped type explicitly - it is\
 deduced from your member pointers you pass during making a column (for\
 example: `&User::id`). To create a column you have to pass two arguments at\
 least: its name in the table and your mapped class member pointer. You can\
 also add extra arguments to tell your storage about column's constraints\
 like `primary_key`, `autoincrement`, `default_value`, `unique` or\
 `generated_always_as` (order isn't important; `not_null` is deduced from\
 type automatically).

More details about making storage can be found in [tutorial](https://github.c\
om/fnc12/sqlite_orm/wiki/Making-a-storage).

If your datamodel classes have private or protected members to map to sqlite\
 then you can make a storage with setter and getter functions. More info in\
 the [example](https://github.com/fnc12/sqlite_orm/blob/master/examples/priva\
te_class_members.cpp).

# CRUD

Let's create and insert new `User` into our database. First we need to create\
 a `User` object with any id and call `insert` function. It will return id of\
 just created user or throw exception if something goes wrong.

```c++
User user{-1, "Jonh", "Doe", 664416000, std::make_unique<std::string>("url_to\
_heaven"), 3 };
    
auto insertedId = storage.insert(user);
cout << "insertedId = " << insertedId << endl;      //  insertedId = 8
user.id = insertedId;

User secondUser{-1, "Alice", "Inwonder", 831168000, {} , 2};
insertedId = storage.insert(secondUser);
secondUser.id = insertedId;

```

Note: if we need to insert a new user with specified id call\
 `storage.replace(user);` instead of `insert`.

Next let's get our user by id.

```c++
try{
    auto user = storage.get<User>(insertedId);
    cout << "user = " << user.firstName << " " << user.lastName << endl;
}catch(std::system_error e) {
    cout << e.what() << endl;
}catch(...){
    cout << "unknown exeption" << endl;
}
```

Probably you may not like throwing exceptions. Me too. Exception\
 `std::system_error` is thrown because return type in `get` function is not\
 nullable. You can use alternative version `get_pointer` which returns\
 `std::unique_ptr` and doesn't throw `not_found_exception` if nothing found -\
 just returns `nullptr`.

```c++
if(auto user = storage.get_pointer<User>(insertedId)){
    cout << "user = " << user->firstName << " " << user->lastName << endl;
}else{
    cout << "no user with id " << insertedId << endl;
}
```

`std::unique_ptr` is used as optional in `sqlite_orm`. Of course there is\
 class optional in C++14 located at `std::experimental::optional`. But we\
 don't want to use it until it is `experimental`.

We can also update our user. It updates row by id provided in `user` object\
 and sets all other non `primary_key` fields to values stored in the passed\
 `user` object. So you can just assign members to `user` object you want and\
 call `update`

```c++
user.firstName = "Nicholas";
user.imageUrl = "https://cdn1.iconfinder.com/data/icons/man-icon-set/100/man_\
icon-21-512.png"
storage.update(user);
```

Also there is a non-CRUD update version `update_all`:

```c++
storage.update_all(set(c(&User::lastName) = "Hardey",
                       c(&User::typeId) = 2),
                   where(c(&User::firstName) == "Tom"));
```

And delete. To delete you have to pass id only, not whole object. Also we\
 need to explicitly tell which class of object we want to delete. Function\
 name is `remove` not `delete` cause `delete` is a reserved word in C++.

```c++
storage.remove<User>(insertedId)
```

Also we can extract all objects into `std::vector`.

```c++
auto allUsers = storage.get_all<User>();
cout << "allUsers (" << allUsers.size() << "):" << endl;
for(auto &user : allUsers) {
    cout << storage.dump(user) << endl; //  dump returns std::string with\
 json-like style object info. For example: { id : '1', first_name : 'Jonh',\
 last_name : 'Doe', birth_date : '664416000', image_url : 'https://cdn1.iconf\
inder.com/data/icons/man-icon-set/100/man_icon-21-512.png', type_id : '3' }
}
```

And one can specify return container type explicitly: let's get all users in\
 `std::list`, not `std::vector`:

```c++
auto allUsersList = storage.get_all<User, std::list<User>>();
```

Container must be STL compatible (must have `push_back(T&&)` function in this\
 case).

`get_all` can be too heavy for memory so you can iterate row by row (i.e.\
 object by object):

```c++
for(auto &user : storage.iterate<User>()) {
    cout << storage.dump(user) << endl;
}
```

`iterate` member function returns adapter object that has `begin` and `end`\
 member functions returning iterators that fetch object on dereference\
 operator call.

CRUD functions `get`, `get_pointer`, `remove`, `update` (not `insert`) work\
 only if your type has a primary key column. If you try to `get` an object\
 that is mapped to your storage but has no primary key column a\
 `std::system_error` will be thrown cause `sqlite_orm` cannot detect an id.\
 If you want to know how to perform a storage without primary key take a look\
 at `date_time.cpp` example in `examples` folder.

# Prepared statements

Prepared statements are strongly typed.

```c++
//  SELECT doctor_id
//  FROM visits
//  WHERE LENGTH(patient_name) > 8
auto selectStatement = storage.prepare(select(&Visit::doctor_id,\
 where(length(&Visit::patient_name) > 8)));
cout << "selectStatement = " << selectStatement.sql() << endl;  //  prints\
 "SELECT doctor_id FROM ..."
auto rows = storage.execute(selectStatement); //  rows is std::vector<decltyp\
e(Visit::doctor_id)>

//  SELECT doctor_id
//  FROM visits
//  WHERE LENGTH(patient_name) > 11
get<0>(selectStatement) = 11;
auto rows2 = storage.execute(selectStatement);
```
`get<N>(statement)` function call allows you to access fields to bind them to\
 your statement.

# Aggregate Functions

```c++
//  SELECT AVG(id) FROM users
auto averageId = storage.avg(&User::id);    
cout << "averageId = " << averageId << endl;        //  averageId = 4.5
    
//  SELECT AVG(birth_date) FROM users
auto averageBirthDate = storage.avg(&User::birthDate);  
cout << "averageBirthDate = " << averageBirthDate << endl;      // \
 averageBirthDate = 6.64416e+08
  
//  SELECT COUNT(*) FROM users
auto usersCount = storage.count<User>();    
cout << "users count = " << usersCount << endl;     //  users count = 8

//  SELECT COUNT(id) FROM users
auto countId = storage.count(&User::id);    
cout << "countId = " << countId << endl;        //  countId = 8

//  SELECT COUNT(image_url) FROM users
auto countImageUrl = storage.count(&User::imageUrl);   
cout << "countImageUrl = " << countImageUrl << endl;      //  countImageUrl =\
 5

//  SELECT GROUP_CONCAT(id) FROM users
auto concatedUserId = storage.group_concat(&User::id);      
cout << "concatedUserId = " << concatedUserId << endl;      // \
 concatedUserId = 1,2,3,4,5,6,7,8

//  SELECT GROUP_CONCAT(id, "---") FROM users
auto concatedUserIdWithDashes = storage.group_concat(&User::id, "---");     
cout << "concatedUserIdWithDashes = " << concatedUserIdWithDashes << endl;   \
   //  concatedUserIdWithDashes = 1---2---3---4---5---6---7---8

//  SELECT MAX(id) FROM users
if(auto maxId = storage.max(&User::id)){    
    cout << "maxId = " << *maxId <<endl;    //  maxId = 12  (maxId is\
 std::unique_ptr<int>)
}else{
    cout << "maxId is null" << endl;
}
    
//  SELECT MAX(first_name) FROM users
if(auto maxFirstName = storage.max(&User::firstName)){ 
    cout << "maxFirstName = " << *maxFirstName << endl; //  maxFirstName =\
 Jonh (maxFirstName is std::unique_ptr<std::string>)
}else{
    cout << "maxFirstName is null" << endl;
}

//  SELECT MIN(id) FROM users
if(auto minId = storage.min(&User::id)){    
    cout << "minId = " << *minId << endl;   //  minId = 1 (minId is\
 std::unique_ptr<int>)
}else{
    cout << "minId is null" << endl;
}

//  SELECT MIN(last_name) FROM users
if(auto minLastName = storage.min(&User::lastName)){
    cout << "minLastName = " << *minLastName << endl;   //  minLastName = Doe
}else{
    cout << "minLastName is null" << endl;
}

//  SELECT SUM(id) FROM users
if(auto sumId = storage.sum(&User::id)){    //  sumId is std::unique_ptr<int>
    cout << "sumId = " << *sumId << endl;
}else{
    cout << "sumId is null" << endl;
}

//  SELECT TOTAL(id) FROM users
auto totalId = storage.total(&User::id);
cout << "totalId = " << totalId << endl;    //  totalId is double (always)
```

# Where conditions

You also can select objects with custom where conditions with `=`, `!=`, `>`,\
 `>=`, `<`, `<=`, `IN`, `BETWEEN` and `LIKE`.

For example: let's select users with id lesser than 10:

```c++
//  SELECT * FROM users WHERE id < 10
auto idLesserThan10 = storage.get_all<User>(where(c(&User::id) < 10));
cout << "idLesserThan10 count = " << idLesserThan10.size() << endl;
for(auto &user : idLesserThan10) {
    cout << storage.dump(user) << endl;
}
```

Or select all users who's first name is not equal "John":

```c++
//  SELECT * FROM users WHERE first_name != 'John'
auto notJohn = storage.get_all<User>(where(c(&User::firstName) != "John"));
cout << "notJohn count = " << notJohn.size() << endl;
for(auto &user : notJohn) {
    cout << storage.dump(user) << endl;
}
```

By the way one can implement not equal in a different way using C++ negation\
 operator:

```c++
auto notJohn2 = storage.get_all<User>(where(not (c(&User::firstName) ==\
 "John")));
```

You can use `!` and `not` in this case cause they are equal. Also you can\
 chain several conditions with `and` and `or` operators. Let's try to get\
 users with query with conditions like `where id >= 5 and id <= 7 and not id\
 = 6`:

```c++
auto id5and7 = storage.get_all<User>(where(c(&User::id) <= 7 and c(&User::id)\
 >= 5 and not (c(&User::id) == 6)));
cout << "id5and7 count = " << id5and7.size() << endl;
for(auto &user : id5and7) {
    cout << storage.dump(user) << endl;
}
```

Or let's just export two users with id 10 or id 16 (of course if these users\
 exist):

```c++
auto id10or16 = storage.get_all<User>(where(c(&User::id) == 10 or\
 c(&User::id) == 16));
cout << "id10or16 count = " << id10or16.size() << endl;
for(auto &user : id10or16) {
    cout << storage.dump(user) << endl;
}
```

In fact you can chain together any number of different conditions with any\
 operator from `and`, `or` and `not`. All conditions are templated so there\
 is no runtime overhead. And this makes `sqlite_orm` the most powerful\
 **sqlite** C++ ORM library!

Moreover you can use parentheses to set the priority of query conditions:

```c++
auto cuteConditions = storage.get_all<User>(where((c(&User::firstName) ==\
 "John" or c(&User::firstName) == "Alex") and c(&User::id) == 4));  //  where\
 (first_name = 'John' or first_name = 'Alex') and id = 4
cout << "cuteConditions count = " << cuteConditions.size() << endl; // \
 cuteConditions count = 1
cuteConditions = storage.get_all<User>(where(c(&User::firstName) == "John" or\
 (c(&User::firstName) == "Alex" and c(&User::id) == 4)));   //  where\
 first_name = 'John' or (first_name = 'Alex' and id = 4)
cout << "cuteConditions count = " << cuteConditions.size() << endl; // \
 cuteConditions count = 2
```

Also we can implement `get` by id with `get_all` and `where` like this:

```c++
//  SELECT * FROM users WHERE ( 2 = id )
auto idEquals2 = storage.get_all<User>(where(2 == c(&User::id)));
cout << "idEquals2 count = " << idEquals2.size() << endl;
if(idEquals2.size()){
    cout << storage.dump(idEquals2.front()) << endl;
}else{
    cout << "user with id 2 doesn't exist" << endl;
}
```

Lets try the `IN` operator:

```c++
//  SELECT * FROM users WHERE id IN (2, 4, 6, 8, 10)
auto evenLesserTen10 = storage.get_all<User>(where(in(&User::id, {2, 4, 6, 8,\
 10})));
cout << "evenLesserTen10 count = " << evenLesserTen10.size() << endl;
for(auto &user : evenLesserTen10) {
    cout << storage.dump(user) << endl;
}

//  SELECT * FROM users WHERE last_name IN ("Doe", "White")
auto doesAndWhites = storage.get_all<User>(where(in(&User::lastName, {"Doe",\
 "White"})));
cout << "doesAndWhites count = " << doesAndWhites.size() << endl;
for(auto &user : doesAndWhites) {
    cout << storage.dump(user) << endl;
}
```

And `BETWEEN`:

```c++
//  SELECT * FROM users WHERE id BETWEEN 66 AND 68
auto betweenId = storage.get_all<User>(where(between(&User::id, 66, 68)));
cout << "betweenId = " << betweenId.size() << endl;
for(auto &user : betweenId) {
    cout << storage.dump(user) << endl;
}
```

And even `LIKE`:

```c++
//  SELECT * FROM users WHERE last_name LIKE 'D%'
auto whereNameLike = storage.get_all<User>(where(like(&User::lastName,\
 "D%")));
cout << "whereNameLike = " << whereNameLike.size() << endl;
for(auto &user : whereNameLike) {
    cout << storage.dump(user) << endl;
}
```

Looks like magic but it works very simple. Cute function `c` (column) takes a\
 class member pointer and returns a special expression middle object that can\
 be used with operators overloaded in `::sqlite_orm` namespace. Operator\
 overloads act just like functions

* is_equal
* is_not_equal
* greater_than
* greater_or_equal
* lesser_than
* lesser_or_equal
* is_null
* is_not_null

that simulate binary comparison operator so they take 2 arguments: left hand\
 side and right hand side. Arguments may be either member pointer of mapped\
 class or any other expression (core/aggregate function, literal or\
 subexpression). Binary comparison functions map arguments to text to be\
 passed to sqlite engine to process query. Member pointers are being mapped\
 to column names and literals/variables/constants to '?' and then are bound\
 automatically. Next `where` function places brackets around condition and\
 adds "WHERE" keyword before condition text. Next resulted string appends to\
 a query string and is being processed further.

If you omit `where` function in `get_all` it will return all objects from a\
 table:

```c++
auto allUsers = storage.get_all<User>();
```

Also you can use `remove_all` function to perform `DELETE FROM ... WHERE`\
 query with the same type of conditions.

```c++
storage.remove_all<User>(where(c(&User::id) < 100));
```

# Raw select

If you need to extract only a single column (`SELECT %column_name% FROM\
 %table_name% WHERE %conditions%`) you can use a non-CRUD `select` function:

```c++

//  SELECT id FROM users
auto allIds = storage.select(&User::id);    
cout << "allIds count = " << allIds.size() << endl; //  allIds is\
 std::vector<int>
for(auto &id : allIds) {
    cout << id << " ";
}
cout << endl;

//  SELECT id FROM users WHERE last_name = 'Doe'
auto doeIds = storage.select(&User::id, where(c(&User::lastName) == "Doe"));
cout << "doeIds count = " << doeIds.size() << endl; //  doeIds is\
 std::vector<int>
for(auto &doeId : doeIds) {
    cout << doeId << " ";
}
cout << endl;

//  SELECT last_name FROM users WHERE id < 300
auto allLastNames = storage.select(&User::lastName, where(c(&User::id) <\
 300));    
cout << "allLastNames count = " << allLastNames.size() << endl; // \
 allLastNames is std::vector<std::string>
for(auto &lastName : allLastNames) {
    cout << lastName << " ";
}
cout << endl;

//  SELECT id FROM users WHERE image_url IS NULL
auto idsWithoutUrls = storage.select(&User::id, where(is_null(&User::imageUrl\
)));
for(auto id : idsWithoutUrls) {
    cout << "id without image url " << id << endl;
}

//  SELECT id FROM users WHERE image_url IS NOT NULL
auto idsWithUrl = storage.select(&User::id, where(is_not_null(&User::imageUrl\
)));
for(auto id : idsWithUrl) {
    cout << "id with image url " << id << endl;
}
auto idsWithUrl2 = storage.select(&User::id, where(not is_null(&User::imageUr\
l)));
assert(std::equal(idsWithUrl2.begin(),
                  idsWithUrl2.end(),
                  idsWithUrl.begin()));
```

Also you're able to select several column in a vector of tuples. Example:

```c++
//  `SELECT first_name, last_name FROM users WHERE id > 250 ORDER BY id`
auto partialSelect = storage.select(columns(&User::firstName,\
 &User::lastName),
                                    where(c(&User::id) > 250),
                                    order_by(&User::id));
cout << "partialSelect count = " << partialSelect.size() << endl;
for(auto &t : partialSelect) {
    auto &firstName = std::get<0>(t);
    auto &lastName = std::get<1>(t);
    cout << firstName << " " << lastName << endl;
}
```

# ORDER BY support

ORDER BY query option can be applied to `get_all` and `select` functions just\
 like `where` but with `order_by` function. It can be mixed with WHERE in a\
 single query. Examples:

```c++
//  `SELECT * FROM users ORDER BY id`
auto orderedUsers = storage.get_all<User>(order_by(&User::id));
cout << "orderedUsers count = " << orderedUsers.size() << endl;
for(auto &user : orderedUsers) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id < 250 ORDER BY first_name`
auto orderedUsers2 = storage.get_all<User>(where(c(&User::id) < 250),\
 order_by(&User::firstName));
cout << "orderedUsers2 count = " << orderedUsers2.size() << endl;
for(auto &user : orderedUsers2) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id > 100 ORDER BY first_name ASC`
auto orderedUsers3 = storage.get_all<User>(where(c(&User::id) > 100),\
 order_by(&User::firstName).asc());
cout << "orderedUsers3 count = " << orderedUsers3.size() << endl;
for(auto &user : orderedUsers3) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users ORDER BY id DESC`
auto orderedUsers4 = storage.get_all<User>(order_by(&User::id).desc());
cout << "orderedUsers4 count = " << orderedUsers4.size() << endl;
for(auto &user : orderedUsers4) {
    cout << storage.dump(user) << endl;
}

//  `SELECT first_name FROM users ORDER BY ID DESC`
auto orderedFirstNames = storage.select(&User::firstName, order_by(&User::id)\
.desc());
cout << "orderedFirstNames count = " << orderedFirstNames.size() << endl;
for(auto &firstName : orderedFirstNames) {
    cout << "firstName = " << firstName << endl;
}
```

# LIMIT and OFFSET

There are three available versions of `LIMIT`/`OFFSET` options:

- LIMIT %limit%
- LIMIT %limit% OFFSET %offset%
- LIMIT %offset%, %limit%

All these versions available with the same interface:

```c++
//  `SELECT * FROM users WHERE id > 250 ORDER BY id LIMIT 5`
auto limited5 = storage.get_all<User>(where(c(&User::id) > 250),
                                      order_by(&User::id),
                                      limit(5));
cout << "limited5 count = " << limited5.size() << endl;
for(auto &user : limited5) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id > 250 ORDER BY id LIMIT 5, 10`
auto limited5comma10 = storage.get_all<User>(where(c(&User::id) > 250),
                                             order_by(&User::id),
                                             limit(5, 10));
cout << "limited5comma10 count = " << limited5comma10.size() << endl;
for(auto &user : limited5comma10) {
    cout << storage.dump(user) << endl;
}

//  `SELECT * FROM users WHERE id > 250 ORDER BY id LIMIT 5 OFFSET 10`
auto limit5offset10 = storage.get_all<User>(where(c(&User::id) > 250),
                                            order_by(&User::id),
                                            limit(5, offset(10)));
cout << "limit5offset10 count = " << limit5offset10.size() << endl;
for(auto &user : limit5offset10) {
    cout << storage.dump(user) << endl;
}
```

Please beware that queries `LIMIT 5, 10` and `LIMIT 5 OFFSET 10` mean\
 different. `LIMIT 5, 10` means `LIMIT 10 OFFSET 5`.

# JOIN support

You can perform simple `JOIN`, `CROSS JOIN`, `INNER JOIN`, `LEFT JOIN` or\
 `LEFT OUTER JOIN` in your query. Instead of joined table specify mapped\
 type. Example for doctors and visits:

```c++
//  SELECT a.doctor_id, a.doctor_name,
//      c.patient_name, c.vdate
//  FROM doctors a
//  LEFT JOIN visits c
//  ON a.doctor_id=c.doctor_id;
auto rows = storage2.select(columns(&Doctor::id, &Doctor::name,\
 &Visit::patientName, &Visit::vdate),
                            left_join<Visit>(on(c(&Doctor::id) ==\
 &Visit::doctorId)));  //  one `c` call is enough cause operator overloads\
 are templated
for(auto &row : rows) {
    cout << std::get<0>(row) << '\t' << std::get<1>(row) << '\t' <<\
 std::get<2>(row) << '\t' << std::get<3>(row) << endl;
}
cout << endl;
```

Simple `JOIN`:

```c++
//  SELECT a.doctor_id,a.doctor_name,
//      c.patient_name,c.vdate
//  FROM doctors a
//  JOIN visits c
//  ON a.doctor_id=c.doctor_id;
rows = storage2.select(columns(&Doctor::id, &Doctor::name,\
 &Visit::patientName, &Visit::vdate),
                       join<Visit>(on(c(&Doctor::id) == &Visit::doctorId)));
for(auto &row : rows) {
    cout << std::get<0>(row) << '\t' << std::get<1>(row) << '\t' <<\
 std::get<2>(row) << '\t' << std::get<3>(row) << endl;
}
cout << endl;
```

Two `INNER JOIN`s in one query:

```c++
//  SELECT
//      trackid,
//      tracks.name AS Track,
//      albums.title AS Album,
//      artists.name AS Artist
//  FROM
//      tracks
//  INNER JOIN albums ON albums.albumid = tracks.albumid
//  INNER JOIN artists ON artists.artistid = albums.artistid;
auto innerJoinRows2 = storage.select(columns(&Track::trackId, &Track::name,\
 &Album::title, &Artist::name),
                                     inner_join<Album>(on(c(&Album::albumId)\
 == &Track::albumId)),
                                     inner_join<Artist>(on(c(&Artist::artistI\
d) == &Album::artistId)));
//  innerJoinRows2 is std::vector<std::tuple<decltype(Track::trackId),\
 decltype(Track::name), decltype(Album::title), decltype(Artist::name)>>
```

More join examples can be found in [examples folder](https://github.com/fnc12\
/sqlite_orm/blob/master/examples/left_and_inner_join.cpp).

# Migrations functionality

There are no explicit `up` and `down` functions that are used to be used in\
 migrations. Instead `sqlite_orm` offers `sync_schema` function that takes\
 responsibility of comparing actual db file schema with one you specified in\
 `make_storage` call and if something is not equal it alters or drops/creates\
 schema.

```c++
storage.sync_schema();
//  or
storage.sync_schema(true);
```

Please beware that `sync_schema` doesn't guarantee that data will be saved.\
 It *tries* to save it only. Below you can see rules list that `sync_schema`\
 follows during call:
* if there are excess tables exist in db they are ignored (not dropped)
* every table from storage is compared with it's db analog and 
    * if table doesn't exist it is created
    * if table exists its colums are being compared with table_info from db\
 and
        * if there are columns in db that do not exist in storage (excess)\
 table will be dropped and recreated if `preserve` is `false`, and table will\
 be copied into temporary table without excess columns, source table will be\
 dropped, copied table will be renamed to source table (sqlite remove column\
 technique) if `preserve` is `true`. `preserve` is the first argument in\
 `sync_schema` function. It's default value is `false`. Beware that setting\
 it to `true` may take time for copying table rows.
        * if there are columns in storage that do not exist in db they will\
 be added using 'ALTER TABLE ... ADD COLUMN ...' command and table data will\
 not be dropped but if any of added columns is null but has not default value\
 table will be dropped and recreated
        * if there is any column existing in both db and storage but differs\
 by any of properties (type, pk, notnull) table will be dropped and recreated\
 (dflt_value isn't checked cause there can be ambiguity in default values,\
 please beware).

The best practice is to call this function right after storage creation.

# Transactions

There are three ways to begin and commit/rollback transactions:
* explicitly call `begin_transaction();`, `rollback();` or `commit();`\
 functions
* use `transaction` function which begins transaction implicitly and takes a\
 lambda argument which returns true for commit and false for rollback. All\
 storage calls performed in lambda can be commited or rollbacked by returning\
 `true` or `false`.
* use `transaction_guard` function which returns a guard object which works\
 just like `lock_guard` for `std::mutex`.

Example for explicit call:

```c++
auto secondUser = storage.get<User>(2);

storage.begin_transaction();
secondUser.typeId = 3;
storage.update(secondUser);
storage.rollback(); //  or storage.commit();

secondUser = storage.get<decltype(secondUser)>(secondUser.id);
assert(secondUser.typeId != 3);
```

Example for implicit call:

```c++
storage.transaction([&] () mutable {    //  mutable keyword allows make\
 non-const function calls
    auto secondUser = storage.get<User>(2);
    secondUser.typeId = 1;
    storage.update(secondUser);
    auto gottaRollback = bool(rand() % 2);
    if(gottaRollback){  //  dummy condition for test
        return false;   //  exits lambda and calls ROLLBACK
    }
    return true;        //  exits lambda and calls COMMIT
});
```

The second way guarantees that `commit` or `rollback` will be called. You can\
 use either way.

Trancations are useful with `changes` sqlite function that returns number of\
 rows modified.

```c++
storage.transaction([&] () mutable {
    storage.remove_all<User>(where(c(&User::id) < 100));
    auto usersRemoved = storage.changes();
    cout << "usersRemoved = " << usersRemoved << endl;
    return true;
});
```

It will print a number of deleted users (rows). But if you call `changes`\
 without a transaction and your database is located in file not in RAM the\
 result will be 0 always cause `sqlite_orm` opens and closes connection every\
 time you call a function without a transaction.

Also a `transaction` function returns `true` if transaction is commited and\
 `false` if it is rollbacked. It can be useful if your next actions depend on\
 transaction result:

```c++
auto commited = storage.transaction([&] () mutable {    
    auto secondUser = storage.get<User>(2);
    secondUser.typeId = 1;
    storage.update(secondUser);
    auto gottaRollback = bool(rand() % 2);
    if(gottaRollback){  //  dummy condition for test
        return false;   //  exits lambda and calls ROLLBACK
    }
    return true;        //  exits lambda and calls COMMIT
});
if(commited){
    cout << "Commited successfully, go on." << endl;
}else{
    cerr << "Commit failed, process an error" << endl;
}
```

Example for `transaction_guard` function:

```c++
try{
  auto guard = storage.transaction_guard(); //  calls BEGIN TRANSACTION and\
 returns guard object
  user.name = "Paul";
  auto notExisting = storage.get<User>(-1); //  exception is thrown here,\
 guard calls ROLLBACK in its destructor
  guard.commit();
}catch(...){
  cerr << "exception" << endl;
}
```

# In memory database

To manage in memory database just provide `:memory:` or `""` instead as\
 filename to `make_storage`.

# Comparison with other C++ libs

|   |sqlite_orm|[SQLiteCpp](https://github.com/SRombauts/SQLiteCpp)|[hiberlit\
e](https://github.com/paulftw/hiberlite)|[ODB](https://www.codesynthesis.com/\
products/odb/)|
|---|:---:|:---:|:---:|:---:|
|Schema sync|yes|no|yes|no|
|Single responsibility principle|yes|yes|no|no|
|STL compatible|yes|no|no|no|
|No raw string queries|yes|no|yes|yes|
|Transactions|yes|yes|no|yes|
|Custom types binding|yes|no|yes|yes|
|Doesn't use macros and/or external codegen scripts|yes|yes|no|no|
|Aggregate functions|yes|yes|no|yes|
|Prepared statements|yes|yes|no|no|

# Notes

To work well your data model class must be default constructable and must not\
 have const fields mapped to database cause they are assigned during queries.\
 Otherwise code won't compile on line with member assignment operator.

For more details please check the project [wiki](https://github.com/fnc12/sql\
ite_orm/wiki).

# Installation

**Note**: Installation is not necessary if you plan to use the fetchContent\
 method, see below in Usage.

Use a popular package manager like [vcpkg](https://github.com/Microsoft/vcpkg\
) and just install it with the `vcpkg install sqlite-orm` command.

Or you build it from source:

```bash
git clone https://github.com/fnc12/sqlite_orm.git sqlite_orm
cd sqlite_orm
cmake -B build
cmake --build build --target install
```
You might need admin rights for the last command.

# Usage

## CMake

If you use cmake, there are two supported ways how to use it with cmake (if\
 another works as well or should be supported, open an issue). 

Either way you choose, the include path as well as the dependency sqlite3\
 will be set automatically on your target. So usage is straight forward, but\
 you need to have installed sqlite3 on your system (see Requirements below)

## Find Package

If you have installed the lib system wide and it's in your PATH, you can use\
 find_package to include it in cmake. It will make a target\
 `sqlite_orm::sqlite_orm` available which you can link against. Have a look\
 at examples/find_package for a full example.

```cmake
find_package(SqliteOrm REQUIRED)

target_link_libraries(main PRIVATE sqlite_orm::sqlite_orm)
```

## Fetch Content (Recommended)

Alternatively, cmake can download the project directly from github during\
 configure stage and therefore you don't need to install the lib before.
Againt a target `sqlite_orm::sqlite_orm` will be available which you can link\
 against. Have a look at examples/fetch_content for a full example.

## No CMake

If you want to use the lib directly with Make or something else, just set the\
 inlcude path correctly (should be correct on Linux already), so\
 `sqlite_orm/sqlite_orm.h` is found. As this is a header only lib, there is\
 nothing more you have to do.

# Requirements

* C++14 compatible compiler (not C++11 cause of templated lambdas in the lib).
* Sqlite3 installed on your system and in the path, so cmake can find it (or\
 linked to you project if you don't use cmake)

# Video from conference

[![Video from conference](https://img.youtube.com/vi/ngsilquWgpo/0.jpg)](http\
s://www.youtube.com/watch?v=ngsilquWgpo)

# SqliteMan

In case you need a native SQLite client for macOS or Windows 10 you can use\
 SqliteMan https://sqliteman.dev. It is not a commercial. It is a free native\
 client being developed by the maintainer of this repo.

\
description-type: text/markdown;variant=GFM
url: https://sqliteorm.com/
doc-url: https://sqliteorm.com/docs
src-url: https://github.com/fnc12/sqlite_orm
package-url: https://github.com/build2-packaging/sqlite_orm
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: catch2 ^3.0.0
requires: c++14
builds: &( +clang-14+ +gcc +msvc )
bootstrap-build:
\
project = libsqlite_orm-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

cxx{*}: extension = cpp
hxx{*}: extension = h

# Assume headers are importable unless stated otherwise.
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

exe{*}: test = true

\
location: sqlite_orm/libsqlite_orm-tests-1.8.1+1.tar.gz
sha256sum: b7516e6eb8ed15efb7e1edfae44bcc1a2fcc96930b16c67d49f7eb9089e070b5
:
name: libssl
version: 1.1.1+21
upstream-version: 1.1.1u
project: openssl
priority: security
summary: C library providing SSLv3 and TLS implementations
license: OpenSSL; OpenSSL and Original SSLeay Licenses.
topics: C, TLS, SSL, cryptography
description:
\
OpenSSL is a robust, commercial-grade, and full-featured toolkit for the
Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols with
libssl C library providing the client and server-side implementations for
SSLv3 and TLS. For more information see:

https://www.openssl.org

This package contains the original libssl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the OpenSSL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of libssl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/openssl/

\
description-type: text/plain
url: https://www.openssl.org/
doc-url: https://www.openssl.org/docs/man1.1.1/man3/
src-url: https://git.build2.org/cgit/packaging/openssl/openssl/tree/libssl/
package-url: https://git.build2.org/cgit/packaging/openssl/
email: openssl-users@openssl.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libcrypto == 1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : OpenSSL and SSLeay Licenses; see accompanying LICENSE file

project = libssl

using version
using config
using test
using install
using dist

# Sync with the libcrypto library ABI version (see libcrypto's bootstrap.build
# for details).
#
if ($version.major == 1 && $version.minor == 1 && $version.patch == 1)
  abi_version = '1.1'
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : OpenSSL and SSLeay Licenses; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: openssl/libssl-1.1.1+21.tar.gz
sha256sum: c42a27bf33f35ce630b3a83c06fc9c591aa8e10af2e483ff927270e056f59919
:
name: libssl
version: 3.3.1
project: openssl
summary: C library providing SSLv3 and TLS implementations
license: Apache-2.0; Apache License 2.0.
topics: C, TLS, SSL, cryptography
description:
\
OpenSSL is a robust, commercial-grade, and full-featured toolkit for the
Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols with
libssl C library providing the client and server-side implementations for
SSLv3 and TLS. For more information see:

https://www.openssl.org

This package contains the original libssl library source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the OpenSSL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of libssl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/openssl/

\
description-type: text/plain
url: https://www.openssl.org/
doc-url: https://docs.openssl.org/3.3/man3/
src-url: https://git.build2.org/cgit/packaging/openssl/openssl/tree/libssl/
package-url: https://git.build2.org/cgit/packaging/openssl/
email: openssl-users@openssl.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libcrypto == 3.3.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0; see accompanying LICENSE file

project = libssl

using version
using config
using test
using install
using dist

# Sync with the libcrypto library ABI version (see libcrypto's bootstrap.build
# for details).
#
if ($version.major == 3)
  abi_version = 3
else
  fail 'increment the ABI version?'

\
root-build:
\
# file      : build/root.build
# license   : Apache License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: openssl/libssl-3.3.1.tar.gz
sha256sum: 35772d524f1c9c71547c2de4dabc5aa0390cb82292e9f9005cbcd69737e59985
:
name: libstud-optional
version: 1.0.0
project: libstud
summary: std::optional library for C++14
license: MIT; MIT License.
topics: C++14, standard library
description:
\
# libstud-optional - `std::optional` library for C++14

A reasonably-conforming `optional` class template implementation for C++14
that automatically "falls forward" to `std::optional` if available.

Supported compilers are GCC >= 4.9, Clang >= 3.7, and MSVC >= 14.3.

\
description-type: text/markdown;variant=GFM
changes:
\
Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://github.com/libstud/libstud-optional
email: libstud-authors@build2.org
build-warning-email: libstud-authors@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
builds: all
bootstrap-build:
\
project = libstud-optional

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libstud/libstud-optional-1.0.0.tar.gz
sha256sum: 5ae2487e81b95335c25b89b61390353a84a31c93f51a88151d8ca635bcfddbe4
:
name: libstud-uuid
version: 1.0.3
project: libstud
summary: Portable UUID generation library for C++
license: MIT
topics: C++, UUID, identification
keywords: guid
description:
\
# libstud-uuid - UUID generation library for C++

A portable, dependency-free, MIT-licensed UUID generation library for C++ that
makes sure the generated IDs are actually unique.

Typical usage:

```
#include <string>
#include <iostream>

#include <libstud/uuid/uuid.hxx>
#include <libstud/uuid/uuid-io.hxx>

int main ()
{
  using stud::uuid;
  using namespace std;

  uuid u (uuid::generate ()); // Make strong ID using system generator.
  string s (u.string ());     // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  cout << u << endl;          // Print string representation.
}
```

See the [`libstud/uuid/uuid.hxx`][uuid.hxx] header for interface details. See
the [`NEWS`][news] file for changes.

Supported platforms:

* Linux
* Windows
* Mac OS
* FreeBSD

Supported compilers:

* GCC 4.9 or later
* Clang 3.8 or later
* MSVC  14.3 or later

[news]:     https://github.com/libstud/libstud-uuid/blob/master/NEWS
[uuid.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uuid/\
uuid.hxx

\
description-type: text/markdown;variant=GFM
changes:
\
Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://github.com/libstud/libstud-uuid
email: boris@codesynthesis.com
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
builds: all
bootstrap-build:
\
project = libstud-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libstud/libstud-uuid-1.0.3.tar.gz
sha256sum: d87116720c4b8ac2f07ef5e71007dc94b6bf3db1e82c146cc387f3f5a1589baa
:
name: libstud-uuid
version: 1.0.4
project: libstud
summary: Portable UUID generation library for C++
license: MIT; MIT License.
topics: C++, UUID, identification
keywords: guid
description:
\
# libstud-uuid - UUID generation library for C++

A portable, dependency-free, MIT-licensed UUID generation library for C++ that
makes sure the generated IDs are actually unique.

Typical usage:

```
#include <string>
#include <iostream>

#include <libstud/uuid/uuid.hxx>
#include <libstud/uuid/uuid-io.hxx>

int main ()
{
  using stud::uuid;
  using namespace std;

  uuid u (uuid::generate ()); // Make strong ID using system generator.
  string s (u.string ());     // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  cout << u << endl;          // Print string representation.
}
```

See the [`libstud/uuid/uuid.hxx`][uuid.hxx] header for interface details and
the [`NEWS`][news] file for changes. See the [`cppget.org/libstud-uuid`][pkg]
package page for build status.


[news]:     https://github.com/libstud/libstud-uuid/blob/master/NEWS
[uuid.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uuid/\
uuid.hxx
[pkg]:      https://cppget.org/libstud-uuid

\
description-type: text/markdown;variant=GFM
changes:
\
Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://github.com/libstud/libstud-uuid
email: boris@codesynthesis.com
build-warning-email: boris@codesynthesis.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
project = libstud-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libstud/libstud-uuid-1.0.4.tar.gz
sha256sum: 15143557f58269ee0239f8c767fb615aa5516c4720e3f0c2de181e93b0230042
:
name: libstud-uuid
version: 1.0.5
project: libstud
summary: Portable UUID generation library for C++
license: MIT; MIT License.
topics: C++, UUID, identification
keywords: guid
description:
\
# libstud-uuid - UUID generation library for C++

A portable, dependency-free, MIT-licensed UUID generation library for C++ that
makes sure the generated IDs are actually unique.

Typical usage:

```
#include <string>
#include <iostream>

#include <libstud/uuid.hxx>

int main ()
{
  using stud::uuid;
  using namespace std;

  uuid u (uuid::generate ()); // Make strong ID using system generator.
  string s (u.string ());     // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  cout << u << endl;          // Print string representation.
}
```

See the [`libstud/uuid/uuid.hxx`][uuid.hxx] and
[`libstud/uuid/uuid-io.hxx`][uuid-io.hxx] headers for interface details and
the [`NEWS`][news] file for changes. See the [`cppget.org/libstud-uuid`][pkg]
package page for build status.


[news]:     https://github.com/libstud/libstud-uuid/blob/master/NEWS
[uuid.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uuid/\
uuid.hxx
[uuid-io.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uu\
id/uuid-io.hxx
[pkg]:      https://cppget.org/libstud-uuid

\
description-type: text/markdown;variant=GFM
changes:
\
Version 1.0.5

  * Add the <libstud/uuid.hxx> convenience header.

  * Add support for Emscripten.

    Note that currently only weak UUIDs can be generated on this platform.

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://github.com/libstud/libstud-uuid
email: libstud-authors@build2.org
build-warning-email: libstud-authors@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
builds: all
bootstrap-build:
\
project = libstud-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libstud/libstud-uuid-1.0.5.tar.gz
sha256sum: 5793cf9fafc9f37af2c680db88cc3728f427db5c24566736114df665e7c29093
:
name: libstud-uuid
version: 1.0.6+2
project: libstud
summary: Portable UUID generation library for C++
license: MIT; MIT License.
topics: C++, UUID, identification
keywords: guid
description:
\
# libstud-uuid - UUID generation library for C++

A portable, dependency-free, MIT-licensed UUID generation library for C++ that
tries to make reasonably sure the generated IDs are unique.

Specifically, the implementation calls platform-specific APIs that were
carefully analyzed for uniqueness guarantees (good source of randomness, time
collision prevention, etc). If an API does not explicitly provide such
guarantees or if such guarantees are only provided for certain UUID versions,
then the implementation will refuse to return such a UUID if a strong
uniqueness was requested.

Typical usage:

```
#include <string>
#include <iostream>

#include <libstud/uuid.hxx>

int main ()
{
  using stud::uuid;
  using namespace std;

  uuid u (uuid::generate ()); // Make strong ID using system generator.
  string s (u.string ());     // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  cout << u << endl;          // Print string representation.
}
```

See the [`libstud/uuid/uuid.hxx`][uuid.hxx] and
[`libstud/uuid/uuid-io.hxx`][uuid-io.hxx] headers for interface details and
the [`NEWS`][news] file for changes. See the [`cppget.org/libstud-uuid`][pkg]
package page for build status.


[news]:     https://github.com/libstud/libstud-uuid/blob/master/NEWS
[uuid.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uuid/\
uuid.hxx
[uuid-io.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uu\
id/uuid-io.hxx
[pkg]:      https://cppget.org/libstud-uuid

\
description-type: text/markdown;variant=GFM
changes:
\
Version 1.0.6

  * Add support for OpenBSD.

    Strong UUIDs should be available at least from OpenBSD 6.4.

Version 1.0.5

  * Add the <libstud/uuid.hxx> convenience header.

  * Add support for Emscripten.

    Note that currently only weak UUIDs can be generated on this platform.

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://github.com/libstud/libstud-uuid
email: libstud-authors@build2.org
build-warning-email: libstud-authors@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
builds: all
bootstrap-build:
\
project = libstud-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libstud/libstud-uuid-1.0.6+2.tar.gz
sha256sum: e4f0ca67eb6c5034b79510b6b7bbce33b84d8885f462f67336b42de7dc839ec6
:
name: libstud-uuid
version: 1.0.7
project: libstud
summary: Portable UUID generation library for C++
license: MIT; MIT License.
topics: C++, UUID, identification
keywords: guid
description:
\
# libstud-uuid - UUID generation library for C++

A portable, dependency-free, MIT-licensed UUID generation library for C++ that
tries to make reasonably sure the generated IDs are unique.

Specifically, the implementation calls platform-specific APIs that were
carefully analyzed for uniqueness guarantees (good source of randomness, time
collision prevention, etc). If an API does not explicitly provide such
guarantees or if such guarantees are only provided for certain UUID versions,
then the implementation will refuse to return such a UUID if a strong
uniqueness was requested.

Typical usage:

```
#include <string>
#include <iostream>

#include <libstud/uuid.hxx>

int main ()
{
  using stud::uuid;
  using namespace std;

  uuid u (uuid::generate ()); // Make strong ID using system generator.
  string s (u.string ());     // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  cout << u << endl;          // Print string representation.
}
```

See the [`libstud/uuid/uuid.hxx`][uuid.hxx] and
[`libstud/uuid/uuid-io.hxx`][uuid-io.hxx] headers for interface details and
the [`NEWS`][news] file for changes. See the [`cppget.org/libstud-uuid`][pkg]
package page for build status.


[news]:     https://github.com/libstud/libstud-uuid/blob/master/NEWS
[uuid.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uuid/\
uuid.hxx
[uuid-io.hxx]: https://github.com/libstud/libstud-uuid/blob/master/libstud/uu\
id/uuid-io.hxx
[pkg]:      https://cppget.org/libstud-uuid

\
description-type: text/markdown;variant=GFM
changes:
\
Version 1.0.7

  * Make move constructor/assignment noexcept.

  * Use snprintf() instead of sprintf() to avoid warnings.

Version 1.0.6

  * Add support for OpenBSD.

    Strong UUIDs should be available at least from OpenBSD 6.4.

Version 1.0.5

  * Add the <libstud/uuid.hxx> convenience header.

  * Add support for Emscripten.

    Note that currently only weak UUIDs can be generated on this platform.

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://github.com/libstud/libstud-uuid
email: libstud-authors@build2.org
build-warning-email: libstud-authors@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
builds: all
bootstrap-build:
\
project = libstud-uuid

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libstud/libstud-uuid-1.0.7.tar.gz
sha256sum: 25cbf121ddd199733b3b68c58fd298e625871b08b13e358ce9237853fee3784d
:
name: libstudxml
version: 1.1.0
summary: Streaming XML pull parser/serializer for C++11
license: MIT
topics: C++, XML, XML parser, XML serializer
description:
\
libstudxml is a streaming XML pull parser and streaming XML serializer
implementation for modern, standard C++. It has an API that we believe
should have already been in Boost or even in the C++ standard library.
For more information see:

http://www.codesynthesis.com/projects/libstudxml/

See the NEWS file for the user-visible changes from the previous release.

See the LICENSE file for distribution conditions.

See the INSTALL file for prerequisites and installation instructions.

See the doc/ directory for the API documentation.

See the examples/ directory for examples. See examples/README for an
overview of the provided examples as well as the README file in each
example directory for more details on any particular example.

See the tests/ directory for the test suite.

Send questions, bug reports, or any other feedback to the
studxml-users@codesynthesis.com mailing list.

\
description-type: text/plain
changes:
\
Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/projects/libstudxml/
doc-url: https://www.codesynthesis.com/projects/libstudxml/doc/intro.xhtml
src-url: https://git.codesynthesis.com/cgit/libstudxml/libstudxml/
email: studxml-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libexpat ^2.1.0 ? ($config.libstudxml.external_expat)
requires: c++11
builds: all
external-expat-build-config: config.libstudxml.external_expat=true
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : MIT; see accompanying LICENSE file

project = libstudxml

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : MIT; see accompanying LICENSE file

# Allow using the external Expat library as a dependency instead of the
# bundled version.
#
config [bool] config.libstudxml.external_expat ?= false

cxx.std = latest

using cxx

hxx{*}: extension = hxx
cxx{*}: extension = cxx
ixx{*}: extension = ixx
txx{*}: extension = txx

using c

if ($cxx.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

\
location: libstudxml/libstudxml-1.1.0.tar.gz
sha256sum: bcf8d86b137c1660b0e8684403fbb14376d0b106fa2089fd8646ebd65f01c956
:
name: libtinycbor
version: 0.6.0
project: tinycbor
summary: Concise Binary Object Representation (CBOR) library
license: MIT
description:
\
# libtinycbor

Concise Binary Object Representation (CBOR) library.

For documentation, see https://intel.github.io/tinycbor/current/

Note that unlike upstream, this package expects you to include the library's
header as `<libtinycbor/cbor.h>` rather `<cbor.h>` in order to avoid conflict
with other CBOR libraries (which also naturally have the `cbor.h` header).

\
description-type: text/markdown;variant=GFM
url: https://github.com/intel/tinycbor/
doc-url: https://intel.github.io/tinycbor/current/
src-url: https://github.com/intel/tinycbor/
package-url: https://github.com/build2-packaging/tinycbor
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = libtinycbor

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: tinycbor/libtinycbor-0.6.0.tar.gz
sha256sum: 094ea22d72dfe6f5afdabf7b4ab1e6518391b3cf5e3d1be4247d4046cfa1f636
:
name: libtinyexr
version: 1.0.6+1
type: lib,binless
language: c++
project: tinyexr
summary: Tiny OpenEXR image loader/saver library
license: BSD-3-Clause
description:
\
# Tiny OpenEXR image library.

![Example](https://github.com/syoyo/tinyexr/blob/release/asakusa.png?raw=true)

[![AppVeyor build status](https://ci.appveyor.com/api/projects/status/k07ftfe\
4ph057qau/branch/release?svg=true)](https://ci.appveyor.com/project/syoyo/tin\
yexr/branch/release)

[![Coverity Scan Build Status](https://scan.coverity.com/projects/5827/badge.\
svg)](https://scan.coverity.com/projects/5827)

`tinyexr` is a small, single header-only library to load and save OpenEXR\
 (.exr) images.
`tinyexr` is written in portable C++ (no library dependency except for STL),\
 thus `tinyexr` is good to embed into your application.
To use `tinyexr`, simply copy `tinyexr.h`, `miniz.c` and `miniz.h`(for zlib.\
 You can use system-installed zlib instead of miniz, or the zlib\
 implementation included in `stb_image[_write].h`. Controlled with\
 `TINYEXR_USE_MINIZ` and `TINYEXR_USE_STB_ZLIB` compile flags) into your\
 project.

# Security

TinyEXR does not use C++ exception.

TinyEXR now does not use `assert` from v1.0.4(2023/06/04), except for miniz's\
 assert.
(We plan to use wuff's zlib for better security and performance)

TinyEXR is fuzz tested and **currently no security issues**(No seg fault for\
 any malcious/corrupted input EXR data) as of v1.0.4.

# Features

Current status of `tinyexr` is:

- OpenEXR v1 image
  - [x] Scanline format
  - [x] Tiled format
    - [x] Tile format with no LoD (load).
    - [x] Tile format with LoD (load).
    - [x] Tile format with no LoD (save).
    - [x] Tile format with LoD (save).
  - [x] Custom attributes
- OpenEXR v2 image
  - [ ] Multipart format
    - [x] Load multi-part image
    - [x] Save multi-part image
    - [ ] Load multi-part deep image
    - [ ] Save multi-part deep image
- OpenEXR v2 deep image
  - [x] Loading scanline + ZIPS + HALF or FLOAT pixel type.
- Compression
  - [x] NONE
  - [x] RLE
  - [x] ZIP
  - [x] ZIPS
  - [x] PIZ
  - [x] ZFP (tinyexr extension)
  - [ ] B44?
  - [ ] B44A?
  - [ ] PIX24?
  - [ ] DWA (not planned, patent encumbered)
- Line order.
  - [x] Increasing, decreasing (load)
  - [ ] Random?
  - [x] Increasing (save)
  - [ ] decreasing (save)
- Pixel format (UINT, FLOAT).
  - [x] UINT, FLOAT (load)
  - [x] UINT, FLOAT (deep load)
  - [x] UINT, FLOAT (save)
  - [ ] UINT, FLOAT (deep save)
- Support for big endian machine.
  - [x] Loading scanline image
  - [x] Saving scanline image
  - [x] Loading multi-part channel EXR (not tested)
  - [x] Saving multi-part channel EXR (not tested)
  - [ ] Loading deep image
  - [ ] Saving deep image
- Optimization
  - [x] C++11 thread loading
  - [ ] C++11 thread saving
  - [ ] ISPC?
  - [x] OpenMP multi-threading in EXR loading.
  - [x] OpenMP multi-threading in EXR saving.
  - [ ] OpenMP multi-threading in deep image loading.
  - [ ] OpenMP multi-threading in deep image saving.
* C interface.
  * You can easily write language bindings (e.g. golang)

# Supported platform

* [x] x86-64
  * [x] Windows 7 or later
  * [x] Linux(posix) system
  * [x] macOS
* [x] AARCH64
  * [x] aarch64 linux(e.g. Raspberry Pi)
  * [x] Android
  * [x] iOS
  * [x] macOS
* [ ] RISC-V(Should work)
* [x] Big endian machine(not maintained, but should work)
  * SPARC, PowerPC, ...
* [x] WebAssembly(JavaScript)
  * Loader only(See ![js](experimental/js/))
* [x] Python binding
  * Loader only https://pypi.org/project/pytinyexr/

# Requirements

* C++ compiler(C++11 recommended. C++03 may work)

# Use case

## New TinyEXR (v0.9.5+)

* Godot. Multi-platform 2D and 3D game engine https://godotengine.org/
* Filament. PBR engine(used in a converter tool). https://github.com/google/f\
ilament
* PyEXR. Loading OpenEXR (.exr) images using Python. https://github.com/ialha\
shim/PyEXR
* The-Forge. The Forge Cross-Platform Rendering Framework PC, Linux, Ray\
 Tracing, macOS / iOS, Android, XBOX, PS4 https://github.com/ConfettiFX/The-F\
orge
* psdr-cuda. Path-space differentiable renderer. https://github.com/uci-rende\
ring/psdr-cuda
* Studying Microfacets BSDFs https://virtualgonio.pages.xlim.fr/
* Your project here!

## Older TinyEXR (v0.9.0)

* mallie https://github.com/lighttransport/mallie
* Cinder 0.9.0 https://libcinder.org/notes/v0.9.0
* Piccante (develop branch) http://piccantelib.net/
* Your project here!

## Examples

* [examples/deepview/](examples/deepview) Deep image view
* [examples/rgbe2exr/](examples/rgbe2exr) .hdr to EXR converter
* [examples/exr2rgbe/](examples/exr2rgbe) EXR to .hdr converter
* [examples/ldr2exr/](examples/exr2rgbe) LDR to EXR converter
* [examples/exr2ldr/](examples/exr2ldr) EXR to LDR converter
* [examples/exr2fptiff/](examples/exr2fptiff) EXR to 32bit floating point\
 TIFF converter
  * for 32bit floating point TIFF to EXR convert, see https://github.com/syoy\
o/tinydngloader/tree/release/examples/fptiff2exr
* [examples/cube2longlat/](examples/cube2longlat) Cubemap to longlat\
 (equirectangler) converter

## Experimental

* [experimental/js/](experimental/js) JavaScript port using Emscripten

## Usage

NOTE: **API is still subject to change**. See the source code for details.

Include `tinyexr.h` with `TINYEXR_IMPLEMENTATION` flag (do this only for\
 **one** .cc file).

```cpp
//Please include your own zlib-compatible API header before
//including `tinyexr.h` when you disable `TINYEXR_USE_MINIZ`
//#define TINYEXR_USE_MINIZ 0
//#include "zlib.h"
//Or, if your project uses `stb_image[_write].h`, use their
//zlib implementation:
//#define TINYEXR_USE_STB_ZLIB 1
#define TINYEXR_IMPLEMENTATION
#include "tinyexr.h"
```

### Compile flags

* `TINYEXR_USE_MINIZ` Use miniz (default = 1). Please include `zlib.h` header\
 before `tinyexr.h` if you disable miniz support(e.g. use system's zlib).
* `TINYEXR_USE_STB_ZLIB` Use zlib from `stb_image[_write].h` instead of miniz\
 or the system's zlib (default = 0).
* `TINYEXR_USE_PIZ` Enable PIZ compression support (default = 1)
* `TINYEXR_USE_ZFP` Enable ZFP compression supoort (TinyEXR extension,\
 default = 0)
* `TINYEXR_USE_THREAD` Enable threaded loading using C++11 thread (Requires\
 C++11 compiler, default = 0)
* `TINYEXR_USE_OPENMP` Enable OpenMP threading support (default = 1 if\
 `_OPENMP` is defined)
  * Use `TINYEXR_USE_OPENMP=0` to force disable OpenMP code path even if\
 OpenMP is available/enabled in the compiler.

### Quickly reading RGB(A) EXR file.

```cpp
  const char* input = "asakusa.exr";
  float* out; // width * height * RGBA
  int width;
  int height;
  const char* err = NULL; // or nullptr in C++11

  int ret = LoadEXR(&out, &width, &height, input, &err);

  if (ret != TINYEXR_SUCCESS) {
    if (err) {
       fprintf(stderr, "ERR : %s\n", err);
       FreeEXRErrorMessage(err); // release memory of error message.
    }
  } else {
    ...
    free(out); // release memory of image data
  }

```

### Reading layered RGB(A) EXR file.

If you want to read EXR image with layer info (channel has a name with\
 delimiter `.`), please use `LoadEXRWithLayer` API.

You need to know layer name in advance (e.g. through `EXRLayers` API).

```cpp
  const char* input = ...;
  const char* layer_name = "diffuse"; // or use EXRLayers to get list of\
 layer names in .exr
  float* out; // width * height * RGBA
  int width;
  int height;
  const char* err = NULL; // or nullptr in C++11

  // will read `diffuse.R`, `diffuse.G`, `diffuse.B`, (`diffuse.A`) channels
  int ret = LoadEXRWithLayer(&out, &width, &height, input, layer_name, &err);

  if (ret != TINYEXR_SUCCESS) {
    if (err) {
       fprintf(stderr, "ERR : %s\n", err);
       FreeEXRErrorMessage(err); // release memory of error message.
    }
  } else {
    ...
    free(out); // release memory of image data
  }

```

### Loading Singlepart EXR from a file.

Scanline and tiled format are supported.

```cpp
  // 1. Read EXR version.
  EXRVersion exr_version;

  int ret = ParseEXRVersionFromFile(&exr_version, argv[1]);
  if (ret != 0) {
    fprintf(stderr, "Invalid EXR file: %s\n", argv[1]);
    return -1;
  }

  if (exr_version.multipart) {
    // must be multipart flag is false.
    return -1;
  }

  // 2. Read EXR header
  EXRHeader exr_header;
  InitEXRHeader(&exr_header);

  const char* err = NULL; // or `nullptr` in C++11 or later.
  ret = ParseEXRHeaderFromFile(&exr_header, &exr_version, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  // // Read HALF channel as FLOAT.
  // for (int i = 0; i < exr_header.num_channels; i++) {
  //   if (exr_header.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) {
  //     exr_header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;
  //   }
  // }

  EXRImage exr_image;
  InitEXRImage(&exr_image);

  ret = LoadEXRImageFromFile(&exr_image, &exr_header, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Load EXR err: %s\n", err);
    FreeEXRHeader(&exr_header);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  // 3. Access image data
  // `exr_image.images` will be filled when EXR is scanline format.
  // `exr_image.tiled` will be filled when EXR is tiled format.

  // 4. Free image data
  FreeEXRImage(&exr_image);
  FreeEXRHeader(&exr_header);
```

### Loading Multipart EXR from a file.

Scanline and tiled format are supported.

```cpp
  // 1. Read EXR version.
  EXRVersion exr_version;

  int ret = ParseEXRVersionFromFile(&exr_version, argv[1]);
  if (ret != 0) {
    fprintf(stderr, "Invalid EXR file: %s\n", argv[1]);
    return -1;
  }

  if (!exr_version.multipart) {
    // must be multipart flag is true.
    return -1;
  }

  // 2. Read EXR headers in the EXR.
  EXRHeader **exr_headers; // list of EXRHeader pointers.
  int num_exr_headers;
  const char *err = NULL; // or nullptr in C++11 or later

  // Memory for EXRHeader is allocated inside of ParseEXRMultipartHeaderFromF\
ile,
  ret = ParseEXRMultipartHeaderFromFile(&exr_headers, &num_exr_headers,\
 &exr_version, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  printf("num parts = %d\n", num_exr_headers);


  // 3. Load images.

  // Prepare array of EXRImage.
  std::vector<EXRImage> images(num_exr_headers);
  for (int i =0; i < num_exr_headers; i++) {
    InitEXRImage(&images[i]);
  }

  ret = LoadEXRMultipartImageFromFile(&images.at(0), const_cast<const\
 EXRHeader**>(exr_headers), num_exr_headers, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  printf("Loaded %d part images\n", num_exr_headers);

  // 4. Access image data
  // `exr_image.images` will be filled when EXR is scanline format.
  // `exr_image.tiled` will be filled when EXR is tiled format.

  // 5. Free images
  for (int i =0; i < num_exr_headers; i++) {
    FreeEXRImage(&images.at(i));
  }

  // 6. Free headers.
  for (int i =0; i < num_exr_headers; i++) {
    FreeEXRHeader(exr_headers[i]);
    free(exr_headers[i]);
  }
  free(exr_headers);
```


Saving Scanline EXR file.

```cpp
  // See `examples/rgbe2exr/` for more details.
  bool SaveEXR(const float* rgb, int width, int height, const char*\
 outfilename) {

    EXRHeader header;
    InitEXRHeader(&header);

    EXRImage image;
    InitEXRImage(&image);

    image.num_channels = 3;

    std::vector<float> images[3];
    images[0].resize(width * height);
    images[1].resize(width * height);
    images[2].resize(width * height);

    // Split RGBRGBRGB... into R, G and B layer
    for (int i = 0; i < width * height; i++) {
      images[0][i] = rgb[3*i+0];
      images[1][i] = rgb[3*i+1];
      images[2][i] = rgb[3*i+2];
    }

    float* image_ptr[3];
    image_ptr[0] = &(images[2].at(0)); // B
    image_ptr[1] = &(images[1].at(0)); // G
    image_ptr[2] = &(images[0].at(0)); // R

    image.images = (unsigned char**)image_ptr;
    image.width = width;
    image.height = height;

    header.num_channels = 3;
    header.channels = (EXRChannelInfo *)malloc(sizeof(EXRChannelInfo) *\
 header.num_channels);
    // Must be (A)BGR order, since most of EXR viewers expect this channel\
 order.
    strncpy(header.channels[0].name, "B", 255); header.channels[0].name[strle\
n("B")] = '\0';
    strncpy(header.channels[1].name, "G", 255); header.channels[1].name[strle\
n("G")] = '\0';
    strncpy(header.channels[2].name, "R", 255); header.channels[2].name[strle\
n("R")] = '\0';

    header.pixel_types = (int *)malloc(sizeof(int) * header.num_channels);
    header.requested_pixel_types = (int *)malloc(sizeof(int) *\
 header.num_channels);
    for (int i = 0; i < header.num_channels; i++) {
      header.pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT; // pixel type of input\
 image
      header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_HALF; // pixel type\
 of output image to be stored in .EXR
    }

    const char* err = NULL; // or nullptr in C++11 or later.
    int ret = SaveEXRImageToFile(&image, &header, outfilename, &err);
    if (ret != TINYEXR_SUCCESS) {
      fprintf(stderr, "Save EXR err: %s\n", err);
      FreeEXRErrorMessage(err); // free's buffer for an error message
      return ret;
    }
    printf("Saved exr file. [ %s ] \n", outfilename);

    free(rgb);

    free(header.channels);
    free(header.pixel_types);
    free(header.requested_pixel_types);

  }
```


Reading deep image EXR file.
See `example/deepview` for actual usage.

```cpp
  const char* input = "deepimage.exr";
  const char* err = NULL; // or nullptr
  DeepImage deepImage;

  int ret = LoadDeepEXR(&deepImage, input, &err);

  // access to each sample in the deep pixel.
  for (int y = 0; y < deepImage.height; y++) {
    int sampleNum = deepImage.offset_table[y][deepImage.width-1];
    for (int x = 0; x < deepImage.width-1; x++) {
      int s_start = deepImage.offset_table[y][x];
      int s_end   = deepImage.offset_table[y][x+1];
      if (s_start >= sampleNum) {
        continue;
      }
      s_end = (s_end < sampleNum) ? s_end : sampleNum;
      for (int s = s_start; s < s_end; s++) {
        float val = deepImage.image[depthChan][y][s];
        ...
      }
    }
  }

```

### deepview

`examples/deepview` is simple deep image viewer in OpenGL.

![DeepViewExample](https://github.com/syoyo/tinyexr/blob/release/examples/dee\
pview/deepview_screencast.gif?raw=true)

## TinyEXR extension

### ZFP

#### NOTE

TinyEXR adds ZFP compression as an experimemtal support (Linux and MacOSX\
 only).

ZFP only supports FLOAT format pixel, and its image width and height must be\
 the multiple of 4, since ZFP compresses pixels with 4x4 pixel block.

#### Setup

Checkout zfp repo as an submodule.

    $ git submodule update --init

#### Build

Then build ZFP

    $ cd deps/ZFP
    $ mkdir -p lib   # Create `lib` directory if not exist
    $ make

Set `1` to `TINYEXT_USE_ZFP` define in `tinyexr.h`

Build your app with linking `deps/ZFP/lib/libzfp.a`

#### ZFP attribute

For ZFP EXR image, the following attribute must exist in its EXR image.

* `zfpCompressionType` (uchar).
  * 0 = fixed rate compression
  * 1 = precision based variable rate compression
  * 2 = accuracy based variable rate compression

And the one of following attributes must exist in EXR, depending on the\
 `zfpCompressionType` value.

* `zfpCompressionRate` (double)
  * Specifies compression rate for fixed rate compression.
* `zfpCompressionPrecision` (int32)
  * Specifies the number of bits for precision based variable rate\
 compression.
* `zfpCompressionTolerance` (double)
  * Specifies the tolerance value for accuracy based variable rate\
 compression.

#### Note on ZFP compression.

At least ZFP code itself works well on big endian machine.

## Unit tests

See `test/unit` directory.

## TODO

Contribution is welcome!

- [ ] Compression
  - [ ] B44?
  - [ ] B44A?
  - [ ] PIX24?
- [ ] Custom attributes
  - [x] Normal image (EXR 1.x)
  - [ ] Deep image (EXR 2.x)
- [ ] JavaScript library (experimental, using Emscripten)
  - [x] LoadEXRFromMemory
  - [ ] SaveMultiChannelEXR
  - [ ] Deep image save/load
- [ ] Write from/to memory buffer.
  - [ ] Deep image save/load
- [ ] Tile format.
  - [x] Tile format with no LoD (load).
  - [ ] Tile format with LoD (load).
  - [ ] Tile format with no LoD (save).
  - [ ] Tile format with LoD (save).
- [ ] Support for custom compression type.
  - [x] zfp compression (Not in OpenEXR spec, though)
  - [ ] zstd?
- [x] Multi-channel.
- [ ] Multi-part (EXR2.0)
  - [x] Load multi-part image
  - [ ] Load multi-part deep image
- [ ] Line order.
  - [x] Increasing, decreasing (load)
  - [ ] Random?
  - [ ] Increasing, decreasing (save)
- [ ] Pixel format (UINT, FLOAT).
  - [x] UINT, FLOAT (load)
  - [x] UINT, FLOAT (deep load)
  - [x] UINT, FLOAT (save)
  - [ ] UINT, FLOAT (deep save)
- [ ] Support for big endian machine.
  - [ ] Loading multi-part channel EXR
  - [ ] Saving multi-part channel EXR
  - [ ] Loading deep image
  - [ ] Saving deep image
- [ ] Optimization
  - [ ] ISPC?
  - [x] OpenMP multi-threading in EXR loading.
  - [x] OpenMP multi-threading in EXR saving.
  - [ ] OpenMP multi-threading in deep image loading.
  - [ ] OpenMP multi-threading in deep image saving.

## Python bindings

`pytinyexr` is available: https://pypi.org/project/pytinyexr/ (loading only\
 as of 0.9.1)

## Similar or related projects

* miniexr: https://github.com/aras-p/miniexr (Write OpenEXR)
* stb_image_resize.h: https://github.com/nothings/stb (Good for HDR image\
 resizing)

## License

3-clause BSD

`tinyexr` uses miniz, which is developed by Rich Geldreich\
 <richgel99@gmail.com>, and licensed under public domain.

`tinyexr` tools uses stb, which is licensed under public domain:\
 https://github.com/nothings/stb
`tinyexr` uses some code from OpenEXR, which is licensed under 3-clause BSD\
 license.
`tinyexr` uses nanozlib and wuffs, whose are licensed unnder Apache 2.0\
 license.

## Author(s)

Syoyo Fujita (syoyo@lighttransport.com)

## Contributor(s)

* Matt Ebb (http://mattebb.com): deep image example. Thanks!
* Matt Pharr (http://pharr.org/matt/): Testing tinyexr with OpenEXR(IlmImf).\
 Thanks!
* Andrew Bell (https://github.com/andrewfb) & Richard Eakin\
 (https://github.com/richardeakin): Improving TinyEXR API. Thanks!
* Mike Wong (https://github.com/mwkm): ZIPS compression support in loading.\
 Thanks!

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for tinyexr

This project builds and defines the build2 package for [`tinyexr`](https://gi\
thub.com/syoyo/tinyexr).
It is a small, single-header-only library to load and save OpenEXR (.exr)\
 images, that is written in portable C++ (no library dependency except for\
 STL).

[![Official](https://img.shields.io/website/https/github.com/syoyo/tinyexr.sv\
g?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up_me\
ssage=online)](https://github.com/syoyo/tinyexr)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/t\
inyexr.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blu\
e&up_message=online)](https://github.com/build2-packaging/tinyexr)
[![cppget.org](https://img.shields.io/website/https/cppget.org/libtinyexr.svg\
?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_m\
essage=online)](https://cppget.org/libtinyexr)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/li\
btinyexr.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=\
for-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/l\
ibtinyexr)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/tinyexr.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: libtinyexr ^1.0.6

The library can be imported by the following declaration in a `buildfile`.

    import tinyexr = libtinyexr%lib{tinyexr}

## Configuration
There are no configuration options available.

## Issues and Notes
- The test data in the `libtinyexr-tests` package is more than 240 MiB in\
 size and, as a consequence, not publishable on `cppget.org` because it is\
 too large. Thus, it is not declared as the mandatory external tests package\
 of `libtinyexr`. It can and should still be used for local testing and for\
 CI runs.
- By using the macros `TINYEXR_USE_THREAD` or `TINYEXR_USE_OPENMP`, `tinyexr`\
 is able to support multithreading by either using C++11 threads or OpenMP.\
 Please note that the package's build system is not automatically adding\
 dependencies and flags for `pthread` or OpenMP.
- Currently, the configuration of dependencies for `tinyexr` is not handled\
 by the package's build system. `tinyexr` uses `miniz` by default and it does\
 not provide specific tests for other configurations. Furthermore, support\
 for `zlib` and `stb`'s implementation of `zlib` only seems to be useful when\
 using `tinyexr` without a build system as drop-in header file. So, for now,\
 please refrain from using the following macros.
    + `TINYEXR_USE_MINIZ`
    + `TINYEXR_USE_STB_ZLIB`
- `tinyexr` adds ZFP compression only as an experimental support on Linux and\
 MacOS. Currently, it is not supported by the packgage's build system. Hence,\
 please, refrain from using the following macro.
    + `TINYEXR_USE_ZFP`
- The compilation of the tests package `libtinyexr-tests` is not supported on\
 target configurations `windows*-clang**` due to the wrong encoding of\
 `win32-filelist-utf16le.inc`. Presumably, this will not be fixed as it is an\
 upstream issue. Please note that the compilation and execution of the basic\
 tests still works on these configurations. Thus, the library should work\
 without flaws on those platforms.
- For Windows, the file `'日本語.exr'` and the test `utf8filename` had to be\
 removed from distribution and execution, respectively. Please, see [this\
 issue](https://github.com/build2/build2/issues/307) for more information.
- Emscripten is not supported.
- The examples are not supported by the package's build system, yet.
- For now, the fuzzers are not compiled and run.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/tinyexr/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/tinyexr\
/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/tinyex\
r) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish -d libtinyexr/` to publish the package to\
 [cppget.org](https://cppget.org).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/syoyo/tinyexr
doc-url: https://github.com/syoyo/tinyexr
src-url: https://github.com/syoyo/tinyexr
package-url: https://github.com/build2-packaging/tinyexr/
email: syoyo@lighttransport.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libminiz ^3.0.0
bootstrap-build:
\
project = libtinyexr

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

hxx{*}: cxx.importable = false

test.target = $cxx.target

\
location: tinyexr/libtinyexr-1.0.6+1.tar.gz
sha256sum: 86eb5a2b283a72cf6a2f1d388b438d31b0003a744a8a6292e74bbeb6d721c2ba
:
name: libtinyexr
version: 1.0.7
type: lib,binless
language: c++
project: tinyexr
summary: Tiny OpenEXR image loader/saver library
license: BSD-3-Clause
description:
\
# Tiny OpenEXR image library.

![Example](https://github.com/syoyo/tinyexr/blob/release/asakusa.png?raw=true)

[![AppVeyor build status](https://ci.appveyor.com/api/projects/status/k07ftfe\
4ph057qau/branch/release?svg=true)](https://ci.appveyor.com/project/syoyo/tin\
yexr/branch/release)

[![Coverity Scan Build Status](https://scan.coverity.com/projects/5827/badge.\
svg)](https://scan.coverity.com/projects/5827)

`tinyexr` is a small, single header-only library to load and save OpenEXR\
 (.exr) images.
`tinyexr` is written in portable C++ (no library dependency except for STL),\
 thus `tinyexr` is good to embed into your application.
To use `tinyexr`, simply copy `tinyexr.h`, `miniz.c` and `miniz.h`(for zlib.\
 You can use system-installed zlib instead of miniz, or the zlib\
 implementation included in `stb_image[_write].h`. Controlled with\
 `TINYEXR_USE_MINIZ` and `TINYEXR_USE_STB_ZLIB` compile flags) into your\
 project.

# Security

TinyEXR does not use C++ exception.

TinyEXR now does not use `assert` from v1.0.4(2023/06/04), except for miniz's\
 assert.
(We plan to use wuff's zlib for better security and performance)

TinyEXR is fuzz tested and **currently no security issues**(No seg fault for\
 any malcious/corrupted input EXR data) as of v1.0.6.

# Features

Current status of `tinyexr` is:

- OpenEXR v1 image
  - [x] Scanline format
  - [x] Tiled format
    - [x] Tile format with no LoD (load).
    - [x] Tile format with LoD (load).
    - [x] Tile format with no LoD (save).
    - [x] Tile format with LoD (save).
  - [x] Custom attributes
- OpenEXR v2 image
  - [ ] Multipart format
    - [x] Load multi-part image
    - [x] Save multi-part image
    - [ ] Load multi-part deep image
    - [ ] Save multi-part deep image
- OpenEXR v2 deep image
  - [x] Loading scanline + ZIPS + HALF or FLOAT pixel type.
- Compression
  - [x] NONE
  - [x] RLE
  - [x] ZIP
  - [x] ZIPS
  - [x] PIZ
  - [x] ZFP (tinyexr extension)
  - [ ] B44?
  - [ ] B44A?
  - [ ] PIX24?
  - [ ] DWA (not planned, patent encumbered)
- Line order.
  - [x] Increasing, decreasing (load)
  - [ ] Random?
  - [x] Increasing (save)
  - [ ] decreasing (save)
- Pixel format (UINT, FLOAT).
  - [x] UINT, FLOAT (load)
  - [x] UINT, FLOAT (deep load)
  - [x] UINT, FLOAT (save)
  - [ ] UINT, FLOAT (deep save)
- Support for big endian machine.
  - [x] Loading scanline image
  - [x] Saving scanline image
  - [x] Loading multi-part channel EXR (not tested)
  - [x] Saving multi-part channel EXR (not tested)
  - [ ] Loading deep image
  - [ ] Saving deep image
- Optimization
  - [x] C++11 thread loading
  - [ ] C++11 thread saving
  - [ ] ISPC?
  - [x] OpenMP multi-threading in EXR loading.
  - [x] OpenMP multi-threading in EXR saving.
  - [ ] OpenMP multi-threading in deep image loading.
  - [ ] OpenMP multi-threading in deep image saving.
* C interface.
  * You can easily write language bindings (e.g. golang)

# Supported platform

* [x] x86-64
  * [x] Windows 7 or later
  * [x] Linux(posix) system
  * [x] macOS
* [x] AARCH64
  * [x] aarch64 linux(e.g. Raspberry Pi)
  * [x] Android
  * [x] iOS
  * [x] macOS
* [ ] RISC-V(Should work)
* [x] Big endian machine(not maintained, but should work)
  * SPARC, PowerPC, ...
* [x] WebAssembly(JavaScript)
  * Loader only(See ![js](experimental/js/))
* [x] Python binding
  * Loader only https://pypi.org/project/pytinyexr/

# Requirements

* C++ compiler(C++11 recommended. C++03 may work)

# Use case

## New TinyEXR (v0.9.5+)

* Godot. Multi-platform 2D and 3D game engine https://godotengine.org/
* Filament. PBR engine(used in a converter tool). https://github.com/google/f\
ilament
* PyEXR. Loading OpenEXR (.exr) images using Python. https://github.com/ialha\
shim/PyEXR
* The-Forge. The Forge Cross-Platform Rendering Framework PC, Linux, Ray\
 Tracing, macOS / iOS, Android, XBOX, PS4 https://github.com/ConfettiFX/The-F\
orge
* psdr-cuda. Path-space differentiable renderer. https://github.com/uci-rende\
ring/psdr-cuda
* Studying Microfacets BSDFs https://virtualgonio.pages.xlim.fr/
* Your project here!

## Older TinyEXR (v0.9.0)

* mallie https://github.com/lighttransport/mallie
* Cinder 0.9.0 https://libcinder.org/notes/v0.9.0
* Piccante (develop branch) http://piccantelib.net/
* Your project here!

## Examples

* [examples/deepview/](examples/deepview) Deep image view
* [examples/rgbe2exr/](examples/rgbe2exr) .hdr to EXR converter
* [examples/exr2rgbe/](examples/exr2rgbe) EXR to .hdr converter
* [examples/ldr2exr/](examples/exr2rgbe) LDR to EXR converter
* [examples/exr2ldr/](examples/exr2ldr) EXR to LDR converter
* [examples/exr2fptiff/](examples/exr2fptiff) EXR to 32bit floating point\
 TIFF converter
  * for 32bit floating point TIFF to EXR convert, see https://github.com/syoy\
o/tinydngloader/tree/release/examples/fptiff2exr
* [examples/cube2longlat/](examples/cube2longlat) Cubemap to longlat\
 (equirectangler) converter

## Experimental

* [experimental/js/](experimental/js) JavaScript port using Emscripten

## Usage

NOTE: **API is still subject to change**. See the source code for details.

Include `tinyexr.h` with `TINYEXR_IMPLEMENTATION` flag (do this only for\
 **one** .cc file).

```cpp
//Please include your own zlib-compatible API header before
//including `tinyexr.h` when you disable `TINYEXR_USE_MINIZ`
//#define TINYEXR_USE_MINIZ 0
//#include "zlib.h"
//Or, if your project uses `stb_image[_write].h`, use their
//zlib implementation:
//#define TINYEXR_USE_STB_ZLIB 1
#define TINYEXR_IMPLEMENTATION
#include "tinyexr.h"
```

### Compile flags

* `TINYEXR_USE_MINIZ` Use miniz (default = 1). Please include `zlib.h` header\
 before `tinyexr.h` if you disable miniz support(e.g. use system's zlib).
* `TINYEXR_USE_STB_ZLIB` Use zlib from `stb_image[_write].h` instead of miniz\
 or the system's zlib (default = 0).
* `TINYEXR_USE_PIZ` Enable PIZ compression support (default = 1)
* `TINYEXR_USE_ZFP` Enable ZFP compression supoort (TinyEXR extension,\
 default = 0)
* `TINYEXR_USE_THREAD` Enable threaded loading using C++11 thread (Requires\
 C++11 compiler, default = 0)
* `TINYEXR_USE_OPENMP` Enable OpenMP threading support (default = 1 if\
 `_OPENMP` is defined)
  * Use `TINYEXR_USE_OPENMP=0` to force disable OpenMP code path even if\
 OpenMP is available/enabled in the compiler.

### Quickly reading RGB(A) EXR file.

```cpp
  const char* input = "asakusa.exr";
  float* out; // width * height * RGBA
  int width;
  int height;
  const char* err = NULL; // or nullptr in C++11

  int ret = LoadEXR(&out, &width, &height, input, &err);

  if (ret != TINYEXR_SUCCESS) {
    if (err) {
       fprintf(stderr, "ERR : %s\n", err);
       FreeEXRErrorMessage(err); // release memory of error message.
    }
  } else {
    ...
    free(out); // release memory of image data
  }

```

### Reading layered RGB(A) EXR file.

If you want to read EXR image with layer info (channel has a name with\
 delimiter `.`), please use `LoadEXRWithLayer` API.

You need to know layer name in advance (e.g. through `EXRLayers` API).

```cpp
  const char* input = ...;
  const char* layer_name = "diffuse"; // or use EXRLayers to get list of\
 layer names in .exr
  float* out; // width * height * RGBA
  int width;
  int height;
  const char* err = NULL; // or nullptr in C++11

  // will read `diffuse.R`, `diffuse.G`, `diffuse.B`, (`diffuse.A`) channels
  int ret = LoadEXRWithLayer(&out, &width, &height, input, layer_name, &err);

  if (ret != TINYEXR_SUCCESS) {
    if (err) {
       fprintf(stderr, "ERR : %s\n", err);
       FreeEXRErrorMessage(err); // release memory of error message.
    }
  } else {
    ...
    free(out); // release memory of image data
  }

```

### Loading Singlepart EXR from a file.

Scanline and tiled format are supported.

```cpp
  // 1. Read EXR version.
  EXRVersion exr_version;

  int ret = ParseEXRVersionFromFile(&exr_version, argv[1]);
  if (ret != 0) {
    fprintf(stderr, "Invalid EXR file: %s\n", argv[1]);
    return -1;
  }

  if (exr_version.multipart) {
    // must be multipart flag is false.
    return -1;
  }

  // 2. Read EXR header
  EXRHeader exr_header;
  InitEXRHeader(&exr_header);

  const char* err = NULL; // or `nullptr` in C++11 or later.
  ret = ParseEXRHeaderFromFile(&exr_header, &exr_version, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  // // Read HALF channel as FLOAT.
  // for (int i = 0; i < exr_header.num_channels; i++) {
  //   if (exr_header.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) {
  //     exr_header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;
  //   }
  // }

  EXRImage exr_image;
  InitEXRImage(&exr_image);

  ret = LoadEXRImageFromFile(&exr_image, &exr_header, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Load EXR err: %s\n", err);
    FreeEXRHeader(&exr_header);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  // 3. Access image data
  // `exr_image.images` will be filled when EXR is scanline format.
  // `exr_image.tiled` will be filled when EXR is tiled format.

  // 4. Free image data
  FreeEXRImage(&exr_image);
  FreeEXRHeader(&exr_header);
```

### Loading Multipart EXR from a file.

Scanline and tiled format are supported.

```cpp
  // 1. Read EXR version.
  EXRVersion exr_version;

  int ret = ParseEXRVersionFromFile(&exr_version, argv[1]);
  if (ret != 0) {
    fprintf(stderr, "Invalid EXR file: %s\n", argv[1]);
    return -1;
  }

  if (!exr_version.multipart) {
    // must be multipart flag is true.
    return -1;
  }

  // 2. Read EXR headers in the EXR.
  EXRHeader **exr_headers; // list of EXRHeader pointers.
  int num_exr_headers;
  const char *err = NULL; // or nullptr in C++11 or later

  // Memory for EXRHeader is allocated inside of ParseEXRMultipartHeaderFromF\
ile,
  ret = ParseEXRMultipartHeaderFromFile(&exr_headers, &num_exr_headers,\
 &exr_version, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  printf("num parts = %d\n", num_exr_headers);


  // 3. Load images.

  // Prepare array of EXRImage.
  std::vector<EXRImage> images(num_exr_headers);
  for (int i =0; i < num_exr_headers; i++) {
    InitEXRImage(&images[i]);
  }

  ret = LoadEXRMultipartImageFromFile(&images.at(0), const_cast<const\
 EXRHeader**>(exr_headers), num_exr_headers, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  printf("Loaded %d part images\n", num_exr_headers);

  // 4. Access image data
  // `exr_image.images` will be filled when EXR is scanline format.
  // `exr_image.tiled` will be filled when EXR is tiled format.

  // 5. Free images
  for (int i =0; i < num_exr_headers; i++) {
    FreeEXRImage(&images.at(i));
  }

  // 6. Free headers.
  for (int i =0; i < num_exr_headers; i++) {
    FreeEXRHeader(exr_headers[i]);
    free(exr_headers[i]);
  }
  free(exr_headers);
```


Saving Scanline EXR file.

```cpp
  // See `examples/rgbe2exr/` for more details.
  bool SaveEXR(const float* rgb, int width, int height, const char*\
 outfilename) {

    EXRHeader header;
    InitEXRHeader(&header);

    EXRImage image;
    InitEXRImage(&image);

    image.num_channels = 3;

    std::vector<float> images[3];
    images[0].resize(width * height);
    images[1].resize(width * height);
    images[2].resize(width * height);

    // Split RGBRGBRGB... into R, G and B layer
    for (int i = 0; i < width * height; i++) {
      images[0][i] = rgb[3*i+0];
      images[1][i] = rgb[3*i+1];
      images[2][i] = rgb[3*i+2];
    }

    float* image_ptr[3];
    image_ptr[0] = &(images[2].at(0)); // B
    image_ptr[1] = &(images[1].at(0)); // G
    image_ptr[2] = &(images[0].at(0)); // R

    image.images = (unsigned char**)image_ptr;
    image.width = width;
    image.height = height;

    header.num_channels = 3;
    header.channels = (EXRChannelInfo *)malloc(sizeof(EXRChannelInfo) *\
 header.num_channels);
    // Must be (A)BGR order, since most of EXR viewers expect this channel\
 order.
    strncpy(header.channels[0].name, "B", 255); header.channels[0].name[strle\
n("B")] = '\0';
    strncpy(header.channels[1].name, "G", 255); header.channels[1].name[strle\
n("G")] = '\0';
    strncpy(header.channels[2].name, "R", 255); header.channels[2].name[strle\
n("R")] = '\0';

    header.pixel_types = (int *)malloc(sizeof(int) * header.num_channels);
    header.requested_pixel_types = (int *)malloc(sizeof(int) *\
 header.num_channels);
    for (int i = 0; i < header.num_channels; i++) {
      header.pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT; // pixel type of input\
 image
      header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_HALF; // pixel type\
 of output image to be stored in .EXR
    }

    const char* err = NULL; // or nullptr in C++11 or later.
    int ret = SaveEXRImageToFile(&image, &header, outfilename, &err);
    if (ret != TINYEXR_SUCCESS) {
      fprintf(stderr, "Save EXR err: %s\n", err);
      FreeEXRErrorMessage(err); // free's buffer for an error message
      return ret;
    }
    printf("Saved exr file. [ %s ] \n", outfilename);

    free(rgb);

    free(header.channels);
    free(header.pixel_types);
    free(header.requested_pixel_types);

  }
```


Reading deep image EXR file.
See `example/deepview` for actual usage.

```cpp
  const char* input = "deepimage.exr";
  const char* err = NULL; // or nullptr
  DeepImage deepImage;

  int ret = LoadDeepEXR(&deepImage, input, &err);

  // access to each sample in the deep pixel.
  for (int y = 0; y < deepImage.height; y++) {
    int sampleNum = deepImage.offset_table[y][deepImage.width-1];
    for (int x = 0; x < deepImage.width-1; x++) {
      int s_start = deepImage.offset_table[y][x];
      int s_end   = deepImage.offset_table[y][x+1];
      if (s_start >= sampleNum) {
        continue;
      }
      s_end = (s_end < sampleNum) ? s_end : sampleNum;
      for (int s = s_start; s < s_end; s++) {
        float val = deepImage.image[depthChan][y][s];
        ...
      }
    }
  }

```

### deepview

`examples/deepview` is simple deep image viewer in OpenGL.

![DeepViewExample](https://github.com/syoyo/tinyexr/blob/release/examples/dee\
pview/deepview_screencast.gif?raw=true)

## TinyEXR extension

### ZFP

#### NOTE

TinyEXR adds ZFP compression as an experimemtal support (Linux and MacOSX\
 only).

ZFP only supports FLOAT format pixel, and its image width and height must be\
 the multiple of 4, since ZFP compresses pixels with 4x4 pixel block.

#### Setup

Checkout zfp repo as an submodule.

    $ git submodule update --init

#### Build

Then build ZFP

    $ cd deps/ZFP
    $ mkdir -p lib   # Create `lib` directory if not exist
    $ make

Set `1` to `TINYEXT_USE_ZFP` define in `tinyexr.h`

Build your app with linking `deps/ZFP/lib/libzfp.a`

#### ZFP attribute

For ZFP EXR image, the following attribute must exist in its EXR image.

* `zfpCompressionType` (uchar).
  * 0 = fixed rate compression
  * 1 = precision based variable rate compression
  * 2 = accuracy based variable rate compression

And the one of following attributes must exist in EXR, depending on the\
 `zfpCompressionType` value.

* `zfpCompressionRate` (double)
  * Specifies compression rate for fixed rate compression.
* `zfpCompressionPrecision` (int32)
  * Specifies the number of bits for precision based variable rate\
 compression.
* `zfpCompressionTolerance` (double)
  * Specifies the tolerance value for accuracy based variable rate\
 compression.

#### Note on ZFP compression.

At least ZFP code itself works well on big endian machine.

## Unit tests

See `test/unit` directory.

## TODO

Contribution is welcome!

- [ ] Compression
  - [ ] B44?
  - [ ] B44A?
  - [ ] PIX24?
- [ ] Custom attributes
  - [x] Normal image (EXR 1.x)
  - [ ] Deep image (EXR 2.x)
- [ ] JavaScript library (experimental, using Emscripten)
  - [x] LoadEXRFromMemory
  - [ ] SaveMultiChannelEXR
  - [ ] Deep image save/load
- [ ] Write from/to memory buffer.
  - [ ] Deep image save/load
- [ ] Tile format.
  - [x] Tile format with no LoD (load).
  - [ ] Tile format with LoD (load).
  - [ ] Tile format with no LoD (save).
  - [ ] Tile format with LoD (save).
- [ ] Support for custom compression type.
  - [x] zfp compression (Not in OpenEXR spec, though)
  - [ ] zstd?
- [x] Multi-channel.
- [ ] Multi-part (EXR2.0)
  - [x] Load multi-part image
  - [ ] Load multi-part deep image
- [ ] Line order.
  - [x] Increasing, decreasing (load)
  - [ ] Random?
  - [ ] Increasing, decreasing (save)
- [ ] Pixel format (UINT, FLOAT).
  - [x] UINT, FLOAT (load)
  - [x] UINT, FLOAT (deep load)
  - [x] UINT, FLOAT (save)
  - [ ] UINT, FLOAT (deep save)
- [ ] Support for big endian machine.
  - [ ] Loading multi-part channel EXR
  - [ ] Saving multi-part channel EXR
  - [ ] Loading deep image
  - [ ] Saving deep image
- [ ] Optimization
  - [ ] ISPC?
  - [x] OpenMP multi-threading in EXR loading.
  - [x] OpenMP multi-threading in EXR saving.
  - [ ] OpenMP multi-threading in deep image loading.
  - [ ] OpenMP multi-threading in deep image saving.

## Python bindings

`pytinyexr` is available: https://pypi.org/project/pytinyexr/ (loading only\
 as of 0.9.1)

## Similar or related projects

* miniexr: https://github.com/aras-p/miniexr (Write OpenEXR)
* stb_image_resize.h: https://github.com/nothings/stb (Good for HDR image\
 resizing)

## License

3-clause BSD

`tinyexr` uses miniz, which is developed by Rich Geldreich\
 <richgel99@gmail.com>, and licensed under public domain.

`tinyexr` tools uses stb, which is licensed under public domain:\
 https://github.com/nothings/stb
`tinyexr` uses some code from OpenEXR, which is licensed under 3-clause BSD\
 license.
`tinyexr` uses nanozlib and wuffs, whose are licensed unnder Apache 2.0\
 license.

## Author(s)

Syoyo Fujita (syoyo@lighttransport.com)

## Contributor(s)

* Matt Ebb (http://mattebb.com): deep image example. Thanks!
* Matt Pharr (http://pharr.org/matt/): Testing tinyexr with OpenEXR(IlmImf).\
 Thanks!
* Andrew Bell (https://github.com/andrewfb) & Richard Eakin\
 (https://github.com/richardeakin): Improving TinyEXR API. Thanks!
* Mike Wong (https://github.com/mwkm): ZIPS compression support in loading.\
 Thanks!

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for tinyexr

This project builds and defines the build2 package for [`tinyexr`](https://gi\
thub.com/syoyo/tinyexr).
It is a small, single-header-only library to load and save OpenEXR (.exr)\
 images, that is written in portable C++ (no library dependency except for\
 STL).

[![Official](https://img.shields.io/website/https/github.com/syoyo/tinyexr.sv\
g?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up_me\
ssage=online)](https://github.com/syoyo/tinyexr)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/t\
inyexr.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blu\
e&up_message=online)](https://github.com/build2-packaging/tinyexr)
[![cppget.org](https://img.shields.io/website/https/cppget.org/libtinyexr.svg\
?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_m\
essage=online)](https://cppget.org/libtinyexr)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/li\
btinyexr.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=\
for-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/l\
ibtinyexr)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/tinyexr.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: libtinyexr ^1.0.6

The library can be imported by the following declaration in a `buildfile`.

    import tinyexr = libtinyexr%lib{tinyexr}

## Configuration
There are no configuration options available.

## Issues and Notes
- The test data in the `libtinyexr-tests` package is more than 240 MiB in\
 size and, as a consequence, not publishable on `cppget.org` because it is\
 too large. Thus, it is not declared as the mandatory external tests package\
 of `libtinyexr`. It can and should still be used for local testing and for\
 CI runs.
- By using the macros `TINYEXR_USE_THREAD` or `TINYEXR_USE_OPENMP`, `tinyexr`\
 is able to support multithreading by either using C++11 threads or OpenMP.\
 Please note that the package's build system is not automatically adding\
 dependencies and flags for `pthread` or OpenMP.
- Currently, the configuration of dependencies for `tinyexr` is not handled\
 by the package's build system. `tinyexr` uses `miniz` by default and it does\
 not provide specific tests for other configurations. Furthermore, support\
 for `zlib` and `stb`'s implementation of `zlib` only seems to be useful when\
 using `tinyexr` without a build system as drop-in header file. So, for now,\
 please refrain from using the following macros.
    + `TINYEXR_USE_MINIZ`
    + `TINYEXR_USE_STB_ZLIB`
- `tinyexr` adds ZFP compression only as an experimental support on Linux and\
 MacOS. Currently, it is not supported by the packgage's build system. Hence,\
 please, refrain from using the following macro.
    + `TINYEXR_USE_ZFP`
- The compilation of the tests package `libtinyexr-tests` is not supported on\
 target configurations `windows*-clang**` due to the wrong encoding of\
 `win32-filelist-utf16le.inc`. Presumably, this will not be fixed as it is an\
 upstream issue. Please note that the compilation and execution of the basic\
 tests still works on these configurations. Thus, the library should work\
 without flaws on those platforms.
- For Windows, the file `'日本語.exr'` and the test `utf8filename` had to be\
 removed from distribution and execution, respectively. Please, see [this\
 issue](https://github.com/build2/build2/issues/307) for more information.
- Emscripten is not supported.
- The examples are not supported by the package's build system, yet.
- For now, the fuzzers are not compiled and run.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/tinyexr/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/tinyexr\
/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/tinyex\
r) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish -d libtinyexr/` to publish the package to\
 [cppget.org](https://cppget.org).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/syoyo/tinyexr
doc-url: https://github.com/syoyo/tinyexr
src-url: https://github.com/syoyo/tinyexr
package-url: https://github.com/build2-packaging/tinyexr/
email: syoyo@lighttransport.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libminiz ^3.0.0
bootstrap-build:
\
project = libtinyexr

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

hxx{*}: cxx.importable = false

test.target = $cxx.target

\
location: tinyexr/libtinyexr-1.0.7.tar.gz
sha256sum: 65af5ad91ba9b2cded76f95fbf1b8b5a82e6f68d8054ad5355a2b6b377693821
:
name: libtinyexr
version: 1.0.8
type: lib,binless
language: c++
project: tinyexr
summary: Tiny OpenEXR image loader/saver library
license: BSD-3-Clause
description:
\
# Tiny OpenEXR image library.

![Example](https://github.com/syoyo/tinyexr/blob/release/asakusa.png?raw=true)

[![AppVeyor build status](https://ci.appveyor.com/api/projects/status/k07ftfe\
4ph057qau/branch/release?svg=true)](https://ci.appveyor.com/project/syoyo/tin\
yexr/branch/release)

[![Coverity Scan Build Status](https://scan.coverity.com/projects/5827/badge.\
svg)](https://scan.coverity.com/projects/5827)

`tinyexr` is a small, single header-only library to load and save OpenEXR\
 (.exr) images.
`tinyexr` is written in portable C++ (no library dependency except for STL),\
 thus `tinyexr` is good to embed into your application.
To use `tinyexr`, simply copy `tinyexr.h`, `miniz.c` and `miniz.h`(for zlib.\
 You can use system-installed zlib instead of miniz, or the zlib\
 implementation included in `stb_image[_write].h`. Controlled with\
 `TINYEXR_USE_MINIZ` and `TINYEXR_USE_STB_ZLIB` compile flags) into your\
 project.

# Security

TinyEXR does not use C++ exception.

TinyEXR now does not use `assert` from v1.0.4(2023/06/04), except for miniz's\
 assert.
(We plan to use wuff's zlib for better security and performance)

TinyEXR is fuzz tested and **currently no security issues**(No seg fault for\
 any malcious/corrupted input EXR data) as of v1.0.7.

# Features

Current status of `tinyexr` is:

- OpenEXR v1 image
  - [x] Scanline format
  - [x] Tiled format
    - [x] Tile format with no LoD (load).
    - [x] Tile format with LoD (load).
    - [x] Tile format with no LoD (save).
    - [x] Tile format with LoD (save).
  - [x] Custom attributes
- OpenEXR v2 image
  - [ ] Multipart format
    - [x] Load multi-part image
    - [x] Save multi-part image
    - [ ] Load multi-part deep image
    - [ ] Save multi-part deep image
- OpenEXR v2 deep image
  - [x] Loading scanline + ZIPS + HALF or FLOAT pixel type.
- Compression
  - [x] NONE
  - [x] RLE
  - [x] ZIP
  - [x] ZIPS
  - [x] PIZ
  - [x] ZFP (tinyexr extension)
  - [ ] B44?
  - [ ] B44A?
  - [ ] PIX24?
  - [ ] DWA (not planned, patent encumbered)
- Line order.
  - [x] Increasing, decreasing (load)
  - [ ] Random?
  - [x] Increasing (save)
  - [ ] decreasing (save)
- Pixel format (UINT, FLOAT).
  - [x] UINT, FLOAT (load)
  - [x] UINT, FLOAT (deep load)
  - [x] UINT, FLOAT (save)
  - [ ] UINT, FLOAT (deep save)
- Support for big endian machine.
  - [x] Loading scanline image
  - [x] Saving scanline image
  - [x] Loading multi-part channel EXR (not tested)
  - [x] Saving multi-part channel EXR (not tested)
  - [ ] Loading deep image
  - [ ] Saving deep image
- Optimization
  - [x] C++11 thread loading
  - [ ] C++11 thread saving
  - [ ] ISPC?
  - [x] OpenMP multi-threading in EXR loading.
  - [x] OpenMP multi-threading in EXR saving.
  - [ ] OpenMP multi-threading in deep image loading.
  - [ ] OpenMP multi-threading in deep image saving.
* C interface.
  * You can easily write language bindings (e.g. golang)

# Supported platform

* [x] x86-64
  * [x] Windows 7 or later
  * [x] Linux(posix) system
  * [x] macOS
* [x] AARCH64
  * [x] aarch64 linux(e.g. Raspberry Pi)
  * [x] Android
  * [x] iOS
  * [x] macOS
* [ ] RISC-V(Should work)
* [x] Big endian machine(not maintained, but should work)
  * SPARC, PowerPC, ...
* [x] WebAssembly(JavaScript)
  * Loader only(See ![js](experimental/js/))
* [x] Python binding
  * Loader only https://pypi.org/project/pytinyexr/

# Requirements

* C++ compiler(C++11 recommended. C++03 may work)

# Use case

## New TinyEXR (v0.9.5+)

* Godot. Multi-platform 2D and 3D game engine https://godotengine.org/
* Filament. PBR engine(used in a converter tool). https://github.com/google/f\
ilament
* PyEXR. Loading OpenEXR (.exr) images using Python. https://github.com/ialha\
shim/PyEXR
* The-Forge. The Forge Cross-Platform Rendering Framework PC, Linux, Ray\
 Tracing, macOS / iOS, Android, XBOX, PS4 https://github.com/ConfettiFX/The-F\
orge
* psdr-cuda. Path-space differentiable renderer. https://github.com/uci-rende\
ring/psdr-cuda
* Studying Microfacets BSDFs https://virtualgonio.pages.xlim.fr/
* Your project here!

## Older TinyEXR (v0.9.0)

* mallie https://github.com/lighttransport/mallie
* Cinder 0.9.0 https://libcinder.org/notes/v0.9.0
* Piccante (develop branch) http://piccantelib.net/
* Your project here!

## Examples

* [examples/deepview/](examples/deepview) Deep image view
* [examples/rgbe2exr/](examples/rgbe2exr) .hdr to EXR converter
* [examples/exr2rgbe/](examples/exr2rgbe) EXR to .hdr converter
* [examples/ldr2exr/](examples/exr2rgbe) LDR to EXR converter
* [examples/exr2ldr/](examples/exr2ldr) EXR to LDR converter
* [examples/exr2fptiff/](examples/exr2fptiff) EXR to 32bit floating point\
 TIFF converter
  * for 32bit floating point TIFF to EXR convert, see https://github.com/syoy\
o/tinydngloader/tree/release/examples/fptiff2exr
* [examples/cube2longlat/](examples/cube2longlat) Cubemap to longlat\
 (equirectangler) converter

## Experimental

* [experimental/js/](experimental/js) JavaScript port using Emscripten

## Usage

NOTE: **API is still subject to change**. See the source code for details.

Include `tinyexr.h` with `TINYEXR_IMPLEMENTATION` flag (do this only for\
 **one** .cc file).

```cpp
//Please include your own zlib-compatible API header before
//including `tinyexr.h` when you disable `TINYEXR_USE_MINIZ`
//#define TINYEXR_USE_MINIZ 0
//#include "zlib.h"
//Or, if your project uses `stb_image[_write].h`, use their
//zlib implementation:
//#define TINYEXR_USE_STB_ZLIB 1
#define TINYEXR_IMPLEMENTATION
#include "tinyexr.h"
```

### Compile flags

* `TINYEXR_USE_MINIZ` Use miniz (default = 1). Please include `zlib.h` header\
 before `tinyexr.h` if you disable miniz support(e.g. use system's zlib).
* `TINYEXR_USE_STB_ZLIB` Use zlib from `stb_image[_write].h` instead of miniz\
 or the system's zlib (default = 0).
* `TINYEXR_USE_PIZ` Enable PIZ compression support (default = 1)
* `TINYEXR_USE_ZFP` Enable ZFP compression supoort (TinyEXR extension,\
 default = 0)
* `TINYEXR_USE_THREAD` Enable threaded loading using C++11 thread (Requires\
 C++11 compiler, default = 0)
* `TINYEXR_USE_OPENMP` Enable OpenMP threading support (default = 1 if\
 `_OPENMP` is defined)
  * Use `TINYEXR_USE_OPENMP=0` to force disable OpenMP code path even if\
 OpenMP is available/enabled in the compiler.

### Quickly reading RGB(A) EXR file.

```cpp
  const char* input = "asakusa.exr";
  float* out; // width * height * RGBA
  int width;
  int height;
  const char* err = NULL; // or nullptr in C++11

  int ret = LoadEXR(&out, &width, &height, input, &err);

  if (ret != TINYEXR_SUCCESS) {
    if (err) {
       fprintf(stderr, "ERR : %s\n", err);
       FreeEXRErrorMessage(err); // release memory of error message.
    }
  } else {
    ...
    free(out); // release memory of image data
  }

```

### Reading layered RGB(A) EXR file.

If you want to read EXR image with layer info (channel has a name with\
 delimiter `.`), please use `LoadEXRWithLayer` API.

You need to know layer name in advance (e.g. through `EXRLayers` API).

```cpp
  const char* input = ...;
  const char* layer_name = "diffuse"; // or use EXRLayers to get list of\
 layer names in .exr
  float* out; // width * height * RGBA
  int width;
  int height;
  const char* err = NULL; // or nullptr in C++11

  // will read `diffuse.R`, `diffuse.G`, `diffuse.B`, (`diffuse.A`) channels
  int ret = LoadEXRWithLayer(&out, &width, &height, input, layer_name, &err);

  if (ret != TINYEXR_SUCCESS) {
    if (err) {
       fprintf(stderr, "ERR : %s\n", err);
       FreeEXRErrorMessage(err); // release memory of error message.
    }
  } else {
    ...
    free(out); // release memory of image data
  }

```

### Loading Singlepart EXR from a file.

Scanline and tiled format are supported.

```cpp
  // 1. Read EXR version.
  EXRVersion exr_version;

  int ret = ParseEXRVersionFromFile(&exr_version, argv[1]);
  if (ret != 0) {
    fprintf(stderr, "Invalid EXR file: %s\n", argv[1]);
    return -1;
  }

  if (exr_version.multipart) {
    // must be multipart flag is false.
    return -1;
  }

  // 2. Read EXR header
  EXRHeader exr_header;
  InitEXRHeader(&exr_header);

  const char* err = NULL; // or `nullptr` in C++11 or later.
  ret = ParseEXRHeaderFromFile(&exr_header, &exr_version, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  // // Read HALF channel as FLOAT.
  // for (int i = 0; i < exr_header.num_channels; i++) {
  //   if (exr_header.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) {
  //     exr_header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;
  //   }
  // }

  EXRImage exr_image;
  InitEXRImage(&exr_image);

  ret = LoadEXRImageFromFile(&exr_image, &exr_header, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Load EXR err: %s\n", err);
    FreeEXRHeader(&exr_header);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  // 3. Access image data
  // `exr_image.images` will be filled when EXR is scanline format.
  // `exr_image.tiled` will be filled when EXR is tiled format.

  // 4. Free image data
  FreeEXRImage(&exr_image);
  FreeEXRHeader(&exr_header);
```

### Loading Multipart EXR from a file.

Scanline and tiled format are supported.

```cpp
  // 1. Read EXR version.
  EXRVersion exr_version;

  int ret = ParseEXRVersionFromFile(&exr_version, argv[1]);
  if (ret != 0) {
    fprintf(stderr, "Invalid EXR file: %s\n", argv[1]);
    return -1;
  }

  if (!exr_version.multipart) {
    // must be multipart flag is true.
    return -1;
  }

  // 2. Read EXR headers in the EXR.
  EXRHeader **exr_headers; // list of EXRHeader pointers.
  int num_exr_headers;
  const char *err = NULL; // or nullptr in C++11 or later

  // Memory for EXRHeader is allocated inside of ParseEXRMultipartHeaderFromF\
ile,
  ret = ParseEXRMultipartHeaderFromFile(&exr_headers, &num_exr_headers,\
 &exr_version, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  printf("num parts = %d\n", num_exr_headers);


  // 3. Load images.

  // Prepare array of EXRImage.
  std::vector<EXRImage> images(num_exr_headers);
  for (int i =0; i < num_exr_headers; i++) {
    InitEXRImage(&images[i]);
  }

  ret = LoadEXRMultipartImageFromFile(&images.at(0), const_cast<const\
 EXRHeader**>(exr_headers), num_exr_headers, argv[1], &err);
  if (ret != 0) {
    fprintf(stderr, "Parse EXR err: %s\n", err);
    FreeEXRErrorMessage(err); // free's buffer for an error message
    return ret;
  }

  printf("Loaded %d part images\n", num_exr_headers);

  // 4. Access image data
  // `exr_image.images` will be filled when EXR is scanline format.
  // `exr_image.tiled` will be filled when EXR is tiled format.

  // 5. Free images
  for (int i =0; i < num_exr_headers; i++) {
    FreeEXRImage(&images.at(i));
  }

  // 6. Free headers.
  for (int i =0; i < num_exr_headers; i++) {
    FreeEXRHeader(exr_headers[i]);
    free(exr_headers[i]);
  }
  free(exr_headers);
```


Saving Scanline EXR file.

```cpp
  // See `examples/rgbe2exr/` for more details.
  bool SaveEXR(const float* rgb, int width, int height, const char*\
 outfilename) {

    EXRHeader header;
    InitEXRHeader(&header);

    EXRImage image;
    InitEXRImage(&image);

    image.num_channels = 3;

    std::vector<float> images[3];
    images[0].resize(width * height);
    images[1].resize(width * height);
    images[2].resize(width * height);

    // Split RGBRGBRGB... into R, G and B layer
    for (int i = 0; i < width * height; i++) {
      images[0][i] = rgb[3*i+0];
      images[1][i] = rgb[3*i+1];
      images[2][i] = rgb[3*i+2];
    }

    float* image_ptr[3];
    image_ptr[0] = &(images[2].at(0)); // B
    image_ptr[1] = &(images[1].at(0)); // G
    image_ptr[2] = &(images[0].at(0)); // R

    image.images = (unsigned char**)image_ptr;
    image.width = width;
    image.height = height;

    header.num_channels = 3;
    header.channels = (EXRChannelInfo *)malloc(sizeof(EXRChannelInfo) *\
 header.num_channels);
    // Must be (A)BGR order, since most of EXR viewers expect this channel\
 order.
    strncpy(header.channels[0].name, "B", 255); header.channels[0].name[strle\
n("B")] = '\0';
    strncpy(header.channels[1].name, "G", 255); header.channels[1].name[strle\
n("G")] = '\0';
    strncpy(header.channels[2].name, "R", 255); header.channels[2].name[strle\
n("R")] = '\0';

    header.pixel_types = (int *)malloc(sizeof(int) * header.num_channels);
    header.requested_pixel_types = (int *)malloc(sizeof(int) *\
 header.num_channels);
    for (int i = 0; i < header.num_channels; i++) {
      header.pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT; // pixel type of input\
 image
      header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_HALF; // pixel type\
 of output image to be stored in .EXR
    }

    const char* err = NULL; // or nullptr in C++11 or later.
    int ret = SaveEXRImageToFile(&image, &header, outfilename, &err);
    if (ret != TINYEXR_SUCCESS) {
      fprintf(stderr, "Save EXR err: %s\n", err);
      FreeEXRErrorMessage(err); // free's buffer for an error message
      return ret;
    }
    printf("Saved exr file. [ %s ] \n", outfilename);

    free(rgb);

    free(header.channels);
    free(header.pixel_types);
    free(header.requested_pixel_types);

  }
```


Reading deep image EXR file.
See `example/deepview` for actual usage.

```cpp
  const char* input = "deepimage.exr";
  const char* err = NULL; // or nullptr
  DeepImage deepImage;

  int ret = LoadDeepEXR(&deepImage, input, &err);

  // access to each sample in the deep pixel.
  for (int y = 0; y < deepImage.height; y++) {
    int sampleNum = deepImage.offset_table[y][deepImage.width-1];
    for (int x = 0; x < deepImage.width-1; x++) {
      int s_start = deepImage.offset_table[y][x];
      int s_end   = deepImage.offset_table[y][x+1];
      if (s_start >= sampleNum) {
        continue;
      }
      s_end = (s_end < sampleNum) ? s_end : sampleNum;
      for (int s = s_start; s < s_end; s++) {
        float val = deepImage.image[depthChan][y][s];
        ...
      }
    }
  }

```

### deepview

`examples/deepview` is simple deep image viewer in OpenGL.

![DeepViewExample](https://github.com/syoyo/tinyexr/blob/release/examples/dee\
pview/deepview_screencast.gif?raw=true)

## TinyEXR extension

### ZFP

#### NOTE

TinyEXR adds ZFP compression as an experimemtal support (Linux and MacOSX\
 only).

ZFP only supports FLOAT format pixel, and its image width and height must be\
 the multiple of 4, since ZFP compresses pixels with 4x4 pixel block.

#### Setup

Checkout zfp repo as an submodule.

    $ git submodule update --init

#### Build

Then build ZFP

    $ cd deps/ZFP
    $ mkdir -p lib   # Create `lib` directory if not exist
    $ make

Set `1` to `TINYEXT_USE_ZFP` define in `tinyexr.h`

Build your app with linking `deps/ZFP/lib/libzfp.a`

#### ZFP attribute

For ZFP EXR image, the following attribute must exist in its EXR image.

* `zfpCompressionType` (uchar).
  * 0 = fixed rate compression
  * 1 = precision based variable rate compression
  * 2 = accuracy based variable rate compression

And the one of following attributes must exist in EXR, depending on the\
 `zfpCompressionType` value.

* `zfpCompressionRate` (double)
  * Specifies compression rate for fixed rate compression.
* `zfpCompressionPrecision` (int32)
  * Specifies the number of bits for precision based variable rate\
 compression.
* `zfpCompressionTolerance` (double)
  * Specifies the tolerance value for accuracy based variable rate\
 compression.

#### Note on ZFP compression.

At least ZFP code itself works well on big endian machine.

## Unit tests

See `test/unit` directory.

## TODO

Contribution is welcome!

- [ ] Compression
  - [ ] B44?
  - [ ] B44A?
  - [ ] PIX24?
- [ ] Custom attributes
  - [x] Normal image (EXR 1.x)
  - [ ] Deep image (EXR 2.x)
- [ ] JavaScript library (experimental, using Emscripten)
  - [x] LoadEXRFromMemory
  - [ ] SaveMultiChannelEXR
  - [ ] Deep image save/load
- [ ] Write from/to memory buffer.
  - [ ] Deep image save/load
- [ ] Tile format.
  - [x] Tile format with no LoD (load).
  - [ ] Tile format with LoD (load).
  - [ ] Tile format with no LoD (save).
  - [ ] Tile format with LoD (save).
- [ ] Support for custom compression type.
  - [x] zfp compression (Not in OpenEXR spec, though)
  - [ ] zstd?
- [x] Multi-channel.
- [ ] Multi-part (EXR2.0)
  - [x] Load multi-part image
  - [ ] Load multi-part deep image
- [ ] Line order.
  - [x] Increasing, decreasing (load)
  - [ ] Random?
  - [ ] Increasing, decreasing (save)
- [ ] Pixel format (UINT, FLOAT).
  - [x] UINT, FLOAT (load)
  - [x] UINT, FLOAT (deep load)
  - [x] UINT, FLOAT (save)
  - [ ] UINT, FLOAT (deep save)
- [ ] Support for big endian machine.
  - [ ] Loading multi-part channel EXR
  - [ ] Saving multi-part channel EXR
  - [ ] Loading deep image
  - [ ] Saving deep image
- [ ] Optimization
  - [ ] ISPC?
  - [x] OpenMP multi-threading in EXR loading.
  - [x] OpenMP multi-threading in EXR saving.
  - [ ] OpenMP multi-threading in deep image loading.
  - [ ] OpenMP multi-threading in deep image saving.

## Python bindings

`pytinyexr` is available: https://pypi.org/project/pytinyexr/ (loading only\
 as of 0.9.1)

## Similar or related projects

* miniexr: https://github.com/aras-p/miniexr (Write OpenEXR)
* stb_image_resize.h: https://github.com/nothings/stb (Good for HDR image\
 resizing)

## License

3-clause BSD

`tinyexr` uses miniz, which is developed by Rich Geldreich\
 <richgel99@gmail.com>, and licensed under public domain.

`tinyexr` tools uses stb, which is licensed under public domain:\
 https://github.com/nothings/stb
`tinyexr` uses some code from OpenEXR, which is licensed under 3-clause BSD\
 license.
`tinyexr` uses nanozlib and wuffs, whose are licensed unnder Apache 2.0\
 license.

## Author(s)

Syoyo Fujita (syoyo@lighttransport.com)

## Contributor(s)

* Matt Ebb (http://mattebb.com): deep image example. Thanks!
* Matt Pharr (http://pharr.org/matt/): Testing tinyexr with OpenEXR(IlmImf).\
 Thanks!
* Andrew Bell (https://github.com/andrewfb) & Richard Eakin\
 (https://github.com/richardeakin): Improving TinyEXR API. Thanks!
* Mike Wong (https://github.com/mwkm): ZIPS compression support in loading.\
 Thanks!

\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for tinyexr

This project builds and defines the build2 package for [`tinyexr`](https://gi\
thub.com/syoyo/tinyexr).
It is a small, single-header-only library to load and save OpenEXR (.exr)\
 images, that is written in portable C++ (no library dependency except for\
 STL).

[![Official](https://img.shields.io/website/https/github.com/syoyo/tinyexr.sv\
g?down_message=offline&label=Official&style=for-the-badge&up_color=blue&up_me\
ssage=online)](https://github.com/syoyo/tinyexr)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/t\
inyexr.svg?down_message=offline&label=build2&style=for-the-badge&up_color=blu\
e&up_message=online)](https://github.com/build2-packaging/tinyexr)
[![cppget.org](https://img.shields.io/website/https/cppget.org/libtinyexr.svg\
?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_m\
essage=online)](https://cppget.org/libtinyexr)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/li\
btinyexr.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=\
for-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/l\
ibtinyexr)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch this package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/tinyexr.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: libtinyexr ^1.0.8

The library can be imported by the following declaration in a `buildfile`.

    import tinyexr = libtinyexr%lib{tinyexr}

## Configuration
There are no configuration options available.

## Issues and Notes
- The test data in the `libtinyexr-tests` package is more than 240 MiB in\
 size and, as a consequence, not publishable on `cppget.org` because it is\
 too large. Thus, it is not declared as the mandatory external tests package\
 of `libtinyexr`. It can and should still be used for local testing and for\
 CI runs.
- By using the macros `TINYEXR_USE_THREAD` or `TINYEXR_USE_OPENMP`, `tinyexr`\
 is able to support multithreading by either using C++11 threads or OpenMP.\
 Please note that the package's build system is not automatically adding\
 dependencies and flags for `pthread` or OpenMP.
- Currently, the configuration of dependencies for `tinyexr` is not handled\
 by the package's build system. `tinyexr` uses `miniz` by default and it does\
 not provide specific tests for other configurations. Furthermore, support\
 for `zlib` and `stb`'s implementation of `zlib` only seems to be useful when\
 using `tinyexr` without a build system as drop-in header file. So, for now,\
 please refrain from using the following macros.
    + `TINYEXR_USE_MINIZ`
    + `TINYEXR_USE_STB_ZLIB`
- `tinyexr` adds ZFP compression only as an experimental support on Linux and\
 MacOS. Currently, it is not supported by the packgage's build system. Hence,\
 please, refrain from using the following macro.
    + `TINYEXR_USE_ZFP`
- The compilation of the tests package `libtinyexr-tests` is not supported on\
 target configurations `windows*-clang**` due to the wrong encoding of\
 `win32-filelist-utf16le.inc`. Presumably, this will not be fixed as it is an\
 upstream issue. Please note that the compilation and execution of the basic\
 tests still works on these configurations. Thus, the library should work\
 without flaws on those platforms.
- For Windows, the file `'日本語.exr'` and the test `utf8filename` had to be\
 removed from distribution and execution, respectively. Please, see [this\
 issue](https://github.com/build2/build2/issues/307) for more information.
- Emscripten is not supported.
- The examples are not supported by the package's build system, yet.
- For now, the fuzzers are not compiled and run.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/tinyexr/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/tinyexr\
/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/tinyex\
r) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish -d libtinyexr/` to publish the package to\
 [cppget.org](https://cppget.org).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/syoyo/tinyexr
doc-url: https://github.com/syoyo/tinyexr
src-url: https://github.com/syoyo/tinyexr
package-url: https://github.com/build2-packaging/tinyexr/
email: syoyo@lighttransport.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libminiz ^3.0.0
bootstrap-build:
\
project = libtinyexr

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

hxx{*}: cxx.importable = false

test.target = $cxx.target

\
location: tinyexr/libtinyexr-1.0.8.tar.gz
sha256sum: 152d182d292ee20361d117854f0e6168bf37b4fdfaf237e673bc39e2fa404ca2
:
name: libtomlplusplus
version: 3.3.0
project: tomlplusplus
summary: Header-only TOML config file parser and serializer for C++17.
license: MIT
description:
\
[![banner](docs/images/banner.png)][homepage]
[![Releases](https://img.shields.io/github/v/release/marzer/tomlplusplus?styl\
e=flat-square)](https://github.com/marzer/tomlplusplus/releases)
[![C++17](docs/images/badge-C++17.svg)][cpp_compilers]
[![TOML](docs/images/badge-TOML.svg)][v1.0.0]
[![MIT license](docs/images/badge-license-MIT.svg)](./LICENSE)
[![ci](https://github.com/marzer/tomlplusplus/actions/workflows/ci.yaml/badge\
.svg?branch=master)](https://github.com/marzer/tomlplusplus/actions/workflows\
/ci.yaml)
[![Mentioned in Awesome C++](docs/images/badge-awesome.svg)](https://github.c\
om/fffaraz/awesome-cpp)
[![Sponsor](docs/images/badge-sponsor.svg)](https://github.com/sponsors/marze\
r)
[![Gitter](docs/images/badge-gitter.svg)](https://gitter.im/marzer/tomlpluspl\
us)
====

## toml++ homepage

<p align="center">
	<strong>✨&#xFE0F; This README is fine, but the <a href="https://marzer.githu\
b.io/tomlplusplus/">toml++ homepage</a> is better. ✨&#xFE0F;</strong>
</p>

<br>

## Library features

- Header-only (optional!)
- Supports the latest [TOML] release ([v1.0.0]), plus optional support for\
 some unreleased TOML features
- Passes all tests in the [toml-test](https://github.com/BurntSushi/toml-test\
) suite
- Supports serializing to JSON and YAML
- Proper UTF-8 handling (incl. BOM)
- C++17 (plus some C++20 features where available, e.g. experimental support\
 for [char8_t] strings)
- Doesn't require RTTI
- Works with or without exceptions
- Tested on Clang (6+), GCC (7+) and MSVC (VS2019)
- Tested on x64, x86 and ARM

<br>

## Basic usage

> ℹ&#xFE0F; _The following example favours brevity. If you'd prefer full API\
 documentation and lots of specific code snippets
instead, visit the project [homepage]_

Given a [TOML] file `configuration.toml` containing the following:

```toml
[library]
name = "toml++"
authors = ["Mark Gillard <mark.gillard@outlook.com.au>"]

[dependencies]
cpp = 17
```

Reading it in C++ is easy with toml++:

```cpp
#include <toml.hpp>

auto config = toml::parse_file( "configuration.toml" );

// get key-value pairs
std::string_view library_name = config["library"]["name"].value_or(""sv);
std::string_view library_author = config["library"]["authors"][0].value_or(""\
sv);
int64_t depends_on_cpp_version = config["dependencies"]["cpp"].value_or(0);

// modify the data
config.insert_or_assign("alternatives", toml::array{
    "cpptoml",
    "toml11",
    "Boost.TOML"
});

// use a visitor to iterate over heterogenous data
config.for_each([](auto& key, auto& value)
{
    std::cout << value << "\n";
    if constexpr (toml::is_string<decltype(value)>)
        do_something_with_string_values(value);
});

// you can also iterate more 'traditionally' using a ranged-for
for (auto&& [k, v] : config)
{
    // ...
}

// re-serialize as TOML
std::cout << config << "\n";

// re-serialize as JSON
std::cout << toml::json_formatter{ config } << "\n";

// re-serialize as YAML
std::cout << toml::yaml_formatter{ config } << "\n";

```

You'll find some more code examples in the `examples` directory, and plenty\
 more as part of the [API documentation].

<br>

## Adding toml++ to your project

`toml++` comes in two flavours: Single-header and Regular. The API is the\
 same for both. 

### 🍦&#xFE0F; Single-header flavour

1. Drop [`toml.hpp`] wherever you like in your source tree
2. There is no step two

### 🍨&#xFE0F; Regular flavour

1. Clone the repository
2. Add `tomlplusplus/include` to your include paths
3. `#include <toml++/toml.h>`

### Conan

Add `tomlplusplus/3.3.0` to your conanfile.

### DDS

Add `tomlpp` to your `package.json5`, e.g.:

```plaintext
depends: [
    'tomlpp^3.3.0',
]
```

> ℹ&#xFE0F; _[What is DDS?](https://dds.pizza/)_

### Tipi.build

`tomlplusplus` can be easily used in [tipi.build](https://tipi.build)\
 projects by adding the following entry to your `.tipi/deps`:

```json
{
    "marzer/tomlplusplus": { }
}
```

### Vcpkg

```plaintext
vcpkg install tomlplusplus
```

### Meson

You can install the wrap with:

```plaintext
meson wrap install tomlplusplus
```

After that, you can use it like a regular dependency:

```meson
tomlplusplus_dep = dependency('tomlplusplus')
```

You can also add it as a subproject directly.

### CMake FetchContent

```cmake
include(FetchContent)
FetchContent_Declare(
    tomlplusplus
    GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
    GIT_TAG        v3.3.0
)
FetchContent_MakeAvailable(tomlplusplus)
```

> ℹ&#xFE0F; _[What is FetchContent?](https://cmake.org/cmake/help/latest/modu\
le/FetchContent.html)_

### Git submodules

```plaintext
git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git\
 tomlplusplus
git config -f .gitmodules submodule.tomlplusplus.shallow true
```

> ⚠&#xFE0F; The toml++ repository has some submodules of its own, but **they\
 are only used for testing**!
> You should **not** use the `--recursive` option for regular library\
 consumption.

### Other environments and package managers

The C++ tooling ecosystem is a fractal nightmare of unbridled chaos so\
 naturally I'm not up-to-speed with all of the
available packaging and integration options. I'm always happy to see new ones\
 supported, though! If there's some
integration you'd like to see and have the technical know-how to make it\
 happen, feel free to
[make a pull request](./CONTRIBUTING.md).

### What about dependencies?

If you just want to consume `toml++` as a regular library then you don't have\
 any dependencies to worry about.
There's a few test-related dependencies to be aware of if you're working on\
 the library, though.
See [CONTRIBUTING] for information.

<br>

## Configuration

A number of configurable options are exposed in the form of preprocessor\
 `#defines` Most likely you
won't need to mess with these at all, but if you do, set them before\
 including toml++.

| Option                            |      Type      | Description           \
                                                                             \
      | Default                |
|-----------------------------------|:--------------:|-----------------------\
-----------------------------------------------------------------------------\
------|------------------------|
| `TOML_ASSERT(expr)`               | function macro | Sets the assert\
 function used by the library.                                               \
             | `assert()`             |
| `TOML_CALLCONV`                   |     define     | Calling convention to\
 apply to exported free/static functions.                                    \
       | undefined              |
| `TOML_CONFIG_HEADER`              | string literal | Includes the given\
 header file before the rest of the library.                                 \
          | undefined              |
| `TOML_ENABLE_FORMATTERS`          |     boolean    | Enables the\
 formatters. Set to `0` if you don't need them to improve compile times and\
 binary size.      | `1`                    |
| `TOML_ENABLE_FLOAT16`             |     boolean    | Enables support for\
 the built-in `_Float16` type.                                               \
         | per compiler settings  |
| `TOML_ENABLE_PARSER`              |     boolean    | Enables the parser.\
 Set to `0` if you don't need it to improve compile times and binary size.   \
         | `1`                    |
| `TOML_ENABLE_UNRELEASED_FEATURES` |     boolean    | Enables support for\
 [unreleased TOML language features].                                        \
         | `0`                    |
| `TOML_ENABLE_WINDOWS_COMPAT`      |     boolean    | Enables support for\
 transparent conversion between wide and narrow strings.                     \
         | `1` on Windows         |
| `TOML_EXCEPTIONS`                 |     boolean    | Sets whether the\
 library uses exceptions.                                                    \
            | per compiler settings  |
| `TOML_EXPORTED_CLASS`             |     define     | API export annotation\
 to add to classes.                                                          \
       | undefined              |
| `TOML_EXPORTED_MEMBER_FUNCTION`   |     define     | API export annotation\
 to add to non-static class member functions.                                \
       | undefined              |
| `TOML_EXPORTED_FREE_FUNCTION`     |     define     | API export annotation\
 to add to free functions.                                                   \
       | undefined              |
| `TOML_EXPORTED_STATIC_FUNCTION`   |     define     | API export annotation\
 to add to static functions.                                                 \
       | undefined              |
| `TOML_HEADER_ONLY`                |     boolean    | Disable this to\
 explicitly control where toml++'s implementation is compiled (e.g. as part\
 of a library).| `1`                    |
| `TOML_IMPLEMENTATION`             |     define     | Define this to enable\
 compilation of the library's implementation when `TOML_HEADER_ONLY` == `0`. \
       | undefined              |
| `TOML_OPTIONAL_TYPE`              |    type name   | Overrides the\
 `optional<T>` type used by the library if you need [something better than\
 std::optional].  | undefined              |
| `TOML_SMALL_FLOAT_TYPE`           |    type name   | If your codebase has a\
 custom 'small float' type (e.g. half-precision), this tells toml++ about it.\
      | undefined              |
| `TOML_SMALL_INT_TYPE`             |    type name   | If your codebase has a\
 custom 'small integer' type (e.g. 24-bits), this tells toml++ about it.     \
      | undefined              |

> ℹ&#xFE0F; _A number of these have ABI implications; the library uses inline\
 namespaces to prevent you from accidentally
linking incompatible combinations together._

<br>

## TOML Language Support

At any given time the library aims to support whatever the [most\
 recently-released version] of TOML is, with opt-in
support for a number of unreleased features from the [TOML master] and some\
 sane cherry-picks from the
[TOML issues list] where the discussion strongly indicates inclusion in a\
 near-future release.

The library advertises the most recent numbered language version it fully\
 supports via the preprocessor
defines `TOML_LANG_MAJOR`, `TOML_LANG_MINOR` and `TOML_LANG_PATCH`.

### **Unreleased language features:**

- [#516]: Allow newlines and trailing commas in inline tables
- [#562]: Allow hex floating-point values
- [#644]: Support `+` in key names
- [#671]: Local time of day format should support `09:30` as opposed to\
 `09:30:00`
- [#687]: Relax bare key restrictions to allow additional unicode characters
- [#790]: Include an `\e` escape code sequence (shorthand for `\u001B`)
- [#796]: Include an `\xHH` escape code sequence
- [#891]: Allow non-English scripts for unquoted keys

> ℹ&#xFE0F; _`#define TOML_ENABLE_UNRELEASED_FEATURES 1` to enable these\
 features (see [Configuration](#Configuration))._

### 🔹&#xFE0F; **TOML v1.0.0:**

All features supported, including:

- [#356]: Allow leading zeros in the exponent part of a float
- [#567]: Control characters are not permitted in comments
- [#571]: Allow raw tabs inside strings
- [#665]: Make arrays heterogeneous
- [#766]: Allow comments before commas in arrays

### 🔹&#xFE0F; **TOML v0.5.0:**

All features supported.

<br>

## Contributing

Contributions are very welcome! Either by [reporting issues] or submitting\
 pull requests.
If you wish to submit a pull request, please see [CONTRIBUTING] for all the\
 details you need to get going.

<br>

## License and Attribution

toml++ is licensed under the terms of the MIT license - see [LICENSE].

UTF-8 decoding is performed using a state machine based on Bjoern Hoehrmann's\
 '[Flexible and Economical UTF-8 Decoder]'.

### With thanks to:

- **[@beastle9end](https://github.com/beastle9end)** - Made Windows.h include\
 bypass
- **[@bjadamson](https://github.com/bjadamson)** - Reported some bugs and\
 helped design a new feature
- **[@bobfang1992](https://github.com/bobfang1992)** - Reported a bug and\
 created a [wrapper in python](https://github.com/bobfang1992/pytomlpp)
- **[@GiulioRomualdi](https://github.com/GiulioRomualdi)** - Added\
 cmake+meson support
- **[@jonestristand](https://github.com/jonestristand)** - Designed and\
 implemented the `toml::path`s feature
- **[@kcsaul](https://github.com/kcsaul)** - Fixed a bug
- **[@levicki](https://github.com/levicki)** - Helped design some new features
- **[@moorereason](https://github.com/moorereason)** - Reported a whole bunch\
 of bugs
- **[@mosra](https://github.com/mosra)** - Created the awesome [m.css] used\
 to generate the API docs
- **[@ned14](https://github.com/ned14)** - Reported a bunch of bugs and\
 helped design some new features
- **[@okureta](https://github.com/okureta)** - Reported a bug
- **[@prince-chrismc](https://github.com/prince-chrismc)** - Added toml++ to\
 ConanCenter, and fixed some typos
- **[@rbrugo](https://github.com/rbrugo)** - Helped design a new feature
- **[@Reedbeta](https://github.com/Reedbeta)** - Fixed a bug and added\
 additional Visual Studio debugger native visualizers
- **[@Ryan-rsm-McKenzie](https://github.com/Ryan-rsm-McKenzie)** - Add natvis\
 file to cmake install script
- **[@shdnx](https://github.com/shdnx)** - Fixed a bug on GCC 8.2.0 and some\
 meson config issues
- **[@sneves](https://github.com/sneves)** - Helped fix a number of parser\
 bugs
- **[@sobczyk](https://github.com/sobczyk)** - Reported some bugs
- **[@std-any-emplace](https://github.com/std-any-emplace)** - Reported some\
 bugs
- **[@Tachi107](https://github.com/Tachi107)** - Made some tweaks to\
 meson.build, added compile_library build option
- **[@traversaro](https://github.com/traversaro)** - Added vcpkg support and\
 reported a bunch of bugs
- **[@whiterabbit963](https://github.com/whiterabbit963)** - Fixed a bug with\
 value_or conversions
- **[@ximion](https://github.com/ximion)** - Added support for installation\
 with meson
- **[@a-is](https://github.com/a-is)** - Fixed a bug

<br>

## Contact

For bug reports and feature requests please consider using the [issues]\
 system here on GitHub. For anything else
though you're welcome to reach out via other means. In order of likely\
 response time:

- Gitter: [marzer/tomlplusplus](https://gitter.im/marzer/tomlplusplus)\
 ("Discord for repos")
- Twitter: [marzer8789](https://twitter.com/marzer8789)
- Email: [mark.gillard@outlook.com.au](mailto:mark.gillard@outlook.com.au)
- Facebook: [marzer](https://www.facebook.com/marzer)
- LinkedIn: [marzer](https://www.linkedin.com/in/marzer/)

[API documentation]: https://marzer.github.io/tomlplusplus/
[homepage]: https://marzer.github.io/tomlplusplus/
[unreleased TOML language features]: #unreleased-language-features
[most recently-released version]: https://github.com/toml-lang/toml/releases
[char8_t]: https://en.cppreference.com/w/cpp/keyword/char8_t
[TOML]: https://toml.io/
[TOML master]: https://github.com/toml-lang/toml/blob/master/README.md
[TOML issues list]: https://github.com/toml-lang/toml/issues
[v1.0.0]: https://toml.io/en/v1.0.0
[CONTRIBUTING]: ./CONTRIBUTING.md
[LICENSE]: ./LICENSE
[Flexible and Economical UTF-8 Decoder]: http://bjoern.hoehrmann.de/utf-8/dec\
oder/dfa/
[cpp_compilers]: https://en.cppreference.com/w/cpp/compiler_support
[reporting issues]: https://github.com/marzer/tomlplusplus/issues/new/choose
[issues]: https://github.com/marzer/tomlplusplus/issues
[#356]: https://github.com/toml-lang/toml/issues/356
[#516]: https://github.com/toml-lang/toml/issues/516
[#562]: https://github.com/toml-lang/toml/issues/562
[#567]: https://github.com/toml-lang/toml/issues/567
[#571]: https://github.com/toml-lang/toml/issues/571
[#644]: https://github.com/toml-lang/toml/issues/644
[#665]: https://github.com/toml-lang/toml/issues/665
[#671]: https://github.com/toml-lang/toml/issues/671
[#687]: https://github.com/toml-lang/toml/issues/687
[#766]: https://github.com/toml-lang/toml/issues/766
[#790]: https://github.com/toml-lang/toml/pull/790
[#796]: https://github.com/toml-lang/toml/pull/796
[#891]: https://github.com/toml-lang/toml/pull/891
[something better than std::optional]: https://github.com/TartanLlama/optional
[m.css]: https://mcss.mosra.cz/documentation/doxygen
[`toml.hpp`]: https://raw.githubusercontent.com/marzer/tomlplusplus/master/to\
ml.hpp

\
description-type: text/markdown;variant=GFM
url: https://marzer.github.io/tomlplusplus/
doc-url: https://marzer.github.io/tomlplusplus/annotated.html
src-url: https://github.com/marzer/tomlplusplus
package-url: https://github.com/build2-packaging/tomlplusplus
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: C++17
tests: libtomlplusplus-tests
builds: default
bootstrap-build:
\
project = libtomlplusplus

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = inl
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

config [bool] config.libtomlplusplus.use_exceptions ?= true
config [bool] config.libtomlplusplus.use_header_only ?= false

\
location: tomlplusplus/libtomlplusplus-3.3.0.tar.gz
sha256sum: 5e70e2567805679657fd06f751dd02267c8aa2bfab7a8af034cb4214d8364bd9
:
name: libtomlplusplus-tests
version: 3.3.0
project: tomlplusplus
summary: Tests for the toml++ library.
license: MIT
description:
\
[![banner](docs/images/banner.png)][homepage]
[![Releases](https://img.shields.io/github/v/release/marzer/tomlplusplus?styl\
e=flat-square)](https://github.com/marzer/tomlplusplus/releases)
[![C++17](docs/images/badge-C++17.svg)][cpp_compilers]
[![TOML](docs/images/badge-TOML.svg)][v1.0.0]
[![MIT license](docs/images/badge-license-MIT.svg)](./LICENSE)
[![ci](https://github.com/marzer/tomlplusplus/actions/workflows/ci.yaml/badge\
.svg?branch=master)](https://github.com/marzer/tomlplusplus/actions/workflows\
/ci.yaml)
[![Mentioned in Awesome C++](docs/images/badge-awesome.svg)](https://github.c\
om/fffaraz/awesome-cpp)
[![Sponsor](docs/images/badge-sponsor.svg)](https://github.com/sponsors/marze\
r)
[![Gitter](docs/images/badge-gitter.svg)](https://gitter.im/marzer/tomlpluspl\
us)
====

## toml++ homepage

<p align="center">
	<strong>✨&#xFE0F; This README is fine, but the <a href="https://marzer.githu\
b.io/tomlplusplus/">toml++ homepage</a> is better. ✨&#xFE0F;</strong>
</p>

<br>

## Library features

- Header-only (optional!)
- Supports the latest [TOML] release ([v1.0.0]), plus optional support for\
 some unreleased TOML features
- Passes all tests in the [toml-test](https://github.com/BurntSushi/toml-test\
) suite
- Supports serializing to JSON and YAML
- Proper UTF-8 handling (incl. BOM)
- C++17 (plus some C++20 features where available, e.g. experimental support\
 for [char8_t] strings)
- Doesn't require RTTI
- Works with or without exceptions
- Tested on Clang (6+), GCC (7+) and MSVC (VS2019)
- Tested on x64, x86 and ARM

<br>

## Basic usage

> ℹ&#xFE0F; _The following example favours brevity. If you'd prefer full API\
 documentation and lots of specific code snippets
instead, visit the project [homepage]_

Given a [TOML] file `configuration.toml` containing the following:

```toml
[library]
name = "toml++"
authors = ["Mark Gillard <mark.gillard@outlook.com.au>"]

[dependencies]
cpp = 17
```

Reading it in C++ is easy with toml++:

```cpp
#include <toml.hpp>

auto config = toml::parse_file( "configuration.toml" );

// get key-value pairs
std::string_view library_name = config["library"]["name"].value_or(""sv);
std::string_view library_author = config["library"]["authors"][0].value_or(""\
sv);
int64_t depends_on_cpp_version = config["dependencies"]["cpp"].value_or(0);

// modify the data
config.insert_or_assign("alternatives", toml::array{
    "cpptoml",
    "toml11",
    "Boost.TOML"
});

// use a visitor to iterate over heterogenous data
config.for_each([](auto& key, auto& value)
{
    std::cout << value << "\n";
    if constexpr (toml::is_string<decltype(value)>)
        do_something_with_string_values(value);
});

// you can also iterate more 'traditionally' using a ranged-for
for (auto&& [k, v] : config)
{
    // ...
}

// re-serialize as TOML
std::cout << config << "\n";

// re-serialize as JSON
std::cout << toml::json_formatter{ config } << "\n";

// re-serialize as YAML
std::cout << toml::yaml_formatter{ config } << "\n";

```

You'll find some more code examples in the `examples` directory, and plenty\
 more as part of the [API documentation].

<br>

## Adding toml++ to your project

`toml++` comes in two flavours: Single-header and Regular. The API is the\
 same for both. 

### 🍦&#xFE0F; Single-header flavour

1. Drop [`toml.hpp`] wherever you like in your source tree
2. There is no step two

### 🍨&#xFE0F; Regular flavour

1. Clone the repository
2. Add `tomlplusplus/include` to your include paths
3. `#include <toml++/toml.h>`

### Conan

Add `tomlplusplus/3.3.0` to your conanfile.

### DDS

Add `tomlpp` to your `package.json5`, e.g.:

```plaintext
depends: [
    'tomlpp^3.3.0',
]
```

> ℹ&#xFE0F; _[What is DDS?](https://dds.pizza/)_

### Tipi.build

`tomlplusplus` can be easily used in [tipi.build](https://tipi.build)\
 projects by adding the following entry to your `.tipi/deps`:

```json
{
    "marzer/tomlplusplus": { }
}
```

### Vcpkg

```plaintext
vcpkg install tomlplusplus
```

### Meson

You can install the wrap with:

```plaintext
meson wrap install tomlplusplus
```

After that, you can use it like a regular dependency:

```meson
tomlplusplus_dep = dependency('tomlplusplus')
```

You can also add it as a subproject directly.

### CMake FetchContent

```cmake
include(FetchContent)
FetchContent_Declare(
    tomlplusplus
    GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
    GIT_TAG        v3.3.0
)
FetchContent_MakeAvailable(tomlplusplus)
```

> ℹ&#xFE0F; _[What is FetchContent?](https://cmake.org/cmake/help/latest/modu\
le/FetchContent.html)_

### Git submodules

```plaintext
git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git\
 tomlplusplus
git config -f .gitmodules submodule.tomlplusplus.shallow true
```

> ⚠&#xFE0F; The toml++ repository has some submodules of its own, but **they\
 are only used for testing**!
> You should **not** use the `--recursive` option for regular library\
 consumption.

### Other environments and package managers

The C++ tooling ecosystem is a fractal nightmare of unbridled chaos so\
 naturally I'm not up-to-speed with all of the
available packaging and integration options. I'm always happy to see new ones\
 supported, though! If there's some
integration you'd like to see and have the technical know-how to make it\
 happen, feel free to
[make a pull request](./CONTRIBUTING.md).

### What about dependencies?

If you just want to consume `toml++` as a regular library then you don't have\
 any dependencies to worry about.
There's a few test-related dependencies to be aware of if you're working on\
 the library, though.
See [CONTRIBUTING] for information.

<br>

## Configuration

A number of configurable options are exposed in the form of preprocessor\
 `#defines` Most likely you
won't need to mess with these at all, but if you do, set them before\
 including toml++.

| Option                            |      Type      | Description           \
                                                                             \
      | Default                |
|-----------------------------------|:--------------:|-----------------------\
-----------------------------------------------------------------------------\
------|------------------------|
| `TOML_ASSERT(expr)`               | function macro | Sets the assert\
 function used by the library.                                               \
             | `assert()`             |
| `TOML_CALLCONV`                   |     define     | Calling convention to\
 apply to exported free/static functions.                                    \
       | undefined              |
| `TOML_CONFIG_HEADER`              | string literal | Includes the given\
 header file before the rest of the library.                                 \
          | undefined              |
| `TOML_ENABLE_FORMATTERS`          |     boolean    | Enables the\
 formatters. Set to `0` if you don't need them to improve compile times and\
 binary size.      | `1`                    |
| `TOML_ENABLE_FLOAT16`             |     boolean    | Enables support for\
 the built-in `_Float16` type.                                               \
         | per compiler settings  |
| `TOML_ENABLE_PARSER`              |     boolean    | Enables the parser.\
 Set to `0` if you don't need it to improve compile times and binary size.   \
         | `1`                    |
| `TOML_ENABLE_UNRELEASED_FEATURES` |     boolean    | Enables support for\
 [unreleased TOML language features].                                        \
         | `0`                    |
| `TOML_ENABLE_WINDOWS_COMPAT`      |     boolean    | Enables support for\
 transparent conversion between wide and narrow strings.                     \
         | `1` on Windows         |
| `TOML_EXCEPTIONS`                 |     boolean    | Sets whether the\
 library uses exceptions.                                                    \
            | per compiler settings  |
| `TOML_EXPORTED_CLASS`             |     define     | API export annotation\
 to add to classes.                                                          \
       | undefined              |
| `TOML_EXPORTED_MEMBER_FUNCTION`   |     define     | API export annotation\
 to add to non-static class member functions.                                \
       | undefined              |
| `TOML_EXPORTED_FREE_FUNCTION`     |     define     | API export annotation\
 to add to free functions.                                                   \
       | undefined              |
| `TOML_EXPORTED_STATIC_FUNCTION`   |     define     | API export annotation\
 to add to static functions.                                                 \
       | undefined              |
| `TOML_HEADER_ONLY`                |     boolean    | Disable this to\
 explicitly control where toml++'s implementation is compiled (e.g. as part\
 of a library).| `1`                    |
| `TOML_IMPLEMENTATION`             |     define     | Define this to enable\
 compilation of the library's implementation when `TOML_HEADER_ONLY` == `0`. \
       | undefined              |
| `TOML_OPTIONAL_TYPE`              |    type name   | Overrides the\
 `optional<T>` type used by the library if you need [something better than\
 std::optional].  | undefined              |
| `TOML_SMALL_FLOAT_TYPE`           |    type name   | If your codebase has a\
 custom 'small float' type (e.g. half-precision), this tells toml++ about it.\
      | undefined              |
| `TOML_SMALL_INT_TYPE`             |    type name   | If your codebase has a\
 custom 'small integer' type (e.g. 24-bits), this tells toml++ about it.     \
      | undefined              |

> ℹ&#xFE0F; _A number of these have ABI implications; the library uses inline\
 namespaces to prevent you from accidentally
linking incompatible combinations together._

<br>

## TOML Language Support

At any given time the library aims to support whatever the [most\
 recently-released version] of TOML is, with opt-in
support for a number of unreleased features from the [TOML master] and some\
 sane cherry-picks from the
[TOML issues list] where the discussion strongly indicates inclusion in a\
 near-future release.

The library advertises the most recent numbered language version it fully\
 supports via the preprocessor
defines `TOML_LANG_MAJOR`, `TOML_LANG_MINOR` and `TOML_LANG_PATCH`.

### **Unreleased language features:**

- [#516]: Allow newlines and trailing commas in inline tables
- [#562]: Allow hex floating-point values
- [#644]: Support `+` in key names
- [#671]: Local time of day format should support `09:30` as opposed to\
 `09:30:00`
- [#687]: Relax bare key restrictions to allow additional unicode characters
- [#790]: Include an `\e` escape code sequence (shorthand for `\u001B`)
- [#796]: Include an `\xHH` escape code sequence
- [#891]: Allow non-English scripts for unquoted keys

> ℹ&#xFE0F; _`#define TOML_ENABLE_UNRELEASED_FEATURES 1` to enable these\
 features (see [Configuration](#Configuration))._

### 🔹&#xFE0F; **TOML v1.0.0:**

All features supported, including:

- [#356]: Allow leading zeros in the exponent part of a float
- [#567]: Control characters are not permitted in comments
- [#571]: Allow raw tabs inside strings
- [#665]: Make arrays heterogeneous
- [#766]: Allow comments before commas in arrays

### 🔹&#xFE0F; **TOML v0.5.0:**

All features supported.

<br>

## Contributing

Contributions are very welcome! Either by [reporting issues] or submitting\
 pull requests.
If you wish to submit a pull request, please see [CONTRIBUTING] for all the\
 details you need to get going.

<br>

## License and Attribution

toml++ is licensed under the terms of the MIT license - see [LICENSE].

UTF-8 decoding is performed using a state machine based on Bjoern Hoehrmann's\
 '[Flexible and Economical UTF-8 Decoder]'.

### With thanks to:

- **[@beastle9end](https://github.com/beastle9end)** - Made Windows.h include\
 bypass
- **[@bjadamson](https://github.com/bjadamson)** - Reported some bugs and\
 helped design a new feature
- **[@bobfang1992](https://github.com/bobfang1992)** - Reported a bug and\
 created a [wrapper in python](https://github.com/bobfang1992/pytomlpp)
- **[@GiulioRomualdi](https://github.com/GiulioRomualdi)** - Added\
 cmake+meson support
- **[@jonestristand](https://github.com/jonestristand)** - Designed and\
 implemented the `toml::path`s feature
- **[@kcsaul](https://github.com/kcsaul)** - Fixed a bug
- **[@levicki](https://github.com/levicki)** - Helped design some new features
- **[@moorereason](https://github.com/moorereason)** - Reported a whole bunch\
 of bugs
- **[@mosra](https://github.com/mosra)** - Created the awesome [m.css] used\
 to generate the API docs
- **[@ned14](https://github.com/ned14)** - Reported a bunch of bugs and\
 helped design some new features
- **[@okureta](https://github.com/okureta)** - Reported a bug
- **[@prince-chrismc](https://github.com/prince-chrismc)** - Added toml++ to\
 ConanCenter, and fixed some typos
- **[@rbrugo](https://github.com/rbrugo)** - Helped design a new feature
- **[@Reedbeta](https://github.com/Reedbeta)** - Fixed a bug and added\
 additional Visual Studio debugger native visualizers
- **[@Ryan-rsm-McKenzie](https://github.com/Ryan-rsm-McKenzie)** - Add natvis\
 file to cmake install script
- **[@shdnx](https://github.com/shdnx)** - Fixed a bug on GCC 8.2.0 and some\
 meson config issues
- **[@sneves](https://github.com/sneves)** - Helped fix a number of parser\
 bugs
- **[@sobczyk](https://github.com/sobczyk)** - Reported some bugs
- **[@std-any-emplace](https://github.com/std-any-emplace)** - Reported some\
 bugs
- **[@Tachi107](https://github.com/Tachi107)** - Made some tweaks to\
 meson.build, added compile_library build option
- **[@traversaro](https://github.com/traversaro)** - Added vcpkg support and\
 reported a bunch of bugs
- **[@whiterabbit963](https://github.com/whiterabbit963)** - Fixed a bug with\
 value_or conversions
- **[@ximion](https://github.com/ximion)** - Added support for installation\
 with meson
- **[@a-is](https://github.com/a-is)** - Fixed a bug

<br>

## Contact

For bug reports and feature requests please consider using the [issues]\
 system here on GitHub. For anything else
though you're welcome to reach out via other means. In order of likely\
 response time:

- Gitter: [marzer/tomlplusplus](https://gitter.im/marzer/tomlplusplus)\
 ("Discord for repos")
- Twitter: [marzer8789](https://twitter.com/marzer8789)
- Email: [mark.gillard@outlook.com.au](mailto:mark.gillard@outlook.com.au)
- Facebook: [marzer](https://www.facebook.com/marzer)
- LinkedIn: [marzer](https://www.linkedin.com/in/marzer/)

[API documentation]: https://marzer.github.io/tomlplusplus/
[homepage]: https://marzer.github.io/tomlplusplus/
[unreleased TOML language features]: #unreleased-language-features
[most recently-released version]: https://github.com/toml-lang/toml/releases
[char8_t]: https://en.cppreference.com/w/cpp/keyword/char8_t
[TOML]: https://toml.io/
[TOML master]: https://github.com/toml-lang/toml/blob/master/README.md
[TOML issues list]: https://github.com/toml-lang/toml/issues
[v1.0.0]: https://toml.io/en/v1.0.0
[CONTRIBUTING]: ./CONTRIBUTING.md
[LICENSE]: ./LICENSE
[Flexible and Economical UTF-8 Decoder]: http://bjoern.hoehrmann.de/utf-8/dec\
oder/dfa/
[cpp_compilers]: https://en.cppreference.com/w/cpp/compiler_support
[reporting issues]: https://github.com/marzer/tomlplusplus/issues/new/choose
[issues]: https://github.com/marzer/tomlplusplus/issues
[#356]: https://github.com/toml-lang/toml/issues/356
[#516]: https://github.com/toml-lang/toml/issues/516
[#562]: https://github.com/toml-lang/toml/issues/562
[#567]: https://github.com/toml-lang/toml/issues/567
[#571]: https://github.com/toml-lang/toml/issues/571
[#644]: https://github.com/toml-lang/toml/issues/644
[#665]: https://github.com/toml-lang/toml/issues/665
[#671]: https://github.com/toml-lang/toml/issues/671
[#687]: https://github.com/toml-lang/toml/issues/687
[#766]: https://github.com/toml-lang/toml/issues/766
[#790]: https://github.com/toml-lang/toml/pull/790
[#796]: https://github.com/toml-lang/toml/pull/796
[#891]: https://github.com/toml-lang/toml/pull/891
[something better than std::optional]: https://github.com/TartanLlama/optional
[m.css]: https://mcss.mosra.cz/documentation/doxygen
[`toml.hpp`]: https://raw.githubusercontent.com/marzer/tomlplusplus/master/to\
ml.hpp

\
description-type: text/markdown;variant=GFM
url: https://marzer.github.io/tomlplusplus/
doc-url: https://marzer.github.io/tomlplusplus/annotated.html
src-url: https://github.com/marzer/tomlplusplus
package-url: https://github.com/build2-packaging/tomlplusplus
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: catch2 ^2.0.0
requires: C++17
builds: default
bootstrap-build:
\
project = libtomlplusplus-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

exe{*}: test = true

\
location: tomlplusplus/libtomlplusplus-tests-3.3.0.tar.gz
sha256sum: a2953df6f2ab7bc226644299ec64bae5a1dfd70ecf69ecc0a209f27ad1819c00
:
name: libutf8proc
version: 2.5.0
project: utf8proc
summary: Small, clean C library that provides Unicode normalization,\
 case-folding, and other operations for data in the UTF-8 encoding.
license: MIT
topics: C, C++, Unicode, normalization, utf-8
description:
\
# `utf8proc` library - Build2 package

`utf8proc` is a small, clean C library that provides Unicode normalization,\
 case-folding, and other operations for data in the UTF-8 encoding.

This repository contains a packaging of `utf8proc` library for the **Build2**\
 build system.

See also:

- `utf8proc`: https://github.com/JuliaStrings/utf8proc
- **Build2**: https://build2.org


\
description-type: text/markdown;variant=GFM
url: https://juliastrings.github.io/utf8proc/
doc-url: https://juliastrings.github.io/utf8proc/doc/
src-url: https://github.com/JuliaStrings/utf8proc
package-email: julien.vernay@telecom-st-etienne.fr
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
builds: all
bootstrap-build:
\
project = libutf8proc

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: utf8proc/libutf8proc-2.5.0.tar.gz
sha256sum: 47106fde45110f632a28932acb951b9495e5642e5ae25dc752a60e99ae2f0432
:
name: libuv
version: 1.42.0+1
summary: Cross-platform asynchronous I/O
license: MIT
description:
\
![libuv][libuv_banner]

## Overview

libuv is a multi-platform support library with a focus on asynchronous I/O. It
was primarily developed for use by [Node.js][], but it's also
used by [Luvit](http://luvit.io/), [Julia](http://julialang.org/),
[pyuv](https://github.com/saghul/pyuv), and [others](https://github.com/libuv\
/libuv/blob/v1.x/LINKS.md).

## Feature highlights

 * Full-featured event loop backed by epoll, kqueue, IOCP, event ports.

 * Asynchronous TCP and UDP sockets

 * Asynchronous DNS resolution

 * Asynchronous file and file system operations

 * File system events

 * ANSI escape code controlled TTY

 * IPC with socket sharing, using Unix domain sockets or named pipes (Windows)

 * Child processes

 * Thread pool

 * Signal handling

 * High resolution clock

 * Threading and synchronization primitives

## Versioning

Starting with version 1.0.0 libuv follows the [semantic versioning](http://se\
mver.org/)
scheme. The API change and backwards compatibility rules are those indicated\
 by
SemVer. libuv will keep a stable ABI across major releases.

The ABI/API changes can be tracked [here](http://abi-laboratory.pro/tracker/t\
imeline/libuv/).

## Licensing

libuv is licensed under the MIT license. Check the [LICENSE file](LICENSE).
The documentation is licensed under the CC BY 4.0 license. Check the\
 [LICENSE-docs file](LICENSE-docs).

## Community

 * [Support](https://github.com/libuv/libuv/discussions)
 * [Mailing list](http://groups.google.com/group/libuv)

## Documentation

### Official documentation

Located in the docs/ subdirectory. It uses the [Sphinx](http://sphinx-doc.org\
/)
framework, which makes it possible to build the documentation in multiple
formats.

Show different supported building options:

```bash
$ make help
```

Build documentation as HTML:

```bash
$ make html
```

Build documentation as HTML and live reload it when it changes (this requires
sphinx-autobuild to be installed and is only supported on Unix):

```bash
$ make livehtml
```

Build documentation as man pages:

```bash
$ make man
```

Build documentation as ePub:

```bash
$ make epub
```

NOTE: Windows users need to use make.bat instead of plain 'make'.

Documentation can be browsed online [here](http://docs.libuv.org).

The [tests and benchmarks](https://github.com/libuv/libuv/tree/master/test)
also serve as API specification and usage examples.

### Other resources

 * [LXJS 2012 talk](http://www.youtube.com/watch?v=nGn60vDSxQ4)
   &mdash; High-level introductory talk about libuv.
 * [libuv-dox](https://github.com/thlorenz/libuv-dox)
   &mdash; Documenting types and methods of libuv, mostly by reading uv.h.
 * [learnuv](https://github.com/thlorenz/learnuv)
   &mdash; Learn uv for fun and profit, a self guided workshop to libuv.

These resources are not handled by libuv maintainers and might be out of
date. Please verify it before opening new issues.

## Downloading

libuv can be downloaded either from the
[GitHub repository](https://github.com/libuv/libuv)
or from the [downloads site](http://dist.libuv.org/dist/).

Before verifying the git tags or signature files, importing the relevant keys
is necessary. Key IDs are listed in the
[MAINTAINERS](https://github.com/libuv/libuv/blob/master/MAINTAINERS.md)
file, but are also available as git blob objects for easier use.

Importing a key the usual way:

```bash
$ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059
```

Importing a key from a git blob object:

```bash
$ git show pubkey-saghul | gpg --import
```

### Verifying releases

Git tags are signed with the developer's key, they can be verified as follows:

```bash
$ git verify-tag v1.6.1
```

Starting with libuv 1.7.0, the tarballs stored in the
[downloads site](http://dist.libuv.org/dist/) are signed and an accompanying
signature file sit alongside each. Once both the release tarball and the
signature file are downloaded, the file can be verified as follows:

```bash
$ gpg --verify libuv-1.7.0.tar.gz.sign
```

## Build Instructions

For UNIX-like platforms, including macOS, there are two build methods:
autotools or [CMake][].

For Windows, [CMake][] is the only supported build method and has the
following prerequisites:

<details>

* One of:
  * [Visual C++ Build Tools][]
  * [Visual Studio 2015 Update 3][], all editions
    including the Community edition (remember to select
    "Common Tools for Visual C++ 2015" feature during installation).
  * [Visual Studio 2017][], any edition (including the Build Tools SKU).
    **Required Components:** "MSbuild", "VC++ 2017 v141 toolset" and one of\
 the
    Windows SDKs (10 or 8.1).
* Basic Unix tools required for some tests,
  [Git for Windows][] includes Git Bash
  and tools which can be included in the global `PATH`.

</details>

To build with autotools:

```bash
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ make install
```

To build with [CMake][]:

```bash
$ mkdir -p build

$ (cd build && cmake .. -DBUILD_TESTING=ON) # generate project with tests
$ cmake --build build                       # add `-j <n>` with cmake >= 3.12

# Run tests:
$ (cd build && ctest -C Debug --output-on-failure)

# Or manually run tests:
$ build/uv_run_tests                        # shared library build
$ build/uv_run_tests_a                      # static library build
```

To cross-compile with [CMake][] (unsupported but generally works):

```bash
$ cmake ../..                 \\
  -DCMAKE_SYSTEM_NAME=Windows \\
  -DCMAKE_SYSTEM_VERSION=6.1  \\
  -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc
```

### Install with Homebrew

```bash
$ brew install --HEAD libuv
```

Note to OS X users:

Make sure that you specify the architecture you wish to build for in the
"ARCHS" flag. You can specify more than one by delimiting with a space
(e.g. "x86_64 i386").

### Running tests

Some tests are timing sensitive. Relaxing test timeouts may be necessary
on slow or overloaded machines:

```bash
$ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s
```

#### Run one test

The list of all tests is in `test/test-list.h`.

This invocation will cause the test driver to fork and execute `TEST_NAME` in
a child process:

```bash
$ build/uv_run_tests_a TEST_NAME
```

This invocation will cause the test driver to execute the test in
the same process:

```bash
$ build/uv_run_tests_a TEST_NAME TEST_NAME
```

#### Debugging tools

When running the test from within the test driver process
(`build/uv_run_tests_a TEST_NAME TEST_NAME`), tools like gdb and valgrind
work normally.

When running the test from a child of the test driver process
(`build/uv_run_tests_a TEST_NAME`), use these tools in a fork-aware manner.

##### Fork-aware gdb

Use the [follow-fork-mode](https://sourceware.org/gdb/onlinedocs/gdb/Forks.ht\
ml) setting:

```
$ gdb --args build/uv_run_tests_a TEST_NAME

(gdb) set follow-fork-mode child
...
```

##### Fork-aware valgrind

Use the `--trace-children=yes` parameter:

```bash
$ valgrind --trace-children=yes -v --tool=memcheck --leak-check=full\
 --track-origins=yes --leak-resolution=high --show-reachable=yes\
 --log-file=memcheck-%p.log build/uv_run_tests_a TEST_NAME
```

### Running benchmarks

See the section on running tests.
The benchmark driver is `./uv_run_benchmarks_a` and the benchmarks are
listed in `test/benchmark-list.h`.

## Supported Platforms

Check the [SUPPORTED_PLATFORMS file](SUPPORTED_PLATFORMS.md).

### `-fno-strict-aliasing`

It is recommended to turn on the `-fno-strict-aliasing` compiler flag in
projects that use libuv. The use of ad hoc "inheritance" in the libuv API
may not be safe in the presence of compiler optimizations that depend on
strict aliasing.

MSVC does not have an equivalent flag but it also does not appear to need it
at the time of writing (December 2019.)

### AIX Notes

AIX compilation using IBM XL C/C++ requires version 12.1 or greater.

AIX support for filesystem events requires the non-default IBM `bos.ahafs`
package to be installed.  This package provides the AIX Event Infrastructure
that is detected by `autoconf`.
[IBM documentation](http://www.ibm.com/developerworks/aix/library/au-aix_even\
t_infrastructure/)
describes the package in more detail.

### z/OS Notes

z/OS compilation requires [ZOSLIB](https://github.com/ibmruntimes/zoslib) to\
 be installed. When building with [CMake][], use the flag `-DZOSLIB_DIR` to\
 specify the path to [ZOSLIB](https://github.com/ibmruntimes/zoslib):

```bash
$ (cd build && cmake .. -DBUILD_TESTING=ON -DZOSLIB_DIR=/path/to/zoslib)
$ cmake --build build
```

z/OS creates System V semaphores and message queues. These persist on the\
 system
after the process terminates unless the event loop is closed.

Use the `ipcrm` command to manually clear up System V resources.

## Patches

See the [guidelines for contributing][].

[CMake]: https://cmake.org/
[node.js]: http://nodejs.org/
[guidelines for contributing]: https://github.com/libuv/libuv/blob/master/CON\
TRIBUTING.md
[libuv_banner]: https://raw.githubusercontent.com/libuv/libuv/master/img/bann\
er.png
[Visual C++ Build Tools]: https://visualstudio.microsoft.com/visual-cpp-build\
-tools/
[Visual Studio 2015 Update 3]: https://www.visualstudio.com/vs/older-download\
s/
[Visual Studio 2017]: https://www.visualstudio.com/downloads/
[Git for Windows]: http://git-scm.com/download/win

\
description-type: text/markdown;variant=GFM
url: https://libuv.org
doc-url: https://docs.libuv.org
src-url: https://github.com/libuv/libuv
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = libuv

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

src_upstream = $src_root/upstream

\
location: libuv/libuv-1.42.0+1.tar.gz
sha256sum: 8b9ee0c91365aff66836aa3c39184d4550f5b0688756b0c95a01f6f91607d604
:
name: libvulkan-meta
version: 1.0.0+1
project: libvulkan-meta
summary: Meta package for using Vulkan system libraries.
license: MIT
topics: C++, Vulkan
description:
\
# Vulkan Build2 Package

[![build2](https://github.com/build2-packaging/vulkan-meta/actions/workflows/\
build2.yml/badge.svg)](https://github.com/build2-packaging/vulkan-meta/action\
s/workflows/build2.yml)

This project defines a build2 meta package for including [Vulkan](https://www\
.vulkan.org/) into your build2 project. It only sets the linker and compiler\
 flags as needed by your platform and does not compile any actual code.

The packaging code is licensed under the MIT License.

## Usage

You can simply add this package as dependency to your project by specifying\
 it in your `manifest`:

```
depends: libvulkan-meta ^1.0.0
```

Then just import the `vulkan` target:

```
import opengl_gl_libs = libvulkan-meta%lib{vulkan}
```

If you have multiple Vulkan SDKs installed on your system you can specify the\
 config parameter `config.libvulkan_meta.sdk_root` to point to a specific\
 SDK. For example

```
config.libvulkan_meta.sdk_root=C:/VulkanSDK/1.3.211.0
```

By default this parameter uses the value defined in the environment variable\
 `VULKAN_SDK`.

\
description-type: text/markdown;variant=GFM
url: https://www.vulkan.org/
doc-url: https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/in\
dex.html
package-url: https://github.com/build2-packaging/libvulkan-meta
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
builds: default
bootstrap-build:
\
project = libvulkan-meta

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

config [string] config.libvulkan_meta.sdk_root ?= "$getenv(VULKAN_SDK)"

\
location: libvulkan-meta/libvulkan-meta-1.0.0+1.tar.gz
sha256sum: c80b0f6e6a1300550ab6f09c4ee45cb95b9f77d962d0c5ce0be359f05880a0d9
:
name: libxerces-c
version: 3.2.3+4
project: xerces-c
summary: Validating XML parsing and serialization C++ library
license: Apache-2.0; Apache License 2.0.
topics: Xerces, C++, XML parser, DOM, SAX
description:
\
Xerces-C++ is a validating XML parser written in a portable subset of C++
with the libxerces-c library providing support for validating, parsing,
manipulating, and generating XML documents using the DOM, SAX, and SAX2
APIs. For more information see:

http://xerces.apache.org/xerces-c/

This package contains the original libxerces-c library source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the Xerces-C++ mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of Xerces-C++ for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/xerces-c/

\
description-type: text/plain
url: http://xerces.apache.org/xerces-c/
doc-url: http://xerces.apache.org/xerces-c/api-3.html
src-url: https://git.build2.org/cgit/packaging/xerces-c/xerces-c/tree/libxerc\
es-c/
package-url: https://git.build2.org/cgit/packaging/xerces-c/
email: c-users@xerces.apache.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libicuuc >= 65.1.0
depends: libicui18n >= 65.1.0
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0; see accompanying LICENSE file

project = libxerces-c

using version
using config
using dist
using test
using install

# The Xerces-C++ version has the <version>.<release>.<modification> form and
# follows the semver semantics. Specifically, the new versions and releases
# are issued when a certain number of bug fixes and new features are added
# and the modifications are issued when critical bugs are encountered. The
# releases and modifications may only contain the backward-compatible API
# changes. The ABI backward compatibility is only preserved for modifications.
#
# There is also the serialization format version number that can not be
# deduced from the package version. It is not documented which kind of package
# releases may increment this number, but based on its change history we can
# probably assume that this may not happen for modifications. Thus, we will
# check for its change (the XERCES_GRAMMAR_SERIALIZATION_LEVEL variable in
# configure.ac) only when the version or release number is incremented.
#
# See also: https://xerces.apache.org/xerces-c/faq-contributing-3.html
#
if ($version.major == 3 && $version.minor == 2)
{
  grammar_serialization_level = 7 # Serialization format version.

  abi_version = "$version.major.$version.minor"
}
else
  fail "increment the serialization format version?"

\
root-build:
\
# file      : build/root.build
# license   : Apache License 2.0; see accompanying LICENSE file

# Enable network support so that the parser can download remote resources
# (schemas, DTDs, etc).
#
# If enabled, then the libcurl library is used to access network resources.
#
config [bool] config.libxerces_c.network ?= false

# We rely on C99 in macro deductions (see xercesc/config.h and
# xercesc/util/Xerces_autoconf_config.hpp for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

cxx.std = latest

using cxx

hxx{*}: extension = hpp
txx{*}: extension = c
cxx{*}: extension = cpp

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

\
location: xerces-c/libxerces-c-3.2.3+4.tar.gz
sha256sum: fcf24c24f89c840ebe442dd5c6cbe9c5e4a2ac72ef55887a8e72dd29c0a0651a
:
name: libxerces-c
version: 3.2.4+2
language: c++
project: xerces-c
summary: Validating XML parsing and serialization C++ library
license: Apache-2.0; Apache License 2.0.
topics: Xerces, C++, XML parser, DOM, SAX
description:
\
Xerces-C++ is a validating XML parser written in a portable subset of C++
with the libxerces-c library providing support for validating, parsing,
manipulating, and generating XML documents using the DOM, SAX, and SAX2
APIs. For more information see:

http://xerces.apache.org/xerces-c/

This package contains the original libxerces-c library source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the Xerces-C++ mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of Xerces-C++ for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/xerces-c/

\
description-type: text/plain
url: http://xerces.apache.org/xerces-c/
doc-url: http://xerces.apache.org/xerces-c/api-3.html
src-url: https://git.build2.org/cgit/packaging/xerces-c/xerces-c/tree/libxerc\
es-c/
package-url: https://git.build2.org/cgit/packaging/xerces-c/
email: c-users@xerces.apache.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl ^7.67.0 ? ($config.libxerces_c.network)
depends: {libicuuc >= 65.1.0 libicui18n >= 65.1.0} ? ($config.libxerces_c.tra\
nscoder_icu)
transcoder-icu-builds: macos windows
transcoder-icu-build-config: config.libxerces_c.transcoder_icu=true; Test\
 with ICU transcoder on Mac OS and Windows.
bindist-rhel-builds: bindist
bindist-rhel-build-include: linux_rhel*-**
bindist-rhel-build-exclude: **
bindist-rhel-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libicuuc
?sys:libicui18n
\
bindist-ubuntu-builds: bindist
bindist-ubuntu-build-include: linux_ubuntu*-**
bindist-ubuntu-build-exclude: **
bindist-ubuntu-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libicuuc
?sys:libicui18n
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.create:config.cxx.std=c++11
\
bindist-macos-builds: bindist
bindist-macos-build-include: macos*-**
bindist-macos-build-exclude: **
bindist-macos-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="-Wall -O3"
b.create:config.cxx.std=c++11
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0; see accompanying LICENSE file

project = libxerces-c

using version
using config
using dist
using test
using install

# The Xerces-C++ version has the <version>.<release>.<modification> form and
# follows the semver semantics. Specifically, the new versions and releases
# are issued when a certain number of bug fixes and new features are added
# and the modifications are issued when critical bugs are encountered. The
# releases and modifications may only contain the backward-compatible API
# changes. The ABI backward compatibility is only preserved for modifications.
#
# There is also the serialization format version number that can not be
# deduced from the package version. It is not documented which kind of package
# releases may increment this number, but based on its change history we can
# probably assume that this may not happen for modifications. Thus, we will
# check for its change (the XERCES_GRAMMAR_SERIALIZATION_LEVEL variable in
# configure.ac) only when the version or release number is incremented.
#
# See also: https://xerces.apache.org/xerces-c/faq-contributing-3.html
#
if ($version.major == 3 && $version.minor == 2)
{
  grammar_serialization_level = 7 # Serialization format version.

  abi_version = "$version.major.$version.minor"
}
else
  fail "increment the serialization format version?"

\
root-build:
\
# file      : build/root.build
# license   : Apache License 2.0; see accompanying LICENSE file

# We rely on C99 in macro deductions (see xercesc/config.h and
# xercesc/util/Xerces_autoconf_config.hpp for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

cxx.std = latest

using cxx

hxx{*}: extension = hpp
txx{*}: extension = c
cxx{*}: extension = cpp

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

# Enable network support so that the parser can download remote resources
# (schemas, DTDs, etc).
#
# If enabled, then the libcurl library is used to access network resources.
#
config [bool] config.libxerces_c.network ?= false

# We use ICU everywhere except on Mac OS and Windows where we by default
# use native transcoders (but can still be forced to use ICU instead).
#
config [bool] config.libxerces_c.transcoder_icu ?= \\
  ($cxx.target.class != 'macos' && $cxx.target.class != 'windows')

if! $config.libxerces_c.transcoder_icu
{
  assert ($cxx.target.class == 'macos' || $cxx.target.class == 'windows') \\
    "only ICU transcoder is supported on $cxx.target.class"
}

\
location: xerces-c/libxerces-c-3.2.4+2.tar.gz
sha256sum: 92a3c93aff3d76d5af19566480ef8899cfdbd1e3989c87fbd7a80897a35f390e
:
name: libxerces-c
version: 3.2.5
language: c++
project: xerces-c
priority: security
summary: Validating XML parsing and serialization C++ library
license: Apache-2.0; Apache License 2.0.
topics: Xerces, C++, XML parser, DOM, SAX
description:
\
Xerces-C++ is a validating XML parser written in a portable subset of C++
with the libxerces-c library providing support for validating, parsing,
manipulating, and generating XML documents using the DOM, SAX, and SAX2
APIs. For more information see:

http://xerces.apache.org/xerces-c/

This package contains the original libxerces-c library source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the Xerces-C++ mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of Xerces-C++ for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/xerces-c/

\
description-type: text/plain
url: http://xerces.apache.org/xerces-c/
doc-url: http://xerces.apache.org/xerces-c/api-3.html
src-url: https://git.build2.org/cgit/packaging/xerces-c/xerces-c/tree/libxerc\
es-c/
package-url: https://git.build2.org/cgit/packaging/xerces-c/
email: c-users@xerces.apache.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl ^7.67.0 ? ($config.libxerces_c.network)
depends: {libicuuc >= 65.1.0 libicui18n >= 65.1.0} ? ($config.libxerces_c.tra\
nscoder_icu)
transcoder-icu-builds: macos windows
transcoder-icu-build-config: config.libxerces_c.transcoder_icu=true; Test\
 with ICU transcoder on Mac OS and Windows.
bindist-rhel-builds: bindist
bindist-rhel-build-include: linux_rhel*-**
bindist-rhel-build-exclude: **
bindist-rhel-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libicuuc
?sys:libicui18n
\
bindist-ubuntu-builds: bindist
bindist-ubuntu-build-include: linux_ubuntu*-**
bindist-ubuntu-build-exclude: **
bindist-ubuntu-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libicuuc
?sys:libicui18n
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.create:config.cxx.std=c++11
\
bindist-macos-builds: bindist
bindist-macos-build-include: macos*-**
bindist-macos-build-exclude: **
bindist-macos-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="-Wall -O3"
b.create:config.cxx.std=c++11
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0; see accompanying LICENSE file

project = libxerces-c

using version
using config
using dist
using test
using install

# The Xerces-C++ version has the <version>.<release>.<modification> form and
# follows the semver semantics. Specifically, the new versions and releases
# are issued when a certain number of bug fixes and new features are added
# and the modifications are issued when critical bugs are encountered. The
# releases and modifications may only contain the backward-compatible API
# changes. The ABI backward compatibility is only preserved for modifications.
#
# There is also the serialization format version number that can not be
# deduced from the package version. It is not documented which kind of package
# releases may increment this number, but based on its change history we can
# probably assume that this may not happen for modifications. Thus, we will
# check for its change (the XERCES_GRAMMAR_SERIALIZATION_LEVEL variable in
# configure.ac) only when the version or release number is incremented.
#
# See also: https://xerces.apache.org/xerces-c/faq-contributing-3.html
#
if ($version.major == 3 && $version.minor == 2)
{
  grammar_serialization_level = 7 # Serialization format version.

  abi_version = "$version.major.$version.minor"
}
else
  fail "increment the serialization format version?"

\
root-build:
\
# file      : build/root.build
# license   : Apache License 2.0; see accompanying LICENSE file

# We rely on C99 in macro deductions (see xercesc/config.h and
# xercesc/util/Xerces_autoconf_config.hpp for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

cxx.std = latest

using cxx

hxx{*}: extension = hpp
txx{*}: extension = c
cxx{*}: extension = cpp

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

# Enable network support so that the parser can download remote resources
# (schemas, DTDs, etc).
#
# If enabled, then the libcurl library is used to access network resources.
#
config [bool] config.libxerces_c.network ?= false

# We use ICU everywhere except on Mac OS and Windows where we by default
# use native transcoders (but can still be forced to use ICU instead).
#
config [bool] config.libxerces_c.transcoder_icu ?= \\
  ($cxx.target.class != 'macos' && $cxx.target.class != 'windows')

if! $config.libxerces_c.transcoder_icu
{
  assert ($cxx.target.class == 'macos' || $cxx.target.class == 'windows') \\
    "only ICU transcoder is supported on $cxx.target.class"
}

\
location: xerces-c/libxerces-c-3.2.5.tar.gz
sha256sum: 71c972f0ba527c5d0745eef6c3b52c5aab2053492143d9138d42b478724ddb38
:
name: libxerces-c
version: 3.3.0+3
language: c++
project: xerces-c
summary: Validating XML parsing and serialization C++ library
license: Apache-2.0; Apache License 2.0.
topics: Xerces, C++, XML parser, DOM, SAX
description:
\
Xerces-C++ is a validating XML parser written in a portable subset of C++
with the libxerces-c library providing support for validating, parsing,
manipulating, and generating XML documents using the DOM, SAX, and SAX2
APIs. For more information see:

http://xerces.apache.org/xerces-c/

This package contains the original libxerces-c library source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
the Xerces-C++ mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of Xerces-C++ for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/xerces-c/

\
description-type: text/plain
url: http://xerces.apache.org/xerces-c/
doc-url: http://xerces.apache.org/xerces-c/api-3.html
src-url: https://git.build2.org/cgit/packaging/xerces-c/xerces-c/tree/libxerc\
es-c/
package-url: https://git.build2.org/cgit/packaging/xerces-c/
email: c-users@xerces.apache.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libcurl ^7.67.0 ? ($config.libxerces_c.network)
depends: {libicuuc >= 60.3.0 libicui18n >= 60.3.0} ? ($config.libxerces_c.tra\
nscoder_icu)
transcoder-icu-builds: macos windows
transcoder-icu-build-config: config.libxerces_c.transcoder_icu=true; Test\
 with ICU transcoder on Mac OS and Windows.
bindist-rhel-builds: bindist
bindist-rhel-build-include: linux_rhel*-**
bindist-rhel-build-exclude: **
bindist-rhel-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libicuuc
?sys:libicui18n
\
bindist-ubuntu-builds: bindist
bindist-ubuntu-build-include: linux_ubuntu*-**
bindist-ubuntu-build-exclude: **
bindist-ubuntu-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libicuuc
?sys:libicui18n
\
bindist-windows-release-builds: bindist
bindist-windows-release-build-include: windows*-msvc**
bindist-windows-release-build-exclude: **
bindist-windows-release-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11
\
bindist-windows-debug-builds: bindist
bindist-windows-debug-build-include: windows*-msvc**
bindist-windows-debug-build-exclude: **
bindist-windows-debug-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
bpkg.bindist.archive:--archive-build-meta=+debug
bpkg.create:config.bin.lib=shared
bpkg.create:config.bin.lib.suffix=D
b.create:config.cc.coptions="/W2 /Zi /MDd"
b.create:config.cc.loptions="/DEBUG:FULL"
b.test-installed.create:config.cc.coptions="/W2 /MDd"
b.test-installed.create:config.import.libxerces_c.xerces_c.lib=xerces-cD
b.create:config.cxx.std=c++11
\
bindist-macos-builds: bindist
bindist-macos-build-include: macos*-**
bindist-macos-build-exclude: **
bindist-macos-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="-Wall -O3"
b.create:config.cxx.std=c++11
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0; see accompanying LICENSE file

project = libxerces-c

using version
using config
using dist
using test
using install

# The Xerces-C++ version has the <version>.<release>.<modification> form and
# follows the semver semantics. Specifically, the new versions and releases
# are issued when a certain number of bug fixes and new features are added
# and the modifications are issued when critical bugs are encountered. The
# releases and modifications may only contain the backward-compatible API
# changes. The ABI backward compatibility is only preserved for modifications.
#
# There is also the serialization format version number that can not be
# deduced from the package version. It is not documented which kind of package
# releases may increment this number, but based on its change history we can
# probably assume that this may not happen for modifications. Thus, we will
# check for its change (the XERCES_GRAMMAR_SERIALIZATION_LEVEL variable in
# configure.ac) only when the version or release number is incremented.
#
# See also: https://xerces.apache.org/xerces-c/faq-contributing-3.html
#
if ($version.major == 3 && $version.minor == 3)
{
  grammar_serialization_level = 7 # Serialization format version.

  abi_version = "$version.major.$version.minor"
}
else
  fail "increment the serialization format version?"

\
root-build:
\
# file      : build/root.build
# license   : Apache License 2.0; see accompanying LICENSE file

# We rely on C99 in macro deductions (see xercesc/config.h and
# xercesc/util/Xerces_autoconf_config.hpp for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

cxx.std = latest

using cxx

hxx{*}: extension = hpp
txx{*}: extension = c
cxx{*}: extension = cpp

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

# Enable network support so that the parser can download remote resources
# (schemas, DTDs, etc).
#
# If enabled, then the libcurl library is used to access network resources.
#
config [bool] config.libxerces_c.network ?= false

# We use ICU everywhere except on Mac OS and Windows where we by default
# use native transcoders (but can still be forced to use ICU instead).
#
config [bool] config.libxerces_c.transcoder_icu ?= \\
  ($cxx.target.class != 'macos' && $cxx.target.class != 'windows')

if! $config.libxerces_c.transcoder_icu
{
  assert ($cxx.target.class == 'macos' || $cxx.target.class == 'windows') \\
    "only ICU transcoder is supported on $cxx.target.class"
}

\
location: xerces-c/libxerces-c-3.3.0+3.tar.gz
sha256sum: c5272e6308bb7f177a2d84115aab9dfd4f1394a0f0ff3ada779b3133ef582549
:
name: libxsd
version: 4.2.0
type: lib,binless
language: c++
project: xsd
summary: XML Schema to C++ data binding compiler runtime library
license: other: GPL-2.0-only with Xerces-C++ linking exception and FLOSS\
 exception
topics: C++, XML, XML Schema, XML parser
description:
\
# libxsd - runtime library for XML Schema to C++ data binding compiler

XSD is an open-source, cross-platform XML Schema to C++ data binding
compiler. Provided with an XML document specification (XML Schema), it
generates C++ classes that represent the given vocabulary as well as XML
parsing and serialization code. You can then access the data stored in XML
using types and functions that semantically correspond to your application
domain rather than dealing with generic elements/attributes and raw strings.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [XSD project
page](https://codesynthesis.com/products/xsd/).

\
description-type: text/markdown;variant=GFM
package-description:
\
# XSD

XSD is an open-source, cross-platform XML Schema to C++ data binding
compiler. Provided with an XML document specification (XML Schema), it
generates C++ classes that represent the given vocabulary as well as XML
parsing and serialization code. You can then access the data stored in XML
using types and functions that semantically correspond to your application
domain rather than dealing with generic elements/attributes and raw strings.

For further information, refer to the [XSD project
page](https://codesynthesis.com/products/xsd/).

## Usage

XSD consists of several packages with the main ones being `xsd` (the XML
Schema to C++ compiler) and `libxsd` (the runtime library). There are also
several `*-tests` packages as well as `xsd-examples`.

When specifying dependencies on XSD packages in your project, the `xsd`
package should be a build-time dependency. The `libxsd` library is
header-only and because it can be used either with Xerces-C++ or
Expat as the underlying XML parser, it does not have a dependency on
either, expecting your project to make the choice by depending on
one or the other explicitly and then importing and linking the
corresponding library.

So, putting it all together, your project's `manifest` would normally
have the following fragment if using Xerces-C++:

```
depends: * xsd ^4.2.0
depends: libxsd ^4.2.0
depends  libxerces-c ^3.2.4
```

Or the following fragment if using Expat:

```
depends: * xsd ^4.2.0
depends: libxsd ^4.2.0
depends  libexpat ^2.5.0
```

Then your `buildfile` would have something along these lines if using
Xerces-C++:

```
import! [metadata] xsd = xsd%exe{xsd}

import libs  = libxsd%lib{xsd}
import libs += libxerces-c%lib{xerces-c}
```

Or along these lines if using Expat:

```
import! [metadata] xsd = xsd%exe{xsd}

import libs  = libxsd%lib{xsd}
import libs += libexpat%lib{expat}
```

Note that the `xsd` executable provides `build2` metadata.

The compilation of XML Schema to C++ can be implemented using ad hoc recipes
or rules. See the `xsd-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 4.2.0

  * In this version we have switched to the build2 build system. For the
    step-by-step instructions on how to build XSD from source on all the
    major platforms, see:

    https://codesynthesis.com/products/xsd/doc/install-build2.xhtml

  * In this version we have changed the default C++ standard that is used
    by the generated code from C++98 to C++11. While you can still request
    C++98 with the --std=c++98 option, note that this is the last release
    that supports the C++98 standard and the next release will require C++11
    or later (in fact, building the XSD compiler itself already requires
    C++11 or later). Note also that the --std option now recognizes the
    c++14, c++17, c++20, and c++23 additional values.

  * This version will be the last release that supports Xerces-C++ earlier
    than 3.1.0 and the next release will require Xerces-C++ 3.1.0 or later.

  * New --file-list-only option that allows only writing the list of C++
    files that would be generated without actually generating them.

  * The --file-list option now recognize the `-` value as a request to write
    to stdout.

  * New --dep-file option that allows specifying the dependency file name.
    It also allows writing the dependency information to stdout by specifying
    `-` as this option's value.

  * This version contains a large number of bug fixes and minor improvements
    that have accumulated over the years.

C++/Tree

  * Support for abstract XML Schema types. The corresponding C++ classes now
    have the _clone() member function declared pure virtual which prevents
    the construction of instances of such types.

    Note that if after upgrading to this version you start getting C++
    compile errors in the generated code with diagnostics saying that a
    type cannot be instantiated because _clone() is pure virtual, then
    it's a strong indication that this type (or its base) is polymorphic
    and needs to be marked as such (see --polymorphic-type* options).

  * New base_string() accessors in the xml_schema::{string,uri} types that
    return the underlying string.

  * Support for `ucc` (upper-camel-case) value in the --function-naming
    option.

  * New C++/Tree `secure` example (xsd-examples/cxx/tree/secure/) shows how
    to perform more secure XML parsing by disabling the XML External Entity
    (XXE) Processing. See the accompanying README file for details.

Version 4.1.0

  * This version was never released. It was skipped due to a minor versioning
    scheme adjustment in the pre-release component when migrating to build2.

Version 4.0.0

  * Xerces-C++ 2-series (2.8.0 and earlier) is no longer supported.

  * Visual Studio 2003 (7.1) is no longer supported.

  * HP aCC3 (HP-UX/PA-RISC) is no longer supported.

  * Oracle/Berkeley DB XML support has been removed since it no longer
    supports the Xerces-C++-based document access.

  * New option, --std, specifies the C++ standard that the generated code
    should conform to. Valid values are c++98 (default) and c++11.

    The C++ standard affects various aspects of the generated code that are
    discussed in more detail in mapping-specific documentation (guides and
    manuals). Overall, when C++11 is selected, the generated code relies on
    the move semantics and uses std::unique_ptr instead of deprecated
    std::auto_ptr. See also the documentation for the --std option in the
    XSD compiler command line manual (man pages).

  * New option, --fat-type-file, triggers the placement of code corresponding
    to global elements into type files instead of schema files in the file-
    per-type mode. This option is primarily useful when trying to minimize
    the amount of object code that is linked to an executable by packaging
    compiled generated code into a static (archive) library.

C++/Tree

  * Support for ordered types. C++/Tree flattens nested compositors which
    sometimes can result in the loss of element ordering information that
    could be significant to the application. Ordered types address this
    problem. For more information, refer to Section 2.8.4, "Element Order"
    in the C++/Tree Mapping User Manual.

  * Support for mixed content in ordered types. For more information, refer
    to Section 2.13, "Mapping for Mixed Content Models" in the C++/Tree
    Mapping User Manual.

  * xml_schema::type represents anyType content as a DOM fragment, similar
    to wildcards. For more information, refer to Section 2.5.2, "Mapping
    for anyType" in the C++/Tree Mapping User Manual.

  * xml_schema::simple_type represents anySimpleType content as a text
    string. For more information, refer to Section 2.5.3, "Mapping for
    anySimpleType" in the C++/Tree Mapping User Manual.

  * Improved streaming example that now provides better XML namespace
    handling and supports streaming parsing and serialization at multiple
    document levels.

  * New option, --generate-dep, triggers the generation of the make
    dependency files (.d) for the generated C++ files. Other options
    controlling dependency generation are: --generate-dep-only,
    --dep-phony, --dep-target, --dep-suffix, and --dep-regex. For
    details on this functionality, refer to the XSD compiler command
    line manual (man pages).

  * New option, --suppress-assignment, suppresses the generation of copy
    assignment operators for complex types. If this option is specified,
    the copy assignment operators for such types are declared private and
    left unimplemented.

  * Binary representation now stores string-based enumerations as integer
    values corresponding to C++ enumerators instead of string literals.

  * Binary representation now pools polymorphic type-id strings in an
    implicit string pool. The string pool support can also be used to
    pool strings in other situations. For example, you can implement
    string insertion/extraction operators for your stream to pool all
    strings. This can be useful if your documents contain a large number
    of repetitive strings.

  * New option, --polymorphic-plate, allows the creation of multiple
    polymorphic map plates in the same application. For details, refer
    to the XSD compiler command line manual (man pages).

  * To get the DOM association in the copy of an object model tree one
    now needs to explicitly pass the xml_schema::flags::keep_dom flag as
    the second argument to the copy constructor or clone() function.

Version 3.3.0

  * New option, --char-encoding, allows you to specify the character encoding
    that should be used in the generated code. Valid values for the 'char'
    character type are 'utf8' (default), 'iso8859-1' (new), 'lcp' (Xerces-C++
    local code page), and 'custom' (provides support for custom encodings).
    Note that if you use a non-default character encoding and include some
    libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly, then you will
    need to first include the correct xsd/cxx/xml/char-<enc>.hxx header,
    where <enc> is iso8859-1, lcp, etc. This mechanism replaces the
    XSD_USE_LCP macro.

    For the wchar_t character type the only valid value for this option is
    'auto' and the encoding is automatically selected between UTF-16 and
    UTF-32, depending on the wchar_t type size.

  * When the XSD compiler is built with Xerces-C++ 3.1.0 or later, the
    handling  of multiple imports for the same namespace is enabled. Before,
    all subsequent imports for a namespace were ignored which caused errors
    in some schemas. Note that if your application has XML Schema validation
    enabled, then you will also need to build it with Xerces-C++ 3.1.0 or
    later to take advantage of this feature.

  * Automatic mapping for the urn-style XML namespaces. The last component
    in the urn name is used to derive the C++ namespace name.

  * New option, --schema-file-regex, in combination with the existing
    --type-file-regex, can be used to place the generated files into
    subdirectories or to resolve file name conflicts in the file-per-
    type mode (--file-per-type).

  * Warning id's have changed to start with a letter identifying the
    component issuing the warning. F - compiler frontend, D - compiler
    driver, P - C++/Parser mapping, T - C++/Tree mapping.

  * Strings used to match regular expressions supplied with the
    --namespace-regex and --anonymous-regex options now include the file
    component for the schema being compiled.

  * The XSD_NO_EXPORT macro can be used to omit code generated with the
    --export/import-maps and, for C++/Tree, --generate-xml-schema options
    during C++ compilation. This may be useful if you would like to use
    the same generated code across multiple platforms.

 C++/Tree

  * New option, --generate-element-type, triggers the generation of types
    instead of parsing/serialization functions for root elements. This
    is primarily useful to distinguish object models with the same root
    type but with different root elements. For more information, refer
    to the messaging example and Section 2.9.1, "Element Types" in the
    C++/Tree Mapping User Manual. To support the customization of the
    element type naming the --element-type-regex option has been added.
    See the NAMING CONVENTION section in the compiler command line manual
    (man pages) for details.

  * New option, --generate-element-map, triggers the generation of a root
    element map. The element map allows uniform parsing and serialization
    of multiple root elements. This option can only be used together with
    --generate-element-type. For more information, refer to the messaging
    example and Section 2.9.2, "Element Map" in the C++/Tree Mapping
    User Manual.

  * Prior to this version, if the --generate-polymorphic option is
    specified, the compiler treats all types as potentially polymorphic.
    Now by default only type hierarchies used in substitution groups and
    those explicitly declared polymorphic with the new --polymorphic-type
    option are treated as polymorphic. This results in smaller and faster
    generated code. If you would like to continue using the old behavior,
    you will need to specify --polymorphic-type-all. For more information,
    on this change see Section 2.11, "Mapping for xsi:type and Substitution
    Groups" in the C++/Tree Mapping User Manual.

  * New option, --generate-detach, triggers the generation of detach
    functions for required elements and attributes. For optional and
    sequence cardinalities the detach functions are now provided by the
    respective containers even without this option. These functions, for
    example, allow one to move sub-trees in the object model either within
    the same tree or between different trees without copying. For more
    information, refer to Section 2.8 "Mapping for Local Elements and
    Attributes" in the C++/Tree Mapping User Manual.

  * New option, --export-xml-schema, causes the compiler to export/import
    types in the XML Schema namespace using the export symbol provided
    with the --export-symbol option.

  * New example, embedded, shows how to embed the binary representation of
    the schema grammar into an application and then use it to parse and
    validate XML documents.

  * New example, compression, shows how to compress an XML document during
    serialization and decompress it during parsing using the zlib library.

  * New example, custom/mixed, shows how to use type customization to parse
    and serialize mixed content.

  * The streaming example has been extended to show how to perform stream-
    oriented, partially in-memory XML processing using the C++/Tree mapping.
    With the partially in-memory parsing and serialization only a part of
    the object model is in memory at any given time. With this approach one
    can process parts of the document as they become available as well as
    handle documents that are too large to fit into memory.

  * New default/fixed value initialization code. Now the default/fixed values
    are parsed by the XSD compiler at compile time instead of the standard
    parsing code at runtime. This will allow the compilation of schemas that
    use the default/fixed values without support for XML parsing
    (--suppress-parsing option).

  * Empty XML Schema enumeration values are now mapped to the 'empty' C++
    enumerator name instead of 'cxx'.

  * XML Schema union types with members that are enumeration types are
    automatically converted to equivalent enumeration types with a union
    of all the members' enumerators.

Version 3.2.0

  * New option, --disable-warning, disables printing of a warning with
    the specified id. Specifying 'all' for the warning id disables all
    warnings.

  * New options, --export-maps and --import-maps, provide support for
    splitting a polymorphic type hierarchy across several Win32 DLLs.
    See the compiler command line manual (man pages) for details.

 C++/Tree

  * During serialization the generated code automatically assigns
    generic prefixes (p1, p2, etc) to XML namespaces used in the
    vocabulary and for which no custom prefix-namespace mapping
    was provided via the xml_schema::namespace_infomap argument.
    The xml_schema::namespace_infomap argument in the serialization
    functions is now default-initialized to an empty map. The
    xml_schema::no_namespace_mapping and xml_schema::xsi_already_in_use
    exceptions have been removed.

  * New example, performance, measures the performance of parsing and
    serialization. This example also shows how to structure your code
    to achieve the maximum performance for these two operations.

  * New example, xpath, shows how to use the C++/Tree mapping together
    with XPath.

  * New options, --one-accessor-regex, --opt-accessor-regex,
    --seq-accessor-regex, --one-modifier-regex, --opt-modifier-regex,
    and --seq-modifier-regex, allow specification of transformations
    for accessor and modifier function names for elements and attributes
    with specific cardinalities. For more information see the NAMING
    CONVENTION section in the compiler command line manual (man pages).

  * Support for comparison (--generate-comparison) and printing
    (--generate-ostream) of polymorphic object models.

  * New serialization flag, xml_schema::flags::dont_pretty_print,
    disables extra spaces and new lines that make the resulting XML
    slightly bigger but easier to read.

  * New example, custom/double, shows how to customize parsing and
    serialization code for the xsd:double XML Schema built-in type.
    It can be used as a guide on how to customize built-in XML Schema
    types that are mapped to fundamental C++ types.

  * Support for fractionDigits and totalDigits facets in serialization
    of types derived from xsd:decimal.

  * New set of compile-time macros that control how the xsd:float,
    xsd:double, and xsd:decimal types are serialized. The following
    macros control the format:

    XSD_CXX_TREE_FLOAT_FIXED
    XSD_CXX_TREE_FLOAT_SCIENTIFIC
    XSD_CXX_TREE_DOUBLE_FIXED
    XSD_CXX_TREE_DOUBLE_SCIENTIFIC

    The following macros control the precision:

    XSD_CXX_TREE_FLOAT_PRECISION_MAX
    XSD_CXX_TREE_FLOAT_PRECISION
    XSD_CXX_TREE_DOUBLE_PRECISION_MAX
    XSD_CXX_TREE_DOUBLE_PRECISION
    XSD_CXX_TREE_DECIMAL_PRECISION_MAX
    XSD_CXX_TREE_DECIMAL_PRECISION

    If the *_PRECISION_MAX macro is defined then the maximum number of
    potentially significant decimal digits that the type can represent
    is used. Otherwise, if the *_PRECISION macro is defined then its
    value is used. By default the precision is set to the number of
    decimal digits that the type can represent without change. For
    more information on these options, refer to the following paper:

    http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf

    The old macro, XSD_FP_ALL_DIGITS, that was equivalent to defining
    all three *_PRECISION_MAX macros has been removed.

    An alternative to using these macros is to customize the floating
    point type as shown in the custom/double example.

  * An additional constructor is generated in situations where a type
    contains one or more required element of complex type (that is,
    it itself contains elements or attributes). In this constructor,
    initializers for such elements are passed as std::auto_ptr and the
    newly created instance is directly initialized with and assumes
    ownership of the pointed to objects. This constructor is a logical
    addition to the non-copying modifiers that were introduced in the
    previous version.

  * Extra conversion operators in the fundamental_base class template
    which is used to emulate inheritance from fundamental types are now
    disabled by default since they cause problems on several compilers.
    To enable them compile your code with the XSD_TREE_EXTRA_FUND_CONV
    macro defined.

 C++/Parser

  * New options, --generate-xml-schema and --extern-xml-schema, trigger
    generation of the mapping for the XML Schema namespace to a separate
    header file and inclusion of that header into other generated header
    files instead of generating the necessary declarations inline,
    respectively. See the compiler command line manual (man pages) for
    details.

  * New example, performance, measures the performance of XML parsing.
    This example also shows how to structure your code to achieve the
    maximum performance for this operation.

  * Type map files can now include comments. A comment starts with #
    and ends with a new line or end of file. To specify a name that
    contains # enclose it in "".

  * In type map files the optional argument type now defaults to the
    return type if the return type ends with * or & (that is, it is
    a pointer or a reference) and 'const return type&' otherwise.

  * The interface for polymorphic parsing has been simplified. Calling the
    *_parser() functions multiple times to specify several parsers is no
    longer supported. Instead you need to pass the xml_schema::parser_map
    object which contains the parsers. For more information refer to
    Section 5.4, "Support for Polymorphism" in the C++/Parser Mapping
    Getting Started Guide.

  * The use of virtual inheritance has been reduced which results in a
    much smaller object code size (more than factor of 2 on some tests)
    and faster C++ compilation with less RAM used.

  * The low-level Expat-specific parsing API (parse_begin() and parse_end())
    has been extended to provide XML and XML Schema error translation to
    exceptions or error handler calls. See Section 7.2, "Expat Document
    Parser" in the C++/Parser Mapping Getting Started Guide for more
    information.

Version 3.1.0

  * New option, --file-per-type, triggers generation of a separate set
    of C++ files for each type defined in XML Schema. This compilation
    mode is primarily useful when some of your schemas cannot be compiled
    separately or have cyclic dependencies which involve inheritance.
    Other new options that are useful in this compilation mode are
    --type-file-regex, --type-file-regex-trace, and --file-list. See the
    compiler command line manual (man pages) for more information.

  * New option, --options-file, allows additional command line options
    to be provided in files, with one option per line.

  * New option, --reserved-name, allows insertion of additional names
    with optional replacements to the list of names that should not be
    used as identifiers. See the compiler command line manual (man pages)
    for details.

  * New options, --location-map, --location-regex, and
    --location-regex-trace, allow re-mapping of schema locations
    specified in the include and import elements without modifying the
    schema files. See the compiler command line manual (man pages) for
    more information.

  * New option, --guard-prefix, allows specification of a prefix that
    should be added to generated header inclusion guards.

  * New option, --file-list, triggers creation of a file with a list of
    generated C++ files. This option is primarily useful in the file-per-
    type compilation mode (--file-per-type) to create a list of generated
    C++ files, for example, as a makefile fragment. Other new options
    that are useful with --file-list are --file-list-prologue,
    --file-list-epilogue, and --file-list-delim. See the compiler command
    line manual (man pages) for more information.

  * Support for the upcoming Xerces-C++ 3.0.0 release.

 C++/Tree

  * New option, --generate-intellisense, triggers generation of workarounds
    for IntelliSense bugs in Visual Studio 2005 (8.0). When this option is
    used, the resulting code is slightly more verbose. IntelliSense in
    Visual Studio 2008 (9.0) does not require these workarounds. Support
    for IntelliSense in Visual Studio 2003 (7.1) is improved with this
    option but is still incomplete.

  * New options, --type-naming and --function-naming, allow specification
    of the type and function naming conventions that should be used in the
    generated code. Supported values for --type-naming are: knr (K&R), ucc
    (upper-camel-case), and java. Supported values for --function-naming
    are: knr (K&R), lcc (lower-camel-case), and java. For more information
    see the NAMING CONVENTION section in the compiler command line manual
    (man pages).

  * New options, --type-regex, --accessor-regex, --modifier-regex,
    --parser-regex, --serializer-regex, and --enumerator-regex, allow
    specification of transformations for type, accessor function,
    modifier function, parsing function, serialization function, and
    enumerator names in order to produce the generated code using a
    custom naming convention. For more information see the NAMING
    CONVENTION section in the compiler command line manual (man pages).

  * Generated list classes now provide a complete set of constructors and
    conform to the standard C++ sequence interface.

  * String-based types now provide two extra constructors that expect a
    C string and std::string as their arguments. This allows direct
    initialization of string-based types from string literals.

  * New implementations of the XML Schema date/time types (date, dateTime,
    duration, gDay, gMonth, gMonthDay, gYear, gYearMonth, and time) that
    represent the information in the numerical form.

  * New binary serialization examples: binary/boost, which shows how to
    save/load the object model to/from a custom format using the Boost
    serialization library as an example, and binary/xdr, which shows how to
    save/load the object model to/from XDR (eXternal Data Representation)
    binary format using the XDR API provided as part of Sun RPC.

  * The non-copying modifier functions can now be used to assemble object
    models from scratch. For more information see Section 4.4, "Creating
    the Object Model from Scratch" in the C++/Tree Mapping Getting Started
    Guide as well as Section 2.8, "Mapping for Local Elements and Attributes"
    in the C++/Tree Mapping User Manual.

  * Doxygen documentation was added to the XSD runtime for the built-in XML
    Schema types, exceptions, etc. This allows linking of the generated
    documentation to the XSD runtime documentation using the Doxygen tags
    mechanism. The Doxygen configuration file for the XSD runtime is
    provided in the documentation/cxx/tree/reference/ directory.

  * Support for customization of anyType. Because anyType is a base type
    for every generated type, customizing it allows one to implement custom
    functionality that spans the entire type system. See the comments
    example in the examples/cxx/tree/custom/ directory.

  * New option, --omit-default-attributes, triggers generation of extra
    checks that exclude attributes with default and fixed values from the
    serialized XML documents.

  * The parsing functions that used to read from DOMInputSource were changed
    to use InputSource to ease support of Xerces-C++ 3 and 2 series in the
    same code base.

  * The parsing function that used to parse DOMDocument* was changed to
    parse xml_schema::dom::auto_ptr<DOMDocument>& instead. If the keep_dom
    and own_dom flags are specified then this parsing function resets the
    passed automatic pointer and the returned object model assumes
    ownership of the DOM document. xml_schema::dom::auto_ptr is a simple
    automatic pointer for Xerces-C++ DOM with the same interface as
    std::auto_ptr.

  * The xml_schema::tree_node_key DOM user data key was moved to
    xml_schema::dom::tree_node_key.

 C++/Parser

  * New option, --generate-polymorphic, triggers generation of polymorphism-
    aware code. This option should be used on XML vocabularies which use
    xsi:type and/or substitution groups. For more information see Section
    5.4, "Support for Polymorphism" in the C++/Parser Mapping Getting
    Started Guide we well as the polymorphism and polyroot examples in the
    examples/cxx/parser/ directory.

  * The date/time types (date, dateTime, gDay, gMonth, gMonthDay, gYear,
    gYearMonth, and time) now represent time zone in the numerical form.

  * In order to support parsing of polymorphic XML documents, the signatures
    of the start_* functions (_start_element, _start_any_element, and
    start_root_element) have changed to include a third argument of type
    const ro_string<C>*. This argument contains the resolved type name and
    namespace in case the xsi:type attribute was specified.

Version 3.0.0

  * Anonymous type morphing (automatic type naming) is now performed by
    default in both mappings. The --morph-anonymous option does not have
    any effect but is preserved for backwards compatibility. A new option,
    --preserve-anonymous, disables anonymous type morphing. This option is
    useful together with --show-anonymous if you want to make sure your
    schemas do not have any anonymous types.

  * A number of bugs fixed in both C++/Tree and C++/Parser mappings.

 C++/Tree

  * The new C++/Tree Mapping Getting Started Guide is available in the
    documentation/cxx/tree/guide/ directory.

  * The type definitions for local elements and attributes in the form
    name::type have been changed to name_type. For example, an element
    bar in type foo with maxOccurs="unbounded" used to have its iterator
    type defined as foo::bar::iterator. With this change it becomes
    foo::bar_iterator. Furthermore, the container type name for sequence
    elements has changed from foo::bar::container to foo::bar_sequence
    and for optional elements and attributes from foo::bar::container
    to foo::bar_optional. This is a backwards incompatible change and
    may require application code adjustments (the C++ compiler will
    pinpoint the affected places).

  * New option, --generate-doxygen, triggers generation of documentation
    comments suitable for extraction by the Doxygen documentation system.
    Documentation from annotations is added to the comments if present in
    the schema.

  * New option, --generate-wildcard, triggers generation of the new
    wildcard (any and anyAttribute) mapping. This mapping represents the
    content matched by wildcards as DOM fragments. For more information on
    the new mapping see Section 2.12, "Mapping for any and anyAttribute"
    in the C++/Tree Mapping User Manual as well as the wildcard example in
    the examples/cxx/tree/ directory.

  * New option, --generate-comparison, triggers generation of comparison
    operators (== and !=) for complex types. Comparison is performed
    memberwise.

  * Support for the RPC XDR binary stream in addition to ACE CDR.

  * New constructor is generated for complex types with ultimate bases
    that are simple types and can be default-initialized. This constructor
    includes initializers for all required members but omits the initializer
    for the base type. See Section 2.7, "Mapping for Complex Types" in the
    C++/Tree Mapping User Manual for more information.

  * Support for polymorphic binary serialization and extraction. Note that
    the semantics of the --generate-insertion and --generate-extraction
    options has changed. See the the compiler command line manual (man
    pages) for details.

  * New parsing function with the DOMDocument* argument and the own_dom
    flag allow the tree to assume the ownership of the DOM document
    being parsed when DOM association is requested (keep_dom flag).
    See the C++/Tree Mapping User Manual for more information.

  * New example, multiroot, shows how to handle XML vocabularies with
    multiple root elements.

  * New example, caching, shows how to parse several XML documents while
    reusing the underlying XML parser and caching the schemas used for
    validation.

  * The mapping of built-in XML Schema type decimal has changed from
    long double to double. The old mapping can be obtained by providing
    a custom mapping for this type.

  * The xml_schema::errors type which is used in the xml_schema::parsing
    and xml_schema::serialization exceptions has been renamed to
    xml_schema::diagnostics and extended to include warnings in addition
    to errors.

  * Serialization operators now clear the element being serialized to from
    existing child nodes and attributes (except for special attributes such
    as prefix-namespace mappings, etc.).

  * Improved built-in type parsing, including support for normalization and
    whitespace collapsing.

  * Optimizations for the generated code size and compilation time,
    including space optimizations for polymorphic parsing and
    serialization. Optimizations for XML parsing speed.

 C++/Parser

  * The C++/Parser mapping have been significantly redesigned. See the new
    Getting Started Guide in documentation/cxx/parser/guide/ for details.

  * The new C++/Parser Mapping Getting Started Guide is available in the
    documentation/cxx/parser/guide/ directory.

  * The mapping now provides parser implementations for all built-in XML
    Schema types. See Chapter 6, "Built-In XML Schema Type Parsers" in
    the C++/Parser Mapping Getting Started Guide for more information.

  * The mapping now supports automatic generation of sample parser
    implementations and a test driver. The --generate-noop-impl option
    triggers generation of a sample implementation with empty function
    bodies. The --generate-print-impl option triggers generation of a
    sample implementation that prints the data stored in XML to STDOUT.
    The --generate-test-driver option trigger generation of a test driver.
    For more information on this feature see the compiler command line
    manual (man pages) and the generated example in the examples/cxx/parser/
    directory. Other relevant options include: --force-overwrite,
    --root-element-first, --root-element-last, and --root-element.

  * New example, wildcard, shows how to parse the XML data matched by
    XML Schema wildcards (any and anyAttribute).

  * The xml_schema::document parser has been extended with overridable
    virtual functions start_root_element and end_root_element to support
    parsing of XML vocabularies with multiple document roots. See the
    multiroot example in the examples/cxx/parser/ directory for more
    information.

  * The xml_schema::errors type which is used in the xml_schema::parsing
    exception has been renamed to xml_schema::diagnostics and extended to
    include warnings in addition to errors.

Version 2.3.1

  * The compiler is now capable of translating multiple schemas with
    one invocation.

  * New option, --sloc-limit, allows one to limit the amount of the
    generated code.

  * New option, --proprietary-license, instructs the compiler not to
    include the GPL banner in each generated file. Instead a short
    notice about a required proprietary license is generated. You
    should not use this option unless you have obtained a proprietary
    license from Code Synthesis.

  * The default encoding for the 'char' character type is now UTF-8.
    To get the previous behavior (local code page via the Xerces-C++
    transcode functions) define the XSD_USE_LCP preprocessor macro
    when compiling your source code.

  C++/Tree

    * The --parts option has been improved to split generated code more
      evenly by analyzing the complexity of the generated schema constructs.

    * Ability to customize serialization, std::ostream, and binary
      insertion/extraction operators. See examples/cxx/tree/custom/wildcard
      for an example on how to handle XML Schema wildcards (xsd:any and
      xsd:anyAttribute) by customizing the parsing constructor and
      serialization operators.

    * Optimizations for the run-time memory consumption.

    * Optimizations for space in the generated code.

    * Number of bug fixes.

  C++/Parser

    * Proper handling of an xsd:any nested content. Nested elements,
      attributes, and text are reported via _any_* hooks of the current
      parser.

    * Number of bug fixes, mostly in the generated validation code.


Version 2.3.0

    * Name conflicts across type inheritance hierarchies are now detected
      and resolved via name escaping.

  C++/Tree

    * New option, --suppress-parsing, suppresses generation of the parsing
      constructors and functions. This can be used to minimize the generated
      code footprint when parsing from XML is not used.

    * New option, --generate-forward, triggers generation of a forward
      declaration header file for types defined in the schema. A set of
      --fwd-* options that control the resulting file name as well as
      prologue and epilogue code are available.

    * New option, --generate-xml-schema, triggers generation of the mapping
      for the XML Schema namespace to a separate header file. See the man
      pages for details and examples/cxx/tree/custom/calendar for an example.

    * New option, --extern-xml-schema, triggers inclusion of a header
      file for the XML Schema namespace instead of generating the
      necessary declarations inline. See the man pages for details and
      examples/cxx/tree/custom/calendar for an example.

    * New options, --custom-type and --custom-type-regex, instruct the
      compiler to use custom C++ type for a type defined in the schema.
      The standard mapping can still be generated (with a different name)
      usually to be used as a base. Built-in XML Schema types can be
      customized using this mechanism. See the man pages for details and
      examples/cxx/tree/custom/* for examples.

    * The generated parsing constructors and serialization operators have
      been changed to use the Xerces-C++ DOM elements and attributes
      instead of the internal wrapper types. This should provide easier
      integration with other code and libraries that use the Xerces-C++
      DOM types such as Berkeley DB XML.

    * New example, examples/cxx/tree/dbxml, shows how to use the C++/Tree
      mapping on top of the Berkeley DB XML database.

  C++/Parser

    * Validation of the attribute structure in the generated code.

    * Validation of the character content models including mixed content in
      the generated code.

    * Validation of the built-in XML Schema types.

    * Optimizations for space and time in the generated code. In particular
      data coping during parsing and validation was significantly reduced.


Version 2.2.0

    * Detection of a version mismatch between the generated code and
      the runtime.

  C++/Tree

    * Escaping of a global element name that conflicts with a global type
      name. This is a backwards-incompatible change. Previous versions
      map them to the same name.

    * New options, --generate--insertion and --generate-extraction,
      trigger generation of (binary) data representation stream
      insertion and extraction operators, respectively. This allows
      one to serialize/deserialize in-memory representation to/from
      data representation streams such as XSD, CDR, etc. ACE CDR
      streams are supported out of the box (see the binary example).
      User-supplied streams can be used via an adaptation layer.

    * New serialization flag, no_xml_declaration, instructs the XML
      serialization functions to omit an XML declaration. This is useful
      for streaming serialization (see the streaming example).

    * Optimizations to reduce generated code size.


  C++/Parser

    * New options, --generate-validation and --suppress-validation,
      trigger and suppress generation of the validation code,
      respectively. The validation code is the implementation of the
      XML Schema validation in the generated code (also known as
      "perfect" parser). In this version validation of the element
      structure has been implemented.

    * New architecture for underlying XML parsers. This is a backwards-
      incompatible change. Existing applications will have to be
      modified. See examples for details.


Version 2.1.1

  C++/Tree

    * New option, --namespace-map, allows direct mapping of XML Schema
      namespaces to C++ namespaces without the use of regular expressions.

    * Further optimizations in the container code and enum mapping to
      reduce generated code size.

    * Number of bug fixes in the generated code.


  C++/Parser

    * New option, --namespace-map, allows direct mapping of XML Schema
      namespaces to C++ namespaces without the use of regular expressions.


Version 2.1.0

  * Automatic handling of forward inheritance. XML Schema allows
    inheritance from yet undefined types while it is illegal to do
    so in C++. Now the translator automatically handles forward
    inheritance by re-arranging the schema during compilation.


  C++/Tree

    * New enum mapping with support for inheritance. Enumerators are
      now parsed using binary search instead of linear search.

    * Associated DOM nodes now retain "back" pointers to tree nodes.

    * Optimizations to reduce generated code size.


  C++/Parser

    * Specialization for void. You can now use void as a hook argument
      type if you don't want to pass any data between parsers.

    * Support for re-use of implementations of base parsers in derived
      parsers using the mixin C++ idiom. See the examples/cxx/parser/mixin
      for more information.

    * Support for uninitialized parser. If you don't provide a parser
      for element/attribute, that element/attribute will be ignored
      during parsing.


Version 2.0.0

  * New cardinality calculator. This improves support for schemas that
    use complex structures with repeated elements, e.g.,

    <complexType name="Type">
      <choice>
        <sequence>
          <element name="a" type="string"/>
          <element name="c" type="string"/>
        </sequence>
        <sequence>
          <element name="b" type="string"/>
          <element name="c" type="string"/>
        </sequence>
      </choice>
    </complexType>


  * New identifier escaping code. With this feature xsd generates proper
    code for schemas that use the same name for an element and an attribute
    in the same type or use several elements/attributes with different
    qualified names but with the same local name, e.g.,

    <!-- base.xsd -->
    <schema xmlns="http://codesynthesis.com/xmlns/test/foo"
            targetNamespace="http://codesynthesis.com/xmlns/test/foo">

      <element name="foo" type="int"/>
    </schema>

    <schema xmlns="http://codesynthesis.com/xmlns/test/bar"
	    xmlns:f="http://codesynthesis.com/xmlns/test/foo"
            targetNamespace="http://codesynthesis.com/xmlns/test/bar">

      <import namespace="http://codesynthesis.com/xmlns/test/foo"
              schemaLocation="base.xsd"/>

      <element name="foo" type="string"/>

      <complexType name="Foo">
        <sequence>
          <element ref="foo"/>
          <element name="foo" type="long"/>
          <element ref="f:foo"/>
          <element ref="f:foo"/>
        </sequence>
        <attribute name="foo" type="string"/>
      </complexType>
    </schema>


  C++/Tree

    * New option, --generate-polymorphic, triggers generation of
      polymorphism-aware code. Before this release xsd used to always
      generate polymorphism-aware code. However, it appears to be quite
      wasteful in terms of the generated code size (up to 40%). You will
      now need to explicitly specify this option if you use substitution
      groups or xsi:type. A warning is issued if this option is not
      specified but the schema makes use of substitution groups.

    * New options, --root-element-first, --root-element-last,
      --root-element-all, --root-element-none, and --root-element, control
      generation of parsing and serialization functions. With these options
      you can avoid generating extra code for global elements that are not
      document roots. See the man pages for details.

    * New options, --parts and -parts-suffix, allows you to split generated
      source code into a number of parts. This is useful when translating
      large, monolithic schemas and a C++ compiler is not able to compile
      the resulting source code at once (usually due to insufficient memory).

    * New option, --generate-default-ctor, triggers generation of default
      constructors even for types that have required members. Required
      members of an instance constructed using such a constructor are not
      initialized and accessing them results in undefined behavior. Thanks
      to Jean-Francois Dube <jf at magnu.polymtl.ca> for suggesting this
      feature.

    * New option, --generate-from-base-ctor, triggers generation of
      constructors that expect an instance of a base type followed by all
      required members. Thanks to Jean-Francois Dube <jf at magnu.polymtl.ca>
      for suggesting this feature.

    * Information scopes for attributes and elements with default/fixed values
      now define the public static default_value function which allows one to
      obtain the default/fixed value for the element/attribute. Thanks to
      Dave Moss <david.r.moss at selex-comm.com> for suggesting this feature.

    * MSVC 7.1 has a limit on the length of the "if else if" chain. This
      results in ICE when compiling generated code for enumerations with
      a large number of values. This version addresses this issue. Thanks
      to Cyrille Chépélov <cyrille at chepelov.org> for reporting this and
      suggesting a fix.


  C++/Parser

    * The parser construction API has changed. Now, for element 'foo',
      the name of the parser modifier function is 'foo_parser'. Likewise,
      operator() for setting all parsers at once has been changed to the
      'parsers' function.


Version 1.9.0

  C++/Tree

    * The size modifier function in the base64_binary and hex_binary
      built-in types automatically adjusts capacity if needed.

    * More internal names (names that start with _xsd_) were made
      private or protected.

  C++/Parser

    * Typedef for the parser base in the xml_schema namespace.

  C++/Parser-E

    * C++/Parser mapping optimized for embedded systems. For now it
      is equivalent to 'cxx-parser --xml-parser expat'.


Version 1.8.0

  * Moved to the build 0.2 series.

  C++/Tree

    * Support for default and fixed values in attributes. An optional
      attribute with a default or fixed value is mapped to the One
      cardinality class instead of the Optional cardinality class.

    * Mapping for base64Binary and hexBinary has improved. Now these
      types support a basic buffer abstraction and perform automatic
      encoding and decoding.

    * Internal names are protected. We've noticed (via bug reports) a
      wide use of internal names (names that start with _xsd_) in user
      code. This is not portable and instead you should use public
      names. To prevent this from happening in the future we've made
      all internal names protected.

  C++/Parser

    * Support for Expat as the underlying XML parser in addition to
      Xerces-C++. This allows one to use the C++/Parser mapping in
      memory-constrained environments such as embedded systems. To
      select Expat instead of Xerces-C++ (default) add
      '--xml-parser expat' to the command line. At the moment only
      'char' (UTF-8) is supported as the base character type when
      Expat is selected.

    * The invalid_instance exception has been renamed to parsing.

    * Generic error_handler interface has been added in addition
      to Xerces-C++-specific DOMErrorHandler. It allows you to
      handle parsing errors and warnings without having to deal
      with Xerces-C++ specifics.

    * The default error handling behavior has changed in parsing
      functions. Instead of printing errors and warnings to STDERR,
      the errors are now collected and thrown as part of the parsing
      exception.

    * In parsing functions, the name, namespace arguments order has
      been reversed to be consistent with the one used in parsing
      hooks.

Version 1.7.0

  * Number of bug fixes in libxsd and the generated code.

  C++/Tree

    * Comprehensive XML Schema C++/Tree Mapping User Manual.

    * Basic support for union. A simple type that is defined using
      derivation by union is mapped to a C++ class that derives from
      string.

    * The _clone function has its arguments default-initialized.

    * The invalid_instance exception has been renamed to parsing.

    * Generic error_handler interface has been added in addition
      to Xerces-C++-specific DOMErrorHandler. It allows you to
      handle parsing/serialization errors and warnings without
      having to deal with Xerces-C++ specifics. See the user
      manual for more information.

    * The default error handling behavior has changed in parsing
      and serialization functions. Instead of printing errors and
      warnings to STDERR, the errors are now collected and thrown
      as part of the parsing/serialization exception. See the user
      manual for more information.

    * The optional and sequence containers now support operators ==,
      !=, <, >, <=, and >=.

    * Flags argument has been added to serialization functions. The
      only flag that is currently supported is dont_initialize.

    * Generated code cleanups.

  C++/Parser

    * Basic support for union. A simple type that is defined using
      derivation by union is mapped to a C++ class template that
      is just an alias for the generic parser. You are expected to
      override the _characters function in your implementation.

    * Properties argument to parsing functions which allows to
      programmatically specify schemas for instance document
      validation.

    * Flags argument to parsing functions. The following flags
      are supported:

      dont_validate   - do not validate instance documents
      dont_initialize - do not initialize the Xerces-C++ runtime

Version 1.6.0

  * Number of bug fixes in libxsd and the generated code.

  C++/Tree

    * Support for xsi:type and substitution groups in parsing and
      serialization. See examples/cxx/tree/polymorphism for a code
      sample.

    * Properties argument to parsing functions which allows to
      programmatically specify schemas for instance document
      validation.

    * Extra checks in parsing code which prevents construction
      of inconsistent in-memory representation from invalid
      instance documents. Should be useful when validation is
      disabled.

    * Accessors and modifier were made normal member functions.
      Before they were implemented via functors.

    * Workaround for g++-3.3 bug# 16650:

      http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16650

  C++/Parser

    * All "service" functions were renamed to start with '_'.
      This should prevent hiding of service functions by
      elements/attributes with the same names.

Version 1.5.0

  * Number of bug fixes in libxsd and the generated code.

  C++/Tree

    * Basic support for inheritance-by-restriction in complex types.

    * The following parsing flags have been introduced:

      keep_dom        - keep association with underlying DOM nodes
      dont_validate   - do not validate instance documents
      dont_initialize - do not initialize the Xerces-C++ runtime

    * "Type-less content" such as mixed content models, xsd:anyType/
      xsd:anySimpleType, and xsd:any/xsd:anyAttribute is supported by
      exposing corresponding DOM nodes (see the keep_dom parsing flag).
      Note that only a subset of XML Schema xsd:any functionality is
      supported. The compiler will issue diagnostics for unsupported
      cases. See examples/cxx/tree/mixed for a code sample.

  C++/Parser

    * Support for inheritance-by-restriction in complex types.

    * "Type-less content" such as mixed content models, xsd:anyType/
      xsd:anySimpleType, and xsd:any/xsd:anyAttribute is supported
      by forwarding parsing events to a set of "unexpected" hooks.
      Note that only a subset of XML Schema xsd:any functionality is
      supported. The compiler will issue diagnostics for unsupported
      cases. See examples/cxx/parser/mixed for a code sample.

Version 1.4.0

  * Number of improvements and bug fixes in the diagnostics code.

  * libxsd has been reorganized to provide a clean split of code with
    regards to char/wchar_t use. It should be possible to use libxsd
    and the xsd-generated code on platforms that lack wchar_t support,
    such as mingw.

  C++/Tree

    * Work around for g++ bug# 23206.

    * Support for xsd:list.

    * Type/member name conflicts are auto-resolved. Such conflicts
      occur when a type and an element or attribute withing this type
      share the same name.

    * XML Schema extension, the 'refType' attribute, allows one to
      specify referenced type for xsd:IDREF and xsd:IDREFS data types.
      See examples/cxx/tree/library for details.

    * New option, --morph-anonymous, allows automatic morphing
      of anonymous types to named ones. See the man pages for
      details.

    * New option, --namespace-regex-trace, allows one to trace the
      namespace mapping process. See the man pages for details.

    * Mapping for optional elements/attributes (cardinality 0..1)
      has changed in a backwards-incompatible way. In the previous
      version you would write:

      Bar& bar = ...

      if (bar.foo.present ())  // test
      {
        Foo& foo (bar.foo ()); // get

        bar.foo (Foo (...));   // set

        bar.foo.reset ();      // reset
      }

      Now you would write it like this:

      if (bar.foo ().present ())      // test
      {
        Foo& foo (bar.foo ().get ()); // get

        bar.foo (Foo (...));          // set

        bar.foo ().reset ();          // reset
      }

      Or using the pointer notation:

      if (bar.foo ())           // test
      {
        Foo& foo (*bar.foo ()); // get

        bar.foo (Foo (...));    // set

        bar.foo ().reset ();    // reset
      }

  C++/Parser

    * Support for xsd:list.

    * Type/member name conflicts are auto-resolved. Such conflicts
      occur when a type and an element or attribute withing this type
      share the same name.

    * New option, --namespace-regex-trace, allows one to trace the
      namespace mapping process. See the man pages for details.

Version 1.3.0

  * Numerous bug fixes.

  * The XML subsystem of libxsd has been reorganized to provide
    a clean split of DOM and SAX functionalities.

  C++/Parser

    * New option, --morph-anonymous, allows automatic morphing
      of anonymous types to named ones. See the man pages for
      details.

  C++/Tree

    * Additional parser functions provide support for reading
      from std::istream.

Version 1.2.0

  C++/Parser

    * New backend that generates the C++/Parser mapping.

Version 1.1.1

  all backends

    * Bug fixes in the filesystem path handling logic.

Version 1.1.0

  C++/Tree

    * New option, --generate-serialization, triggers generation of
      serialization functions. Serialization functions convert an in-memory
      representation back to XML.

    * xsd::cxx::tree::vector has been extended to closely follow std::vector
      API. This allows you to access and modify element sequences as if they
      were of type std::vector.

    * Generated constructors from xml::attribute and xml::element are made
      explicit.

    * The library example was extended to showcase modification and
      serialization of the in-memory representation.

    * New "XML Schema C++/Tree Mapping Serialization Guide" has an in-depth
      treatment of the serialization mechanisms provided by xsd.

Version 1.0.1

  all backends

    * Improved diagnostics.

    * Bug fixes in the schema inclusion/importing logic.

  C++/Tree

    * Two new options: --include-with-brackets and --include-prefix

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/xsd/
doc-url: https://www.codesynthesis.com/products/xsd/
src-url: https://git.codesynthesis.com/cgit/xsd/xsd/
email: xsd-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
tests: libxsd-tests == 4.2.0
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libxerces-c
?sys:libexpat
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libxerces-c
?sys:libexpat
\
bindist-rhel-builds: bindist
bindist-rhel-build-include: linux_rhel*-**
bindist-rhel-build-exclude: **
bindist-rhel-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libexpat
\
bindist-windows-builds: bindist
bindist-windows-build-include: windows*-**
bindist-windows-build-exclude: **
bindist-windows-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--archive-build-meta=windows
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11
\
bindist-macos-builds: bindist
bindist-macos-build-include: macos*-**
bindist-macos-build-exclude: **
bindist-macos-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--archive-build-meta=macos
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cc.coptions="-Wall -O3"
b.create:config.cxx.std=c++11
\
bindist-linux-builds: bindist
bindist-linux-build-include: linux_debian_11-gcc_10.2-bindist
bindist-linux-build-exclude: **
bindist-linux-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--archive-build-meta=linux
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cxx.std=c++11
?sys:libxerces-c
?sys:libexpat
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = libxsd

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

config [bool] config.libxsd.doxygen ?= false

using in

cxx.std = latest

using cxx

# Note that this is a header-only library.
#
hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx

\
location: xsd/libxsd-4.2.0.tar.gz
sha256sum: fd9f7be56677d37e72d0998cc124c99dcda5cb2211ac1ecbacbabbb65ce98699
:
name: libxsd-frontend
version: 2.1.0
summary: XML Schema definition language compiler frontend library
license: other: GPL-2.0-only with Xerces-C++ linking exception
topics: C++, XML, XML Schema, XML parser
description:
\
libxsd-frontend is a compiler frontend for the W3C XML Schema definition
language. It includes parser, semantic graph types and traversal mechanism.

See the NEWS file for the user-visible changes from the previous release.

See the LICENSE file for distribution conditions.

See the INSTALL file for prerequisites and installation instructions.

The project page is at https://codesynthesis.com/projects/libxsd-frontend/.

Send bug reports or any other feedback to the
libxsd-frontend-users@codesynthesis.com mailing list.

\
description-type: text/plain
changes:
\
For all further versions see the change log at:

https://git.codesynthesis.com/cgit/libxsd-frontend/libxsd-frontend/log/

Version 2.0.0

  * New major version with removed dependencies (now only depends on
    libcutl) and no longer supports Xerces-C++ 2-series.

  * Support for fat type files.

  * Generator that returns list of included/imported schemas.

Version 1.18.0

  * Add support for multiple pattern facets.

  * Use normalized base path to construct absolute path.

  * Trim leading and trailing whitespaces in XML Schema attributes.

Version 1.17.0

  * Add support for resolving default/fixed values of QName type. Now
    the qualified value is represented in the <namespace>#<qname> form.

  * Anonymous transformation now passes the actual file path instead of
    the empty string to the AnonymousNameTranslator::translate() function
    for the translation unit.

  * Anonymous transformation now names anonymous union member types.

  * Do not copy ref'ed default values for non-optional attributes.

  * Change predicate names in the semantic graph to consistently end
    with _p.

  * New transformation: enum synthesis.

  * Add union information to the semantics graph.

  * Add support for translating schema file paths.

Version 1.16.0

  * New transformation: simplifier. It simplifies the schema graph
    by, for example, removing empty compositors where it would not
    change the semantics of the schema.

  * Added min() and max() accessors to the Particle and Compositor
    semantic graph nodes.

  * Added optional strong include key to the schema-per-type
    transformation.

Version 1.15.0

  * Support for the simple type/simple content restriction facets.

  * Support for suppressing frontend warnings.

  * Support for suppressing full schema checking.

  * Support for the interface changes introduced in Xerces-C++ 3.0.0.b2.

Version 1.14.0

  * Support for referencing names in including schema in chameleon inclusion.

  * Support for native paths in include/import directives.

  * Support for UTF-32 and UTF-16 in wchar_t.

  * Fixed a bug in import stubs.

  * Got rid of warnings reported by g++-4.3.

Version 1.13.0

  * Support for anonymous list item and simple type restriction base
    in both parser and anonymous transformation.

Version 1.12.0

  * New transformations: anonymous and schema-per-type.

  * Optional location translator can now be passed to parser's
    c-tor to translate included and imported schema locations.

  * Support for the upcoming Xerces-C++ 3.0.0 release.

  * Upgraded to the new boost import stub.

  * Upgraded to the new xerces-c import stub.

Version 1.11.0

  * New transformation, xsd-frontend/transformations/restriction.hxx,
    copies omitted attributes and establishes associations between
    attributes, elements, and wildcards in complex type inheritance
    by restriction.

  * Upgraded to the new boost import stub.

Version 1.10.1

  * Add XML Schema error detection that is missing in Xerces-C++.

  * Update Xerces-C++ import stub to use the include directory
    instead of src for header inclusion.

Version 1.10.0

  * New semantic graph node Annotation and edge Annotates. The parser
    now handles XML Schema annotations and builds the corresponding
    representation in the semantic graph.

  * The library no longer depends on the internal Xerces-C++ headers
    and can be built against an installed version of Xerces-C++.

Version 1.9.1

  * Element wildcard (SemanticGraph::Any) is now present in the complex
    type scope with an auto-generated name.

  * Additional regression tests for wildcard parsing.

Version 1.9.0

  * Upgraded to build-0.3.0.

Version 1.8.3

  * Fix for a bug in the edge case of empty prefix namespace resolution.

Version 1.8.2

  * Fix for a bug in element ordering.


Version 1.8.1

  * Fix for a bug in element group forward reference resolution.

  * Set of regression tests.


Version 1.8.0

  * Support for the anyAttribute wildcard.

  * Substitution edge is now propagated to referenced elements.

  * Special parsing method which returns a graph that virtually
    corresponds to the XML Schema namespace definition with all
    the built-in type.

  * Mixed content flag in SemanticGraph::Complex.

  * Optional proper handling of inheritance by restriction.


Version 1.7.0

  * Added Restricts and Extends edges that model XML Schema inheritance
    by restriction and inheritance by extension, respectively. The parser
    was adjusted to use these edges instead of the generic Inherits edge.

  * Implemented handling of the complex content inheritance by restriction.

  * Fixed the chameleon inclusion code to create one Schema node per each
    unique namespace.

  * Removed support for multiple inheritance in Complex.

  * Added a constructor that takes one node traverser to all edge traversers.


Version 1.6.1

  * Bug fixes in the parser.


Version 1.6.0

  * Support for traversing inheritance graph of enumerations.

  * Support for removal of Names edges.


Version 1.5.0

  * Semantic graph now captures containment relations for elements. New
    semantic graph nodes: particle, compositor, all, choice, sequence.

  * Element and attribute groups are not first-class semantic graph
    nodes: element-group and attribute-group. References to groups
    are still fully resolved (i.e., their content is copied into
    referencing constructs).


Version 1.4.1

  * Upgraded to the version-aware libboost import stub.


Version 1.4.0

  * Moved to the build 0.2 series.

  * Support for the default and fixed values in attribute and element
    definitions.


Version 1.3.0

  * Several bug fixes in the parser.

  * Basic support for union. Union member types are not yet tracked.


Version 1.2.0

  * Bug fixes in the parser.

  * Support for the 'substitutes' relation.

  * A flag that indicates whether an element is global.


Version 1.1.0

  * Basic support for inheritance-by-restriction of complex types.

  * Support for mixed content model by simply ignoring the attribute.

  * Support for xsd:anyAttribute by simply ignoring the declaration.

  * Support for xsd:any.

  * Support for the element/attribute-belongs-to-a-namespace relation
    for qualified elements and attributes.


Version 1.0.6

  * Bug fixes in the parser.

  * Support for xsd:list.

  * Support for the 'refType' extension attribute which allows to specify
    referenced type for IDREF/IDREFS data types.


Version 1.0.5

  * Bug fixes in the parser.

  * SemanticGraph::Scope::NamesList uses List container instead of Vector.
    This allows changing the semantic graph while traversing it.

  * SemanticGraph::Schema graph node supports multiple incoming Contains
    edges.

  * Traversal::Scope has been extended to support traversal of changing
    semantic graphs.


Version 1.0.4

  * Diagnostics improvements.

  * Bug fixes in the filesystem path handling logic.


Version 1.0.3

  * Bug fixes in the filesystem path handling logic.


Version 1.0.2

  * Parser now handles subsequent inclusion/importing of the same
    schema by creating an appropriate edge in the semantic graph.
    Note that this may result in the semantic graph having cycles
    of Includes/Imports/Sources edges.

  * Support for iteration over Belongs edges in SemanticGraph::Type.


Version 1.0.1

  * Diagnostics improvements.

  * Build system improvements.

  * Code cleanups.


Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/projects/libxsd-frontend/
src-url: https://git.codesynthesis.com/cgit/libxsd-frontend/libxsd-frontend/
email: libxsd-frontend-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libcutl ^1.11.0
depends: libxerces-c ^3.0.0
requires: c++11
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = libxsd-frontend

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
cxx{*}: extension = cxx
ixx{*}: extension = ixx
txx{*}: extension = txx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

\
location: libxsd-frontend/libxsd-frontend-2.1.0.tar.gz
sha256sum: 670b8e23af3c8a71134d933f3e7f420e15a4b4cc774e7269a0cb49123ab22b0d
:
name: libxsd-tests
version: 4.2.0
type: tests
language: c++
project: xsd
summary: XML Schema to C++ data binding compiler runtime library tests
license: other: GPL-2.0-only with Xerces-C++ linking exception and FLOSS\
 exception
description:
\
# libxsd-tests - tests for XSD runtime library

This package contains tests for `libxsd`, the XML Schema to C++ data binding
compiler's runtime library.

\
description-type: text/markdown;variant=GFM
url: https://www.codesynthesis.com/products/xsd/
doc-url: https://www.codesynthesis.com/products/xsd/
src-url: https://git.codesynthesis.com/cgit/xsd/xsd/
email: xsd-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libxerces-c ^3.0.0
depends: libexpat ^2.1.0
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = libxsd-tests

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

# Every exe{} in this project is by default a test.
#
exe{*}: test = true

# Specify the test target for cross-testing.
#
test.target = $cxx.target

\
location: xsd/libxsd-tests-4.2.0.tar.gz
sha256sum: 039456a6a6a7f82da322c156b0f7509edfd7a950b9f95d1ee3a2f62473900b67
:
name: libxsde
version: 3.4.0
type: lib
language: c++
language: c
project: xsde
summary: Runtime library for XML Schema to C++ data binding compiler for\
 mobile and embedded systems
license: other: GPL-2.0-only with FLOSS exception
topics: C++, XML, XML Schema, XML parser, mobile and embedded systems
description:
\
# libxsde - XSD/e runtime library

XSD/e is an open-source, dependency-free XML Schema to C++ compiler for
mobile, embedded, and light-weight applications. It provides XML parsing,
serialization, XML Schema validation, and XML data binding while maintaining a
small footprint and portability.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [XSD/e project
page](https://codesynthesis.com/products/xsde/).

\
description-type: text/markdown;variant=GFM
package-description:
\
# XSD/e

XSD/e is an open-source, dependency-free XML Schema to C++ compiler for
mobile, embedded, and light-weight applications. It provides XML parsing,
serialization, XML Schema validation, and XML data binding while maintaining a
small footprint and portability.

For further information, refer to the [XSD/e project
page](https://codesynthesis.com/products/xsde/).

## Usage

XSD/e consists of several packages with the main ones being `xsde` (the XML
Schema to C++ compiler) and `libxsde` (the runtime library). There are also
`xsde-tests` and `xsde-examples` packages.

When specifying dependencies on the XSD/e packages in your project, the `xsde`
package should be a build-time dependency. The `libxsde` library can be
configured differently depending on your project needs via the
`config.libxsde.*` configuration variables (see `libxsde/build/root.build` for
the available variables).

So, putting it all together, your project's `manifest` would normally
have the following fragment if using the default `libxsde` configuration:

```
depends: * xsde ^3.4.0
depends: libxsde ^3.4.0
```

Or, for example, the following fragment if your project needs to configure
`libxsde` not to use STL, iostream, or C++ exceptions:

```
depends: * xsde ^3.4.0
depends:
\\
libxsde ^3.4.0
{
  prefer
  {
    config.libxsde.stl = false
    config.libxsde.iostream = false
    config.libxsde.exceptions = false
  }

  accept (!$config.libxsde.stl && \\
          !$config.libxsde.iostream && \\
          !$config.libxsde.exceptions)
}
\\
```

Then your `buildfile` would have something along these lines:

```
import! [metadata] xsde = xsde%exe{xsde}

import libs = libxsde%lib{xsde}
```

Note that the `xsde` executable provides `build2` metadata.

The compilation of XML Schema to C++ can be implemented using ad hoc recipes
or rules. See the `xsde-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 3.4.0

  * New option, --fat-type-file, triggers the generation of code
    corresponding to global elements into type files instead of schema
    files in the file-per-type mode. This option is primarily useful
    when trying to minimize the amount of object code that is linked
    to an executable by packaging compiled generated code into a static
    (archive) library.

  * Extra validation for date, dateTime, and gMonthDay per XML Schema 1.1.

  * Support for using external Expat library instead of bundled source
    code. See config.libxsde.external_expat (build2) or XSDE_EXTERNAL_EXPAT
    (secondary build systems) for details.

 C++/Parser

  * Allow empty base64Binary values per the specification.

 C++/Serializer

  * Elements with empty content are now closed immediately (for example,
    <foo x="y"/>) rather than with a separate closing tag (for example,
    <foo x="y"></foo>).

  * To improve the serialization performance, attributes are no longer
    sorted but rather written in the order that they were specified.

  * Support for the fractionDigits facet on the decimal data type.

  * New functions, format() and precision(), allow changing of the
    output notation and precision for the float, double, and decimal
    type serializers.

Version 3.3.0

  * This version was never released. It was skipped due to a minor versioning
    scheme adjustment in the pre-release component when migrating to build2.

Version 3.2.0

  * Support for ISO-8859-1 in addition to UTF-8 as application encoding.
    Note that this encoding is not the same as the XML document encoding
    that is being parsed or serialized. Rather, it is the encoding that
    is used inside the application. When an XML document is parsed, the
    character data is automatically converted to the application encoding.
    Similarly, when an XML document is serialized, the data in the
    application encoding is automatically converted to the resulting
    document encoding. To select a particular encoding, configure the
    XSD/e runtime library accordingly and pass the --char-encoding option
    to the XSD/e compiler when translating your schemas.

  * Support for custom allocators. This feature allows you to configure
    the XSD/e runtime and generated code to perform memory management
    using custom allocator functions provided by your application instead
    of the standard operator new/delete. For more information, see Section
    3.8, "Custom Allocators" in the C++/Hybrid Mapping Getting Started
    Guide (equivalent documentation is provided for other mappings) as
    well as the 'allocator' example in the examples/cxx/hybrid/ directory.

  * When built with Xerces-C++ 3-series, enable handling of multiple imports
    for the same namespace. Before, all subsequent imports for a namespace
    were ignored which caused errors in some schemas.

  * Automatic mapping for the urn-style XML namespaces. The last component
    in the urn name is used to derive the C++ namespace name.

  * New option, --schema-file-regex, in combination with the existing
    --type-file-regex, can be used to place the generated files into
    subdirectories or to resolve file name conflicts in the file-per-
    type mode (--file-per-type).

  * Strings used to match regular expression supplied with the
    --namespace-regex and --anonymous-regex options now include the file
    component for the schema being compiled.

 C++/Hybrid

  * String-based types that use XML Schema restriction by enumeration are
    now mapped to C++ classes with semantics similar to C++ enum. You can
    suppress this new mapping and instead get the old behavior (plain
    inheritance) by specifying the --suppress-enum compiler option. See
    Section 4.3, "Enumerations" in the Getting Started Guide for more
    information.

  * New option, --generate-clone, triggers the generation of clone functions
    for variable-length types. These functions allow you to make dynamically-
    allocated copies of variable-length objects.

  * Support for schema evolution using substitution groups. The 'ignore' and
    'passthrough' examples in the examples/cxx/hybrid/evolution/ directory
    show how the new mechanism works. The 'ignore' example shows how to
    ignore unknown elements. The 'passthrough' example shows how to pass
    the unknown content through parsing and serialization so that the output
    XML contains all the unknown elements.

  * The anySimpleType build-in type is now mapped to std::string or a\
 C-string,
    depending on whether STL is enabled or not.

  * New mapping for anyType with support for polymorphism. For more
    information, see Section 5.14, "Mapping for anyType" in the Embedded
    C++/Hybrid Mapping Getting Started Guide.

  * The object model interface for optional members of variable-length
    types now omits the _present modifier function. This is done to help
    detect programming errors that result from a type becoming variable-
    length due to schema changes. To reset such optional members you can
    call the member modifier function with NULL as its argument.

  * New configuration parameter, XSDE_STL_ITERATOR, makes iterators
    provided by the mapping conform to the STL requirements. This feature
    requires working <iterator> header and allows you to use the standard
    algorithms such as find_if, etc.

  * When the code is generated with the --generate-polymorphic or
    --runtime-polymorphic option, the resulting parser and serializer
    aggregate classes provide the static polymorphic() function which
    returns true if the object model corresponding to the root element
    or root type is polymorphic and false otherwise. This can be used
    together with the XSDE_POLYMORPHIC macro to implement generic parsing
    and serialization code that works with both polymorphic and non-
    polymorphic object models.

  * XML Schema union types with members that are enumeration types are
    automatically converted to equivalent enumeration types with a union
    of all the member's enumerators.

 C++/Parser

  * Support for the following XML Schema facets:

    String-based types:
      - length
      - minLength
      - maxLength
      - pattern
      - whiteSpace
      - enumeration

    Integer and floating-point types:
      - minExclusive
      - minInclusive
      - maxExclusive
      - maxInclusive

    For more information on the pattern facet validation, see the XSDE_REGEXP
    parameter in the configuration files.

  * The anySimpleType build-in type is now mapped to std::string or a\
 C-string,
    depending on whether STL is enabled or not.

 C++/Serializer

  * Support for the following XML Schema facets:

    String-based types:
      - length
      - minLength
      - maxLength
      - pattern
      - enumeration

    Integer and floating-point types:
      - minExclusive
      - minInclusive
      - maxExclusive
      - maxInclusive

    For more information on the pattern facet validation, see the XSDE_REGEXP
    parameter in the configuration files.

  * The anySimpleType build-in type is now mapped to std::string or a\
 C-string,
    depending on whether STL is enabled or not.

Version 3.1.0

 C++/Hybrid

  * Support for XML Schema polymorphism. The new --generate-polymorphic
    option triggers the generation of polymorphism-aware code. This option
    should be used on XML vocabularies which use xsi:type and/or
    substitution groups. For more information see Section 3.7, "Support
    for Polymorphism" and Section 4.9, "Polymorphic Object Models" in
    the Embedded C++/Parser Mapping Getting Started Guide as well as
    the polymorphism and polyroot examples in the examples/cxx/hybrid/
    directory.

  * Support for saving the object model to and loading it from binary
    representations. The new --generate--insertion and --generate-extraction
    options trigger the generation of data representation stream insertion
    and extraction operators, respectively. The XSD/e runtime provides
    support for the ACE CDR streams and XDR API that is part of Sun RPC.
    Custom representations can be supported by implementing insertion and
    extraction operators for the built-in XML Schema types and sequence
    templates. For more information, see Chapter 7, "Binary Representation"
    in the Getting Started Guide as well as examples in the
    examples/cxx/hybrid/binary/ directory.

  * Support for attributes with default and fixed values. For details see
    Section 4.3, "Attributes and Elements" in the Getting Started Guide.
    Use the new --omit-default-attributes option to omit the attributes
    with default and fixed values from serialized XML documents.

  * New option, --custom-type, allows the customization of the object model
    classes. You have the option of either basing your custom implementation
    on the generated version or providing your own implementation from
    scratch. For details see Section 4.8, "Customizing the Object Model"
    in the Getting Started Guide as well as examples in the
    examples/cxx/hybrid/custom/ directory.

  * New option, --generate-detach, triggers the generation of detach
    functions for elements and attributes of variable-length types. These
    functions, for example, allow you to move sub-trees in the object model
    either within the same tree or between different trees. The sequence
    interfaces for variable-length types now also provide the detach()
    function.

  * The generated parser and serializer implementations are now capable
    of parsing/serializing recursive types. The XSD/e compiler detects
    recursive types and generates stack-based implementations with the
    optimized non-recursive case (i.e., the first iteration still does
    not result in any heap allocations for the state maintenance).

  * Assignment function with signature assign(const T*, size_t) for
    sequences of fixed-length types. With this function you can, for
    example, initialize a sequence with a C array. Assignment of
    sequences of fundamental types (e.g., int, float, etc.) is
    implemented in terms of memcpy().

 C++/Serializer

  * Support for XML pretty-printing. The serialize() functions in the
    xml_schema::document_simpl class now have the flags argument (defaults
    to 0). You can pass the xml_schema::document_simpl::pretty_print flag
    for this argument to turn on pretty-printing. See the examples and
    documentation for details.

Version 3.0.0

  * The new Embedded C++/Hybrid mapping provides a light-weight, tree-
    like object model with precise reproduction of the XML vocabulary
    structure and element order. C++/Hybrid supports fully in-memory
    as well as hybrid, partially event-driven, partially in-memory
    XML processing. For more information on the new mapping see the
    Embedded C++/Hybrid Mapping Getting Started Guide and examples in
    the examples/cxx/hybrid/ directory.

  * New option, --disable-warning, disables printing of a warning with
    the specified id. Specifying 'all' for the warning id disables all
    warnings.

  * The interfaces of the non-STL versions of the xml_schema::qname and
    xml_schema::string_sequence classes have changed. Now by default
    their modifier functions assume ownership of the passed strings.
    The *_copy() versions of the modifier functions that make copies
    of the passed strings are now provided. See the documentation for
    details.

  * The implementation of the STL version of the xml_schema::string_sequence
    class has changed. Now a custom implementation of the sequence
    container is used instead of std::vector. See the documentation for
    details.

  * When STL is enabled the xml_schema::string_sequence objects
    corresponding to the NMTOKENS and IDREFS types are now returned and
    passed by pointer rather than by value.

Version 2.1.0

  * New delegation-based parser/serializer implementation reuse style in
    addition to virtual inheritance-based. The new style results in a much
    smaller object code size. The new reuse style is used by default and is
    incompatible with the old style. Applications that require backwards
    compatibility should use the --reuse-style-mixin option. The reuse
    support code now can be completely omitted with the --reuse-style-none
    option. A number of examples were converted to support both the new
    and old reuse styles while others were converted to support the new
    style only. For more information on the new reuse style see Section
    5.6 in the Embedded C++/Parser Getting Started Guide and Section 6.6
    in the Embedded C++/Serializer Getting Started Guide.

  * New option, --file-per-type, triggers generation of a separate set
    of C++ files for each type defined in XML Schema. This compilation
    mode is primarily useful when some of your schemas cannot be compiled
    separately or have cyclic dependencies which involve inheritance.
    Other new options that are useful in this compilation mode are
    --type-file-regex, --type-file-regex-trace, and --file-list. See the
    compiler command line manual (man pages) for more information.

  * New option, --options-file, allows additional command line options
    to be provided in files, with one option per line.

  * New option, --reserved-name, allows inserting additional names with
    optional replacements to the list of names that should not be used
    as identifiers. See the compiler command line manual (man pages)
    for details.

  * New options, --location-map, --location-regex, and
    --location-regex-trace, allow re-mapping of schema locations
    specified in the include and import elements without modifying the
    schema files. See the compiler command line manual (man pages) for
    more information.

  * New option, --guard-prefix, allows specifying a prefix that will be
    added to generated header inclusion guards.

  * New option, --file-list, triggers creation of a file with a list of
    generated C++ files. This option is primarily useful in the file-per-
    type compilation mode (--file-per-type) to create a list of generated
    C++ files, for example, as a makefile fragment. Other new options
    that are useful with --file-list are --file-list-prologue,
    --file-list-epilogue, and --file-list-delim. See the compiler command
    line manual (man pages) for more information.

  * In type map files the optional argument type now defaults to the
    return type if the return type ends with * or & (that is, it is
    a pointer or a reference) and 'const return type&' otherwise.

  * Type map files can now include comments. A comment starts with #
    and ends with a new line or end of file. To specify a name that
    contains # enclose it in "".

 C++/Parser

  * New option, --generate-polymorphic, triggers generation of polymorphism-
    aware code. This option should be used on XML vocabularies which use
    xsi:type and/or substitution groups. For more information see Section
    5.7, "Support for Polymorphism" in the Embedded C++/Parser Mapping
    Getting Started Guide we well as the polymorphism and polyroot
    examples in the examples/cxx/parser/ directory.

  * New options, --generate-xml-schema and --extern-xml-schema, trigger
    generation of the mapping for the XML Schema namespace to a separate
    header file and inclusion of that header into other generated header
    files instead of generating the necessary declarations inline,
    respectively. See the the compiler command line manual (man pages)
    for details.

  * Support for parser reuse after an error. For more information refer
    to Section 7.4, "Reusing Parsers after an Error" in the Embedded
    C++/Parser Mapping Getting Started Guide. To suppress generation
    of the reset code use the --suppress-reset option.

  * New, context-based internal parsing architecture which provides
    better performance, especially for deeply-nested documents. This
    change should not affect user code except for wildcard parsing.
    See the wildcard example for the required changes.

  * The generated sample test driver file name was changed from
    <schema>-driver.cxx to <schema>-pdriver.cxx.

 C++/Serializer

  * The mapping now supports automatic generation of sample serializer
    implementations and a test driver. The --generate-empty-impl option
    triggers generation of a sample implementation with empty function
    bodies which can then be filled with application code. The
    --generate-test-driver option trigger generation of a test driver.
    For more information on this feature see the compiler command line
    manual (man pages). Other relevant new options include:
    --impl-file-suffix, --force-overwrite, --root-element-first,
    --root-element-last, and --root-element.

  * New option, --generate-polymorphic, triggers generation of polymorphism-
    aware code. This option should be used on XML vocabularies which use
    xsi:type and/or substitution groups. For more information see Section
    6.7, "Support for Polymorphism" in the Embedded C++/Serializer Mapping
    Getting Started Guide we well as the polymorphism and polyroot
    examples in the examples/cxx/serializer/ directory.

  * New options, --generate-xml-schema and --extern-xml-schema, trigger
    generation of the mapping for the XML Schema namespace to a separate
    header file and inclusion of that header into other generated header
    files instead of generating the necessary declarations inline,
    respectively. See the the compiler command line manual (man pages)
    for details.

  * Support for serializer reuse after an error. For more information
    refer to Section 8.4, "Reusing Serializers after an Error" in the
    Embedded C++/Serializer Mapping Getting Started Guide. To suppress
    generation of the reset code use the --suppress-reset option.

Version 2.0.0

  * The new Embedded C++/Serializer mapping supports event-driven,
    stream oriented XML serialization with XML Schema validation
    and C++ data binding. The new Embedded C++/Serializer Mapping
    Getting Started Guide as well as the set of examples provide
    an introduction to the mapping.

 C++/Parser

  * The argument order in the generated parsers() functions has
    changed from elements then attributes to attributes then
    elements.

  * A number of types in the xml_schema namespaces have been
    renamed in order to make the C++/Parser and C++/Serializer
    mappings usable in the same translation unit. The old and
    new names are listed below:

    document         document_pimpl
    exception        parser_exception
    xml              parser_xml
    schema           parser_schema
    error            parser_error
    xml_error        parser_xml_error
    schema_error     parser_schema_error
    simple_content   parser_simple_content
    complex_content  parser_complex_content
    list_base        parser_list_base

  * The error accessor function has been renamed from error()
    to _error(). The application error modifier function has
    been renamed from error(int) to _app_error(int).

  * For each subsequent element with the same name in the same
    complex type, the mapping now produces a separate set of
    callbacks and accessors. Note that in this case the
    generated code will be able to perform correct dispatching
    only with XML Schema validation enabled. When validation is
    disabled all events will be delivered to the callback
    corresponding to the first element with this name.

Version 1.1.0

  * The runtime library now provides parser implementations for all
    built-in XML Schema types. See Chapter 6, "Built-In XML Schema
    Type Parsers" in the Embedded C++/Parser Mapping Getting Started
    Guide for more information.

  * The mapping now supports automatic generation of sample parser
    implementations and a test driver. The --generate-noop-impl option
    triggers generation of a sample implementation with empty function
    bodies. The --generate-print-impl option triggers generation of a
    sample implementation that prints the data stored in XML to STDOUT.
    The --generate-test-driver option trigger generation of a test driver.
    For more information on this feature see the compiler command line
    manual (man pages) and the generated example in the examples/cxx/parser/
    directory. Other relevant new options include: --force-overwrite,
    --root-element-first, --root-element-last, and --root-element.

  * New example, examples/cxx/parser/wildcard, shows how to parse the
    XML data matched by XML Schema wildcards (any and anyAttribute).

  * The xml_schema::document parser has been extended with overridable
    virtual functions start_root_element and end_root_element to support
    parsing of XML vocabularies with multiple document roots. See the
    multiroot example in the examples/cxx/parser/ directory for more
    information.

  * Declaration for built-in parser implementations and the document
    parser are now automatically included into generated header files.
    As a result, you do not need to explicitly include the
    xml-schema-impl.hxx or document.hxx header files.

  * The default parser skeleton type and file suffixes have changed
    from _skel to _pskel and from -skel to -pskel, respectively. The
    --type-suffix and --file-suffix options were renamed to
    --skel-type-suffix and --skel-file-suffix, respectively.

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/xsde/
doc-url: https://www.codesynthesis.com/products/xsde/
src-url: https://git.codesynthesis.com/cgit/xsde/xsde/
email: xsde-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libexpat ^2.1.0 ? ($config.libxsde.external_expat)
requires: libace ? ($cdr); CDR implementation library.
requires: libtirpc ? ($xdr && $cxx.target.class == 'linux'); XDR\
 implementation library.
external-expat-build-config: config.libxsde.external_expat=true
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libexpat

config.libxsde.external_expat=true
config.libxsde.polymorphic=true
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
b.create:config.cxx.std=c++11
?sys:libexpat

config.libxsde.external_expat=true
config.libxsde.polymorphic=true
\
bindist-windows-builds: bindist
bindist-windows-build-include: windows*-msvc**
bindist-windows-build-exclude: **
bindist-windows-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

b.create:config.cc.coptions="/W2 /O2"
b.create:config.cxx.std=c++11

config.libxsde.polymorphic=true
\
bindist-linux-builds: bindist
bindist-linux-build-include: linux_debian_11-gcc_10.2-bindist
bindist-linux-build-exclude: **
bindist-linux-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--archive-no-os
bpkg.bindist.archive:--archive-lang-impl=cc=
bpkg.bindist.archive:--archive-build-meta=+linux-gcc10
bpkg.bindist.archive:config.install.relocatable=true
b.create:config.cxx.std=c++11

config.libxsde.polymorphic=true
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = libxsde

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
cxx{*}: extension = cxx
ixx{*}: extension = ixx
txx{*}: extension = txx

using c

h{*}: extension = h
c{*}: extension = c

if ($cxx.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

# NOTE: don't forget to also update xsde-{tests,examples}/build/root.build if
#       changing or adding configuration variables.

# Application character encoding. Valid values are 'utf8' for UTF-8 and
# 'iso8859-1' for ISO-8859-1.
#
# Note that this encoding is not the same as the XML document encoding that is
# being parsed or serialized. Rather, it is the encoding that is used inside
# the application. When an XML document is parsed, the character data is
# automatically converted to the application encoding. Similarly, when an XML
# document is serialized, the data in the application encoding is
# automatically converted to the resulting document encoding. Also don't
# forget to use the --char-encoding option when compiling your schemas if
# using an encoding other than UTF-8.
#
config [string] config.libxsde.encoding ?= 'utf8'
encoding = $config.libxsde.encoding

assert ($encoding == 'utf8' || $encoding == 'iso8859-1') \\
  "invalid config.libxsde.encoding value '$encoding'"

# Set to false to disable the use of STL.
#
# Also don't forget to use the --no-stl option when compiling your schemas.
#
config [bool] config.libxsde.stl ?= true
stl = $config.libxsde.stl

# Set to false if you don't want iterators to conform to the STL requirements.
#
# This feature requires working <iterator> header and allows you to use the
# standard algorithms such as find_if, etc.
#
config [bool] config.libxsde.stl_iterator ?= true
stl_iterator = $config.libxsde.stl_iterator

# Set to false to disable the use of std::iostream.
#
# Also don't forget to use the --no-iostream option when compiling your
# schemas.
#
config [bool] config.libxsde.iostream ?= true
iostream = $config.libxsde.iostream

# Set to false to disable the use of C++ exceptions.
#
# Also don't forget to use the --no-exceptions option when compiling your
# schemas.
#
config [bool] config.libxsde.exceptions ?= true
exceptions = $config.libxsde.exceptions

# Set to false to disable the use of the "long long int" type and the
# strtoull() function.
#
# Also don't forget to use the --no-long-long option when compiling your
# schemas.
#
config [bool] config.libxsde.long_long ?= true
long_long = $config.libxsde.long_long

# Set to false if you don't want support for XML Schema validation in
# C++/Parser.
#
# Also don't forget to use the --suppress-validation option when compiling
# your schemas.
#
config [bool] config.libxsde.parser_validation ?= true
parser_validation = $config.libxsde.parser_validation

# Set to false if you don't want support for XML Schema validation in
# C++/Serializer.
#
# Also don't forget to use the --suppress-validation option when compiling
# your schemas.
#
config [bool] config.libxsde.serializer_validation ?= true
serializer_validation = $config.libxsde.serializer_validation

# Set to false if you don't want support for regular expressions in the XSD/e
# runtime.
#
# If the regexp support is enabled, then the parser and serializer validation
# code will use it to validate the xs:pattern facet. If the regexp support is
# disabled, then this facet will be ignored. The regexp support increases the
# resulting executable size by about 30-50Kb.
#
config [bool] config.libxsde.regexp ?= true
regexp = $config.libxsde.regexp

# Base parser/serializer implementation reuse style. Valid values are:
#
# 'mixin'  - virtual inheritance-based reuse (specify --reuse-style-mixin)
# 'tiein'  - delegation-based reuse (recommended)
# 'none'   - no reuse support (specify --reuse-style-none)
#
config [string] config.libxsde.reuse_style ?= 'tiein'
reuse_style = $config.libxsde.reuse_style

assert ($reuse_style == 'mixin' || \\
        $reuse_style == 'tiein' || \\
        $reuse_style == 'none')    \\
  "invalid config.libxsde.reuse_style value '$reuse_style'"

# Set to true if you would like the XSD/e runtime and the generated code to
# perform memory management using custom allocator functions provided by your
# application instead of the standard operator new/delete.
#
# Also don't forget to use the --custom-allocator option when compiling your
# schemas. See the documentation and examples for more information on custom
# allocators.
#
config [bool] config.libxsde.custom_allocator ?= false
custom_allocator = $config.libxsde.custom_allocator

# Set to true if you would like to include the default implementation of the
# custom allocator into the XSD/e runtime library.
#
# This option is primarily useful for testing and only makes sense if
# config.libxsde.custom_allocator is set to true.
#
config [bool] config.libxsde.default_allocator ?= false
default_allocator = $config.libxsde.default_allocator

assert (!$default_allocator || $custom_allocator) \\
  "config.libxsde.default_allocator can only be true if config.libxsde.custom\
_allocator is true"

# Set to true if you want support for serialization of the C++/Hybrid object
# model to the CDR (Common Data Representation) binary format.
#
# This functionality requires the ACE library (see manifest and xsde/buildfile
# for details).
#
config [bool] config.libxsde.cdr ?= false
cdr = $config.libxsde.cdr

# Set to true if you want support for serialization of the C++/Hybrid object
# model to the XDR (eXternal Data Representation) binary format.
#
# This functionality requires the XDR API which is available out of the box on
# most POSIX systems as part of Sun RPC. On Linux this API is provided by
# libtirpc library (see manifest and xsde/buildfile for details). On other
# platforms, the XDR API may require linking to another library (which you can
# add to the config.cxx.libs configuration variable). On non-POSIX platforms
# you may need to install a third-party library which provides the XDR API.
#
config [bool] config.libxsde.xdr ?= false
xdr = $config.libxsde.xdr

# Set to true if you need to handle XML vocabularies that use XML Schema
# polymorphism (xsi:type or substitution groups).
#
# Also don't forget to use either --generate-polymorphic (generates
# polymorphism-aware code) or --runtime-polymorphic (generates non-polymorphic
# code that uses the runtime library configured with polymorphism support).
# Note that support for XML Schema polymorphism requires runtime static
# initialization support in the C++ compiler (that is, support for automatic
# calling of constructors for static objects). Furthermore, if the mixin reuse
# style is used (config.libxsde.reuse_style) then the generated code requires
# support for dynamic_cast.
#
config [bool] config.libxsde.polymorphic ?= false
polymorphic = $config.libxsde.polymorphic

# When polymorphism support is enabled (config.libxsde.polymorphic), the
# following parameters control the substitution and inheritance hashmaps
# bucket allocation.
#
# Because the number of elements in these hashmaps depends on the schemas
# being compiled and thus is fairly static, these hashmaps do not perform
# automatic table resizing. To obtain good performance the elements to buckets
# ratio should be between 0.7 and 0.9. The recommended way to ensure this
# range is to add diagnostics code to your application as shown in the
# documentation and examples. It is also a good idea to use prime numbers for
# bucket counts: 53 97 193 389 769 1543 3079 6151 12289 24593 49157 98317
# 196613 393241. Inheritance hashmaps are only used when validation is
# enabled.
#
config [uint64] config.libxsde.parser_smap_buckets ?= 389
parser_smap_buckets = $config.libxsde.parser_smap_buckets

config [uint64] config.libxsde.parser_imap_buckets ?= 769
parser_imap_buckets = $config.libxsde.parser_imap_buckets

config [uint64] config.libxsde.serializer_smap_buckets ?= 389
serializer_smap_buckets = $config.libxsde.serializer_smap_buckets

config [uint64] config.libxsde.serializer_smap_bucket_buckets ?= 389
serializer_smap_bucket_buckets = $config.libxsde.serializer_smap_bucket_bucke\
ts

config [uint64] config.libxsde.serializer_imap_buckets ?= 769
serializer_imap_buckets = $config.libxsde.serializer_imap_buckets

# Allow using the external Expat library as a dependency instead of the
# bundled version.
#
# Note that if you use a custom memory allocator
# (config.libxsde.custom_allocator) and you create the underlying XML parser
# yourself, then you will need to manually configure external Expat to use
# such a custom allocator.
#
config [bool] config.libxsde.external_expat ?= false
external_expat = $config.libxsde.external_expat

\
location: xsde/libxsde-3.4.0.tar.gz
sha256sum: d817a7ddda2dd57bae7c6bd228e34bb9dbb007fada53c9008f420d9c0242de84
:
name: libxsimd
version: 8.0.3
project: libxsimd
summary: Build2 package for xsimd - provides a unified means for using SIMD\
 features for library authors.
license: BSD-3-Clause; BSD 3-Clause "New" or "Revised" License.
description:
\
# ![xsimd](docs/source/xsimd.svg)

[![Appveyor](https://ci.appveyor.com/api/projects/status/wori7my48os31nu0?svg\
=true)](https://ci.appveyor.com/project/xtensor-stack/xsimd)
[![Azure](https://dev.azure.com/xtensor-stack/xtensor-stack/_apis/build/statu\
s/xtensor-stack.xsimd?branchName=master)](https://dev.azure.com/xtensor-stack\
/xtensor-stack/_build/latest?definitionId=3&branchName=master)
[![Documentation Status](http://readthedocs.org/projects/xsimd/badge/?version\
=latest)](https://xsimd.readthedocs.io/en/latest/?badge=latest)
[![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://g\
itter.im/QuantStack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-b\
adge&utm_content=badge)

C++ wrappers for SIMD intrinsics

## Introduction

SIMD (Single Instruction, Multiple Data) is a feature of microprocessors that\
 has been available for many years. SIMD instructions perform a single\
 operation
on a batch of values at once, and thus provide a way to significantly\
 accelerate code execution. However, these instructions differ between\
 microprocessor
vendors and compilers.

`xsimd` provides a unified means for using these features for library\
 authors. Namely, it enables manipulation of batches of numbers with the same\
 arithmetic
operators as for single values. It also provides accelerated implementation\
 of common mathematical functions operating on batches.

You can find out more about this implementation of C++ wrappers for SIMD\
 intrinsics at the [The C++ Scientist](http://johanmabille.github.io/blog/arc\
hives/).
The mathematical functions are a lightweight implementation of the algorithms\
 used in [boost.SIMD](https://github.com/NumScale/boost.simd).

`xsimd` requires a C++11 compliant compiler. The following C++ compilers are\
 supported:

Compiler                | Version
------------------------|-------------------------------
Microsoft Visual Studio | MSVC 2015 update 2 and above
g++                     | 4.9 and above
clang                   | 4.0 and above

The following SIMD instruction set extensions are supported:

Architecture | Instruction set extensions
-------------|-----------------------------------------------------
x86          | SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, FMA3, AVX2
x86          | AVX512 (gcc7 and higher)
x86 AMD      | same as above + SSE4A, FMA4, XOP
ARM          | ARMv7, ARMv8

## Installation

### Install from conda-forge

A package for xsimd is available on the mamba (or conda) package manager.

```bash
mamba install -c conda-forge xsimd
```

### Install with Spack

A package for xsimd is available on the Spack package manager.

```bash
spack install xsimd
spack load xsimd
```

### Install from sources

You can directly install it from the sources with cmake:

```bash
cmake -D CMAKE_INSTALL_PREFIX=your_install_prefix
make install
```

## Documentation

To get started with using `xsimd`, check out the full documentation

http://xsimd.readthedocs.io/

## Dependencies

`xsimd` has an optional dependency on the [xtl](https://github.com/xtensor-st\
ack/xtl) library:

| `xsimd` | `xtl` (optional) |
|---------|------------------|
|  master |     ^0.7.0       |
|  8.x    |     ^0.7.0       |
|  7.x    |     ^0.7.0       |

The dependency on `xtl` is required if you want to support vectorization for\
 `xtl::xcomplex`. In this case, you must build your project with C++14\
 support enabled.

## Usage

The version 8 of the library is a complete rewrite and there are some slight\
 differences with 7.x versions.
A migration guide will be available soon. In the meanwhile, the following\
 examples show how to use both versions
7 and 8 of the library?

### Explicit use of an instruction set extension (8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, xs::avx2> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, xs::avx2> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Explicit use of an instruction set extension (7.x and 8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, 4> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, 4> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Auto detection of the instruction set extension to be used (7.x)

The same computation operating on vectors and using the most performant\
 instruction set available:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    std::size_t size = a.size();
    constexpr std::size_t simd_size = xsimd::simd_type<double>::size;
    std::size_t vec_size = size - size % simd_size;

    for(std::size_t i = 0; i < vec_size; i += simd_size)
    {
        auto ba = xs::load_aligned(&a[i]);
        auto bb = xs::load_aligned(&b[i]);
        auto bres = (ba + bb) / 2.;
        bres.store_aligned(&res[i]);
    }
    for(std::size_t i = vec_size; i < size; ++i)
    {
        res[i] = (a[i] + b[i]) / 2.;
    }
}
```

We also implement STL algorithms to work optimally on batches. Using\
 `xsimd::transform`
the loop from the example becomes:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"
#include "xsimd/stl/algorithms.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    xsimd::transform(a.begin(), a.end(), b.begin(), res.begin(),
                     [](const auto& x, const auto& y) { (x + y) / 2.; });
}
```


## Building and Running the Tests

Building the tests requires the [GTest](https://github.com/google/googletest)\
 testing framework and [cmake](https://cmake.org).

gtest and cmake are available as a packages for most linux distributions.\
 Besides, they can also be installed with the `conda` package manager (even\
 on windows):

```bash
conda install -c conda-forge gtest cmake
```

Once `gtest` and `cmake` are installed, you can build and run the tests:

```bash
mkdir build
cd build
cmake ../ -DBUILD_TESTS=ON
make xtest
```

In the context of continuous integration with Travis CI, tests are run in a\
 `conda` environment, which can be activated with

```bash
cd test
conda env create -f ./test-environment.yml
source activate test-xsimd
cd ..
cmake . -DBUILD_TESTS=ON
make xtest
```

## Building the HTML Documentation

xsimd's documentation is built with three tools

 - [doxygen](http://www.doxygen.org)
 - [sphinx](http://www.sphinx-doc.org)
 - [breathe](https://breathe.readthedocs.io)

While doxygen must be installed separately, you can install breathe by typing

```bash
pip install breathe
```

Breathe can also be installed with `conda`

```bash
conda install -c conda-forge breathe
```

Finally, build the documentation with

```bash
make html
```

from the `docs` subdirectory.

## License

We use a shared copyright model that enables all contributors to maintain the
copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the\
 [LICENSE](LICENSE) file for details.

\
description-type: text/markdown;variant=GFM
url: https://github.com/xtensor-stack/xsimd.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libxtl ^0.7.0 ? ($config.libxsimd.use_xtlcomplex == true)
requires: c++14
tests: libxsimd-tests == 8.0.3
examples: xsimd-examples == 8.0.3
bootstrap-build:
\
project = libxsimd

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Additional configs for the test

config [bool] config.libxsimd.use_xtlcomplex ?= false
config [bool] config.libxsimd.enable_fallback ?= false

\
location: libxsimd/libxsimd-8.0.3.tar.gz
sha256sum: b268cea21abb4914392d6621d50b219557717125f87faf7054f5eee1384afca1
:
name: libxsimd
version: 8.0.4
project: libxsimd
summary: Build2 package for xsimd - provides a unified means for using SIMD\
 features for library authors.
license: BSD-3-Clause; BSD 3-Clause "New" or "Revised" License.
description:
\
# ![xsimd](docs/source/xsimd.svg)

[![Appveyor](https://ci.appveyor.com/api/projects/status/wori7my48os31nu0?svg\
=true)](https://ci.appveyor.com/project/xtensor-stack/xsimd)
[![Azure](https://dev.azure.com/xtensor-stack/xtensor-stack/_apis/build/statu\
s/xtensor-stack.xsimd?branchName=master)](https://dev.azure.com/xtensor-stack\
/xtensor-stack/_build/latest?definitionId=3&branchName=master)
[![Documentation Status](http://readthedocs.org/projects/xsimd/badge/?version\
=latest)](https://xsimd.readthedocs.io/en/latest/?badge=latest)
[![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://g\
itter.im/QuantStack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-b\
adge&utm_content=badge)

C++ wrappers for SIMD intrinsics

## Introduction

SIMD (Single Instruction, Multiple Data) is a feature of microprocessors that\
 has been available for many years. SIMD instructions perform a single\
 operation
on a batch of values at once, and thus provide a way to significantly\
 accelerate code execution. However, these instructions differ between\
 microprocessor
vendors and compilers.

`xsimd` provides a unified means for using these features for library\
 authors. Namely, it enables manipulation of batches of numbers with the same\
 arithmetic
operators as for single values. It also provides accelerated implementation\
 of common mathematical functions operating on batches.

You can find out more about this implementation of C++ wrappers for SIMD\
 intrinsics at the [The C++ Scientist](http://johanmabille.github.io/blog/arc\
hives/).
The mathematical functions are a lightweight implementation of the algorithms\
 used in [boost.SIMD](https://github.com/NumScale/boost.simd).

`xsimd` requires a C++11 compliant compiler. The following C++ compilers are\
 supported:

Compiler                | Version
------------------------|-------------------------------
Microsoft Visual Studio | MSVC 2015 update 2 and above
g++                     | 4.9 and above
clang                   | 4.0 and above

The following SIMD instruction set extensions are supported:

Architecture | Instruction set extensions
-------------|-----------------------------------------------------
x86          | SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, FMA3, AVX2
x86          | AVX512 (gcc7 and higher)
x86 AMD      | same as above + SSE4A, FMA4, XOP
ARM          | ARMv7, ARMv8

## Installation

### Install from conda-forge

A package for xsimd is available on the mamba (or conda) package manager.

```bash
mamba install -c conda-forge xsimd
```

### Install with Spack

A package for xsimd is available on the Spack package manager.

```bash
spack install xsimd
spack load xsimd
```

### Install from sources

You can directly install it from the sources with cmake:

```bash
cmake -D CMAKE_INSTALL_PREFIX=your_install_prefix
make install
```

## Documentation

To get started with using `xsimd`, check out the full documentation

http://xsimd.readthedocs.io/

## Dependencies

`xsimd` has an optional dependency on the [xtl](https://github.com/xtensor-st\
ack/xtl) library:

| `xsimd` | `xtl` (optional) |
|---------|------------------|
|  master |     ^0.7.0       |
|  8.x    |     ^0.7.0       |
|  7.x    |     ^0.7.0       |

The dependency on `xtl` is required if you want to support vectorization for\
 `xtl::xcomplex`. In this case, you must build your project with C++14\
 support enabled.

## Usage

The version 8 of the library is a complete rewrite and there are some slight\
 differences with 7.x versions.
A migration guide will be available soon. In the meanwhile, the following\
 examples show how to use both versions
7 and 8 of the library?

### Explicit use of an instruction set extension (8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, xs::avx2> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, xs::avx2> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Explicit use of an instruction set extension (7.x and 8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, 4> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, 4> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Auto detection of the instruction set extension to be used (7.x)

The same computation operating on vectors and using the most performant\
 instruction set available:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    std::size_t size = a.size();
    constexpr std::size_t simd_size = xsimd::simd_type<double>::size;
    std::size_t vec_size = size - size % simd_size;

    for(std::size_t i = 0; i < vec_size; i += simd_size)
    {
        auto ba = xs::load_aligned(&a[i]);
        auto bb = xs::load_aligned(&b[i]);
        auto bres = (ba + bb) / 2.;
        bres.store_aligned(&res[i]);
    }
    for(std::size_t i = vec_size; i < size; ++i)
    {
        res[i] = (a[i] + b[i]) / 2.;
    }
}
```

We also implement STL algorithms to work optimally on batches. Using\
 `xsimd::transform`
the loop from the example becomes:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"
#include "xsimd/stl/algorithms.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    xsimd::transform(a.begin(), a.end(), b.begin(), res.begin(),
                     [](const auto& x, const auto& y) { (x + y) / 2.; });
}
```


## Building and Running the Tests

Building the tests requires the [GTest](https://github.com/google/googletest)\
 testing framework and [cmake](https://cmake.org).

gtest and cmake are available as a packages for most linux distributions.\
 Besides, they can also be installed with the `conda` package manager (even\
 on windows):

```bash
conda install -c conda-forge gtest cmake
```

Once `gtest` and `cmake` are installed, you can build and run the tests:

```bash
mkdir build
cd build
cmake ../ -DBUILD_TESTS=ON
make xtest
```

In the context of continuous integration with Travis CI, tests are run in a\
 `conda` environment, which can be activated with

```bash
cd test
conda env create -f ./test-environment.yml
source activate test-xsimd
cd ..
cmake . -DBUILD_TESTS=ON
make xtest
```

## Building the HTML Documentation

xsimd's documentation is built with three tools

 - [doxygen](http://www.doxygen.org)
 - [sphinx](http://www.sphinx-doc.org)
 - [breathe](https://breathe.readthedocs.io)

While doxygen must be installed separately, you can install breathe by typing

```bash
pip install breathe
```

Breathe can also be installed with `conda`

```bash
conda install -c conda-forge breathe
```

Finally, build the documentation with

```bash
make html
```

from the `docs` subdirectory.

## License

We use a shared copyright model that enables all contributors to maintain the
copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the\
 [LICENSE](LICENSE) file for details.

\
description-type: text/markdown;variant=GFM
url: https://github.com/xtensor-stack/xsimd.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libxtl ^0.7.0 ? ($config.libxsimd.use_xtlcomplex == true)
requires: c++14
tests: libxsimd-tests == 8.0.4
examples: xsimd-examples == 8.0.4
bootstrap-build:
\
project = libxsimd

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Additional configs for the test

config [bool] config.libxsimd.use_xtlcomplex ?= false
config [bool] config.libxsimd.enable_fallback ?= false

\
location: libxsimd/libxsimd-8.0.4.tar.gz
sha256sum: f4d406d91fde44b89ed9d8bc7a5e7353c8264ce8e409aa77553a5853ea7946a3
:
name: libxsimd-tests
version: 8.0.3
project: libxsimd
summary: Build2 package to test libxsimd
license: BSD-3-Clause; BSD 3-Clause "New" or "Revised" License.
url: https://example.org/libxsimd
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: gtest
requires: c++14
bootstrap-build:
\
project = libxsimd-tests

using version
using config
using install
using dist
using test

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true


# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: libxsimd/libxsimd-tests-8.0.3.tar.gz
sha256sum: 63115251880e1351871a15d0d3c7544f02ab1fe02df6f4aa84d03972b20ed020
:
name: libxsimd-tests
version: 8.0.4
project: libxsimd
summary: Build2 package to test libxsimd
license: BSD-3-Clause; BSD 3-Clause "New" or "Revised" License.
url: https://example.org/libxsimd
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: gtest
requires: c++14
bootstrap-build:
\
project = libxsimd-tests

using version
using config
using install
using dist
using test

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true


# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: libxsimd/libxsimd-tests-8.0.4.tar.gz
sha256sum: 2965587f4d3a30a332f3c4d75bc5cd9ae5425e405f448ee8756f413024f35e4d
:
name: libxtl
version: 0.7.4
project: libxtl
summary: Build2 package for xtl - basic tools (containers, algorithms) used\
 by other quantstack packages
license: BSD-3-Clause
description:
\
# ![xtl](docs/source/xtl.svg)

[![Appveyor](https://ci.appveyor.com/api/projects/status/wikc50xlb5rbrjy7?svg\
=true)](https://ci.appveyor.com/project/xtensor-stack/xtl)
[![Azure](https://dev.azure.com/xtensor-stack/xtensor-stack/_apis/build/statu\
s/xtensor-stack.xtl?branchName=master)](https://dev.azure.com/xtensor-stack/x\
tensor-stack/_build/latest?definitionId=2&branchName=master)
[![Documentation Status](http://readthedocs.org/projects/xtl/badge/?version=l\
atest)](https://xtl.readthedocs.io/en/latest/?badge=latest)
[![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://g\
itter.im/QuantStack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-b\
adge&utm_content=badge)

Basic tools (containers, algorithms) used by other quantstack packages

## Installation

### Package managers

We provide a package for the mamba (or conda) package manager:

```bash
mamba install -c conda-forge xtl
```

### Install from sources

`xtl` is a header-only library.

You can directly install it from the sources:

```bash
cmake -D CMAKE_INSTALL_PREFIX=your_install_prefix
make install
```

## Documentation

To get started with using `xtl`, check out the full documentation

http://xtl.readthedocs.io/


## Building the HTML documentation

xtl's documentation is built with three tools

 - [doxygen](http://www.doxygen.org)
 - [sphinx](http://www.sphinx-doc.org)
 - [breathe](https://breathe.readthedocs.io)

While doxygen must be installed separately, you can install breathe by typing

```bash
pip install breathe
```

Breathe can also be installed with `conda`

```bash
conda install -c conda-forge breathe
```

Finally, build the documentation with

```bash
make html
```

from the `docs` subdirectory.

## License

We use a shared copyright model that enables all contributors to maintain the
copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the\
 [LICENSE](LICENSE) file for details.

\
description-type: text/markdown;variant=GFM
url: https://github.com/xtensor-stack/xtl
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++14
tests: libxtl-tests == 0.7.4
bootstrap-build:
\
project = libxtl

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: libxtl/libxtl-0.7.4.tar.gz
sha256sum: adec849585b4d66e83b37aeebf3b6037d694aa2c04ba4c675864841eab7174ae
:
name: libxtl-tests
version: 0.7.4
project: libxtl
summary: Build2 package for xtl-tests
license: BSD-3-Clause
description:
\
# ![xtl](docs/source/xtl.svg)

[![Appveyor](https://ci.appveyor.com/api/projects/status/wikc50xlb5rbrjy7?svg\
=true)](https://ci.appveyor.com/project/xtensor-stack/xtl)
[![Azure](https://dev.azure.com/xtensor-stack/xtensor-stack/_apis/build/statu\
s/xtensor-stack.xtl?branchName=master)](https://dev.azure.com/xtensor-stack/x\
tensor-stack/_build/latest?definitionId=2&branchName=master)
[![Documentation Status](http://readthedocs.org/projects/xtl/badge/?version=l\
atest)](https://xtl.readthedocs.io/en/latest/?badge=latest)
[![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://g\
itter.im/QuantStack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-b\
adge&utm_content=badge)

Basic tools (containers, algorithms) used by other quantstack packages

## Installation

### Package managers

We provide a package for the mamba (or conda) package manager:

```bash
mamba install -c conda-forge xtl
```

### Install from sources

`xtl` is a header-only library.

You can directly install it from the sources:

```bash
cmake -D CMAKE_INSTALL_PREFIX=your_install_prefix
make install
```

## Documentation

To get started with using `xtl`, check out the full documentation

http://xtl.readthedocs.io/


## Building the HTML documentation

xtl's documentation is built with three tools

 - [doxygen](http://www.doxygen.org)
 - [sphinx](http://www.sphinx-doc.org)
 - [breathe](https://breathe.readthedocs.io)

While doxygen must be installed separately, you can install breathe by typing

```bash
pip install breathe
```

Breathe can also be installed with `conda`

```bash
conda install -c conda-forge breathe
```

Finally, build the documentation with

```bash
make html
```

from the `docs` subdirectory.

## License

We use a shared copyright model that enables all contributors to maintain the
copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the\
 [LICENSE](LICENSE) file for details.

\
description-type: text/markdown;variant=GFM
url: https://github.com/xtensor-stack/xtl
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: nlohmann-json
depends: doctest
requires: c++14
bootstrap-build:
\
project = libxtl-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


# Additional configs for the test

config [bool] config.libxtl_tests.disable_exceptions ?= false

\
location: libxtl/libxtl-tests-0.7.4.tar.gz
sha256sum: 4f134fe42f448f0aaf2ea48415afaff185d294fe66fa1d30944205f7cc455c1c
:
name: libz
version: 1.2.1100+2
upstream-version: 1.2.11
project: zlib
summary: General-purpose lossless data compression C library
license: Zlib; Permissive free software license.
topics: C, data compression
description:
\
zlib is a general-purpose lossless data compression C library. The data format
used by the library is described by RFCs 1950, 1951, and 1952 (zlib, deflate,
and gzip formats, respectively). For more information see:

https://www.zlib.net/

This package contains the original libz library source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
zlib@gzip.org or to Gilles Vollant at info@winimage.com (Windows DLL-related
questions). Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of zlib for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/zlib/

\
description-type: text/plain
url: https://www.zlib.net/
doc-url: https://www.zlib.net/manual.html
src-url: https://git.build2.org/cgit/packaging/zlib/zlib/tree/libz/
package-url: https://git.build2.org/cgit/packaging/zlib/
email: zlib@gzip.org; Send Windows DLL-related questions to Gilles Vollant at\
 info@winimage.com.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : zlib License; see accompanying LICENSE file

project = libz

using version
using config
using dist
using test
using install

# zlib version has the <major>.<minor>.<revision>[.<subrevision>] form
# (ZLIB_VER* macros in zlib.h). The version increment rules are not documented
# and are hard to deduce. A subrevision release may contain a lot of changes
# (see 1.2.7.1) and a revision release may contain very few of them (see
# 1.2.8).
#
# Instead of dragging the fourth component around (and not being able to use a
# lot of tooling support) we are going to map the upstream version to the
# standard version as <major>.<minor>.<revision * 100 + subrevision>. Note
# that subrevision does not exceed 0xF (see ZLIB_VERNUM macro in zlib.h). Note
# that while there are no guarantees that this version follows the semver
# semantics, it's probably reasonable to assume this is the case.
#
# There is no documentation that describes libz ABI versioning and
# compatibility rules, so everything that follows is deduced from Makefile.in.
#
# The library naming scheme on Linux is
# libz.so.<major>.<minor>.<revision>[.<subrevision>] (SHAREDLIBV in
# Makefile.in). So presumably major is incremented on backwards-incompatible
# ABI changes.
#
if ($version.major == 1 && $version.minor == 2 && $version.patch == 1100)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.2.11" # ...11.1 for subrevision 1, etc.
}
else
  fail "increment the ABI version?"

\
root-build:
\
# file      : build/root.build
# license   : zlib License; see accompanying LICENSE file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: zlib/libz-1.2.1100+2.tar.gz
sha256sum: 918802f4e19e4d13fbcd6dc8e398211345c91a1075e3037dc5ee6c1ca116aeed
:
name: libz
version: 1.2.1200+5
upstream-version: 1.2.12
project: zlib
summary: General-purpose lossless data compression C library
license: Zlib; Permissive free software license.
topics: C, data compression
description:
\
zlib is a general-purpose lossless data compression C library. The data format
used by the library is described by RFCs 1950, 1951, and 1952 (zlib, deflate,
and gzip formats, respectively). For more information see:

https://www.zlib.net/

This package contains the original libz library source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
zlib@gzip.org or to Gilles Vollant at info@winimage.com (Windows DLL-related
questions). Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of zlib for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/zlib/

\
description-type: text/plain
url: https://www.zlib.net/
doc-url: https://www.zlib.net/manual.html
src-url: https://git.build2.org/cgit/packaging/zlib/zlib/tree/libz/
package-url: https://git.build2.org/cgit/packaging/zlib/
email: zlib@gzip.org; Send Windows DLL-related questions to Gilles Vollant at\
 info@winimage.com.
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : zlib License; see accompanying LICENSE file

project = libz

using version
using config
using dist
using test
using install

# zlib version has the <major>.<minor>.<revision>[.<subrevision>] form
# (ZLIB_VER* macros in zlib.h). The version increment rules are not documented
# and are hard to deduce. A subrevision release may contain a lot of changes
# (see 1.2.7.1) and a revision release may contain very few of them (see
# 1.2.8).
#
# Instead of dragging the fourth component around (and not being able to use a
# lot of tooling support) we are going to map the upstream version to the
# standard version as <major>.<minor>.<revision * 100 + subrevision>. Note
# that subrevision does not exceed 0xF (see ZLIB_VERNUM macro in zlib.h). Note
# that while there are no guarantees that this version follows the semver
# semantics, it's probably reasonable to assume this is the case.
#
# There is no documentation that describes libz ABI versioning and
# compatibility rules, so everything that follows is deduced from Makefile.in.
#
# The library naming scheme on Linux is
# libz.so.<major>.<minor>.<revision>[.<subrevision>] (SHAREDLIBV in
# Makefile.in). So presumably major is incremented on backwards-incompatible
# ABI changes.
#
if ($version.major == 1 && $version.minor == 2 && $version.patch == 1200)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.2.12" # ...12.1 for subrevision 1, etc.
}
else
  fail "increment the ABI version?"

\
root-build:
\
# file      : build/root.build
# license   : zlib License; see accompanying LICENSE file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: zlib/libz-1.2.1200+5.tar.gz
sha256sum: 196792b4ea4331ff0716421c85e6fa5520a703c6f0d81cc6641a98944f30fba8
:
name: libz
version: 1.3.100
upstream-version: 1.3.1
project: zlib
summary: General-purpose lossless data compression C library
license: Zlib; Permissive free software license.
topics: C, data compression
description:
\
zlib is a general-purpose lossless data compression C library. The data format
used by the library is described by RFCs 1950, 1951, and 1952 (zlib, deflate,
and gzip formats, respectively). For more information see:

https://www.zlib.net/

This package contains the original libz library source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the library itself to
zlib@gzip.org. Send build system and packaging-related feedback to the
packaging@build2.org mailing list (see https://lists.build2.org for posting
guidelines, etc).

The packaging of zlib for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/zlib/

\
description-type: text/plain
url: https://www.zlib.net/
doc-url: https://www.zlib.net/manual.html
src-url: https://git.build2.org/cgit/packaging/zlib/zlib/tree/libz/
package-url: https://git.build2.org/cgit/packaging/zlib/
email: zlib@gzip.org
package-email: packaging@build2.org; Mailing list.
build-warning-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : zlib License; see accompanying LICENSE file

project = libz

using version
using config
using dist
using test
using install

# zlib version has the <major>.<minor>.<revision>[.<subrevision>] form
# (ZLIB_VER* macros in zlib.h). The version increment rules are not documented
# and are hard to deduce. A subrevision release may contain a lot of changes
# (see 1.2.7.1) and a revision release may contain very few of them (see
# 1.2.8).
#
# Instead of dragging the fourth component around (and not being able to use a
# lot of tooling support) we are going to map the upstream version to the
# standard version as <major>.<minor>.<revision * 100 + subrevision>. Note
# that subrevision does not exceed 0xF (see ZLIB_VERNUM macro in zlib.h). Note
# that while there are no guarantees that this version follows the semver
# semantics, it's probably reasonable to assume this is the case.
#
# There is no documentation that describes libz ABI versioning and
# compatibility rules, so everything that follows is deduced from Makefile.in.
#
# The library naming scheme on Linux is
# libz.so.<major>.<minor>.<revision>[.<subrevision>] (SHAREDLIBV in
# Makefile.in). So presumably major is incremented on backwards-incompatible
# ABI changes.
#
if ($version.major == 1 && $version.minor == 3 && $version.patch == 100)
{
  abi_version_major = 1
  abi_version = "$abi_version_major.3.1" # $abi...3.1.1 for subrevision 1,\
 etc.
}
else
  fail "increment the ABI version?"

\
root-build:
\
# file      : build/root.build
# license   : zlib License; see accompanying LICENSE file

using in

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: zlib/libz-1.3.100.tar.gz
sha256sum: 25f3821971c55f07c6ef98dc41e5b7487337b57cb9dfee6d963e556bfea7e0f3
:
name: libzmq
version: 4.3.4+3
language: c
language: c++=impl
project: ZeroMQ
summary: ZeroMQ core engine in C++, implements ZMTP/3.1
license: LGPL-3.0-or-later; GNU Lesser General Public License v3.0 or later
topics: C++
description:
\
# ZeroMQ

[![Build Status](https://travis-ci.org/zeromq/libzmq.png?branch=master)](http\
s://travis-ci.org/zeromq/libzmq)
[![Build status](https://ci.appveyor.com/api/projects/status/e2ks424yrs1un3wt\
?svg=true)](https://ci.appveyor.com/project/zeromq/libzmq)
[![Coverage Status](https://coveralls.io/repos/github/zeromq/libzmq/badge.svg\
?branch=master)](https://coveralls.io/github/zeromq/libzmq?branch=master)

## Welcome

The ZeroMQ lightweight messaging kernel is a library which extends the
standard socket interfaces with features traditionally provided by
specialised messaging middleware products. ZeroMQ sockets provide an
abstraction of asynchronous message queues, multiple messaging patterns,
message filtering (subscriptions), seamless access to multiple transport
protocols and more.

## Supported platforms <a name="#platforms"/>

Libzmq is mainly written in C++98 with some optional C++11-fragments. For
configuration either autotools or CMake is employed. See below for some lists
of platforms, where libzmq has been successfully compiled on.

### Supported platforms with primary CI

| OS and version                         | Architecture            | Compiler\
 and version          | Build system | Remarks                               \
                                                                             \
                   |
|----------------------------------------|-------------------------|---------\
----------------------|--------------|---------------------------------------\
-----------------------------------------------------------------------------\
-------------------|
| Android NDK r20                        | arm, arm64, x86, x86_64 | llvm\
 (see NDK)                | autotools    | DRAFT                             \
                                                                             \
                             |
| Ubuntu 14.04.5 LTS (trusty)            | amd64                   | clang\
 5.0.0                   | autotools    | STABLE, extras: GSSAPI, PGM, NORM,\
 C++98 mode only                                                             \
                       |
| Ubuntu 14.04.5 LTS (trusty)            | amd64                   | gcc\
 4.8.4                     | autotools    | STABLE, DRAFT, extras: GSSAPI,\
 PGM, NORM, TIPC, IPV6, also POLLER=poll, POLLER=select, also valgrind and\
 address sanitizer executions |
| Ubuntu 14.04.5 LTS (trusty)            | amd64                   | gcc\
 4.8.4                     | CMake 3.12.2 | STABLE                           \
                                                                             \
                        |
| Windows Server 2012 R2                 | x86                     | Visual\
 Studio 2008            | CMake 3.12.2 | DRAFT                               \
                                                                             \
                     |
| Windows Server 2012 R2                 | x86                     | Visual\
 Studio 2010 SP1        | CMake 3.12.2 | DRAFT                               \
                                                                             \
                     |
| Windows Server 2012 R2                 | x86                     | Visual\
 Studio 2012 Update 5   | CMake 3.12.2 | DRAFT                               \
                                                                             \
                     |
| Windows Server 2012 R2                 | x86, amd64              | Visual\
 Studio 2013 Update 5   | CMake 3.12.2 | DRAFT, STABLE (x86 Release only),\
 also POLLER=epoll                                                           \
                        |
| Windows Server 2012 R2                 | x86                     | Visual\
 Studio 2015 Update 3   | CMake 3.12.2 | DRAFT                               \
                                                                             \
                     |
| Windows Server 2016                    | x86                     | Visual\
 Studio 2017 15.9.6     | CMake 3.13.3 | DRAFT                               \
                                                                             \
                     |
| cygwin 3.0.0 on Windows Server 2012 R2 | amd64                   | gcc\
 7.4.0                     | CMake 3.6.2  | DRAFT                            \
                                                                             \
                        |
| MSYS2 ? on Windows Server 2012 R2      | amd64                   | gcc\
 6.4.0                     | CMake ?      | DRAFT                            \
                                                                             \
                        |
| Mac OS X 10.13                         | amd64                   | Xcode\
 9.4.1, Apple LLVM 9.1.0 | autotools    | STABLE, DRAFT                      \
                                                                             \
                      |
| Mac OS X 10.13                         | amd64                   | Xcode\
 9.4.1, Apple LLVM 9.1.0 | CMake 3.11.4 | DRAFT                              \
                                                                             \
                      |

Note: the platforms are regularly updated by the service providers, so this\
 information might get out of date
without any changes on the side of libzmq. For Appveyor, refer to\
 https://www.appveyor.com/updates/ regarding
platform updates. For travis-ci, refer to https://changelog.travis-ci.com/\
 regarding platform updates.

### Supported platforms with secondary CI

| OS and version               | Architecture               | Compiler and\
 version | Build system | Remarks |
|------------------------------|----------------------------|----------------\
------|--------------|---------|
| CentOS 6                     | x86, amd64                 | ?              \
      | autotools    |         |
| CentOS 7                     | amd64                      | ?              \
      | autotools    |         |
| Debian 8.0                   | x86, amd64                 | ?              \
      | autotools    |         |
| Debian 9.0                   | ARM64, x86, amd64          | ?              \
      | autotools    |         |
| Fedora 28                    | ARM64, ARM32, amd64        | ?              \
      | autotools    |         |
| Fedora 29                    | ARM64, ARM32, amd64        | ?              \
      | autotools    |         |
| Fedora Rawhide               | ARM64, ARM32, amd64        | ?              \
      | autotools    |         |
| RedHat Enterprise Linux 7    | amd64, ppc64               | ?              \
      | autotools    |         |
| SuSE Linux Enterprise 12 SP4 | ARM64, amd64, ppc64, s390x | ?              \
      | autotools    |         |
| SuSE Linux Enterprise 15     | amd64                      | ?              \
      | autotools    |         |
| xUbuntu 12.04                | x86, amd64                 | ?              \
      | autotools    |         |
| xUbuntu 14.04                | x86, amd64                 | ?              \
      | autotools    |         |
| xUbuntu 16.04                | x86, amd64                 | ?              \
      | autotools    |         |
| xUbuntu 18.04                | x86, amd64                 | ?              \
      | autotools    |         |
| xUbuntu 18.10                | x86, amd64                 | ?              \
      | autotools    |         |

### Supported platforms with known active users

At the time of writing, no explicit reports have been available. Please\
 report your experiences by opening a PR
adding an entry or moving an entry from the section below.

Under "last report", please name either the SHA1 in case of an unreleased\
 version, or the version number in
case of a released version.

| OS and version | Architecture      | Compiler and version | Build system |\
 Last report             | Remarks |
|----------------|-------------------|----------------------|--------------|-\
------------------------|---------|
| Solaris 10     | x86, amd64, sparc | GCC 8.1.0            | CMake        |\
 2019/03/18              |         |
| DragonFly BSD  | amd64             | gcc 8.3              | autotools    |\
 2018/08/07 git-72854e63 |         |
| IBM i          | ppc64             | gcc 6.3              | autotools    |\
 2019/10/02 git-25320a3  |         |
| QNX 7.0        | x86_64            | gcc 5.4.0            | CMake        |\
 4.3.2                   |         |


### Supported platforms without known active users

Note: this list is incomplete and inaccurate and still needs some work.

| OS and version         | Architecture | Compiler and version     | Build\
 system     | Remarks |
|------------------------|--------------|--------------------------|---------\
---------|---------|
| Any Linux distribution | x86, amd64   | gcc ?+, clang ?+, icc ?+ |\
 autotools, CMake |         |
| SunOS, Solaris         | x86, amd64   | SunPro                   |\
 autotools, CMake |         |
| GNU/kFreeBSD           | ?            | ?                        |\
 autotools, CMake |         |
| FreeBSD                | ?            | ?                        |\
 autotools, CMake |         |
| NetBSD                 | ?            | ?                        |\
 autotools, CMake |         |
| OpenBSD                | ?            | ?                        |\
 autotools, CMake |         |
| DragonFly BSD          | amd64        | gcc 8.3                  |\
 autotools, CMake |         |
| HP-UX                  | ?            | ?                        |\
 autotools, CMake |         |
| GNU/Hurd               | ?            | ?                        |\
 autotools        |         |
| VxWorks 6.8            | ?            | ?                        | ?       \
         |         |
| Windows CE             | ?            | ?                        | ?       \
         |         |
| Windows UWP            | ?            | ?                        | ?       \
         |         |
| OpenVMS                | ?            | ?                        | ?       \
         |         |

### Unsupported platforms

| OS and version | Architecture | Compiler and version | Remarks             \
                                                    |
|----------------|--------------|----------------------|---------------------\
----------------------------------------------------|
| QNX 6.3        | ?            | gcc 3.3.5            | see #3371, support\
 was added by a user, but not contributed to upstream |
| Windows 10     | ARM, ARM64   | Visual Studio 2017   | see #3366, probably\
 only minor issues                                   |

For more details, see [here](SupportedPlatforms.md).

For some platforms (Linux, Mac OS X), [prebuilt binary packages are supplied\
 by the ZeroMQ organization](#installation).
For other platforms, you need to [build your own binaries](#build).

## Installation of binary packages <a name="installation"/>

### Linux

For Linux users, pre-built binary packages are available for most\
 distributions.
Note that DRAFT APIs can change at any time without warning, pick a STABLE\
 build to
avoid having them enabled.

#### Latest releases

##### DEB

[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yello\
w.svg)](http://software.opensuse.org/download.html?project=network%3Amessagin\
g%3Azeromq%3Arelease-stable&package=libzmq3-dev)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.\
svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%\
3Azeromq%3Arelease-draft&package=libzmq3-dev)

##### RPM

[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yello\
w.svg)](http://software.opensuse.org/download.html?project=network%3Amessagin\
g%3Azeromq%3Arelease-stable&package=zeromq-devel)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.\
svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%\
3Azeromq%3Arelease-draft&package=zeromq-devel)

#### Bleeding edge packages

##### DEB

[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yello\
w.svg)](http://software.opensuse.org/download.html?project=network%3Amessagin\
g%3Azeromq%3Agit-stable&package=libzmq3-dev)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.\
svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%\
3Azeromq%3Agit-draft&package=libzmq3-dev)

##### RPM

[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yello\
w.svg)](http://software.opensuse.org/download.html?project=network%3Amessagin\
g%3Azeromq%3Agit-stable&package=zeromq-devel)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.\
svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%\
3Azeromq%3Agit-draft&package=zeromq-devel)

#### Example: Debian 9 latest release, no DRAFT apis

    echo "deb http://download.opensuse.org/repositories/network:/messaging:/z\
eromq:/release-stable/Debian_9.0/ ./" >> /etc/apt/sources.list
    wget https://download.opensuse.org/repositories/network:/messaging:/zerom\
q:/release-stable/Debian_9.0/Release.key -O- | sudo apt-key add
    apt-get install libzmq3-dev

### OSX

For OSX users, packages are available via brew.

    brew install zeromq

## Build from sources <a name="build"/>

To build from sources, see the INSTALL file included with the distribution.

### Android

To build from source, see [README](./builds/android/README.md) file in the
android build directory.

## Resources

Extensive documentation is provided with the distribution. Refer to
doc/zmq.html, or "man zmq" after you have installed libzmq on your system.

Website: http://www.zeromq.org/

Development mailing list: zeromq-dev@lists.zeromq.org
Announcements mailing list: zeromq-announce@lists.zeromq.org

Git repository: http://github.com/zeromq/libzmq

ZeroMQ developers can also be found on the IRC channel #zeromq, on the
Freenode network (irc.freenode.net).

## License

The project license is specified in COPYING and COPYING.LESSER.

libzmq is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License (LGPL) as published
by the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

As a special exception, the Contributors give you permission to link
this library with independent modules to produce an executable,
regardless of the license terms of these independent modules, and to
copy and distribute the resulting executable under terms of your choice,
provided that you also meet, for each linked independent module, the
terms and conditions of the license of that module. An independent
module is a module which is not derived from or based on this library.
If you modify this library, you must extend this exception to your
version of the library.

libzmq is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.

## Contributing

This project uses [C4(Collective Code Construction Contract)](https://rfc.zer\
omq.org/spec:42/C4/) process for contributions.

\
description-type: text/markdown;variant=GFM
url: https://zeromq.org/
doc-url: http://api.zeromq.org/
src-url: https://github.com/zeromq/libzmq
package-url: https://github.com/build2-packaging/ZeroMQ-libzmq
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = libzmq

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
cxx{*}: extension = cpp

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
test.target = $cxx.target

source build/config/init_config_options.build

\
config/init_config_options-build:
\
is_windows = ($cc.target.class == 'windows')
is_mingw = ($cc.target.system == 'mingw32')
is_linux = ($cc.target.class == 'linux')
is_macos = ($cc.target.class == 'macos')

config [bool] config.libzmq.enable_intrinsics ?= false
config [bool] config.libzmq.enable_ws ?= true
config [bool] config.libzmq.enable_radix_tree ?= false
config [bool] config.libzmq.enable_gnutls ?= false
config [bool] config.libzmq.enable_ipc ?= (!$is_windows)
config [bool] config.libzmq.enable_tipc ?= $is_linux
config [bool] config.libzmq.enable_militant_assert ?= false
config [bool] config.libzmq.enable_curve ?= true
config [bool] config.libzmq.enable_drafts ?= false

# determine the mode based on the target platform
default_poll_mode =
switch $cc.target.class
{
    case 'windows'
    {
        default_poll_mode = 'epoll'
    }
    case 'macos'
    {
        default_poll_mode = 'kqueue'
    }
    case 'linux'
    {
        default_poll_mode = 'select'
    }
    default
    {
        default_poll_mode = 'select'
    }
}

# mode for polling, can be:
# kqueue, epoll, devpoll, pollset, poll, select
config [string] config.libzmq.poll_mode ?= $default_poll_mode

# determine the mode based on the target platform
default_pthread_setname_mode =
switch $cc.target.class
{
    case 'macos'
    {
        default_pthread_setname_mode = 'setname_1'
    }
    case 'linux'
    {
        default_pthread_setname_mode = 'setname_2'
    }
    case 'windows'
    {
        default_pthread_setname_mode = 'none'
    }
    default
    {
        default_pthread_setname_mode = 'setname_1'
    }
}

# mode for calling pthread_setname variants, values can be:
# none, setname_1, setname_2, setname_3, set_name
config [string] config.libzmq.pthread_setname_mode ?= $default_pthread_setnam\
e_mode

# forces to use mutexes instead of atomic variables (in case no atomics are\
 available)
config [bool] config.libzmq.force_mutexes ?= false

# typically unix specific definitions
config [bool] config.libzmq.use_fork ?= (!$is_windows)
config [bool] config.libzmq.use_clock_gettime ?= (!$is_windows)
config [bool] config.libzmq.use_gethrtime ?= ((!$is_windows) && (!$is_linux))
config [bool] config.libzmq.use_mkdtemp ?= (!$is_windows)
config [bool] config.libzmq.use_uio ?= (!$is_windows)

config [bool] config.libzmq.use_eventfd ?= ((!$is_windows) && (!$is_macos))
config [bool] config.libzmq.use_eventfd_cloexec ?= (!$is_windows &&\
 (!$is_macos))
config [bool] config.libzmq.use_ifaddrs ?= (!$is_windows)
config [bool] config.libzmq.use_so_bindtodevice ?= ((!$is_windows) &&\
 (!$is_macos))

config [bool] config.libzmq.use_so_peercred ?= ((!$is_windows) &&\
 (!$is_macos))
config [bool] config.libzmq.use_local_peercred ?= ((!$is_windows) &&\
 (!$is_linux) && (!$is_macos))
config [bool] config.libzmq.use_o_cloexec ?= (!$is_windows)

config [bool] config.libzmq.use_sock_cloexec ?= ((!$is_windows) &&\
 (!$is_macos))
config [bool] config.libzmq.use_so_keepalive ?= (!$is_windows)
config [bool] config.libzmq.use_so_priority ?= ((!$is_windows) &&\
 (!$is_macos))
config [bool] config.libzmq.use_tcp_keepcnt ?= (!$is_windows)
config [bool] config.libzmq.use_tcp_keepidle ?= ((!$is_windows) &&\
 (!$is_macos))
config [bool] config.libzmq.use_tcp_keepintvl ?= (!$is_windows)
config [bool] config.libzmq.use_tcp_keepalive ?= (!$is_windows)

config [bool] config.libzmq.use_pthread_set_affinity ?= (!$is_windows)
config [bool] config.libzmq.use_accept4 ?= ((!$is_windows) && (!$is_macos))
config [bool] config.libzmq.use_strnlen ?= ((!$is_windows) || ($is_mingw))
config [bool] config.libzmq.use_strlcpy ?= ((!$is_windows) && (!$is_linux))

# TODO check if we are on Windows 10 at least
config [bool] config.libzmq.use_windows_uwp ?= false

config [uint64] config.libzmq.cacheline_size ?= 64

\
location: ZeroMQ/libzmq-4.3.4+3.tar.gz
sha256sum: 0ed3cc9209d396a9d1574f07225b97fd07f4ef3ab0e49344358559352ef9fcd1
:
name: libzstd
version: 1.5.5+1
language: c
project: zstd
summary: Zstandard lossless compression algorithm C library
license: BSD-3-Clause OR GPL-2.0-only
description:
\
<p align="center"><img src="https://raw.githubusercontent.com/facebook/zstd/d\
ev/doc/images/zstd_logo86.png" alt="Zstandard"></p>

__Zstandard__, or `zstd` as short version, is a fast lossless compression\
 algorithm,
targeting real-time compression scenarios at zlib-level and better\
 compression ratios.
It's backed by a very fast entropy stage, provided by [Huff0 and FSE\
 library](https://github.com/Cyan4973/FiniteStateEntropy).

Zstandard's format is stable and documented in [RFC8878](https://datatracker.\
ietf.org/doc/html/rfc8878). Multiple independent implementations are already\
 available.
This repository represents the reference implementation, provided as an\
 open-source dual [BSD](LICENSE) and [GPLv2](COPYING) licensed **C** library,
and a command line utility producing and decoding `.zst`, `.gz`, `.xz` and\
 `.lz4` files.
Should your project require another programming language,
a list of known ports and bindings is provided on [Zstandard\
 homepage](https://facebook.github.io/zstd/#other-languages).

**Development branch status:**

[![Build Status][travisDevBadge]][travisLink]
[![Build status][CircleDevBadge]][CircleLink]
[![Build status][CirrusDevBadge]][CirrusLink]
[![Fuzzing Status][OSSFuzzBadge]][OSSFuzzLink]

[travisDevBadge]: https://api.travis-ci.com/facebook/zstd.svg?branch=dev\
 "Continuous Integration test suite"
[travisLink]: https://travis-ci.com/facebook/zstd
[CircleDevBadge]: https://circleci.com/gh/facebook/zstd/tree/dev.svg?style=sh\
ield "Short test suite"
[CircleLink]: https://circleci.com/gh/facebook/zstd
[CirrusDevBadge]: https://api.cirrus-ci.com/github/facebook/zstd.svg?branch=d\
ev
[CirrusLink]: https://cirrus-ci.com/github/facebook/zstd
[OSSFuzzBadge]: https://oss-fuzz-build-logs.storage.googleapis.com/badges/zst\
d.svg
[OSSFuzzLink]: https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&\
can=1&q=proj:zstd

## Benchmarks

For reference, several fast compression algorithms were tested and compared
on a desktop running Ubuntu 20.04 (`Linux 5.11.0-41-generic`),
with a Core i7-9700K CPU @ 4.9GHz,
using [lzbench], an open-source in-memory benchmark by @inikep
compiled with [gcc] 9.3.0,
on the [Silesia compression corpus].

[lzbench]: https://github.com/inikep/lzbench
[Silesia compression corpus]: https://sun.aei.polsl.pl//~sdeor/index.php?page\
=silesia
[gcc]: https://gcc.gnu.org/

| Compressor name         | Ratio | Compression| Decompress.|
| ---------------         | ------| -----------| ---------- |
| **zstd 1.5.1 -1**       | 2.887 |   530 MB/s |  1700 MB/s |
| [zlib] 1.2.11 -1        | 2.743 |    95 MB/s |   400 MB/s |
| brotli 1.0.9 -0         | 2.702 |   395 MB/s |   450 MB/s |
| **zstd 1.5.1 --fast=1** | 2.437 |   600 MB/s |  2150 MB/s |
| **zstd 1.5.1 --fast=3** | 2.239 |   670 MB/s |  2250 MB/s |
| quicklz 1.5.0 -1        | 2.238 |   540 MB/s |   760 MB/s |
| **zstd 1.5.1 --fast=4** | 2.148 |   710 MB/s |  2300 MB/s |
| lzo1x 2.10 -1           | 2.106 |   660 MB/s |   845 MB/s |
| [lz4] 1.9.3             | 2.101 |   740 MB/s |  4500 MB/s |
| lzf 3.6 -1              | 2.077 |   410 MB/s |   830 MB/s |
| snappy 1.1.9            | 2.073 |   550 MB/s |  1750 MB/s |

[zlib]: https://www.zlib.net/
[lz4]: https://lz4.github.io/lz4/

The negative compression levels, specified with `--fast=#`,
offer faster compression and decompression speed
at the cost of compression ratio (compared to level 1).

Zstd can also offer stronger compression ratios at the cost of compression\
 speed.
Speed vs Compression trade-off is configurable by small increments.
Decompression speed is preserved and remains roughly the same at all settings,
a property shared by most LZ compression algorithms, such as [zlib] or lzma.

The following tests were run
on a server running Linux Debian (`Linux version 4.14.0-3-amd64`)
with a Core i7-6700K CPU @ 4.0GHz,
using [lzbench], an open-source in-memory benchmark by @inikep
compiled with [gcc] 7.3.0,
on the [Silesia compression corpus].

Compression Speed vs Ratio | Decompression Speed
---------------------------|--------------------
![Compression Speed vs Ratio](doc/images/CSpeed2.png "Compression Speed vs\
 Ratio") | ![Decompression Speed](doc/images/DSpeed3.png "Decompression\
 Speed")

A few other algorithms can produce higher compression ratios at slower\
 speeds, falling outside of the graph.
For a larger picture including slow modes, [click on this link](doc/images/DC\
speed5.png).


## The case for Small Data compression

Previous charts provide results applicable to typical file and stream\
 scenarios (several MB). Small data comes with different perspectives.

The smaller the amount of data to compress, the more difficult it is to\
 compress. This problem is common to all compression algorithms, and reason\
 is, compression algorithms learn from past data how to compress future data.\
 But at the beginning of a new data set, there is no "past" to build upon.

To solve this situation, Zstd offers a __training mode__, which can be used\
 to tune the algorithm for a selected type of data.
Training Zstandard is achieved by providing it with a few samples (one file\
 per sample). The result of this training is stored in a file called\
 "dictionary", which must be loaded before compression and decompression.
Using this dictionary, the compression ratio achievable on small data\
 improves dramatically.

The following example uses the `github-users` [sample set](https://github.com\
/facebook/zstd/releases/tag/v1.1.3), created from [github public\
 API](https://developer.github.com/v3/users/#get-all-users).
It consists of roughly 10K records weighing about 1KB each.

Compression Ratio | Compression Speed | Decompression Speed
------------------|-------------------|--------------------
![Compression Ratio](doc/images/dict-cr.png "Compression Ratio") |\
 ![Compression Speed](doc/images/dict-cs.png "Compression Speed") |\
 ![Decompression Speed](doc/images/dict-ds.png "Decompression Speed")


These compression gains are achieved while simultaneously providing _faster_\
 compression and decompression speeds.

Training works if there is some correlation in a family of small data\
 samples. The more data-specific a dictionary is, the more efficient it is\
 (there is no _universal dictionary_).
Hence, deploying one dictionary per type of data will provide the greatest\
 benefits.
Dictionary gains are mostly effective in the first few KB. Then, the\
 compression algorithm will gradually use previously decoded content to\
 better compress the rest of the file.

### Dictionary compression How To:

1. Create the dictionary

   `zstd --train FullPathToTrainingSet/* -o dictionaryName`

2. Compress with dictionary

   `zstd -D dictionaryName FILE`

3. Decompress with dictionary

   `zstd -D dictionaryName --decompress FILE.zst`


## Build instructions

`make` is the officially maintained build system of this project.
All other build systems are "compatible" and 3rd-party maintained,
they may feature small differences in advanced options.
When your system allows it, prefer using `make` to build `zstd` and `libzstd`.

### Makefile

If your system is compatible with standard `make` (or `gmake`),
invoking `make` in root directory will generate `zstd` cli in root directory.
It will also create `libzstd` into `lib/`.

Other available options include:
- `make install` : create and install zstd cli, library and man pages
- `make check` : create and run `zstd`, test its behavior on local platform

The `Makefile` follows the [GNU Standard Makefile conventions](https://www.gn\
u.org/prep/standards/html_node/Makefile-Conventions.html),
allowing staged install, standard flags, directory variables and command\
 variables.

For advanced use cases, specialized compilation flags which control binary\
 generation
are documented in [`lib/README.md`](lib/README.md#modular-build) for the\
 `libzstd` library
and in [`programs/README.md`](programs/README.md#compilation-variables) for\
 the `zstd` CLI.

### cmake

A `cmake` project generator is provided within `build/cmake`.
It can generate Makefiles or other build scripts
to create `zstd` binary, and `libzstd` dynamic and static libraries.

By default, `CMAKE_BUILD_TYPE` is set to `Release`.

#### Support for Fat (Universal2) Output

`zstd` can be built and installed with support for both Apple Silicon (M1/M2)\
 as well as Intel by using CMake's Universal2 support.
To perform a Fat/Universal2 build and install use the following commands:

```bash
cmake -B build-cmake-debug -S build/cmake -G Ninja -DCMAKE_OSX_ARCHITECTURES=\
"x86_64;x86_64h;arm64"
cd build-cmake-debug
ninja
sudo ninja install
```

### Meson

A Meson project is provided within [`build/meson`](build/meson). Follow
build instructions in that directory.

You can also take a look at [`.travis.yml`](.travis.yml) file for an
example about how Meson is used to build this project.

Note that default build type is **release**.

### VCPKG
You can build and install zstd [vcpkg](https://github.com/Microsoft/vcpkg/)\
 dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install zstd

The zstd port in vcpkg is kept up to date by Microsoft team members and\
 community contributors.
If the version is out of date, please [create an issue or pull\
 request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.

### Visual Studio (Windows)

Going into `build` directory, you will find additional possibilities:
- Projects for Visual Studio 2005, 2008 and 2010.
  + VS2010 project is compatible with VS2012, VS2013, VS2015 and VS2017.
- Automated build scripts for Visual compiler by [@KrzysFR](https://github.co\
m/KrzysFR), in `build/VS_scripts`,
  which will build `zstd` cli and `libzstd` library without any need to open\
 Visual Studio solution.

### Buck

You can build the zstd binary via buck by executing: `buck build\
 programs:zstd` from the root of the repo.
The output binary will be in `buck-out/gen/programs/`.

## Testing

You can run quick local smoke tests by running `make check`.
If you can't use `make`, execute the `playTest.sh` script from the\
 `src/tests` directory.
Two env variables `$ZSTD_BIN` and `$DATAGEN_BIN` are needed for the test\
 script to locate the `zstd` and `datagen` binary.
For information on CI testing, please refer to `TESTING.md`.

## Status

Zstandard is currently deployed within Facebook and many other large cloud\
 infrastructures.
It is run continuously to compress large amounts of data in multiple formats\
 and use cases.
Zstandard is considered safe for production environments.

## License

Zstandard is dual-licensed under [BSD](LICENSE) and [GPLv2](COPYING).

## Contributing

The `dev` branch is the one where all contributions are merged before\
 reaching `release`.
If you plan to propose a patch, please commit into the `dev` branch, or its\
 own feature branch.
Direct commit to `release` are not permitted.
For more information, please read [CONTRIBUTING](CONTRIBUTING.md).

\
description-type: text/markdown;variant=GFM
package-description:
\
# libzstd - Zstandard lossless compression algorithm

This is a `build2` package for the
[`zstd`](https://https://github.com/facebook/zstd) C library. It provides a
fast lossless compression algorithm, targeting real-time compression scenarios
at `zlib`-level and better compression ratios. Zstandard's format is stable
and documented in [RFC8878](https://datatracker.ietf.org/doc/html/rfc8878).


## Usage

To start using `libzstd` in your project, add the following `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: libzstd ^1.5.5
```

Then import the library in your `buildfile`:

```
import libs = libzstd%lib{zstd}
```

Note also that the `lib{zstd}` library provides `build2` metadata that
describes its configuration:

```
lib{zstd}:
{
  libzstd.multithread = [bool] true
}
```

\
package-description-type: text/markdown;variant=GFM
changes:
\
v1.5.5 (Apr 2023)
fix: fix rare corruption bug affecting the high compression mode, reported by\
 @danlark1 (#3517, @terrelln)
perf: improve mid-level compression speed (#3529, #3533, #3543, @yoniko and\
 #3552, @terrelln)
lib: deprecated bufferless block-level API (#3534) by @terrelln
cli: mmap large dictionaries to save memory, by @daniellerozenblit
cli: improve speed of --patch-from mode (~+50%) (#3545) by @daniellerozenblit
cli: improve i/o speed (~+10%) when processing lots of small files (#3479) by\
 @felixhandte
cli: zstd no longer crashes when requested to write into write-protected\
 directory (#3541) by @felixhandte
cli: fix decompression into block device using -o, reported by @georgmu\
 (#3583)
build: fix zstd CLI compiled with lzma support but not zlib support (#3494)\
 by @Hello71
build: fix cmake does no longer require 3.18 as minimum version (#3510) by\
 @kou
build: fix MSVC+ClangCL linking issue (#3569) by @tru
build: fix zstd-dll, version of zstd CLI that links to the dynamic library\
 (#3496) by @yoniko
build: fix MSVC warnings (#3495) by @embg
doc: updated zstd specification to clarify corner cases, by @Cyan4973
doc: document how to create fat binaries for macos (#3568) by @rickmark
misc: improve seekable format ingestion speed (~+100%) for very small chunk\
 sizes (#3544) by @Cyan4973
misc: tests/fullbench can benchmark multiple files (#3516) by @dloidolt

v1.5.4 (Feb 2023)
perf: +20% faster huffman decompression for targets that can't compile x64\
 assembly (#3449, @terrelln)
perf: up to +10% faster streaming compression at levels 1-2 (#3114, @embg)
perf: +4-13% for levels 5-12 by optimizing function generation (#3295,\
 @terrelln)
pref: +3-11% compression speed for `arm` target (#3199, #3164, #3145, #3141,\
 #3138, @JunHe77 and #3139, #3160, @danlark1)
perf: +5-30% faster dictionary compression at levels 1-4 (#3086, #3114,\
 #3152, @embg)
perf: +10-20% cold dict compression speed by prefetching CDict tables (#3177,\
 @embg)
perf: +1% faster compression by removing a branch in ZSTD_fast_noDict (#3129,\
 @felixhandte)
perf: Small compression ratio improvements in high compression mode (#2983,\
 #3391, @Cyan4973 and #3285, #3302, @daniellerozenblit)
perf: small speed improvement by better detecting `STATIC_BMI2` for `clang`\
 (#3080, @TocarIP)
perf: Improved streaming performance when `ZSTD_c_stableInBuffer` is set\
 (#2974, @Cyan4973)
cli: Asynchronous I/O for improved cli speed (#2975, #2985, #3021, #3022,\
 @yoniko)
cli: Change `zstdless` behavior to align with `zless` (#2909, @binhdvo)
cli: Keep original file if `-c` or `--stdout` is given (#3052, @dirkmueller)
cli: Keep original files when result is concatenated into a single output\
 with `-o` (#3450, @Cyan4973)
cli: Preserve Permissions and Ownership of regular files (#3432, @felixhandte)
cli: Print zlib/lz4/lzma library versions with `-vv` (#3030, @terrelln)
cli: Print checksum value for single frame files with `-lv`  (#3332,\
 @Cyan4973)
cli: Print `dictID` when present with `-lv` (#3184, @htnhan)
cli: when `stderr` is *not* the console, disable status updates, but preserve\
 final summary (#3458, @Cyan4973)
cli: support `--best` and `--no-name` in `gzip` compatibility mode (#3059,\
 @dirkmueller)
cli: support for `posix` high resolution timer `clock_gettime()`, for\
 improved benchmark accuracy (#3423, @Cyan4973)
cli: improved help/usage (`-h`,  `-H`) formatting (#3094, @dirkmueller and\
 #3385, @jonpalmisc)
cli: Fix better handling of bogus numeric values (#3268, @ctkhanhly)
cli: Fix input consists of multiple files _and_ `stdin` (#3222, @yoniko)
cli: Fix tiny files passthrough (#3215, @cgbur)
cli: Fix for `-r` on empty directory (#3027, @brailovich)
cli: Fix empty string as argument for `--output-dir-*` (#3220, @embg)
cli: Fix decompression memory usage reported by `-vv --long` (#3042, @u1f35c,\
 and #3232, @zengyijing)
cli: Fix infinite loop when empty input is passed to trainer (#3081,\
 @terrelln)
cli: Fix `--adapt` doesn't work when `--no-progress` is also set (#3354,\
 @terrelln)
api: Support for Block-Level Sequence Producer (#3333, @embg)
api: Support for in-place decompression (#3432, @terrelln)
api: New  `ZSTD_CCtx_setCParams()`  function, set all parameters defined in a\
  `ZSTD_compressionParameters`  structure (#3403, @Cyan4973)
api: Streaming decompression detects incorrect header ID sooner (#3175,\
 @Cyan4973)
api: Window size resizing optimization for edge case (#3345,\
 @daniellerozenblit)
api: More accurate error codes for busy-loop scenarios (#3413, #3455,\
 @Cyan4973)
api: Fix limit overflow in `compressBound` and `decompressBound` (#3362,\
 #3373, Cyan4973) reported by @nigeltao
api: Deprecate several advanced experimental functions: streaming (#3408,\
 @embg), copy (#3196, @mileshu)
bug: Fix corruption that rarely occurs in 32-bit mode with wlog=25 (#3361,\
 @terrelln)
bug: Fix for block-splitter (#3033, @Cyan4973)
bug: Fixes for Sequence Compression API (#3023, #3040, @Cyan4973)
bug: Fix leaking thread handles on Windows (#3147, @animalize)
bug: Fix timing issues with cmake/meson builds (#3166, #3167, #3170,\
 @Cyan4973)
build: Allow user to select legacy level for cmake (#3050, @shadchin)
build: Enable legacy support by default in cmake (#3079, @niamster)
build: Meson build script improvements (#3039, #3120, #3122, #3327, #3357,\
 @eli-schwartz and #3276, @neheb)
build: Add aarch64 to supported architectures for zstd_trace (#3054,\
 @ooosssososos)
build: support AIX architecture (#3219, @qiongsiwu)
build: Fix `ZSTD_LIB_MINIFY` build macro, which now reduces static library\
 size by half (#3366, @terrelln)
build: Fix Windows issues with Multithreading translation layer (#3364,\
 #3380, @yoniko) and ARM64 target (#3320, @cwoffenden)
build: Fix `cmake` script (#3382, #3392, @terrelln and #3252 @Tachi107 and\
 #3167 @Cyan4973)
doc: Updated man page, providing more details for `--train` mode (#3112,\
 @Cyan4973)
doc: Add decompressor errata document (#3092, @terrelln)
misc: Enable Intel CET (#2992, #2994, @hjl-tools)
misc: Fix `contrib/` seekable format (#3058, @yhoogstrate and #3346,\
 @daniellerozenblit)
misc: Improve speed of the one-file library generator (#3241, @wahern and\
 #3005, @cwoffenden)

v1.5.3 (dev version, unpublished)

v1.5.2 (Jan, 2022)
perf: Regain Minimal memset()-ing During Reuse of Compression Contexts\
 (@Cyan4973, #2969)
build: Build Zstd with `noexecstack` on All Architectures (@felixhandte,\
 #2964)
doc: Clarify Licensing (@terrelln, #2981)

v1.5.1 (Dec, 2021)
perf: rebalanced compression levels, to better match the intended speed/level\
 curve, by @senhuang42
perf: faster huffman decoder, using x64 assembly, by @terrelln
perf: slightly faster high speed modes (strategies fast & dfast), by\
 @felixhandte
perf: improved binary size and faster compilation times, by @terrelln
perf: new row64 mode, used notably in level 12, by @senhuang42
perf: faster mid-level compression speed in presence of highly repetitive\
 patterns, by @senhuang42
perf: minor compression ratio improvements for small data at high levels, by\
 @cyan4973
perf: reduced stack usage (mostly useful for Linux Kernel), by @terrelln
perf: faster compression speed on incompressible data, by @bindhvo
perf: on-demand reduced ZSTD_DCtx state size, using build macro\
 ZSTD_DECODER_INTERNAL_BUFFER, at a small cost of performance, by @bindhvo
build: allows hiding static symbols in the dynamic library, using build\
 macro, by @skitt
build: support for m68k (Motorola 68000's), by @cyan4973
build: improved AIX support, by @Helflym
build: improved meson unofficial build, by @eli-schwartz
cli : custom memory limit when training dictionary (#2925), by @embg
cli : report advanced parameters information when compressing in very verbose\
 mode (``-vv`), by @Svetlitski-FB

v1.5.0  (May 11, 2021)
api: Various functions promoted from experimental to stable API: (#2579-2581,\
 @senhuang42)
  `ZSTD_defaultCLevel()`
  `ZSTD_getDictID_fromCDict()`
api: Several experimental functions have been deprecated and will emit a\
 compiler warning (#2582, @senhuang42)
  `ZSTD_compress_advanced()`
  `ZSTD_compress_usingCDict_advanced()`
  `ZSTD_compressBegin_advanced()`
  `ZSTD_compressBegin_usingCDict_advanced()`
  `ZSTD_initCStream_srcSize()`
  `ZSTD_initCStream_usingDict()`
  `ZSTD_initCStream_usingCDict()`
  `ZSTD_initCStream_advanced()`
  `ZSTD_initCStream_usingCDict_advanced()`
  `ZSTD_resetCStream()`
api: ZSTDMT_NBWORKERS_MAX reduced to 64 for 32-bit environments (@Cyan4973)
perf: Significant speed improvements for middle compression levels (#2494,\
 @senhuang42 @terrelln)
perf: Block splitter to improve compression ratio, enabled by default for\
 high compression levels (#2447, @senhuang42)
perf: Decompression loop refactor, speed improvements on `clang` and for\
 `--long` modes (#2614 #2630, @Cyan4973)
perf: Reduced stack usage during compression and decompression entropy stage\
 (#2522 #2524, @terrelln)
bug: Improve setting permissions of created files (#2525, @felixhandte)
bug: Fix large dictionary non-determinism (#2607, @terrelln)
bug: Fix non-determinism test failures on Linux i686 (#2606, @terrelln)
bug: Fix various dedicated dictionary search bugs (#2540 #2586, @senhuang42\
 @felixhandte)
bug: Ensure `ZSTD_estimateCCtxSize*() `monotonically increases with\
 compression level (#2538, @senhuang42)
bug: Fix --patch-from mode parameter bound bug with small files (#2637,\
 @occivink)
bug: Fix UBSAN error in decompression (#2625, @terrelln)
bug: Fix superblock compression divide by zero bug (#2592, @senhuang42)
bug: Make the number of physical CPU cores detection more robust (#2517,\
 @PaulBone)
doc: Improve `zdict.h` dictionary training API documentation (#2622,\
 @terrelln)
doc: Note that public `ZSTD_free*()` functions accept NULL pointers (#2521,\
 @animalize)
doc: Add style guide docs for open source contributors (#2626, @Cyan4973)
tests: Better regression test coverage for different dictionary modes (#2559,\
 @senhuang42)
tests: Better test coverage of index reduction (#2603, @terrelln)
tests: OSS-Fuzz coverage for seekable format (#2617, @senhuang42)
tests: Test coverage for ZSTD threadpool API (#2604, @senhuang42)
build: Dynamic library built multithreaded by default (#2584, @senhuang42)
build: Move  `zstd_errors.h`  and  `zdict.h`  to  `lib/`  root (#2597,\
 @terrelln)
build: Allow `ZSTDMT_JOBSIZE_MIN` to be configured at compile-time, reduce\
 default to 512KB (#2611, @Cyan4973)
build: Single file library build script moved to `build/` directory (#2618,\
 @felixhandte)
build: `ZBUFF_*()` is no longer built by default (#2583, @senhuang42)
build: Fixed Meson build (#2548, @SupervisedThinking @kloczek)
build: Fix excessive compiler warnings with clang-cl and CMake (#2600,\
 @nickhutchinson)
build: Detect presence of `md5` on Darwin (#2609, @felixhandte)
build: Avoid SIGBUS on armv6 (#2633, @bmwiedmann)
cli: `--progress` flag added to always display progress bar (#2595,\
 @senhuang42)
cli: Allow reading from block devices with `--force` (#2613, @felixhandte)
cli: Fix CLI filesize display bug (#2550, @Cyan4973)
cli: Fix windows CLI `--filelist` end-of-line bug (#2620, @Cyan4973)
contrib: Various fixes for linux kernel patch (#2539, @terrelln)
contrib: Seekable format - Decompression hanging edge case fix (#2516,\
 @senhuang42)
contrib: Seekable format - New seek table-only API  (#2113 #2518, @mdittmer\
 @Cyan4973)
contrib: Seekable format - Fix seek table descriptor check when loading\
 (#2534, @foxeng)
contrib: Seekable format - Decompression fix for large offsets, (#2594, @azat)
misc: Automatically published release tarballs available on Github (#2535,\
 @felixhandte)

v1.4.9  (Mar 1, 2021)
bug: Use `umask()` to Constrain Created File Permissions (#2495, @felixhandte)
bug: Make Simple Single-Pass Functions Ignore Advanced Parameters (#2498,\
 @terrelln)
api: Add (De)Compression Tracing Functionality (#2482, @terrelln)
api: Support References to Multiple DDicts (#2446, @senhuang42)
api: Add Function to Generate Skippable Frame (#2439, @senhuang42)
perf: New Algorithms for the Long Distance Matcher (#2483, @mpu)
perf: Performance Improvements for Long Distance Matcher (#2464, @mpu)
perf: Don't Shrink Window Log when Streaming with a Dictionary (#2451,\
 @terrelln)
cli: Fix `--output-dir-mirror`'s Rejection of `..`-Containing Paths (#2512,\
 @felixhandte)
cli: Allow Input From Console When `-f`/`--force` is Passed (#2466,\
 @felixhandte)
cli: Improve Help Message (#2500, @senhuang42)
tests: Remove Flaky Tests (#2455, #2486, #2445, @Cyan4973)
tests: Correctly Invoke md5 Utility on NetBSD (#2492, @niacat)
tests: Avoid Using `stat -c` on NetBSD (#2513, @felixhandte)
build: Zstd CLI Can Now be Linked to Dynamic `libzstd` (#2457, #2454\
 @Cyan4973)
build: Hide and Avoid Using Static-Only Symbols (#2501, #2504, @skitt)
build: CMake: Enable Only C for lib/ and programs/ Projects (#2498,\
 @concatime)
build: CMake: Use `configure_file()` to Create the `.pc` File (#2462, @lazka)
build: Fix Fuzzer Compiler Detection & Update UBSAN Flags (#2503, @terrelln)
build: Add Guards for `_LARGEFILE_SOURCE` and `_LARGEFILE64_SOURCE` (#2444,\
 @indygreg)
build: Improve `zlibwrapper` Makefile (#2437, @Cyan4973)
contrib: Add `recover_directory` Program (#2473, @terrelln)
doc: Change License Year to 2021 (#2452 & #2465, @terrelln & @senhuang42)
doc: Fix Typos (#2459, @ThomasWaldmann)

v1.4.8  (Dec 18, 2020)
hotfix: wrong alignment of an internal buffer

v1.4.7  (Dec 16, 2020)
perf: stronger --long mode at high compression levels, by @senhuang42
perf: stronger --patch-from at high compression levels, thanks to --long\
 improvements
perf: faster dictionary compression at medium compression levels, by\
 @felixhandte
perf: small speed & memory usage improvements for ZSTD_compress2(), by\
 @terrelln
perf: improved fast compression speeds with Visual Studio, by @animalize
cli : Set nb of threads with environment variable ZSTD_NBTHREADS, by\
 @senhuang42
cli : accept decompressing files with *.zstd suffix
cli : provide a condensed summary by default when processing multiple files
cli : fix : stdin input no longer confused as user prompt
cli : improve accuracy of several error messages
api : new sequence ingestion API, by @senhuang42
api : shared thread pool: control total nb of threads used by multiple\
 compression jobs, by @marxin
api : new ZSTD_getDictID_fromCDict(), by @LuAPi
api : zlibWrapper only uses public API, and is compatible with dynamic\
 library, by @terrelln
api : fix : multithreaded compression has predictable output even in special\
 cases (see #2327) (issue not accessible from cli)
api : fix : dictionary compression correctly respects dictionary compression\
 level (see #2303) (issue not accessible from cli)
build: fix cmake script when using path with spaces, by @terrelln
build: improved compile-time detection of aarch64/neon platforms, by @bsdimp
build: Fix building on AIX 5.1, by @likema
build: compile paramgrill with cmake on Windows, requested by @mirh
doc : clarify repcode updates in format specification, by @felixhandte

v1.4.6
fix : Always return dstSize_tooSmall when that is the case
fix : Fix ZSTD_initCStream_advanced() with static allocation and no dictionary
perf: Improve small block decompression speed by 20%+, by @terrelln
perf: Reduce compression stack usage by 1 KB, by @terrelln
perf: Improve decompression speed by improving ZSTD_wildcopy, by @helloguo\
 (#2252, #2256)
perf: Improve histogram construction, by @cyan4973 (#2253)
cli : Add --output-dir-mirror option, by @xxie24 (#2219)
cli : Warn when (de)compressing multiple files into a single output, by\
 @senhuang42 (#2279)
cli : Improved progress bar and status summary when (de)compressing multiple\
 files, by @senhuang42 (#2283)
cli : Call stat less often, by @felixhandte (#2262)
cli : Allow --patch-from XXX and --filelist XXX in addition to\
 --patch-from=XXX and --filelist=XXX, by @cyan4973 (#2250)
cli : Allow --patch-from to compress stdin with --stream-size, by\
 @bimbashrestha (#2206)
api : Do not install zbuff.h, since it has long been deprecated, by @cyan4973\
 (#2166).
api : Fix ZSTD_CCtx_setParameter() with ZSTD_c_compressionLevel to make 0\
 mean default level, by @i-do-cpp (#2291)
api : Rename ZSTDMT_NBTHREADS_MAX to ZSTDMT_NBWORKERS_MAX, by @marxin (#2228).
build: Install pkg-config file with CMake and MinGW, by @tonytheodore (#2183)
build: Install DLL with CMake on Windows, by @BioDataAnalysis (#2221)
build: Fix DLL install location with CMake, by @xantares and @bimbashrestha\
 (#2186)
build: Add ZSTD_NO_UNUSED_FUNCTIONS macro to hide unused functions
build: Add ZSTD_NO_INTRINSICS macro to avoid explicit intrinsics
build: Add STATIC_BMI2 macro for compile time detection of BMI2 on MSVC, by\
 @Niadb (#2258)
build: Fix -Wcomma warnings, by @cwoffenden
build: Remove distutils requirement for meson build, by @neheb (#2197)
build: Fix cli compilation with uclibc
build: Fix cli compilation without st_mtime, by @ffontaine (#2246)
build: Fix shadowing warnings in library
build: Fix single file library compilation with Enscripten, by @yoshihitoh\
 (#2227)
misc: Improve single file library and include dictBuilder, by @cwoffenden
misc: Allow compression dictionaries with missing symbols
misc: Add freestanding translation script in contrib/freestanding_lib
misc: Collect all of zstd's libc dependencies into zstd_deps.h
doc : Add ZSTD_versionString() to manual, by @animalize
doc : Fix documentation for ZSTD_CCtxParams_setParameter(), by @felixhandte\
 (#2270)

v1.4.5  (May 22, 2020)
fix : Compression ratio regression on huge files (> 3 GB) using high levels\
 (--ultra) and multithreading, by @terrelln
perf: Improved decompression speed: x64 : +10% (clang) / +5% (gcc); ARM :\
 from +15% to +50%, depending on SoC, by @terrelln
perf: Automatically downsizes ZSTD_DCtx when too large for too long (#2069,\
 by @bimbashreshta)
perf: Improved fast compression speed on aarch64 (#2040, ~+3%, by @caoyzh)
perf: Small level 1 compression speed gains (depending on compiler)
cli : New --patch-from command, create and apply patches from files, by\
 @bimbashreshta
cli : New --filelist= : Provide a list of files to operate upon from a file
cli : -b -d command can now benchmark decompression on multiple files
cli : New --no-content-size command
cli : New --show-default-cparams information command
api : ZDICT_finalizeDictionary() is promoted to stable (#2111)
api : new experimental parameter ZSTD_d_stableOutBuffer (#2094)
build: Generate a single-file libzstd library (#2065, by @cwoffenden)
build: Relative includes no longer require -I compiler flags for zstd lib\
 subdirs (#2103, by @felixhandte)
build: zstd now compiles cleanly under -pedantic (#2099)
build: zstd now compiles with make-4.3
build: Support mingw cross-compilation from Linux, by @Ericson2314
build: Meson multi-thread build fix on windows
build: Some misc icc fixes backed by new ci test on travis
misc: bitflip analyzer tool, by @felixhandte
misc: Extend largeNbDicts benchmark to compression
misc: Edit-distance match finder in contrib/
doc : Improved beginner CONTRIBUTING.md docs
doc : New issue templates for zstd

v1.4.4  (Nov 6, 2019)
perf: Improved decompression speed, by > 10%, by @terrelln
perf: Better compression speed when re-using a context, by @felixhandte
perf: Fix compression ratio when compressing large files with small\
 dictionary, by @senhuang42
perf: zstd reference encoder can generate RLE blocks, by @bimbashrestha
perf: minor generic speed optimization, by @davidbolvansky
api: new ability to extract sequences from the parser for analysis, by\
 @bimbashrestha
api: fixed decoding of magic-less frames, by @terrelln
api: fixed ZSTD_initCStream_advanced() performance with fast modes, reported\
 by @QrczakMK
cli: Named pipes support, by @bimbashrestha
cli: short tar's extension support, by @stokito
cli: command --output-dir-flat= , generates target files into requested\
 directory, by @senhuang42
cli: commands --stream-size=# and --size-hint=#, by @nmagerko
cli: command --exclude-compressed, by @shashank0791
cli: faster `-t` test mode
cli: improved some error messages, by @vangyzen
cli: fix command `-D dictionary` on Windows, reported by @artyompetrov
cli: fix rare deadlock condition within dictionary builder, by @terrelln
build: single-file decoder with emscripten compilation script, by @cwoffenden
build: fixed zlibWrapper compilation on Visual Studio, reported by @bluenlive
build: fixed deprecation warning for certain gcc version, reported by\
 @jasonma163
build: fix compilation on old gcc versions, by @cemeyer
build: improved installation directories for cmake script, by Dmitri Shubin
pack: modified pkgconfig, for better integration into openwrt, requested by\
 @neheb
misc: Improved documentation : ZSTD_CLEVEL, DYNAMIC_BMI2, ZSTD_CDict,\
 function deprecation, zstd format
misc: fixed educational decoder : accept larger literals section, and removed\
 UNALIGNED() macro

v1.4.3  (Aug 20, 2019)
bug: Fix Dictionary Compression Ratio Regression by @cyan4973 (#1709)
bug: Fix Buffer Overflow in legacy v0.3 decompression by @felixhandte (#1722)
build: Add support for IAR C/C++ Compiler for Arm by @joseph0918 (#1705)

v1.4.2  (Jul 26, 2019)
bug: Fix bug in zstd-0.5 decoder by @terrelln (#1696)
bug: Fix seekable decompression in-memory API by @iburinoc (#1695)
misc: Validate blocks are smaller than size limit by @vivekmg (#1685)
misc: Restructure source files by @ephiepark (#1679)

v1.4.1  (Jul 20, 2019)
bug: Fix data corruption in niche use cases by @terrelln (#1659)
bug: Fuzz legacy modes, fix uncovered bugs by @terrelln (#1593, #1594, #1595)
bug: Fix out of bounds read by @terrelln (#1590)
perf: Improve decode speed by ~7% @mgrice (#1668)
perf: Slightly improved compression ratio of level 3 and 4 (ZSTD_dfast) by\
 @cyan4973 (#1681)
perf: Slightly faster compression speed when re-using a context by @cyan4973\
 (#1658)
perf: Improve compression ratio for small windowLog by @cyan4973 (#1624)
perf: Faster compression speed in high compression mode for repetitive data\
 by @terrelln (#1635)
api: Add parameter to generate smaller dictionaries by @tyler-tran (#1656)
cli: Recognize symlinks when built in C99 mode by @felixhandte (#1640)
cli: Expose cpu load indicator for each file on -vv mode by @ephiepark (#1631)
cli: Restrict read permissions on destination files by @chungy (#1644)
cli: zstdgrep: handle -f flag by @felixhandte (#1618)
cli: zstdcat: follow symlinks by @vejnar (#1604)
doc: Remove extra size limit on compressed blocks by @felixhandte (#1689)
doc: Fix typo by @yk-tanigawa (#1633)
doc: Improve documentation on streaming buffer sizes by @cyan4973 (#1629)
build: CMake: support building with LZ4 @leeyoung624 (#1626)
build: CMake: install zstdless and zstdgrep by @leeyoung624 (#1647)
build: CMake: respect existing uninstall target by @j301scott (#1619)
build: Make: skip multithread tests when built without support by\
 @michaelforney (#1620)
build: Make: Fix examples/ test target by @sjnam (#1603)
build: Meson: rename options out of deprecated namespace by @lzutao (#1665)
build: Meson: fix build by @lzutao (#1602)
build: Visual Studio: don't export symbols in static lib by @scharan (#1650)
build: Visual Studio: fix linking by @absotively (#1639)
build: Fix MinGW-W64 build by @myzhang1029 (#1600)
misc: Expand decodecorpus coverage by @ephiepark (#1664)

v1.4.0  (Apr 17, 2019)
perf: Improve level 1 compression speed in most scenarios by 6% by @gbtucker\
 and @terrelln
api: Move the advanced API, including all functions in the staging section,\
 to the stable section
api: Make ZSTD_e_flush and ZSTD_e_end block for maximum forward progress
api: Rename ZSTD_CCtxParam_getParameter to ZSTD_CCtxParams_getParameter
api: Rename ZSTD_CCtxParam_setParameter to ZSTD_CCtxParams_setParameter
api: Don't export ZSTDMT functions from the shared library by default
api: Require ZSTD_MULTITHREAD to be defined to use ZSTDMT
api: Add ZSTD_decompressBound() to provide an upper bound on decompressed\
 size by @shakeelrao
api: Fix ZSTD_decompressDCtx() corner cases with a dictionary
api: Move ZSTD_getDictID_*() functions to the stable section
api: Add ZSTD_c_literalCompressionMode flag to enable or disable literal\
 compression by @terrelln
api: Allow compression parameters to be set when a dictionary is used
api: Allow setting parameters before or after ZSTD_CCtx_loadDictionary() is\
 called
api: Fix ZSTD_estimateCStreamSize_usingCCtxParams()
api: Setting ZSTD_d_maxWindowLog to 0 means use the default
cli: Ensure that a dictionary is not used to compress itself by @shakeelrao
cli: Add --[no-]compress-literals flag to enable or disable literal\
 compression
doc: Update the examples to use the advanced API
doc: Explain how to transition from old streaming functions to the advanced\
 API in the header
build: Improve the Windows release packages
build: Improve CMake build by @hjmjohnson
build: Build fixes for FreeBSD by @lwhsu
build: Remove redundant warnings by @thatsafunnyname
build: Fix tests on OpenBSD by @bket
build: Extend fuzzer build system to work with the new clang engine
build: CMake now creates the libzstd.so.1 symlink
build: Improve Menson build by @lzutao
misc: Fix symbolic link detection on FreeBSD
misc: Use physical core count for -T0 on FreeBSD by @cemeyer
misc: Fix zstd --list on truncated files by @kostmo
misc: Improve logging in debug mode by @felixhandte
misc: Add CirrusCI tests by @lwhsu
misc: Optimize dictionary memory usage in corner cases
misc: Improve the dictionary builder on small or homogeneous data
misc: Fix spelling across the repo by @jsoref

v1.3.8  (Dec 28, 2018)
perf: better decompression speed on large files (+7%) and cold dictionaries\
 (+15%)
perf: slightly better compression ratio at high compression modes
api : finalized advanced API, last stage before "stable" status
api : new --rsyncable mode, by @terrelln
api : support decompression of empty frames into NULL (used to be an error)\
 (#1385)
build: new set of macros to build a minimal size decoder, by @felixhandte
build: fix compilation on MIPS32, reported by @clbr (#1441)
build: fix compilation with multiple -arch flags, by @ryandesign
build: highly upgraded meson build, by @lzutao
build: improved buck support, by @obelisk
build: fix cmake script : can create debug build, by @pitrou
build: Makefile : grep works on both colored consoles and systems without\
 color support
build: fixed zstd-pgo, by @bmwiedemann
cli : support ZSTD_CLEVEL environment variable, by @yijinfb (#1423)
cli : --no-progress flag, preserving final summary (#1371), by @terrelln
cli : ensure destination file is not source file (#1422)
cli : clearer error messages, especially when input file not present
doc : clarified zstd_compression_format.md, by @ulikunitz
misc: fixed zstdgrep, returns 1 on failure, by @lzutao
misc: NEWS renamed as CHANGELOG, in accordance with fboss

v1.3.7  (Oct 20, 2018)
perf: slightly better decompression speed on clang (depending on hardware\
 target)
fix : performance of dictionary compression for small input < 4 KB at levels\
 9 and 10
build: no longer build backtrace by default in release mode; restrict further\
 automatic mode
build: control backtrace support through build macro BACKTRACE
misc: added man pages for zstdless and zstdgrep, by @samrussell

v1.3.6  (Oct 6, 2018)
perf: much faster dictionary builder, by @jenniferliu
perf: faster dictionary compression on small data when using multiple\
 contexts, by @felixhandte
perf: faster dictionary decompression when using a very large number of\
 dictionaries simultaneously
cli : fix : does no longer overwrite destination when source does not exist\
 (#1082)
cli : new command --adapt, for automatic compression level adaptation
api : fix : block api can be streamed with > 4 GB, reported by @catid
api : reduced ZSTD_DDict size by 2 KB
api : minimum negative compression level is defined, and can be queried using\
 ZSTD_minCLevel().
build: support Haiku target, by @korli
build: Read Legacy format is limited to v0.5+ by default. Can be changed at\
 compile time with macro ZSTD_LEGACY_SUPPORT.
doc : zstd_compression_format.md updated to match wording in IETF RFC 8478
misc: tests/paramgrill, a parameter optimizer, by @GeorgeLu97

v1.3.5  (Jun 29, 2018)
perf: much faster dictionary compression, by @felixhandte
perf: small quality improvement for dictionary generation, by @terrelln
perf: slightly improved high compression levels (notably level 19)
mem : automatic memory release for long duration contexts
cli : fix : overlapLog can be manually set
cli : fix : decoding invalid lz4 frames
api : fix : performance degradation for dictionary compression when using\
 advanced API, by @terrelln
api : change : clarify ZSTD_CCtx_reset() vs ZSTD_CCtx_resetParameters(), by\
 @terrelln
build: select custom libzstd scope through control macros, by @GeorgeLu97
build: OpenBSD patch, by @bket
build: make and make all are compatible with -j
doc : clarify zstd_compression_format.md, updated for IETF RFC process
misc: pzstd compatible with reproducible compilation, by @lamby

v1.3.4  (Mar 27, 2018)
perf: faster speed (especially decoding speed) on recent cpus (haswell+)
perf: much better performance associating --long with multi-threading, by\
 @terrelln
perf: better compression at levels 13-15
cli : asynchronous compression by default, for faster experience (use\
 --single-thread for former behavior)
cli : smoother status report in multi-threading mode
cli : added command --fast=#, for faster compression modes
cli : fix crash when not overwriting existing files, by Pádraig Brady\
 (@pixelb)
api : `nbThreads` becomes `nbWorkers` : 1 triggers asynchronous mode
api : compression levels can be negative, for even more speed
api : ZSTD_getFrameProgression() : get precise progress status of ZSTDMT\
 anytime
api : ZSTDMT can accept new compression parameters during compression
api : implemented all advanced dictionary decompression prototypes
build: improved meson recipe, by Shawn Landden (@shawnl)
build: VS2017 scripts, by @HaydnTrigg
misc: all /contrib projects fixed
misc: added /contrib/docker script by @gyscos

v1.3.3  (Dec 21, 2017)
perf: faster zstd_opt strategy (levels 16-19)
fix : bug #944 : multithreading with shared ditionary and large data,\
 reported by @gsliepen
cli : fix : content size written in header by default
cli : fix : improved LZ4 format support, by @felixhandte
cli : new : hidden command `-S`, to benchmark multiple files while generating\
 one result per file
api : fix : support large skippable frames, by @terrelln
api : fix : streaming interface was adding a useless 3-bytes null block to\
 small frames
api : change : when setting `pledgedSrcSize`, use `ZSTD_CONTENTSIZE_UNKNOWN`\
 macro value to mean "unknown"
build: fix : compilation under rhel6 and centos6, reported by @pixelb
build: added `check` target

v1.3.2  (Oct 10, 2017)
new : long range mode, using --long command, by Stella Lau (@stellamplau)
new : ability to generate and decode magicless frames (#591)
changed : maximum nb of threads reduced to 200, to avoid address space\
 exhaustion in 32-bits mode
fix : multi-threading compression works with custom allocators
fix : ZSTD_sizeof_CStream() was over-evaluating memory usage
fix : a rare compression bug when compression generates very large distances\
 and bunch of other conditions (only possible at --ultra -22)
fix : 32-bits build can now decode large offsets (levels 21+)
cli : added LZ4 frame support by default, by Felix Handte (@felixhandte)
cli : improved --list output
cli : new : can split input file for dictionary training, using command -B#
cli : new : clean operation artefact on Ctrl-C interruption
cli : fix : do not change /dev/null permissions when using command -t with\
 root access, reported by @mike155 (#851)
cli : fix : write file size in header in multiple-files mode
api : added macro ZSTD_COMPRESSBOUND() for static allocation
api : experimental : new advanced decompression API
api : fix : sizeof_CCtx() used to over-estimate
build: fix : no-multithread variant compiles without pool.c dependency,\
 reported by Mitchell Blank Jr (@mitchblank) (#819)
build: better compatibility with reproducible builds, by Bernhard M.\
 Wiedemann (@bmwiedemann) (#818)
example : added streaming_memory_usage
license : changed /examples license to BSD + GPLv2
license : fix a few header files to reflect new license (#825)

v1.3.1  (Aug 21, 2017)
New license : BSD + GPLv2
perf: substantially decreased memory usage in Multi-threading mode, thanks to\
 reports by Tino Reichardt (@mcmilk)
perf: Multi-threading supports up to 256 threads. Cap at 256 when more are\
 requested (#760)
cli : improved and fixed --list command, by @ib (#772)
cli : command -vV to list supported formats, by @ib (#771)
build : fixed binary variants, reported by @svenha (#788)
build : fix Visual compilation for non x86/x64 targets, reported by Greg\
 Slazinski (@GregSlazinski) (#718)
API exp : breaking change : ZSTD_getframeHeader() provides more information
API exp : breaking change : pinned down values of error codes
doc : fixed huffman example, by Ulrich Kunitz (@ulikunitz)
new : contrib/adaptive-compression, I/O driven compression strength, by Paul\
 Cruz (@paulcruz74)
new : contrib/long_distance_matching, statistics by Stella Lau (@stellamplau)
updated : contrib/linux-kernel, by Nick Terrell (@terrelln)

v1.3.0  (Jul 6, 2017)
cli : new : `--list` command, by Paul Cruz
cli : changed : xz/lzma support enabled by default
cli : changed : `-t *` continue processing list after a decompression error
API : added : ZSTD_versionString()
API : promoted to stable status : ZSTD_getFrameContentSize(), by Sean Purcell
API exp : new advanced API : ZSTD_compress_generic(), ZSTD_CCtx_setParameter()
API exp : new : API for static or external allocation : ZSTD_initStatic?Ctx()
API exp : added : ZSTD_decompressBegin_usingDDict(), requested by Guy Riddle\
 (#700)
API exp : clarified memory estimation / measurement functions.
API exp : changed : strongest strategy renamed ZSTD_btultra, fastest strategy\
 ZSTD_fast set to 1
tools : decodecorpus can generate random dictionary-compressed samples, by\
 Paul Cruz
new : contrib/seekable_format, demo and API, by Sean Purcell
changed : contrib/linux-kernel, updated version and license, by Nick Terrell

v1.2.0  (May 5, 2017)
cli : changed : Multithreading enabled by default (use target zstd-nomt or\
 HAVE_THREAD=0 to disable)
cli : new : command -T0 means "detect and use nb of cores", by Sean Purcell
cli : new : zstdmt symlink hardwired to `zstd -T0`
cli : new : command --threads=# (#671)
cli : changed : cover dictionary builder by default, for improved quality, by\
 Nick Terrell
cli : new : commands --train-cover and --train-legacy, to select dictionary\
 algorithm and parameters
cli : experimental targets `zstd4` and `xzstd4`, with support for lz4 format,\
 by Sean Purcell
cli : fix : does not output compressed data on console
cli : fix : ignore symbolic links unless --force specified,
API : breaking change : ZSTD_createCDict_advanced(), only use\
 compressionParameters as argument
API : added : prototypes ZSTD_*_usingCDict_advanced(), for direct control\
 over frameParameters.
API : improved: ZSTDMT_compressCCtx() reduced memory usage
API : fix : ZSTDMT_compressCCtx() now provides srcSize in header (#634)
API : fix : src size stored in frame header is controlled at end of frame
API : fix : enforced consistent rules for pledgedSrcSize==0 (#641)
API : fix : error code "GENERIC" replaced by "dstSizeTooSmall" when\
 appropriate
build: improved cmake script, by @Majlen
build: enabled Multi-threading support for *BSD, by Baptiste Daroussin
tools: updated Paramgrill. Command -O# provides best parameters for sample\
 and speed target.
new : contrib/linux-kernel version, by Nick Terrell

v1.1.4  (Mar 18, 2017)
cli : new : can compress in *.gz format, using --format=gzip command, by\
 Przemyslaw Skibinski
cli : new : advanced benchmark command --priority=rt
cli : fix : write on sparse-enabled file systems in 32-bits mode, by @ds77
cli : fix : --rm remains silent when input is stdin
cli : experimental : xzstd, with support for xz/lzma decoding, by Przemyslaw\
 Skibinski
speed : improved decompression speed in streaming mode for single shot\
 scenarios (+5%)
memory: DDict (decompression dictionary) memory usage down from 150 KB to 20\
 KB
arch: 32-bits variant able to generate and decode very long matches (>32 MB),\
 by Sean Purcell
API : new : ZSTD_findFrameCompressedSize(), ZSTD_getFrameContentSize(),\
 ZSTD_findDecompressedSize()
API : changed : dropped support of legacy versions <= v0.3 (can be changed by\
 modifying ZSTD_LEGACY_SUPPORT value)
build : new: meson build system in contrib/meson, by Dima Krasner
build : improved cmake script, by @Majlen
build : added -Wformat-security flag, as recommended by Padraig Brady
doc : new : educational decoder, by Sean Purcell

v1.1.3  (Feb 7, 2017)
cli : zstd can decompress .gz files (can be disabled with `make zstd-nogz` or\
 `make HAVE_ZLIB=0`)
cli : new : experimental target `make zstdmt`, with multi-threading support
cli : new : improved dictionary builder "cover" (experimental), by Nick\
 Terrell, based on prior work by Giuseppe Ottaviano.
cli : new : advanced commands for detailed parameters, by Przemyslaw Skibinski
cli : fix zstdless on Mac OS-X, by Andrew Janke
cli : fix #232 "compress non-files"
dictBuilder : improved dictionary generation quality, thanks to Nick Terrell
API : new : lib/compress/ZSTDMT_compress.h multithreading API (experimental)
API : new : ZSTD_create?Dict_byReference(), requested by Bartosz Taudul
API : new : ZDICT_finalizeDictionary()
API : fix : ZSTD_initCStream_usingCDict() properly writes dictID into frame\
 header, by Gregory Szorc (#511)
API : fix : all symbols properly exposed in libzstd, by Nick Terrell
build : support for Solaris target, by Przemyslaw Skibinski
doc : clarified specification, by Sean Purcell

v1.1.2  (Dec 15, 2016)
API : streaming : decompression : changed : automatic implicit reset when\
 chain-decoding new frames without init
API : experimental : added : dictID retrieval functions, and\
 ZSTD_initCStream_srcSize()
API : zbuff : changed : prototypes now generate deprecation warnings
lib : improved : faster decompression speed at ultra compression settings and\
 32-bits mode
lib : changed : only public ZSTD_ symbols are now exposed
lib : changed : reduced usage  of stack memory
lib : fixed : several corner case bugs, by Nick Terrell
cli : new : gzstd, experimental version able to decode .gz files, by\
 Przemyslaw Skibinski
cli : new : preserve file attributes
cli : new : added zstdless and zstdgrep tools
cli : fixed : status displays total amount decoded, even for file consisting\
 of multiple frames (like pzstd)
cli : fixed : zstdcat
zlib_wrapper : added support for gz* functions, by Przemyslaw Skibinski
install : better compatibility with FreeBSD, by Dimitry Andric
source tree : changed : zbuff source files moved to lib/deprecated

v1.1.1  (Nov 2, 2016)
New : command -M#, --memory=, --memlimit=, --memlimit-decompress= to limit\
 allowed memory consumption
New : doc/zstd_manual.html, by Przemyslaw Skibinski
Improved : slightly better compression ratio at --ultra levels (>= 20)
Improved : better memory usage when using streaming compression API, thanks\
 to @Rogier-5 report
Added : API : ZSTD_initCStream_usingCDict(), ZSTD_initDStream_usingDDict()\
 (experimental section)
Added : example/multiple_streaming_compression.c
Changed : zstd_errors.h is now installed within /include (and replaces\
 errors_public.h)
Updated man page
Fixed : zstd-small, zstd-compress and zstd-decompress compilation targets

v1.1.0  (Sep 28, 2016)
New : contrib/pzstd, parallel version of zstd, by Nick Terrell
added : NetBSD install target (#338)
Improved : speed for batches of small files
Improved : speed of zlib wrapper, by Przemyslaw Skibinski
Changed : libzstd on Windows supports legacy formats, by Christophe Chevalier
Fixed : CLI -d output to stdout by default when input is stdin (#322)
Fixed : CLI correctly detects console on Mac OS-X
Fixed : CLI supports recursive mode `-r` on Mac OS-X
Fixed : Legacy decoders use unified error codes, reported by benrg (#341),\
 fixed by Przemyslaw Skibinski
Fixed : compatibility with OpenBSD, reported by Juan Francisco Cantero\
 Hurtado (#319)
Fixed : compatibility with Hurd, by Przemyslaw Skibinski (#365)
Fixed : zstd-pgo, reported by octoploid (#329)

v1.0.0  (Sep 1, 2016)
Change Licensing, all project is now BSD, Copyright Facebook
Small decompression speed improvement
API : Streaming API supports legacy format
API : ZDICT_getDictID(), ZSTD_sizeof_{CCtx, DCtx, CStream, DStream}(),\
 ZSTD_setDStreamParameter()
CLI supports legacy formats v0.4+
Fixed : compression fails on certain huge files, reported by Jesse McGrew
Enhanced documentation, by Przemyslaw Skibinski

v0.8.1  (Aug 18, 2016)
New streaming API
Changed : --ultra now enables levels beyond 19
Changed : -i# now selects benchmark time in second
Fixed : ZSTD_compress* can now compress > 4 GB in a single pass, reported by\
 Nick Terrell
Fixed : speed regression on specific patterns (#272)
Fixed : support for Z_SYNC_FLUSH, by Dmitry Krot (#291)
Fixed : ICC compilation, by Przemyslaw Skibinski

v0.8.0  (Aug 2, 2016)
Improved : better speed on clang and gcc -O2, thanks to Eric Biggers
New : Build on FreeBSD and DragonFly, thanks to JrMarino
Changed : modified API : ZSTD_compressEnd()
Fixed : legacy mode with ZSTD_HEAPMODE=0, by Christopher Bergqvist
Fixed : premature end of frame when zero-sized raw block, reported by Eric\
 Biggers
Fixed : large dictionaries (> 384 KB), reported by Ilona Papava
Fixed : checksum correctly checked in single-pass mode
Fixed : combined --test amd --rm, reported by Andreas M. Nilsson
Modified : minor compression level adaptations
Updated : compression format specification to v0.2.0
changed : zstd.h moved to /lib directory

v0.7.5  (Aug 1, 2016)
Transition version, supporting decoding of v0.8.x

v0.7.4  (Jul 17, 2016)
Added : homebrew for Mac, by Daniel Cade
Added : more examples
Fixed : segfault when using small dictionaries, reported by Felix Handte
Modified : default compression level for CLI is now 3
Updated : specification, to v0.1.1

v0.7.3  (Jul 9, 2016)
New : compression format specification
New : `--` separator, stating that all following arguments are file names.\
 Suggested by Chip Turner.
New : `ZSTD_getDecompressedSize()`
New : OpenBSD target, by Juan Francisco Cantero Hurtado
New : `examples` directory
fixed : dictBuilder using HC levels, reported by Bartosz Taudul
fixed : legacy support from ZSTD_decompress_usingDDict(), reported by Felix\
 Handte
fixed : multi-blocks decoding with intermediate uncompressed blocks, reported\
 by Greg Slazinski
modified : removed "mem.h" and "error_public.h" dependencies from "zstd.h"\
 (experimental section)
modified : legacy functions no longer need magic number

v0.7.2  (Jul 4, 2016)
fixed : ZSTD_decompressBlock() using multiple consecutive blocks. Reported by\
 Greg Slazinski.
fixed : potential segfault on very large files (many gigabytes). Reported by\
 Chip Turner.
fixed : CLI displays system error message when destination file cannot be\
 created (#231). Reported by Chip Turner.

v0.7.1  (Jun 23, 2016)
fixed : ZBUFF_compressEnd() called multiple times with too small `dst`\
 buffer, reported by Christophe Chevalier
fixed : dictBuilder fails if first sample is too small, reported by\
 Руслан Ковалёв
fixed : corruption issue, reported by cj
modified : checksum enabled by default in command line mode

v0.7.0  (Jun 17, 2016)
New : Support for directory compression, using `-r`, thanks to Przemyslaw\
 Skibinski
New : Command `--rm`, to remove source file after successful de/compression
New : Visual build scripts, by Christophe Chevalier
New : Support for Sparse File-systems (do not use space for zero-filled\
 sectors)
New : Frame checksum support
New : Support pass-through mode (when using `-df`)
API : more efficient Dictionary API : `ZSTD_compress_usingCDict()`,\
 `ZSTD_decompress_usingDDict()`
API : create dictionary files from custom content, by Giuseppe Ottaviano
API : support for custom malloc/free functions
New : controllable Dictionary ID
New : Support for skippable frames

v0.6.1  (May 13, 2016)
New : zlib wrapper API, thanks to Przemyslaw Skibinski
New : Ability to compile compressor / decompressor separately
Changed : new lib directory structure
Fixed : Legacy codec v0.5 compatible with dictionary decompression
Fixed : Decoder corruption error (#173)
Fixed : null-string roundtrip (#176)
New : benchmark mode can select directory as input
Experimental : midipix support, VMS support

v0.6.0  (Apr 13, 2016)
Stronger high compression modes, thanks to Przemyslaw Skibinski
API : ZSTD_getFrameParams() provides size of decompressed content
New : highest compression modes require `--ultra` command to fully unleash\
 their capacity
Fixed : zstd cli return error code > 0 and removes dst file artifact when\
 decompression fails, thanks to Chip Turner

v0.5.1  (Feb 18, 2016)
New : Optimal parsing => Very high compression modes, thanks to Przemyslaw\
 Skibinski
Changed : Dictionary builder integrated into libzstd and zstd cli
Changed (!) : zstd cli now uses "multiple input files" as default mode. See\
 `zstd -h`.
Fix : high compression modes for big-endian platforms
New : zstd cli : `-t` | `--test` command

v0.5.0  (Feb 5, 2016)
New : dictionary builder utility
Changed : streaming & dictionary API
Improved : better compression of small data

v0.4.7  (Jan 22, 2016)
Improved : small compression speed improvement in HC mode
Changed : `zstd_decompress.c` has ZSTD_LEGACY_SUPPORT to 0 by default
fix : bt search bug

v0.4.6  (Jan 13, 2016)
fix : fast compression mode on Windows
New : cmake configuration file, thanks to Artyom Dymchenko
Improved : high compression mode on repetitive data
New : block-level API
New : ZSTD_duplicateCCtx()

v0.4.5  (Dec 18, 2015)
new : -m/--multiple : compress/decompress multiple files

v0.4.4  (Dec 14, 2015)
Fixed : high compression modes for Windows 32 bits
new : external dictionary API extended to buffered mode and accessible\
 through command line
new : windows DLL project, thanks to Christophe Chevalier

v0.4.3  (Dec 7, 2015)
new : external dictionary API
new : zstd-frugal

v0.4.2  (Dec 2, 2015)
Generic minor improvements for small blocks
Fixed : big-endian compatibility, by Peter Harris (#85)

v0.4.1  (Dec 1, 2015)
Fixed : ZSTD_LEGACY_SUPPORT=0 build mode (reported by Luben)
removed `zstd.c`

v0.4.0  (Nov 29, 2015)
Command line utility compatible with high compression levels
Removed zstdhc => merged into zstd
Added : ZBUFF API (see zstd_buffered.h)
Rolling buffer support

v0.3.6  (Nov 10, 2015)
small blocks params

v0.3.5  (Nov 9, 2015)
minor generic compression improvements

v0.3.4  (Nov 6, 2015)
Faster fast cLevels

v0.3.3  (Nov 5, 2015)
Small compression ratio improvement

v0.3.2  (Nov 2, 2015)
Fixed Visual Studio

v0.3.1  (Nov 2, 2015)
Small compression ratio improvement

v0.3  (Oct 30, 2015)
HC mode : compression levels 2-26

v0.2.2  (Oct 28, 2015)
Fix : Visual Studio 2013 & 2015 release compilation, by Christophe Chevalier

v0.2.1  (Oct 24, 2015)
Fix : Read errors, advanced fuzzer tests, by Hanno Böck

v0.2.0  (Oct 22, 2015)
**Breaking format change**
Faster decompression speed
Can still decode v0.1 format

v0.1.3  (Oct 15, 2015)
fix uninitialization warning, reported by Evan Nemerson

v0.1.2  (Sep 11, 2015)
frame concatenation support

v0.1.1  (Aug 27, 2015)
fix compression bug
detects write-flush errors

v0.1.0  (Aug 25, 2015)
first release

\
changes-type: text/plain
url: https://github.com/facebook/zstd
package-url: https://github.com/build2-packaging/zstd
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = libzstd

using version
using config
using test
using install
using dist

\
root-build:
\
using c
using c.as-cpp

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: zstd/libzstd-1.5.5+1.tar.gz
sha256sum: d7788642c5f04d742e304800e2d96f5f09dfb629af1e8c723496e2e8143b039f
:
name: lua
version: 5.3.5+3
summary: Lua is a powerful, efficient, lightweight, embeddable scripting\
 language.
license: MIT
url: https://lua.org/
package-url: https://github.com/build2-packaging/lua/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = lua

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = 99
cxx.std = latest

using c
using cxx

h{*}: extension = h
c{*}: extension = c

hxx{*}: extension = hpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: lua/lua-5.3.5+3.tar.gz
sha256sum: cb8bcdeab001ccdb38423aa43c2a18b89615d6fb792da07d94eedb8f22e0e09b
:
name: lua
version: 5.4.0
summary: Lua is a powerful, efficient, lightweight, embeddable scripting\
 language.
license: MIT
url: https://lua.org/
package-url: https://github.com/build2-packaging/lua/
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = lua

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = gnu99
cxx.std = latest

using c
using cxx

h{*}: extension = h
c{*}: extension = c

hxx{*}: extension = hpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: lua/lua-5.4.0.tar.gz
sha256sum: bb9fb89627f9d043f25dda9f54493749636d5160c6ecb3d0b20bf12c0b270846
:
name: lua
version: 5.4.2
summary: Lua is a powerful, efficient, lightweight, embeddable scripting\
 language.
license: MIT
url: https://lua.org/
package-url: https://github.com/build2-packaging/lua/
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = lua

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = gnu99
cxx.std = latest

using c
using cxx

h{*}: extension = h
c{*}: extension = c

hxx{*}: extension = hpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: lua/lua-5.4.2.tar.gz
sha256sum: 347fa428fc8264bc3ed6e66feb7793b056eaf0836cba426dbb6e4c2d3e35546b
:
name: lua
version: 5.4.3+4
summary: Lua is a powerful, efficient, lightweight, embeddable scripting\
 language.
license: MIT
url: https://lua.org/
package-url: https://github.com/build2-packaging/lua/
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = lua

using version
using config
using test
using install
using dist

\
root-build:
\
c.std = 99
cxx.std = latest

using c
using cxx

h{*}: extension = h
c{*}: extension = c

hxx{*}: extension = hpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: lua/lua-5.4.3+4.tar.gz
sha256sum: 7f9b088af754873a520da07d58f5b6a95f5c6bef30dacc6bc9fdd132d759ad84
:
name: mysql-client
version: 8.0.15+18
project: mysql
summary: MySQL command-line client
license: other: GPL-2.0-only with MySQL Universal FOSS Exception
topics: MySQL, SQL, relational database
description:
\
MySQL is a relational SQL database management system with mysql utility being
its command-line client. It supports interactive and noninteractive use. When
used interactively, query results are presented in an ASCII-table format. When
used noninteractively, the result is presented in tab-separated format. For
more information see:

https://www.mysql.com

This package contains the original mysql utility source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the utility itself to
the MySQL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of mysql utility for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/mysql/

\
description-type: text/plain
url: https://www.mysql.com
doc-url: https://dev.mysql.com/doc/refman/8.0/en/mysql.html
src-url: https://git.build2.org/cgit/packaging/mysql/mysql/tree/mysql-client/
package-url: https://git.build2.org/cgit/packaging/mysql/
email: mysql@lists.mysql.com; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libmysqlclient == 8.0.15
depends: libcrypto ^1.1.1
depends: libisocline >= 1.0.9 ? ($c.target.class != 'windows')
builds: all relocatable
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GPLv2 with Universal FOSS Exception; see accompanying LICENSE\
 file

project = mysql-client

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GPLv2 with Universal FOSS Exception; see accompanying LICENSE\
 file

using in

using c

h{*}: extension = h
c{*}: extension = c

# Note that the implementation uses C++14 internally, with some used
# constructs being deprecated/removed from the later versions of the standard.
#
cxx.std = 14

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

if ($c.target.system == 'win32-msvc')
  cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  cc.coptions += /wd4251 /wd4275 /wd4800

\
debian-name: default-mysql-client-core
debian-to-downstream-version: /.*/8.0.0/
fedora-name: mysql
fedora_39-name: community-mysql
location: mysql/mysql-client-8.0.15+18.tar.gz
sha256sum: cf7ee184ec526decebc0edc19c50b10c380f3cfd804a07cb1d77af2b481fde54
:
name: nanoflann
version: 1.3.2
type: lib,binless
language: c++
project: nanoflann
summary: A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![Build Status](https://travis-ci.org/jlblancoc/nanoflann.svg?branch=master)\
](https://travis-ci.org/jlblancoc/nanoflann)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](http://www.cs.ubc.ca/research\
/flann/) ([git](https://github.com/mariusmuja/flann)) by Marius Muja and\
 David G. Lowe, and born as a child project of [MRPT](https://www.mrpt.org/).\
 Following the original license terms, *nanoflann* is distributed under the\
 BSD license. Please, for bugs use the issues button or fork and open a pull\
 request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
* Linux users can install it with [Linuxbrew](https://linuxbrew.sh/) with:\
 `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://raw.githubusercontent.com/jlblancoc/na\
noflann/master/CHANGELOG.txt)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](http://jlblancoc.github.io/nanoflann/).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `kdd_search()` and `radius_search()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)


### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](http://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSing\
leIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomCa\
llback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for nanoflann
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/jlblancoc/nanoflann">nanoflann</a>.
    A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees.
</p>

<p align="center">
    <a href="https://github.com/jlblancoc/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/jlblancoc/n\
anoflann.svg?down_message=offline&label=Official&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/nanoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_\
color=blue&up_message=online">
    </a>
    <a href="https://cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/cppget.org/nanoflann.s\
vg?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://queue.cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/queue.cppget.org/nanof\
lann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-\
the-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/nanoflann.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^ 1.3.2

Use the following in your `buildfile` to import the library.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options available.

## Issues and Notes
Currently, there are no issues.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
tests: nanoflann-tests == 1.3.2
examples: nanoflann-examples == 1.3.2
bootstrap-build:
\
project = nanoflann

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

test.target = $cxx.target

\
location: nanoflann/nanoflann-1.3.2.tar.gz
sha256sum: cc1c55bf77a93ea6c09ef443d78a0fe373928f523ff50f96aaf26b8d9f049f32
:
name: nanoflann
version: 1.5.0+1
type: lib,binless
language: c++
project: nanoflann
summary: A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![CI Linux](https://github.com/jlblancoc/nanoflann/actions/workflows/ci-linu\
x.yml/badge.svg)](https://github.com/jlblancoc/nanoflann/actions/workflows/ci\
-linux.yml)
[![CI Check clang-format](https://github.com/jlblancoc/nanoflann/actions/work\
flows/check-clang-format.yml/badge.svg)](https://github.com/jlblancoc/nanofla\
nn/actions/workflows/check-clang-format.yml)
[![CircleCI](https://circleci.com/gh/jlblancoc/nanoflann/tree/master.svg?styl\
e=svg)](https://circleci.com/gh/jlblancoc/nanoflann/tree/master)
[![Windows build status](https://ci.appveyor.com/api/projects/status/h8k1apfo\
gxyqhskd/branch/master?svg=true)](https://ci.appveyor.com/project/jlblancoc/n\
anoflann/branch/master)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](https://github.com/flann-lib/\
flann) by Marius Muja and David G. Lowe, and born as a child project of\
 [MRPT](https://www.mrpt.org/). Following the original license terms,\
 *nanoflann* is distributed under the BSD license. Please, for bugs use the\
 issues button or fork and open a pull request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* Debian or Ubuntu ([21.04 or newer](https://packages.ubuntu.com/source/hirsu\
te/nanoflann)) users can install it simply with:
  ```bash 
  sudo apt install libnanoflann-dev
  ```
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
  MacPorts users can use:
  ```
  $ sudo port install nanoflann
  ```
* Linux users can also install it with [Linuxbrew](https://docs.brew.sh/Homeb\
rew-on-Linux) with: `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://github.com/jlblancoc/nanoflann/blob/ma\
ster/CHANGELOG.md)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](https://jlblancoc.github.io/nanoflann/\
).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `knnSearch()` and `radiusSearch()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)
  * GUI examples (requires `mrpt-gui`, e.g. `sudo apt install\
 libmrpt-gui-dev`):
    - [nanoflann_gui_example_R3](https://github.com/jlblancoc/nanoflann/blob/\
master/examples/examples_gui/nanoflann_gui_example_R3/nanoflann_gui_example_R\
3.cpp)

![nanoflann-demo-1](https://user-images.githubusercontent.com/5497818/2015504\
33-d561c5a9-4e87-453d-9cf8-8202d7876235.gif)



### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](https://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSin\
gleIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomC\
allback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

### 1.8. Package Managers

You can download and install nanoflann using the [vcpkg](https://github.com/M\
icrosoft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install nanoflann

The nanoflann port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

### 2.3. `KDTreeSingleIndexAdaptorParams::n_thread_build`

This parameter determines the maximum number of threads that can be called\
 concurrently during the construction of the KD tree. The default value is 1.\
 When the parameter is set to 0, `nanoflann` automatically determines the\
 number of threads to use.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for nanoflann
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/jlblancoc/nanoflann">nanoflann</a>.
    A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees.
</p>

<p align="center">
    <a href="https://github.com/jlblancoc/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/jlblancoc/n\
anoflann.svg?down_message=offline&label=Official&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/nanoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_\
color=blue&up_message=online">
    </a>
    <a href="https://cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/cppget.org/nanoflann.s\
vg?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://queue.cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/queue.cppget.org/nanof\
lann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-\
the-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^ 1.5.0

The single header-only C++ library to use nanoflann as command-line argument\
 parser can be imported by the following declaration in a `buildfile`.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options vailable.

## Issues
- `freebsd_13-clang_14.0-static_O3` error (test-installed):
    + `ld: error: undefined symbol: pthread_create`
    + It seems that `pthread` is not correctly linked in the examples.
- `linux_debian_11-emcc_3.1.6` error (test):
    + `em++` seems not to be able to compile `gtest`.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
nanoflann 1.5.0: Released Jun 16, 2023
 * **API changes:**
   - Users of radius search should change their result placeholder type:
   `std::vector<std::pair<IndexType, DistanceType>>` => `std::vector<nanoflan\
n::ResultItem<IndexType, DistanceType>>`. (See [#166](https://github.com/jlbl\
ancoc/nanoflann/issues/166) for the motivation of this change).
   - More concise auxiliary (internal) type name:
     `array_or_vector_selector` -> `array_or_vector`.
   - Remove obsolete parameter `nChecks_IGNORED`. Removed from `SearchParams`
     constructor too, so that structure has been renamed `SearchParameters` to
     enforce users to update the code and avoid mistakes with the order of its
     ctor parameters.
   - Added method RadiusResultSet::empty()
   - Template argument rename: `AccesorType` => `IndexType` (does not\
 actually affect user code at all).
   - Added concurrent tree building support, refer to `KDTreeSingleIndexAdapt\
orParams::n_thread_build`.
 * **Other changes:**
   - Macros to avoid conflicts with X11 symbols.
   - Inline an auxiliary example function in case users want to use it and
    include the file in multiple translation units (Closes\
 [#182](https://github.com/jlblancoc/nanoflann/issues/182)).
   - Move all benchmarking code, data, and scripts to [its own\
 repository](https://github.com/MRPT/nanoflann-benchmark) to keep this repo\
 as clean as possible.
   - Fix "potentially uninitialized" GCC warning.
   - Clarified, even more, in docs and examples, that L2 distances are\
 **squared** distances.
   - Removed the (with modern compilers) now useless `inline` keyword in\
 class members.
   - Add examples with GUI (requires [mrpt-gui](https://docs.mrpt.org/referen\
ce/latest/group_mrpt_gui_grp.html)):
     - nanoflann_gui_example_R3: Radius search on R³ Euclidean space.
     - nanoflann_gui_example_bearings: NN search on non-Euclidean spaces.
 * BUGFIXES:
     - Avoid segfault if saving an empty index (Closes [#205](https://github.\
com/jlblancoc/nanoflann/issues/205)).

nanoflann 1.4.3: Released Jul 24, 2022
 * Added flag SkipInitialBuildIndex to allow not wasting time building a tree\
 when it will be loaded from a file later on ([PR #171](https://github.com/jl\
blancoc/nanoflann/pull/171)).
 * Mark all constructors explicit, to avoid unintended creation of temporary\
 objects ([Issue #179](https://github.com/jlblancoc/nanoflann/issues/179)).
 * BUGFIX: avoid potential index out of bounds in KDTreeSingleIndexDynamicAda\
ptor ([PR #173](https://github.com/jlblancoc/nanoflann/pull/173))

nanoflann 1.4.2: Released Jan 11, 2022
 * Install pkg-config .pc file under lib directory (Closes\
 [#161](https://github.com/jlblancoc/nanoflann/issues/161)).
 * Integrate AppVeyor CI.

nanoflann 1.4.1: Released Jan 6, 2022
  * Fix incorrect install directory for cmake target & config files.
  * Do not install example binaries with `make install`.
  * Provide working examples for cmake and pkgconfig under\
 `examples/example_*` directories.

nanoflann 1.4.0: Released Jan 2, 2022
  * nanoflann::KDTreeSingleIndexAdaptor() ctor now forwards additional\
 parameters to the metric class, enabling custom dynamic metrics.
  * Add and apply a `.clang-format` file (same one than used in MOLAorg/MOLA\
 projects).
  * Examples: clean up and code modernization.
  * CMake variables prefixed now with `NANOFLANN_` for easier integration of\
 nanoflann as a Git submodule.
  * Fixes for IndexType which are not of integral types [PR\
 #154](https://github.com/jlblancoc/nanoflann/pull/154)
  * save/load API upgraded from C `FILE*` to C++ file streams (By Dominic\
 Kempf, Heidelberg University, [PR](https://github.com/jlblancoc/nanoflann/pu\
ll/157)).

nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
tests: nanoflann-tests == 1.5.0
examples: nanoflann-examples == 1.5.0
bootstrap-build:
\
project = nanoflann

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: nanoflann/nanoflann-1.5.0+1.tar.gz
sha256sum: 525cb559ec4ac8fabfca6902203ebbf1bac16b9e680e509e09b03fabe9a31833
:
name: nanoflann
version: 1.5.4
type: lib,binless
language: c++
project: nanoflann
summary: Nearest-Neighbor (NN) search with KD-trees C++ library
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![CI Linux](https://github.com/jlblancoc/nanoflann/actions/workflows/ci-linu\
x.yml/badge.svg)](https://github.com/jlblancoc/nanoflann/actions/workflows/ci\
-linux.yml)
[![CI Check clang-format](https://github.com/jlblancoc/nanoflann/actions/work\
flows/check-clang-format.yml/badge.svg)](https://github.com/jlblancoc/nanofla\
nn/actions/workflows/check-clang-format.yml)
[![CircleCI](https://circleci.com/gh/jlblancoc/nanoflann/tree/master.svg?styl\
e=svg)](https://circleci.com/gh/jlblancoc/nanoflann/tree/master)
[![Windows build status](https://ci.appveyor.com/api/projects/status/h8k1apfo\
gxyqhskd/branch/master?svg=true)](https://ci.appveyor.com/project/jlblancoc/n\
anoflann/branch/master)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](https://github.com/flann-lib/\
flann) by Marius Muja and David G. Lowe, and born as a child project of\
 [MRPT](https://www.mrpt.org/). Following the original license terms,\
 *nanoflann* is distributed under the BSD license. Please, for bugs use the\
 issues button or fork and open a pull request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

See the release [CHANGELOG](CHANGELOG.md) for a list of project changes.

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* Debian or Ubuntu ([21.04 or newer](https://packages.ubuntu.com/source/hirsu\
te/nanoflann)) users can install it simply with:
  ```bash 
  sudo apt install libnanoflann-dev
  ```
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
  MacPorts users can use:
  ```
  $ sudo port install nanoflann
  ```
* Linux users can also install it with [Linuxbrew](https://docs.brew.sh/Homeb\
rew-on-Linux) with: `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://github.com/jlblancoc/nanoflann/blob/ma\
ster/CHANGELOG.md)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](https://jlblancoc.github.io/nanoflann/\
).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `knnSearch()` and `radiusSearch()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)
  * GUI examples (requires `mrpt-gui`, e.g. `sudo apt install\
 libmrpt-gui-dev`):
    - [nanoflann_gui_example_R3](https://github.com/jlblancoc/nanoflann/blob/\
master/examples/examples_gui/nanoflann_gui_example_R3/nanoflann_gui_example_R\
3.cpp)

![nanoflann-demo-1](https://user-images.githubusercontent.com/5497818/2015504\
33-d561c5a9-4e87-453d-9cf8-8202d7876235.gif)



### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](https://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSin\
gleIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomC\
allback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

### 1.8. Package Managers

You can download and install nanoflann using the [vcpkg](https://github.com/M\
icrosoft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install nanoflann

The nanoflann port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

### 2.3. `KDTreeSingleIndexAdaptorParams::n_thread_build`

This parameter determines the maximum number of threads that can be called\
 concurrently during the construction of the KD tree. The default value is 1.\
 When the parameter is set to 0, `nanoflann` automatically determines the\
 number of threads to use.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

**Contributors**

<a href="https://github.com/jlblancoc/nanoflann/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=jlblancoc/nanoflann" />
</a>


\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for nanoflann

This project builds and defines the build2 package for [nanoflann](https://gi\
thub.com/jlblancoc/nanoflann), a C++11 header-only library for Nearest\
 Neighbor (NN) search with KD-trees.

[![Official](https://img.shields.io/website/https/github.com/jlblancoc/nanofl\
ann.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue\
&up_message=online)](https://github.com/jlblancoc/nanoflann)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/n\
anoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_color=b\
lue&up_message=online)](https://github.com/build2-packaging/nanoflann)
[![cppget.org](https://img.shields.io/website/https/cppget.org/nanoflann.svg?\
down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_me\
ssage=online)](https://cppget.org/nanoflann)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/na\
noflann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=f\
or-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/na\
noflann)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/nanoflann.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^1.5.4

The library can be imported by the following declaration in a `buildfile`.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options available.

## Issues
- `freebsd_13-clang_14.0-static_O3` error (test-installed):
    + `ld: error: undefined symbol: pthread_create`
    + It seems that `pthread` is not correctly linked in the examples.
- `linux_debian_11-emcc_3.1.6` error (test):
    + `em++` seems not to be able to compile `gtest`.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
# nanoflann 1.5.4: Released Jan 10, 2024
 - Fix outdated NANOFLANN_VERSION macro in header file
 - Fix poll-allocator alignment problems
 - Add NANOFLANN_USE_SYSTEM_GTEST option
 - Look for Threads dependency in CMake config script


# nanoflann 1.5.3: Released Dec 7, 2023
 * **Other changes**:
   - Save one redundant call to `computeMinMax()` in `middleSplit_`\
 ([PR#220](https://github.com/jlblancoc/nanoflann/pull/220) by\
 [qq422216549](https://github.com/qq422216549)).
     This saves *a lot* of time, up to 20% faster in a benchmark with small\
 (thousands) point clouds.

# nanoflann 1.5.2: Released Nov 29, 2023
 * **Other changes**:
   - Improve RKNN search efficiency ([PR#219](https://github.com/jlblancoc/na\
noflann/pull/219) by [kya8](https://github.com/kya8)).

# nanoflann 1.5.1: Released Nov 27, 2023
 * **API changes:**
   - Add new search method `rknnSearch()` for knn searches with a maximum\
 radius.
   - Add missing `SearchParameters` argument to `KDTreeSingleIndexDynamicAdap\
tor_::knnSearch()` ([PR#213](https://github.com/jlblancoc/nanoflann/pull/213)\
 by [ManosPapadakis95](https://github.com/ManosPapadakis95)).
   - Add missing method `KNNResultSet::empty()` for consistency with the\
 other result sets.
 * **Other changes**:
   - Add GUI examples for each search type:
     - `nanoflann_gui_example_R3_knn`
     - `nanoflann_gui_example_R3_radius`
     - `nanoflann_gui_example_R3_rknn`


# nanoflann 1.5.0: Released Jun 16, 2023
 * **API changes:**
   - Users of radius search should change their result placeholder type:
   `std::vector<std::pair<IndexType, DistanceType>>` => `std::vector<nanoflan\
n::ResultItem<IndexType, DistanceType>>`. (See [#166](https://github.com/jlbl\
ancoc/nanoflann/issues/166) for the motivation of this change).
   - More concise auxiliary (internal) type name:
     `array_or_vector_selector` -> `array_or_vector`.
   - Remove obsolete parameter `nChecks_IGNORED`. Removed from `SearchParams`
     constructor too, so that structure has been renamed `SearchParameters` to
     enforce users to update the code and avoid mistakes with the order of its
     ctor parameters.
   - Added method RadiusResultSet::empty()
   - Template argument rename: `AccesorType` => `IndexType` (does not\
 actually affect user code at all).
   - Added concurrent tree building support, refer to `KDTreeSingleIndexAdapt\
orParams::n_thread_build`.
 * **Other changes:**
   - Macros to avoid conflicts with X11 symbols.
   - Inline an auxiliary example function in case users want to use it and
    include the file in multiple translation units (Closes\
 [#182](https://github.com/jlblancoc/nanoflann/issues/182)).
   - Move all benchmarking code, data, and scripts to [its own\
 repository](https://github.com/MRPT/nanoflann-benchmark) to keep this repo\
 as clean as possible.
   - Fix "potentially uninitialized" GCC warning.
   - Clarified, even more, in docs and examples, that L2 distances are\
 **squared** distances.
   - Removed the (with modern compilers) now useless `inline` keyword in\
 class members.
   - Add examples with GUI (requires [mrpt-gui](https://docs.mrpt.org/referen\
ce/latest/group_mrpt_gui_grp.html)):
     - nanoflann_gui_example_R3: Radius search on R³ Euclidean space.
     - nanoflann_gui_example_bearings: NN search on non-Euclidean spaces.
 * BUGFIXES:
     - Avoid segfault if saving an empty index (Closes [#205](https://github.\
com/jlblancoc/nanoflann/issues/205)).

# nanoflann 1.4.3: Released Jul 24, 2022
 * Added flag SkipInitialBuildIndex to allow not wasting time building a tree\
 when it will be loaded from a file later on ([PR #171](https://github.com/jl\
blancoc/nanoflann/pull/171)).
 * Mark all constructors explicit, to avoid unintended creation of temporary\
 objects ([Issue #179](https://github.com/jlblancoc/nanoflann/issues/179)).
 * BUGFIX: avoid potential index out of bounds in KDTreeSingleIndexDynamicAda\
ptor ([PR #173](https://github.com/jlblancoc/nanoflann/pull/173))

# nanoflann 1.4.2: Released Jan 11, 2022
 * Install pkg-config .pc file under lib directory (Closes\
 [#161](https://github.com/jlblancoc/nanoflann/issues/161)).
 * Integrate AppVeyor CI.

# nanoflann 1.4.1: Released Jan 6, 2022
  * Fix incorrect install directory for cmake target & config files.
  * Do not install example binaries with `make install`.
  * Provide working examples for cmake and pkgconfig under\
 `examples/example_*` directories.

# nanoflann 1.4.0: Released Jan 2, 2022
  * nanoflann::KDTreeSingleIndexAdaptor() ctor now forwards additional\
 parameters to the metric class, enabling custom dynamic metrics.
  * Add and apply a `.clang-format` file (same one than used in MOLAorg/MOLA\
 projects).
  * Examples: clean up and code modernization.
  * CMake variables prefixed now with `NANOFLANN_` for easier integration of\
 nanoflann as a Git submodule.
  * Fixes for IndexType which are not of integral types [PR\
 #154](https://github.com/jlblancoc/nanoflann/pull/154)
  * save/load API upgraded from C `FILE*` to C++ file streams (By Dominic\
 Kempf, Heidelberg University, [PR](https://github.com/jlblancoc/nanoflann/pu\
ll/157)).

# nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

# nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

# nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

# nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

# nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

# nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

# nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

# nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

# nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

# nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

# nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

# nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

# nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

# nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

# nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

# nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

# nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

# nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
tests: nanoflann-tests == 1.5.4
examples: nanoflann-examples == 1.5.4
bootstrap-build:
\
project = nanoflann

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: nanoflann/nanoflann-1.5.4.tar.gz
sha256sum: 8b755a8a8b80c825f140909a5ea7b7555ebf61c3fd700816f4b7ecf52552820b
:
name: nanoflann-examples
version: 1.3.2
type: exe
language: c++
project: nanoflann
summary: Examples for nanoflann library
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![Build Status](https://travis-ci.org/jlblancoc/nanoflann.svg?branch=master)\
](https://travis-ci.org/jlblancoc/nanoflann)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](http://www.cs.ubc.ca/research\
/flann/) ([git](https://github.com/mariusmuja/flann)) by Marius Muja and\
 David G. Lowe, and born as a child project of [MRPT](https://www.mrpt.org/).\
 Following the original license terms, *nanoflann* is distributed under the\
 BSD license. Please, for bugs use the issues button or fork and open a pull\
 request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
* Linux users can install it with [Linuxbrew](https://linuxbrew.sh/) with:\
 `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://raw.githubusercontent.com/jlblancoc/na\
noflann/master/CHANGELOG.txt)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](http://jlblancoc.github.io/nanoflann/).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `kdd_search()` and `radius_search()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)


### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](http://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSing\
leIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomCa\
llback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for nanoflann
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/jlblancoc/nanoflann">nanoflann</a>.
    A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees.
</p>

<p align="center">
    <a href="https://github.com/jlblancoc/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/jlblancoc/n\
anoflann.svg?down_message=offline&label=Official&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/nanoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_\
color=blue&up_message=online">
    </a>
    <a href="https://cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/cppget.org/nanoflann.s\
vg?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://queue.cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/queue.cppget.org/nanof\
lann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-\
the-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/nanoflann.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^ 1.3.2

Use the following in your `buildfile` to import the library.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options available.

## Issues and Notes
Currently, there are no issues.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
bootstrap-build:
\
project = nanoflann-examples

using version
using config
using test
using dist

# Disable installation of examples
# by dropping 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

exe{*}: test = true

test.target = $cxx.target

\
location: nanoflann/nanoflann-examples-1.3.2.tar.gz
sha256sum: b24c4296880e659fb8254e86487d15b3c737bebcfea4c848a6adc12d2f767522
:
name: nanoflann-examples
version: 1.5.0+1
type: exe
language: c++
project: nanoflann
summary: Examples for nanoflann library
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![CI Linux](https://github.com/jlblancoc/nanoflann/actions/workflows/ci-linu\
x.yml/badge.svg)](https://github.com/jlblancoc/nanoflann/actions/workflows/ci\
-linux.yml)
[![CI Check clang-format](https://github.com/jlblancoc/nanoflann/actions/work\
flows/check-clang-format.yml/badge.svg)](https://github.com/jlblancoc/nanofla\
nn/actions/workflows/check-clang-format.yml)
[![CircleCI](https://circleci.com/gh/jlblancoc/nanoflann/tree/master.svg?styl\
e=svg)](https://circleci.com/gh/jlblancoc/nanoflann/tree/master)
[![Windows build status](https://ci.appveyor.com/api/projects/status/h8k1apfo\
gxyqhskd/branch/master?svg=true)](https://ci.appveyor.com/project/jlblancoc/n\
anoflann/branch/master)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](https://github.com/flann-lib/\
flann) by Marius Muja and David G. Lowe, and born as a child project of\
 [MRPT](https://www.mrpt.org/). Following the original license terms,\
 *nanoflann* is distributed under the BSD license. Please, for bugs use the\
 issues button or fork and open a pull request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* Debian or Ubuntu ([21.04 or newer](https://packages.ubuntu.com/source/hirsu\
te/nanoflann)) users can install it simply with:
  ```bash 
  sudo apt install libnanoflann-dev
  ```
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
  MacPorts users can use:
  ```
  $ sudo port install nanoflann
  ```
* Linux users can also install it with [Linuxbrew](https://docs.brew.sh/Homeb\
rew-on-Linux) with: `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://github.com/jlblancoc/nanoflann/blob/ma\
ster/CHANGELOG.md)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](https://jlblancoc.github.io/nanoflann/\
).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `knnSearch()` and `radiusSearch()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)
  * GUI examples (requires `mrpt-gui`, e.g. `sudo apt install\
 libmrpt-gui-dev`):
    - [nanoflann_gui_example_R3](https://github.com/jlblancoc/nanoflann/blob/\
master/examples/examples_gui/nanoflann_gui_example_R3/nanoflann_gui_example_R\
3.cpp)

![nanoflann-demo-1](https://user-images.githubusercontent.com/5497818/2015504\
33-d561c5a9-4e87-453d-9cf8-8202d7876235.gif)



### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](https://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSin\
gleIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomC\
allback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

### 1.8. Package Managers

You can download and install nanoflann using the [vcpkg](https://github.com/M\
icrosoft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install nanoflann

The nanoflann port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

### 2.3. `KDTreeSingleIndexAdaptorParams::n_thread_build`

This parameter determines the maximum number of threads that can be called\
 concurrently during the construction of the KD tree. The default value is 1.\
 When the parameter is set to 0, `nanoflann` automatically determines the\
 number of threads to use.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for nanoflann
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/jlblancoc/nanoflann">nanoflann</a>.
    A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees.
</p>

<p align="center">
    <a href="https://github.com/jlblancoc/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/jlblancoc/n\
anoflann.svg?down_message=offline&label=Official&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/nanoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_\
color=blue&up_message=online">
    </a>
    <a href="https://cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/cppget.org/nanoflann.s\
vg?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://queue.cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/queue.cppget.org/nanof\
lann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-\
the-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^ 1.5.0

The single header-only C++ library to use nanoflann as command-line argument\
 parser can be imported by the following declaration in a `buildfile`.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options vailable.

## Issues
- `freebsd_13-clang_14.0-static_O3` error (test-installed):
    + `ld: error: undefined symbol: pthread_create`
    + It seems that `pthread` is not correctly linked in the examples.
- `linux_debian_11-emcc_3.1.6` error (test):
    + `em++` seems not to be able to compile `gtest`.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
nanoflann 1.5.0: Released Jun 16, 2023
 * **API changes:**
   - Users of radius search should change their result placeholder type:
   `std::vector<std::pair<IndexType, DistanceType>>` => `std::vector<nanoflan\
n::ResultItem<IndexType, DistanceType>>`. (See [#166](https://github.com/jlbl\
ancoc/nanoflann/issues/166) for the motivation of this change).
   - More concise auxiliary (internal) type name:
     `array_or_vector_selector` -> `array_or_vector`.
   - Remove obsolete parameter `nChecks_IGNORED`. Removed from `SearchParams`
     constructor too, so that structure has been renamed `SearchParameters` to
     enforce users to update the code and avoid mistakes with the order of its
     ctor parameters.
   - Added method RadiusResultSet::empty()
   - Template argument rename: `AccesorType` => `IndexType` (does not\
 actually affect user code at all).
   - Added concurrent tree building support, refer to `KDTreeSingleIndexAdapt\
orParams::n_thread_build`.
 * **Other changes:**
   - Macros to avoid conflicts with X11 symbols.
   - Inline an auxiliary example function in case users want to use it and
    include the file in multiple translation units (Closes\
 [#182](https://github.com/jlblancoc/nanoflann/issues/182)).
   - Move all benchmarking code, data, and scripts to [its own\
 repository](https://github.com/MRPT/nanoflann-benchmark) to keep this repo\
 as clean as possible.
   - Fix "potentially uninitialized" GCC warning.
   - Clarified, even more, in docs and examples, that L2 distances are\
 **squared** distances.
   - Removed the (with modern compilers) now useless `inline` keyword in\
 class members.
   - Add examples with GUI (requires [mrpt-gui](https://docs.mrpt.org/referen\
ce/latest/group_mrpt_gui_grp.html)):
     - nanoflann_gui_example_R3: Radius search on R³ Euclidean space.
     - nanoflann_gui_example_bearings: NN search on non-Euclidean spaces.
 * BUGFIXES:
     - Avoid segfault if saving an empty index (Closes [#205](https://github.\
com/jlblancoc/nanoflann/issues/205)).

nanoflann 1.4.3: Released Jul 24, 2022
 * Added flag SkipInitialBuildIndex to allow not wasting time building a tree\
 when it will be loaded from a file later on ([PR #171](https://github.com/jl\
blancoc/nanoflann/pull/171)).
 * Mark all constructors explicit, to avoid unintended creation of temporary\
 objects ([Issue #179](https://github.com/jlblancoc/nanoflann/issues/179)).
 * BUGFIX: avoid potential index out of bounds in KDTreeSingleIndexDynamicAda\
ptor ([PR #173](https://github.com/jlblancoc/nanoflann/pull/173))

nanoflann 1.4.2: Released Jan 11, 2022
 * Install pkg-config .pc file under lib directory (Closes\
 [#161](https://github.com/jlblancoc/nanoflann/issues/161)).
 * Integrate AppVeyor CI.

nanoflann 1.4.1: Released Jan 6, 2022
  * Fix incorrect install directory for cmake target & config files.
  * Do not install example binaries with `make install`.
  * Provide working examples for cmake and pkgconfig under\
 `examples/example_*` directories.

nanoflann 1.4.0: Released Jan 2, 2022
  * nanoflann::KDTreeSingleIndexAdaptor() ctor now forwards additional\
 parameters to the metric class, enabling custom dynamic metrics.
  * Add and apply a `.clang-format` file (same one than used in MOLAorg/MOLA\
 projects).
  * Examples: clean up and code modernization.
  * CMake variables prefixed now with `NANOFLANN_` for easier integration of\
 nanoflann as a Git submodule.
  * Fixes for IndexType which are not of integral types [PR\
 #154](https://github.com/jlblancoc/nanoflann/pull/154)
  * save/load API upgraded from C `FILE*` to C++ file streams (By Dominic\
 Kempf, Heidelberg University, [PR](https://github.com/jlblancoc/nanoflann/pu\
ll/157)).

nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: Eigen ^3.4.0
bootstrap-build:
\
project = nanoflann-examples

using version
using config
using test
using dist

# Disable installation of examples
# by dropping 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: nanoflann/nanoflann-examples-1.5.0+1.tar.gz
sha256sum: 73c5ec673a9373f8c2bd223dfae2ea7af74749f622d9e90af92ca7f4163317b8
:
name: nanoflann-examples
version: 1.5.4
type: exe
language: c++
project: nanoflann
summary: Nearest-Neighbor (NN) search with KD-trees C++ library, examples
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![CI Linux](https://github.com/jlblancoc/nanoflann/actions/workflows/ci-linu\
x.yml/badge.svg)](https://github.com/jlblancoc/nanoflann/actions/workflows/ci\
-linux.yml)
[![CI Check clang-format](https://github.com/jlblancoc/nanoflann/actions/work\
flows/check-clang-format.yml/badge.svg)](https://github.com/jlblancoc/nanofla\
nn/actions/workflows/check-clang-format.yml)
[![CircleCI](https://circleci.com/gh/jlblancoc/nanoflann/tree/master.svg?styl\
e=svg)](https://circleci.com/gh/jlblancoc/nanoflann/tree/master)
[![Windows build status](https://ci.appveyor.com/api/projects/status/h8k1apfo\
gxyqhskd/branch/master?svg=true)](https://ci.appveyor.com/project/jlblancoc/n\
anoflann/branch/master)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](https://github.com/flann-lib/\
flann) by Marius Muja and David G. Lowe, and born as a child project of\
 [MRPT](https://www.mrpt.org/). Following the original license terms,\
 *nanoflann* is distributed under the BSD license. Please, for bugs use the\
 issues button or fork and open a pull request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

See the release [CHANGELOG](CHANGELOG.md) for a list of project changes.

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* Debian or Ubuntu ([21.04 or newer](https://packages.ubuntu.com/source/hirsu\
te/nanoflann)) users can install it simply with:
  ```bash 
  sudo apt install libnanoflann-dev
  ```
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
  MacPorts users can use:
  ```
  $ sudo port install nanoflann
  ```
* Linux users can also install it with [Linuxbrew](https://docs.brew.sh/Homeb\
rew-on-Linux) with: `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://github.com/jlblancoc/nanoflann/blob/ma\
ster/CHANGELOG.md)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](https://jlblancoc.github.io/nanoflann/\
).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `knnSearch()` and `radiusSearch()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)
  * GUI examples (requires `mrpt-gui`, e.g. `sudo apt install\
 libmrpt-gui-dev`):
    - [nanoflann_gui_example_R3](https://github.com/jlblancoc/nanoflann/blob/\
master/examples/examples_gui/nanoflann_gui_example_R3/nanoflann_gui_example_R\
3.cpp)

![nanoflann-demo-1](https://user-images.githubusercontent.com/5497818/2015504\
33-d561c5a9-4e87-453d-9cf8-8202d7876235.gif)



### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](https://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSin\
gleIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomC\
allback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

### 1.8. Package Managers

You can download and install nanoflann using the [vcpkg](https://github.com/M\
icrosoft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install nanoflann

The nanoflann port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

### 2.3. `KDTreeSingleIndexAdaptorParams::n_thread_build`

This parameter determines the maximum number of threads that can be called\
 concurrently during the construction of the KD tree. The default value is 1.\
 When the parameter is set to 0, `nanoflann` automatically determines the\
 number of threads to use.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

**Contributors**

<a href="https://github.com/jlblancoc/nanoflann/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=jlblancoc/nanoflann" />
</a>


\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for nanoflann

This project builds and defines the build2 package for [nanoflann](https://gi\
thub.com/jlblancoc/nanoflann), a C++11 header-only library for Nearest\
 Neighbor (NN) search with KD-trees.

[![Official](https://img.shields.io/website/https/github.com/jlblancoc/nanofl\
ann.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue\
&up_message=online)](https://github.com/jlblancoc/nanoflann)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/n\
anoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_color=b\
lue&up_message=online)](https://github.com/build2-packaging/nanoflann)
[![cppget.org](https://img.shields.io/website/https/cppget.org/nanoflann.svg?\
down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_me\
ssage=online)](https://cppget.org/nanoflann)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/na\
noflann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=f\
or-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/na\
noflann)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/nanoflann.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^1.5.4

The library can be imported by the following declaration in a `buildfile`.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options available.

## Issues
- `freebsd_13-clang_14.0-static_O3` error (test-installed):
    + `ld: error: undefined symbol: pthread_create`
    + It seems that `pthread` is not correctly linked in the examples.
- `linux_debian_11-emcc_3.1.6` error (test):
    + `em++` seems not to be able to compile `gtest`.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
# nanoflann 1.5.4: Released Jan 10, 2024
 - Fix outdated NANOFLANN_VERSION macro in header file
 - Fix poll-allocator alignment problems
 - Add NANOFLANN_USE_SYSTEM_GTEST option
 - Look for Threads dependency in CMake config script


# nanoflann 1.5.3: Released Dec 7, 2023
 * **Other changes**:
   - Save one redundant call to `computeMinMax()` in `middleSplit_`\
 ([PR#220](https://github.com/jlblancoc/nanoflann/pull/220) by\
 [qq422216549](https://github.com/qq422216549)).
     This saves *a lot* of time, up to 20% faster in a benchmark with small\
 (thousands) point clouds.

# nanoflann 1.5.2: Released Nov 29, 2023
 * **Other changes**:
   - Improve RKNN search efficiency ([PR#219](https://github.com/jlblancoc/na\
noflann/pull/219) by [kya8](https://github.com/kya8)).

# nanoflann 1.5.1: Released Nov 27, 2023
 * **API changes:**
   - Add new search method `rknnSearch()` for knn searches with a maximum\
 radius.
   - Add missing `SearchParameters` argument to `KDTreeSingleIndexDynamicAdap\
tor_::knnSearch()` ([PR#213](https://github.com/jlblancoc/nanoflann/pull/213)\
 by [ManosPapadakis95](https://github.com/ManosPapadakis95)).
   - Add missing method `KNNResultSet::empty()` for consistency with the\
 other result sets.
 * **Other changes**:
   - Add GUI examples for each search type:
     - `nanoflann_gui_example_R3_knn`
     - `nanoflann_gui_example_R3_radius`
     - `nanoflann_gui_example_R3_rknn`


# nanoflann 1.5.0: Released Jun 16, 2023
 * **API changes:**
   - Users of radius search should change their result placeholder type:
   `std::vector<std::pair<IndexType, DistanceType>>` => `std::vector<nanoflan\
n::ResultItem<IndexType, DistanceType>>`. (See [#166](https://github.com/jlbl\
ancoc/nanoflann/issues/166) for the motivation of this change).
   - More concise auxiliary (internal) type name:
     `array_or_vector_selector` -> `array_or_vector`.
   - Remove obsolete parameter `nChecks_IGNORED`. Removed from `SearchParams`
     constructor too, so that structure has been renamed `SearchParameters` to
     enforce users to update the code and avoid mistakes with the order of its
     ctor parameters.
   - Added method RadiusResultSet::empty()
   - Template argument rename: `AccesorType` => `IndexType` (does not\
 actually affect user code at all).
   - Added concurrent tree building support, refer to `KDTreeSingleIndexAdapt\
orParams::n_thread_build`.
 * **Other changes:**
   - Macros to avoid conflicts with X11 symbols.
   - Inline an auxiliary example function in case users want to use it and
    include the file in multiple translation units (Closes\
 [#182](https://github.com/jlblancoc/nanoflann/issues/182)).
   - Move all benchmarking code, data, and scripts to [its own\
 repository](https://github.com/MRPT/nanoflann-benchmark) to keep this repo\
 as clean as possible.
   - Fix "potentially uninitialized" GCC warning.
   - Clarified, even more, in docs and examples, that L2 distances are\
 **squared** distances.
   - Removed the (with modern compilers) now useless `inline` keyword in\
 class members.
   - Add examples with GUI (requires [mrpt-gui](https://docs.mrpt.org/referen\
ce/latest/group_mrpt_gui_grp.html)):
     - nanoflann_gui_example_R3: Radius search on R³ Euclidean space.
     - nanoflann_gui_example_bearings: NN search on non-Euclidean spaces.
 * BUGFIXES:
     - Avoid segfault if saving an empty index (Closes [#205](https://github.\
com/jlblancoc/nanoflann/issues/205)).

# nanoflann 1.4.3: Released Jul 24, 2022
 * Added flag SkipInitialBuildIndex to allow not wasting time building a tree\
 when it will be loaded from a file later on ([PR #171](https://github.com/jl\
blancoc/nanoflann/pull/171)).
 * Mark all constructors explicit, to avoid unintended creation of temporary\
 objects ([Issue #179](https://github.com/jlblancoc/nanoflann/issues/179)).
 * BUGFIX: avoid potential index out of bounds in KDTreeSingleIndexDynamicAda\
ptor ([PR #173](https://github.com/jlblancoc/nanoflann/pull/173))

# nanoflann 1.4.2: Released Jan 11, 2022
 * Install pkg-config .pc file under lib directory (Closes\
 [#161](https://github.com/jlblancoc/nanoflann/issues/161)).
 * Integrate AppVeyor CI.

# nanoflann 1.4.1: Released Jan 6, 2022
  * Fix incorrect install directory for cmake target & config files.
  * Do not install example binaries with `make install`.
  * Provide working examples for cmake and pkgconfig under\
 `examples/example_*` directories.

# nanoflann 1.4.0: Released Jan 2, 2022
  * nanoflann::KDTreeSingleIndexAdaptor() ctor now forwards additional\
 parameters to the metric class, enabling custom dynamic metrics.
  * Add and apply a `.clang-format` file (same one than used in MOLAorg/MOLA\
 projects).
  * Examples: clean up and code modernization.
  * CMake variables prefixed now with `NANOFLANN_` for easier integration of\
 nanoflann as a Git submodule.
  * Fixes for IndexType which are not of integral types [PR\
 #154](https://github.com/jlblancoc/nanoflann/pull/154)
  * save/load API upgraded from C `FILE*` to C++ file streams (By Dominic\
 Kempf, Heidelberg University, [PR](https://github.com/jlblancoc/nanoflann/pu\
ll/157)).

# nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

# nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

# nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

# nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

# nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

# nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

# nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

# nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

# nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

# nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

# nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

# nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

# nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

# nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

# nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

# nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

# nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

# nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: Eigen ^3.4.0
bootstrap-build:
\
project = nanoflann-examples

using version
using config
using test
using dist

# Disable installation of examples
# by dropping 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: nanoflann/nanoflann-examples-1.5.4.tar.gz
sha256sum: 6dc22bb9646d75c8ca6ab826b04666122ece9690d4e13813b39a6828978336bb
:
name: nanoflann-tests
version: 1.3.2
type: exe
language: c++
project: nanoflann
summary: Tests for nanoflann library
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![Build Status](https://travis-ci.org/jlblancoc/nanoflann.svg?branch=master)\
](https://travis-ci.org/jlblancoc/nanoflann)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](http://www.cs.ubc.ca/research\
/flann/) ([git](https://github.com/mariusmuja/flann)) by Marius Muja and\
 David G. Lowe, and born as a child project of [MRPT](https://www.mrpt.org/).\
 Following the original license terms, *nanoflann* is distributed under the\
 BSD license. Please, for bugs use the issues button or fork and open a pull\
 request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
* Linux users can install it with [Linuxbrew](https://linuxbrew.sh/) with:\
 `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://raw.githubusercontent.com/jlblancoc/na\
noflann/master/CHANGELOG.txt)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](http://jlblancoc.github.io/nanoflann/).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `kdd_search()` and `radius_search()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)


### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](http://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSing\
leIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](http://jlblancoc.github.io/nano\
flann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomCa\
llback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for nanoflann
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/jlblancoc/nanoflann">nanoflann</a>.
    A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees.
</p>

<p align="center">
    <a href="https://github.com/jlblancoc/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/jlblancoc/n\
anoflann.svg?down_message=offline&label=Official&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/nanoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_\
color=blue&up_message=online">
    </a>
    <a href="https://cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/cppget.org/nanoflann.s\
vg?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://queue.cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/queue.cppget.org/nanof\
lann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-\
the-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/nanoflann.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^ 1.3.2

Use the following in your `buildfile` to import the library.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options available.

## Issues and Notes
Currently, there are no issues.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: gtest ^1.11.0
bootstrap-build:
\
project = nanoflann-tests

using version
using config
using test
using dist

# Disable installation of examples
# by dropping 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

exe{*}: test = true

test.target = $cxx.target

\
location: nanoflann/nanoflann-tests-1.3.2.tar.gz
sha256sum: ad9c2cd1f6e9f2485289ef6a744f9e26caf3228f6b6a90578510492da11fbbaa
:
name: nanoflann-tests
version: 1.5.0+1
type: exe
language: c++
project: nanoflann
summary: Tests for nanoflann library
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![CI Linux](https://github.com/jlblancoc/nanoflann/actions/workflows/ci-linu\
x.yml/badge.svg)](https://github.com/jlblancoc/nanoflann/actions/workflows/ci\
-linux.yml)
[![CI Check clang-format](https://github.com/jlblancoc/nanoflann/actions/work\
flows/check-clang-format.yml/badge.svg)](https://github.com/jlblancoc/nanofla\
nn/actions/workflows/check-clang-format.yml)
[![CircleCI](https://circleci.com/gh/jlblancoc/nanoflann/tree/master.svg?styl\
e=svg)](https://circleci.com/gh/jlblancoc/nanoflann/tree/master)
[![Windows build status](https://ci.appveyor.com/api/projects/status/h8k1apfo\
gxyqhskd/branch/master?svg=true)](https://ci.appveyor.com/project/jlblancoc/n\
anoflann/branch/master)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](https://github.com/flann-lib/\
flann) by Marius Muja and David G. Lowe, and born as a child project of\
 [MRPT](https://www.mrpt.org/). Following the original license terms,\
 *nanoflann* is distributed under the BSD license. Please, for bugs use the\
 issues button or fork and open a pull request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* Debian or Ubuntu ([21.04 or newer](https://packages.ubuntu.com/source/hirsu\
te/nanoflann)) users can install it simply with:
  ```bash 
  sudo apt install libnanoflann-dev
  ```
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
  MacPorts users can use:
  ```
  $ sudo port install nanoflann
  ```
* Linux users can also install it with [Linuxbrew](https://docs.brew.sh/Homeb\
rew-on-Linux) with: `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://github.com/jlblancoc/nanoflann/blob/ma\
ster/CHANGELOG.md)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](https://jlblancoc.github.io/nanoflann/\
).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `knnSearch()` and `radiusSearch()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)
  * GUI examples (requires `mrpt-gui`, e.g. `sudo apt install\
 libmrpt-gui-dev`):
    - [nanoflann_gui_example_R3](https://github.com/jlblancoc/nanoflann/blob/\
master/examples/examples_gui/nanoflann_gui_example_R3/nanoflann_gui_example_R\
3.cpp)

![nanoflann-demo-1](https://user-images.githubusercontent.com/5497818/2015504\
33-d561c5a9-4e87-453d-9cf8-8202d7876235.gif)



### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](https://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSin\
gleIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomC\
allback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

### 1.8. Package Managers

You can download and install nanoflann using the [vcpkg](https://github.com/M\
icrosoft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install nanoflann

The nanoflann port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

### 2.3. `KDTreeSingleIndexAdaptorParams::n_thread_build`

This parameter determines the maximum number of threads that can be called\
 concurrently during the construction of the KD tree. The default value is 1.\
 When the parameter is set to 0, `nanoflann` automatically determines the\
 number of threads to use.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Package for nanoflann
</h1>

<p align="center">
    This project builds and defines the build2 package for <a\
 href="https://github.com/jlblancoc/nanoflann">nanoflann</a>.
    A C++11 header-only library for Nearest Neighbor (NN) search with\
 KD-trees.
</p>

<p align="center">
    <a href="https://github.com/jlblancoc/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/jlblancoc/n\
anoflann.svg?down_message=offline&label=Official&style=for-the-badge&up_color\
=blue&up_message=online">
    </a>
    <a href="https://github.com/build2-packaging/nanoflann">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/nanoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_\
color=blue&up_message=online">
    </a>
    <a href="https://cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/cppget.org/nanoflann.s\
vg?down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up\
_message=online">
    </a>
    <a href="https://queue.cppget.org/nanoflann">
        <img src="https://img.shields.io/website/https/queue.cppget.org/nanof\
lann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=for-\
the-badge&up_color=orange&up_message=running">
    </a>
</p>

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^ 1.5.0

The single header-only C++ library to use nanoflann as command-line argument\
 parser can be imported by the following declaration in a `buildfile`.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options vailable.

## Issues
- `freebsd_13-clang_14.0-static_O3` error (test-installed):
    + `ld: error: undefined symbol: pthread_create`
    + It seems that `pthread` is not correctly linked in the examples.
- `linux_debian_11-emcc_3.1.6` error (test):
    + `em++` seems not to be able to compile `gtest`.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
nanoflann 1.5.0: Released Jun 16, 2023
 * **API changes:**
   - Users of radius search should change their result placeholder type:
   `std::vector<std::pair<IndexType, DistanceType>>` => `std::vector<nanoflan\
n::ResultItem<IndexType, DistanceType>>`. (See [#166](https://github.com/jlbl\
ancoc/nanoflann/issues/166) for the motivation of this change).
   - More concise auxiliary (internal) type name:
     `array_or_vector_selector` -> `array_or_vector`.
   - Remove obsolete parameter `nChecks_IGNORED`. Removed from `SearchParams`
     constructor too, so that structure has been renamed `SearchParameters` to
     enforce users to update the code and avoid mistakes with the order of its
     ctor parameters.
   - Added method RadiusResultSet::empty()
   - Template argument rename: `AccesorType` => `IndexType` (does not\
 actually affect user code at all).
   - Added concurrent tree building support, refer to `KDTreeSingleIndexAdapt\
orParams::n_thread_build`.
 * **Other changes:**
   - Macros to avoid conflicts with X11 symbols.
   - Inline an auxiliary example function in case users want to use it and
    include the file in multiple translation units (Closes\
 [#182](https://github.com/jlblancoc/nanoflann/issues/182)).
   - Move all benchmarking code, data, and scripts to [its own\
 repository](https://github.com/MRPT/nanoflann-benchmark) to keep this repo\
 as clean as possible.
   - Fix "potentially uninitialized" GCC warning.
   - Clarified, even more, in docs and examples, that L2 distances are\
 **squared** distances.
   - Removed the (with modern compilers) now useless `inline` keyword in\
 class members.
   - Add examples with GUI (requires [mrpt-gui](https://docs.mrpt.org/referen\
ce/latest/group_mrpt_gui_grp.html)):
     - nanoflann_gui_example_R3: Radius search on R³ Euclidean space.
     - nanoflann_gui_example_bearings: NN search on non-Euclidean spaces.
 * BUGFIXES:
     - Avoid segfault if saving an empty index (Closes [#205](https://github.\
com/jlblancoc/nanoflann/issues/205)).

nanoflann 1.4.3: Released Jul 24, 2022
 * Added flag SkipInitialBuildIndex to allow not wasting time building a tree\
 when it will be loaded from a file later on ([PR #171](https://github.com/jl\
blancoc/nanoflann/pull/171)).
 * Mark all constructors explicit, to avoid unintended creation of temporary\
 objects ([Issue #179](https://github.com/jlblancoc/nanoflann/issues/179)).
 * BUGFIX: avoid potential index out of bounds in KDTreeSingleIndexDynamicAda\
ptor ([PR #173](https://github.com/jlblancoc/nanoflann/pull/173))

nanoflann 1.4.2: Released Jan 11, 2022
 * Install pkg-config .pc file under lib directory (Closes\
 [#161](https://github.com/jlblancoc/nanoflann/issues/161)).
 * Integrate AppVeyor CI.

nanoflann 1.4.1: Released Jan 6, 2022
  * Fix incorrect install directory for cmake target & config files.
  * Do not install example binaries with `make install`.
  * Provide working examples for cmake and pkgconfig under\
 `examples/example_*` directories.

nanoflann 1.4.0: Released Jan 2, 2022
  * nanoflann::KDTreeSingleIndexAdaptor() ctor now forwards additional\
 parameters to the metric class, enabling custom dynamic metrics.
  * Add and apply a `.clang-format` file (same one than used in MOLAorg/MOLA\
 projects).
  * Examples: clean up and code modernization.
  * CMake variables prefixed now with `NANOFLANN_` for easier integration of\
 nanoflann as a Git submodule.
  * Fixes for IndexType which are not of integral types [PR\
 #154](https://github.com/jlblancoc/nanoflann/pull/154)
  * save/load API upgraded from C `FILE*` to C++ file streams (By Dominic\
 Kempf, Heidelberg University, [PR](https://github.com/jlblancoc/nanoflann/pu\
ll/157)).

nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: gtest ^1.11.0
bootstrap-build:
\
project = nanoflann-tests

using version
using config
using test
using dist

# Disable installation of examples
# by dropping 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: nanoflann/nanoflann-tests-1.5.0+1.tar.gz
sha256sum: 11a40182f9e667c9601bdb97e70a755931609cb83b1674e5b87a3e876ad841b8
:
name: nanoflann-tests
version: 1.5.4
type: exe
language: c++
project: nanoflann
summary: Nearest-Neighbor (NN) search with KD-trees C++ library, tests
license: BSD-2-Clause
description:
\
![nanoflann](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/doc\
/logo.png)

# nanoflann
[![CI Linux](https://github.com/jlblancoc/nanoflann/actions/workflows/ci-linu\
x.yml/badge.svg)](https://github.com/jlblancoc/nanoflann/actions/workflows/ci\
-linux.yml)
[![CI Check clang-format](https://github.com/jlblancoc/nanoflann/actions/work\
flows/check-clang-format.yml/badge.svg)](https://github.com/jlblancoc/nanofla\
nn/actions/workflows/check-clang-format.yml)
[![CircleCI](https://circleci.com/gh/jlblancoc/nanoflann/tree/master.svg?styl\
e=svg)](https://circleci.com/gh/jlblancoc/nanoflann/tree/master)
[![Windows build status](https://ci.appveyor.com/api/projects/status/h8k1apfo\
gxyqhskd/branch/master?svg=true)](https://ci.appveyor.com/project/jlblancoc/n\
anoflann/branch/master)


## 1. About

*nanoflann* is a **C++11 [header-only](http://en.wikipedia.org/wiki/Header-on\
ly) library** for building KD-Trees of datasets with different topologies:\
 R<sup>2</sup>, R<sup>3</sup> (point clouds), SO(2) and SO(3) (2D and 3D\
 rotation groups). No support for approximate NN is provided. *nanoflann*\
 does not require compiling or installing. You just need to `#include\
 <nanoflann.hpp>` in your code.

This library is a *fork* of the [flann library](https://github.com/flann-lib/\
flann) by Marius Muja and David G. Lowe, and born as a child project of\
 [MRPT](https://www.mrpt.org/). Following the original license terms,\
 *nanoflann* is distributed under the BSD license. Please, for bugs use the\
 issues button or fork and open a pull request.

Cite as:
```
@misc{blanco2014nanoflann,
  title        = {nanoflann: a {C}++ header-only fork of {FLANN}, a library\
 for Nearest Neighbor ({NN}) with KD-trees},
  author       = {Blanco, Jose Luis and Rai, Pranjal Kumar},
  howpublished = {\url{https://github.com/jlblancoc/nanoflann}},
  year         = {2014}
}
```

See the release [CHANGELOG](CHANGELOG.md) for a list of project changes.

### 1.1. Obtaining the code

* Easiest way: clone this GIT repository and take the `include/nanoflann.hpp`\
 file for use where you need it.
* Debian or Ubuntu ([21.04 or newer](https://packages.ubuntu.com/source/hirsu\
te/nanoflann)) users can install it simply with:
  ```bash 
  sudo apt install libnanoflann-dev
  ```
* macOS users can install `nanoflann` with [Homebrew](https://brew.sh) with:
  ```shell
  $ brew install brewsci/science/nanoflann
  ```
  or
  ```shell
  $ brew tap brewsci/science
  $ brew install nanoflann
  ```
  MacPorts users can use:
  ```
  $ sudo port install nanoflann
  ```
* Linux users can also install it with [Linuxbrew](https://docs.brew.sh/Homeb\
rew-on-Linux) with: `brew install homebrew/science/nanoflann`
* List of [**stable releases**](https://github.com/jlblancoc/nanoflann/releas\
es). Check out the [CHANGELOG](https://github.com/jlblancoc/nanoflann/blob/ma\
ster/CHANGELOG.md)

Although nanoflann itself doesn't have to be compiled, you can build some\
 examples and tests with:

    sudo apt-get install build-essential cmake libgtest-dev libeigen3-dev
    mkdir build && cd build && cmake ..
    make && make test


### 1.2. C++ API reference

  * Browse the [Doxygen documentation](https://jlblancoc.github.io/nanoflann/\
).

  * **Important note:** If L2 norms are used, notice that search radius and\
 all passed and returned distances are actually *squared distances*.

### 1.3. Code examples

  * KD-tree look-up with `knnSearch()` and `radiusSearch()`:\
 [pointcloud_kdd_radius.cpp](https://github.com/jlblancoc/nanoflann/blob/mast\
er/examples/pointcloud_kdd_radius.cpp)
  * KD-tree look-up on a point cloud dataset: [pointcloud_example.cpp](https:\
//github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud_example.cpp)
  * KD-tree look-up on a dynamic point cloud dataset: [dynamic_pointcloud_exa\
mple.cpp](https://github.com/jlblancoc/nanoflann/blob/master/examples/dynamic\
_pointcloud_example.cpp)
  * KD-tree look-up on a rotation group (SO2): [SO2_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO2_adaptor_example.cpp)
  * KD-tree look-up on a rotation group (SO3): [SO3_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/SO3_adaptor_example.cpp)
  * KD-tree look-up on a point cloud dataset with an external adaptor class:\
 [pointcloud_adaptor_example.cpp](https://github.com/jlblancoc/nanoflann/blob\
/master/examples/pointcloud_adaptor_example.cpp)
  * KD-tree look-up directly on an `Eigen::Matrix<>`: [matrix_example.cpp](ht\
tps://github.com/jlblancoc/nanoflann/blob/master/examples/matrix_example.cpp)
  * KD-tree look-up directly on `std::vector<std::vector<T> >` or\
 `std::vector<Eigen::VectorXd>`: [vector_of_vectors_example.cpp](https://gith\
ub.com/jlblancoc/nanoflann/blob/master/examples/vector_of_vectors_example.cpp)
  * Example with a `Makefile` for usage through `pkg-config` (for example,\
 after doing a "make install" or after installing from Ubuntu repositories):\
 [example_with_pkgconfig/](https://github.com/jlblancoc/nanoflann/blob/master\
/examples/example_with_pkgconfig/)
  * Example of how to build an index and save it to disk for later usage:\
 [saveload_example.cpp](https://github.com/jlblancoc/nanoflann/blob/master/ex\
amples/saveload_example.cpp)
  * GUI examples (requires `mrpt-gui`, e.g. `sudo apt install\
 libmrpt-gui-dev`):
    - [nanoflann_gui_example_R3](https://github.com/jlblancoc/nanoflann/blob/\
master/examples/examples_gui/nanoflann_gui_example_R3/nanoflann_gui_example_R\
3.cpp)

![nanoflann-demo-1](https://user-images.githubusercontent.com/5497818/2015504\
33-d561c5a9-4e87-453d-9cf8-8202d7876235.gif)



### 1.4. Why a fork?

  * **Execution time efficiency**:
    * The power of the original `flann` library comes from the possibility of\
 choosing between different ANN algorithms. The cost of this flexibility is\
 the declaration of pure virtual methods which (in some circumstances) impose\
 [run-time penalties](http://www.cs.cmu.edu/~gilpin/c%2B%2B/performance.html#\
virtualfunctions). In `nanoflann` all those virtual methods have been\
 replaced by a combination of the [Curiously Recurring Template\
 Pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)\
 (CRTP) and inlined methods, which are much faster.
    * For `radiusSearch()`, there is no need to make a call to determine the\
 number of points within the radius and then call it again to get the data.\
 By using STL containers for the output data, containers are automatically\
 resized.
    * Users can (optionally) set the problem dimensionality at compile-time\
 via a template argument, thus allowing the compiler to fully unroll loops.
    * `nanoflann` allows users to provide a precomputed bounding box of the\
 data, if available, to avoid recomputation.
    * Indices of data points have been converted from `int` to `size_t`,\
 which removes a limit when handling very large data sets.

  * **Memory efficiency**: Instead of making a copy of the entire dataset\
 into a custom `flann`-like matrix before building a KD-tree index,\
 `nanoflann` allows direct access to your data via an **adaptor interface**\
 which must be implemented in your class.

Refer to the examples below or to the C++ API of [nanoflann::KDTreeSingleInde\
xAdaptor<>](https://jlblancoc.github.io/nanoflann/classnanoflann_1_1KDTreeSin\
gleIndexAdaptor.html) for more info.


### 1.5. What can *nanoflann* do?

  * Building KD-trees with a single index (no randomized KD-trees, no\
 approximate searches).
  * Fast, thread-safe querying for closest neighbors on KD-trees. The entry\
 points are:
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::knnSearch()`
      * Finds the `num_closest` nearest neighbors to `query_point[0:dim-1]`.\
 Their indices are stored inside the result object. See an [example usage\
 code](https://github.com/jlblancoc/nanoflann/blob/master/examples/pointcloud\
_kdd_radius.cpp#L119).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearch()`
      * Finds all the neighbors to `query_point[0:dim-1]` within a maximum\
 radius. The output is given as a vector of pairs, of which the first element\
 is a point index and the second the corresponding distance. See an [example\
 usage code](https://github.com/jlblancoc/nanoflann/blob/master/examples/poin\
tcloud_kdd_radius.cpp#L141).
    * [nanoflann::KDTreeSingleIndexAdaptor<>](https://jlblancoc.github.io/nan\
oflann/classnanoflann_1_1KDTreeSingleIndexAdaptor.html)`::radiusSearchCustomC\
allback()`
	  * Can be used to receive a callback for each point found in range. This\
 may be more efficient in some situations instead of building a huge vector\
 of pairs with the results.
  * Working with 2D and 3D point clouds or N-dimensional data sets.
  * Working directly with `Eigen::Matrix<>` classes (matrices and\
 vectors-of-vectors).
  * Working with dynamic point clouds without a need to rebuild entire\
 kd-tree index.
  * Working with the distance metrics:
    * `R^N`: Euclidean spaces:
      * `L1` (Manhattan)
      * `L2` (**squared** Euclidean norm, favoring SSE2 optimization).
      * `L2_Simple` (**squared** Euclidean norm, for low-dimensionality data\
 sets like point clouds).
    * `SO(2)`: 2D rotational group
      * `metric_SO2`: Absolute angular diference.
    * `SO(3)`: 3D rotational group (better suppport to be provided in future\
 releases)
      * `metric_SO3`: Inner product between quaternions.
  * Saves and load the built indices to disk.
  * GUI based support for benchmarking multiple kd-tree libraries namely\
 nanoflann, flann, fastann and libkdtree.

### 1.6. What can't *nanoflann* do?

  * Use other distance metrics apart from L1, L2, SO2 and SO3.
  * Support for SE(3) groups.
  * Only the C++ interface exists: there is no support for C, MATLAB or\
 Python.
  * There is no automatic algorithm configuration (as described in the\
 original Muja & Lowe's paper).

### 1.7. Use in your project via CMake

You can directly drop the `nanoflann.hpp` file in your project. Alternatively,
the CMake standard method is also available:

  * Build and "install" nanoflann. Set `CMAKE_INSTALL_PREFIX` to a proper path
  and then execute `make install` (Linux, OSX) or build the `INSTALL`
  target (Visual Studio).
  * Then, add something like this to the CMake script of your project:

```
# Find nanoflannConfig.cmake:
find_package(nanoflann)

add_executable(my_project test.cpp)

# Make sure the include path is used:
target_link_libraries(my_project nanoflann::nanoflann)
```

### 1.8. Package Managers

You can download and install nanoflann using the [vcpkg](https://github.com/M\
icrosoft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install nanoflann

The nanoflann port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.

------

## 2. Any help choosing the KD-tree parameters?

### 2.1. `KDTreeSingleIndexAdaptorParams::leaf_max_size`

A KD-tree is... well, a tree :-). And as such it has a root node, a set of\
 intermediary nodes and finally, "leaf" nodes which are those without\
 children.

Points (or, properly, point indices) are only stored in leaf nodes. Each leaf\
 contains a list of which points fall within its range.

While building the tree, nodes are recursively divided until the number of\
 points inside is equal or below some threshold. **That is `leaf_max_size`**.\
 While doing queries, the  "tree algorithm" ends by selecting leaf nodes,\
 then performing linear search (one-by-one) for the closest point to the\
 query within all those in the leaf.

So, `leaf_max_size` must be set as a **tradeoff**:
  * Large values mean that the tree will be built faster (since the tree will\
 be smaller), but each query will be slower (since the linear search in the\
 leaf is to be done over more points).
  * Small values will build the tree much slower (there will be many tree\
 nodes), but queries will be faster... up to some point, since the\
 "tree-part" of the search (logarithmic complexity) still has a significant\
 cost.

What number to select really depends on the application and even on the size\
 of the processor cache memory, so ideally you should do some benchmarking\
 for maximizing efficiency.

But to help choosing a good value as a rule of thumb, I provide the following\
 two benchmarks. Each graph represents the tree build (horizontal) and query\
 (vertical) times for different `leaf_max_size` values between 1 and 10K (as\
 95% uncertainty ellipses, deformed due to the logarithmic scale).

  * A 100K point cloud, uniformly distributed (each point has (x,y,z) `float`\
 coordinates):

![perf5_1e5pts_time_vs_maxleaf](https://raw.githubusercontent.com/jlblancoc/n\
anoflann/master/doc/perf5_1e5pts_time_vs_maxleaf.png)

  * A ~150K point cloud from a real dataset (`scan_071_points.dat` from the\
 [Freiburg Campus 360 dataset](http://ais.informatik.uni-freiburg.de/projects\
/datasets/fr360/), each point has (x,y,z) `float` coordinates):

![perf5_1e5pts_time_vs_maxleaf_real_dataset](https://raw.githubusercontent.co\
m/jlblancoc/nanoflann/master/doc/perf5_1e5pts_time_vs_maxleaf_real_dataset.pn\
g)

So, it seems that a `leaf_max_size` **between 10 and 50** would be optimum in\
 applications where the cost of queries dominates (e.g. [ICP](http://en.wikip\
edia.org/wiki/Iterative_closest_point])). At present, its default value is 10.


### 2.2. `KDTreeSingleIndexAdaptorParams::checks`

This parameter is really ignored in `nanoflann`, but was kept for backward\
 compatibility with the original FLANN interface. Just ignore it.

### 2.3. `KDTreeSingleIndexAdaptorParams::n_thread_build`

This parameter determines the maximum number of threads that can be called\
 concurrently during the construction of the KD tree. The default value is 1.\
 When the parameter is set to 0, `nanoflann` automatically determines the\
 number of threads to use.

-----

## 3. Performance

### 3.1. `nanoflann`: faster and less memory usage

Refer to the "Why a fork?" section above for the main optimization ideas\
 behind `nanoflann`.

Notice that there are no explicit SSE2/SSE3 optimizations in `nanoflann`, but\
 the intensive usage of `inline` and templates in practice turns into\
 automatically SSE-optimized code generated by the compiler.


### 3.2. Benchmark: original `flann` vs `nanoflann`

The most time-consuming part of many point cloud algorithms (like ICP) is\
 querying a KD-Tree for nearest neighbors. This operation is therefore the\
 most time critical.

`nanoflann` provides a ~50% time saving with respect to the original `flann`\
 implementation (times in this chart are in microseconds for each query):

![perf3_query](https://raw.githubusercontent.com/jlblancoc/nanoflann/master/d\
oc/perf3_query.small.png)

Although most of the gain comes from the queries (due to the large number of\
 them in any typical operation with point clouds), there is also some time\
 saved while building the KD-tree index, due to the templatized-code but also\
 for the avoidance of duplicating the data in an auxiliary matrix (times in\
 the next chart are in milliseconds):

![perf4_time_saved](https://raw.githubusercontent.com/jlblancoc/nanoflann/mas\
ter/doc/perf4_time_saved.small.png)

These performance tests are only representative of our testing. If you want\
 to repeat them, read the instructions in [perf-tests](https://github.com/jlb\
lancoc/nanoflann/tree/master/perf-tests)


----

## 4. Other KD-tree projects

  * [FLANN](http://www.cs.ubc.ca/research/flann/) - Marius Muja and David G.\
 Lowe (University of British Columbia).
  * [FASTANN](http://www.robots.ox.ac.uk/~vgg/software/fastann/) - James\
 Philbin (VGG, University of Oxford).
  * [ANN](http://www.cs.umd.edu/~mount/ANN/) - David M. Mount and Sunil Arya\
 (University of Maryland).
  * [libkdtree++](https://packages.debian.org/source/sid/libkdtree++) -\
 Martin F. Krafft & others.

<br>

*Note: The project logo is due to [CedarSeed](http://www.iconarchive.com/show\
/patisserie-icons-by-cedarseed/Flan-icon.html)*

**Contributors**

<a href="https://github.com/jlblancoc/nanoflann/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=jlblancoc/nanoflann" />
</a>


\
description-type: text/markdown;variant=GFM
package-description:
\
# build2 Package for nanoflann

This project builds and defines the build2 package for [nanoflann](https://gi\
thub.com/jlblancoc/nanoflann), a C++11 header-only library for Nearest\
 Neighbor (NN) search with KD-trees.

[![Official](https://img.shields.io/website/https/github.com/jlblancoc/nanofl\
ann.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue\
&up_message=online)](https://github.com/jlblancoc/nanoflann)
[![build2](https://img.shields.io/website/https/github.com/build2-packaging/n\
anoflann.svg?down_message=offline&label=build2&style=for-the-badge&up_color=b\
lue&up_message=online)](https://github.com/build2-packaging/nanoflann)
[![cppget.org](https://img.shields.io/website/https/cppget.org/nanoflann.svg?\
down_message=offline&label=cppget.org&style=for-the-badge&up_color=blue&up_me\
ssage=online)](https://cppget.org/nanoflann)
[![queue.cppget.org](https://img.shields.io/website/https/queue.cppget.org/na\
noflann.svg?down_message=empty&down_color=blue&label=queue.cppget.org&style=f\
or-the-badge&up_color=orange&up_message=running)](https://queue.cppget.org/na\
noflann)

## Usage
Make sure to add the stable section of the `cppget.org` repository to your\
 project's `repositories.manifest` to be able to fetch the package.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If the stable section of `cppget.org` is not an option then add this Git\
 repository itself instead as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/nanoflann.git

Add the respective dependency in your project's `manifest` file to make the\
 package available for import.

    depends: nanoflann ^1.5.4

The library can be imported by the following declaration in a `buildfile`.

    import nanoflann = nanoflann%lib{nanoflann}

## Configuration
There are no configuration options available.

## Issues
- `freebsd_13-clang_14.0-static_O3` error (test-installed):
    + `ld: error: undefined symbol: pthread_create`
    + It seems that `pthread` is not correctly linked in the examples.
- `linux_debian_11-emcc_3.1.6` error (test):
    + `em++` seems not to be able to compile `gtest`.

## Contributing
Thanks in advance for your help and contribution to keep this package\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/nanoflann/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/nanofla\
nn/issues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/nanofl\
ann) and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new library version `X.Y.Z`\
 by calling `git checkout vX.Y.Z` that you want to be packaged.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
changes:
\
# nanoflann 1.5.4: Released Jan 10, 2024
 - Fix outdated NANOFLANN_VERSION macro in header file
 - Fix poll-allocator alignment problems
 - Add NANOFLANN_USE_SYSTEM_GTEST option
 - Look for Threads dependency in CMake config script


# nanoflann 1.5.3: Released Dec 7, 2023
 * **Other changes**:
   - Save one redundant call to `computeMinMax()` in `middleSplit_`\
 ([PR#220](https://github.com/jlblancoc/nanoflann/pull/220) by\
 [qq422216549](https://github.com/qq422216549)).
     This saves *a lot* of time, up to 20% faster in a benchmark with small\
 (thousands) point clouds.

# nanoflann 1.5.2: Released Nov 29, 2023
 * **Other changes**:
   - Improve RKNN search efficiency ([PR#219](https://github.com/jlblancoc/na\
noflann/pull/219) by [kya8](https://github.com/kya8)).

# nanoflann 1.5.1: Released Nov 27, 2023
 * **API changes:**
   - Add new search method `rknnSearch()` for knn searches with a maximum\
 radius.
   - Add missing `SearchParameters` argument to `KDTreeSingleIndexDynamicAdap\
tor_::knnSearch()` ([PR#213](https://github.com/jlblancoc/nanoflann/pull/213)\
 by [ManosPapadakis95](https://github.com/ManosPapadakis95)).
   - Add missing method `KNNResultSet::empty()` for consistency with the\
 other result sets.
 * **Other changes**:
   - Add GUI examples for each search type:
     - `nanoflann_gui_example_R3_knn`
     - `nanoflann_gui_example_R3_radius`
     - `nanoflann_gui_example_R3_rknn`


# nanoflann 1.5.0: Released Jun 16, 2023
 * **API changes:**
   - Users of radius search should change their result placeholder type:
   `std::vector<std::pair<IndexType, DistanceType>>` => `std::vector<nanoflan\
n::ResultItem<IndexType, DistanceType>>`. (See [#166](https://github.com/jlbl\
ancoc/nanoflann/issues/166) for the motivation of this change).
   - More concise auxiliary (internal) type name:
     `array_or_vector_selector` -> `array_or_vector`.
   - Remove obsolete parameter `nChecks_IGNORED`. Removed from `SearchParams`
     constructor too, so that structure has been renamed `SearchParameters` to
     enforce users to update the code and avoid mistakes with the order of its
     ctor parameters.
   - Added method RadiusResultSet::empty()
   - Template argument rename: `AccesorType` => `IndexType` (does not\
 actually affect user code at all).
   - Added concurrent tree building support, refer to `KDTreeSingleIndexAdapt\
orParams::n_thread_build`.
 * **Other changes:**
   - Macros to avoid conflicts with X11 symbols.
   - Inline an auxiliary example function in case users want to use it and
    include the file in multiple translation units (Closes\
 [#182](https://github.com/jlblancoc/nanoflann/issues/182)).
   - Move all benchmarking code, data, and scripts to [its own\
 repository](https://github.com/MRPT/nanoflann-benchmark) to keep this repo\
 as clean as possible.
   - Fix "potentially uninitialized" GCC warning.
   - Clarified, even more, in docs and examples, that L2 distances are\
 **squared** distances.
   - Removed the (with modern compilers) now useless `inline` keyword in\
 class members.
   - Add examples with GUI (requires [mrpt-gui](https://docs.mrpt.org/referen\
ce/latest/group_mrpt_gui_grp.html)):
     - nanoflann_gui_example_R3: Radius search on R³ Euclidean space.
     - nanoflann_gui_example_bearings: NN search on non-Euclidean spaces.
 * BUGFIXES:
     - Avoid segfault if saving an empty index (Closes [#205](https://github.\
com/jlblancoc/nanoflann/issues/205)).

# nanoflann 1.4.3: Released Jul 24, 2022
 * Added flag SkipInitialBuildIndex to allow not wasting time building a tree\
 when it will be loaded from a file later on ([PR #171](https://github.com/jl\
blancoc/nanoflann/pull/171)).
 * Mark all constructors explicit, to avoid unintended creation of temporary\
 objects ([Issue #179](https://github.com/jlblancoc/nanoflann/issues/179)).
 * BUGFIX: avoid potential index out of bounds in KDTreeSingleIndexDynamicAda\
ptor ([PR #173](https://github.com/jlblancoc/nanoflann/pull/173))

# nanoflann 1.4.2: Released Jan 11, 2022
 * Install pkg-config .pc file under lib directory (Closes\
 [#161](https://github.com/jlblancoc/nanoflann/issues/161)).
 * Integrate AppVeyor CI.

# nanoflann 1.4.1: Released Jan 6, 2022
  * Fix incorrect install directory for cmake target & config files.
  * Do not install example binaries with `make install`.
  * Provide working examples for cmake and pkgconfig under\
 `examples/example_*` directories.

# nanoflann 1.4.0: Released Jan 2, 2022
  * nanoflann::KDTreeSingleIndexAdaptor() ctor now forwards additional\
 parameters to the metric class, enabling custom dynamic metrics.
  * Add and apply a `.clang-format` file (same one than used in MOLAorg/MOLA\
 projects).
  * Examples: clean up and code modernization.
  * CMake variables prefixed now with `NANOFLANN_` for easier integration of\
 nanoflann as a Git submodule.
  * Fixes for IndexType which are not of integral types [PR\
 #154](https://github.com/jlblancoc/nanoflann/pull/154)
  * save/load API upgraded from C `FILE*` to C++ file streams (By Dominic\
 Kempf, Heidelberg University, [PR](https://github.com/jlblancoc/nanoflann/pu\
ll/157)).

# nanoflann 1.3.2: Released Nov 5, 2020
  * Add optional argument for Eigen matrix layout [commit](https://github.com\
/jlblancoc/nanoflann/commit/40fa96badcfc4b1a2df38b40b8a368cf5521ace4).
  * Throw exception on malloc failure [PR #126](https://github.com/jlblancoc/\
nanoflann/pull/126).
  * Respect GNUInstallDirs in CMake install rules [PR #131](https://github.co\
m/jlblancoc/nanoflann/pull/131).

# nanoflann 1.3.1: Released Oct 11, 2019
  * Fixed bug in KDTreeSingleIndexDynamicAdaptor. See: https://github.com/jlb\
lancoc/nanoflann/commit/a066148517d16c173954dcde13c1527481b9fad3
  * Fix build in XCode.
  * Simplify CMakeLists for Eigen example (requires Eigen3Config.cmake now)
  * Avoid setting cmake global executable build path

# nanoflann 1.3.0: Released Aug 28, 2018
  * Instructions for `make install` for Linux and Windows (Closes #87).
  * Fix all (?) MSVC conversion warnings (Closes: #95).
  * Avoid need for _USE_MATH_DEFINES in MSVC (Closes: #96)
  * Eigen::Matrix datasets: now uses std::cref() to store a reference to\
 matrix.
  * GSOC2017 contributions by Pranjal Kumar Rai:
    * Support for dynamic datasets.
    * Support for non-Euclidean spaces: SO(2), SO(3)

# nanoflann 1.2.3: Released Dec 20, 2016
  * Fixed: split plane now correctly chooses the dimensions with the largest\
 span.
    Should lead to more optimal trees.

# nanoflann 1.2.2: Released Nov 10, 2016
  * knnSearch() now also returns the number of valid points found.

# nanoflann 1.2.1: Released Jun 1, 2016
  * Fix potential compiler warnings if `IndexType` is signed.
  * New unit tests comparing the results to those of brute force search.

# nanoflann 1.2.0: Released May 5, 2016
  * Fixed: many classes constructors get const ref arguments but stored const\
 values.

# nanoflann 1.1.9: Released Oct 2, 2015
  * Added KDTreeSingleIndexAdaptor::radiusSearchCustomCallback() (Based on a\
 suggestion by Yannick Morin-Rivest)
  * Better documentation in class headers.
  * Cleanup of unused code.
  * Parameter KDTreeSingleIndexAdaptorParams::dim has been removed since it\
 was redundant.

# nanoflann 1.1.8: Released May 2, 2014
  * Created hidden constructors in nanoflann class, to disallow unintentional\
 copies which will corrupt
    the internal pointers.
  * Fixed crash if trying to build an index of an empty dataset.

# nanoflann 1.1.7: Released Aug 24, 2013
  * Two internal containers are now automatically defined as fixed-size\
 arrays if the
    problem dimension is known at compile time, improving efficiency.
    The new/modified datatypes are: KDTreeSingleIndexAdaptor::BoundingBox,\
 KDTreeSingleIndexAdaptor::distance_vector_t
  * Fixed compilation with GCC 4.8 and C++11 enabled (Thanks to Simon\
 Praetorius).

# nanoflann 1.1.6: Released May 14, 2013
  * Fixed warnings about unused parameters.
  * Fixed L1_adaptor.accum_dist(), which implemented L2 instead (Closes #1)
  * Fixed wrong typedef in KDTreeEigenMatrixAdaptor<> for IndexType!=size_t\
 (Closes: #2)

# nanoflann 1.1.5: Released Mar 25, 2013
  * Fixed: Memory pool wasn't freed after each call to buildIndex()
  * GCC: Added -isystem flag to gtest headers to avoid pedantic warnings.

# nanoflann 1.1.4: Released Jan 11, 2013
  * Fixed compilation with Visual Studio 11 (MSVC 2012).
  * Fixed compilation of gtest with VS11 and its _VARIADIC_MAX "bug".
  * Added a security check to launch an exception if searches are attempted\
 before buildIndex().
  * New example to demonstrate save/load the index to files.
  * save/load methods exposed as public.

# nanoflann 1.1.3: Released Jun 6, 2012
  * GTest sources are now embedded, due to the changes in newer Ubuntu\
 packages which don't carry the precompiled libs.
  * Added asserts to detect whether the user passes NULL as query points.
  * New method RadiusResultSet::worst_item()
  * New method RadiusResultSet::set_radius_and_clear()
  * Avoid potential collision of min/max macros with <windows.h>
  * Removed unneeded #include's of std headers.
  * New sample code for vectors of vectors.
  * Fixed building of tests for MSVC in Windows.
  * Allow manually setting the path to Eigen3 (mainly for building examples\
 under Windows).

# nanoflann 1.1.2: Released May 2, 2012
  * Better documentation and added graphs of a benchmarking for helping\
 choosing "leaf_max_size".
  * Now KDTreeSingleIndexAdaptor::buildIndex() can be called several times
     even when the dataset size changes (Thanks to Rob McDonald for\
 reporting!)

# nanoflann 1.1.1: Released Feb 1, 2012
  * Some fixes to kd_tree index and L1/L2 metrics to allow distinct types
     in data elements and in the distances. This is mainly to permit elements
	 being vectors of integers (e.g. uint8_t) but distances being real numbers.
  * Examples and unit tests have been corrected to use template arguments
     instead of being hard-wired to "float" data types (Thanks Thomas Vincent
	 for noticing!).

# nanoflann 1.1.0: Released Dec 15, 2011
  * Fixed warnings for MSVC and for GCC with "-Wall -pedantic"
  * Updated performance tests to work with the final nanoflann code (they were
     written for a very early version).
  * All main classes now have new template arguments for the type of indice,
     which now defaults to "size_t" instead of "int". In case this breaks
     backward compatibility in user code, especify "int" to override the\
 default
     template arguments, although "size_t" it's recommended.

# nanoflann 1.0.0: Released Aug 30, 2011
  * Initial version

\
changes-type: text/markdown;variant=GFM
url: https://github.com/jlblancoc/nanoflann
doc-url: https://jlblancoc.github.io/nanoflann/
package-url: https://github.com/build2-packaging/nanoflann/
email: joseluisblancoc@gmail.com
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: gtest ^1.11.0
bootstrap-build:
\
project = nanoflann-tests

using version
using config
using test
using dist

# Disable installation of examples
# by dropping 'install' module.
#
# using install

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

hxx{*}: cxx.importable = false

exe{*}: test = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: nanoflann/nanoflann-tests-1.5.4.tar.gz
sha256sum: 77011bbf1ffc2fcf086e7f26caf7aaf66a1f6d32602e5dd565d56d39b2e113c3
:
name: nlohmann-json
version: 3.7.3
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++ 
===================

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library documentation.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


include_dir = $src_root/upstream/single_include


\
location: nlohmann-json/nlohmann-json-3.7.3.tar.gz
sha256sum: e6c918cb7197ccafe1ca259a25a998afd16f6298f9b27e88942ff7e4d1a6f506
:
name: nlohmann-json
version: 3.8.0+2
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.8.0+2.tar.gz
sha256sum: b75ae4b395280f0afb4546024d42a878a0e519e2a896f59ab77dcbdb1c2b462f
:
name: nlohmann-json
version: 3.9.1+2
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.9.1+2.tar.gz
sha256sum: a666bfebae0628ba59338068ec40779e7ef2c16942458936d8feb03121f5bb80
:
name: nlohmann-json
version: 3.10.2+1
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.10.2+1.tar.gz
sha256sum: 834bca951bbe4bc908ad1b6988865b80426932ffc5f15fa339b4f2bd3c29db64
:
name: nlohmann-json
version: 3.10.4
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.10.4.tar.gz
sha256sum: 7554616c3047f0f33142a531d1b9c43c3151fd03beaaaadf24c0a2e4505a6dfc
:
name: nlohmann-json
version: 3.10.5
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.10.5.tar.gz
sha256sum: 29d164a6bd8e5f72e52bcb5baa0e80394dbdc5fdda1c3f216b25ff2826f9ca2e
:
name: nlohmann-json
version: 3.11.1
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.11.1.tar.gz
sha256sum: a0ff0d3c2b5f576f2518971152cd4dee0e4edf5e99552402694137a44b07bbe8
:
name: nlohmann-json
version: 3.11.2
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.11.2.tar.gz
sha256sum: 9952f5fd5ec47cabb4a8873a47a68b4e7cdb98098deb767aeaefb4beaa195b88
:
name: nlohmann-json
version: 3.11.3
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.11.3.tar.gz
sha256sum: d3d72dfb72ed4e676e5a648ddf307e1f5f7a2256897fa37a0b4fa4aa8836429d
:
name: nlohmann-json
version: 3.12.0
summary: "JSON for Modern C++"
license: MIT
description:
\
JSON for Modern C++
===================

> ## What if JSON was part of Modern C++

Documentation: https://nlohmann.github.io/json/
>
> ## Design goals
>
> [...] **Intuitive syntax.** In languages such as Python, JSON feels like a\
 first class data type. We used all the operator magic of modern C++ to\
 achieve the same feeling in your code. [...]
>

-----

This is the Build2 package of the Modern C++ `json` library.

 - Build2 : https://build2.org
 - JSON for Modern C++ : https://nlohmann.github.io/json/

See https://github.com/nlohmann/json/ for the library sources and details.

\
description-type: text/markdown;variant=GFM
url: https://nlohmann.github.io/json/
package-url: https://github.com/build2-packaging/nlohmann-json
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
bootstrap-build:
\
project = nlohmann-json

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target



\
location: nlohmann-json/nlohmann-json-3.12.0.tar.gz
sha256sum: e2dd7f87ce34c1223d2ab0a06a72e31a6be7766b2a04a2a373958307c1e4ec35
:
name: odb
version: 2.5.0
summary: ODB compiler
license: GPL-3.0-only
topics: C++, ORM, source code generation, object persistence, relational\
 database
description:
\
# odb - ODB compiler

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains the ODB compiler.

\
description-type: text/markdown;variant=GFM
package-description:
\
# ODB - ORM for C++

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code. ODB supports the MySQL, SQLite,
PostgreSQL, Oracle, and Microsoft SQL Server relational databases. It also
comes with optional profiles for Boost and Qt which allow you to seamlessly
use value types, containers, and smart pointers from these libraries in your
persistent C++ classes.

For further information, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

## Usage

ODB consists of several packages with the main ones being `odb` (the ODB
compiler), `libodb` (the common runtime library), and `libodb-<database>` (the
database runtime libraries). There are also `libodb-boost` and `libodb-qt`
(profile libraries) as well as `odb-tests` and `odb-examples`.

When specifying dependencies on the ODB packages in your project, the `odb`
package should be a build-time dependency. You will always have a dependency
on `libodb` plus one or more `libodb-<database>`, depending on which
database(s) you wish to target. To be able to persist types from either Boost
or Qt you would also add the corresponding profile library.

So, putting it all together, your project's `manifest` would normally have the
following fragment if, for example, you want to target SQLite:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-sqlite ^2.5.0
```

Or the following fragment if using PostgreSQL as well as the Boost profile:

```
depends: * odb ^2.5.0
depends: libodb ^2.5.0
depends: libodb-pgsql ^2.5.0
depends: libodb-boost ^2.5.0
```

Then your `buildfile` would have something along these lines if using
SQLite:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
```

Or along these lines if using PostgreSQL and the Boost profile:

```
import! [metadata] odb = odb%exe{odb}

import libs  = libodb%lib{odb}
import libs += libodb-sqlite%lib{odb-sqlite}
import libs += libodb-boost%lib{odb-boost}
```

Note that the `odb` executable provides `build2` metadata.

The invocation of the ODB compiler (in order to generate the database support
code from your headers) can be implemented using ad hoc recipes or rules. See
the `odb-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 2.5.0

 * Database classes are now move-constructible. This means they can be
   returned by value from functions in C++11 and later.

 * Support for mapping C++ types as other C++ types. For example:

   #pragma db map type(bool)                 \\
                  as(std::string)            \\
                  to((?) ? "true" : "false") \\
		  from((?) == "true")

   See Section 14.8.1, "C++ Type Mapping Pragmas" in the ODB manual for
   details.

 * Support for custom table definition options in addition to column
   definition options. For details, refer to Section 14.1.16, "options" in
   the ODB manual.

 * New helper header, <odb/nested-container.hxx>, provides manual nested
   container support. For details, see the container-nested example in
   odb-examples.

 * New helper header, <odb/c-array-traits.hxx>, provides optional
   mapping of C arrays as containers. Note that this mapping is not
   enabled by default. See instructions inside the header for details.

 * Support for nested object ids. Now the `id` pragma specifier can optionally
   include the data member path to the id inside a composite value. For
   example:

   #pragma db id(first)
   std::pair<int, int> p;

   Note that one somewhat counter-intuitive aspect of this new feature is
   that the whole member marked with id (`p` in the above example) and not
   just the actual id member (p.first in the above example) is treated as
   read-only.

   Such nested id also cannot be automatically assigned (that is, use the
   `auto` specifier).

   To match this support the `inverse` pragma specifier now also allows
   nested data members.

 * Support for defining views as instantiations of C++ class templates,
   similar to objects and composite value types.

 * Support for using object pointers as map keys. Also the restriction for map
   keys and set values to be NOT NULL was removed.

 * New `points_to` pragma allows the establishment of relationships without
   using object pointers. See Section 14.4.37, "points_to" in the ODB manual
   for details.

 * A statement in a view that is prefixed with the /*SELECT*/ comment is
   recognized and handled as a SELECT statement. This can be used to work
   around unrecognized SELECT query prefixes.

 * Support for ordering virtual data members. For details, see Section
   14.4.13, "virtual" in the ODB manual.

 * The special (!) placeholder denotes the database instance in the modifier
   expressions. For details, see Section 14.4.5, "get/set/access" in the
   ODB manual.

 * Support for bulk operations in PostgreSQL 14 using the new pipeline mode.
   For details on bulk operations see Section 15.3, "Bulk Database Operations"
   in the ODB manual. Note that while this functionality requires libpq
   version 14 or later, it should be usable with PostgreSQL servers version
   7.4 or later. The development of this support was sponsored by Qube
   Research & Technologies Limited.

 * Support for calling PostgreSQL stored procedures and functions. For
   details and limitations refer to Section 19.7, "PostgreSQL Stored
   Procedures and Functions" in the ODB manual.

 * New serial_connection_factory in the SQLite runtime.

   This factory can be used when the database access is guaranteed to be
   serial. See Section 18.3, "SQLite Connection and Connection Factory"
   in the ODB manual for details.

 * Support for attaching additional SQLite databases to the main database
   connections (ATTACH DATABASE statement). See Section 18.4, "Attached
   SQLite  Databases" in the ODB manual for details.

 * Support for SQLite incremental BLOB/TEXT I/O (the sqlite3_blob_open()
   functionality). For details, refer to Section 18.1.3, "Incremental
   BLOB/TEXT I/O" in the ODB manual.

 * Support for mixed auto/manual id assignment in SQLite.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then set the id to NULL to get auto-assignment or to the actual value
   to use a manual id.

 * Support for mixed auto/0 id assignment in MySQL.

   Now one can do:

   #pragma db id auto
   odb::nullable<int64_t> id;

   And then, when used with NO_AUTO_VALUE_ON_ZERO, set the id to NULL to get
   auto-assignment or to 0 to use 0 as the id.

 * Map string object ids to MySQL VARCHAR(128) instead of 255 to support
   4-byte UTF-8.

   This is a backwards-incompatible change in that it may change your schema.
   To obtain the old behavior you will have to explicitly re-map std::string
   with the id_type pragma or explicitly specify the database type for each
   affected id member with the type pragma.

 * Due to warnings issued by some compiler, std::auto_ptr is no longer mapped
   as an object pointer or wrapper in the C++11 and later modes. Use
   std::unique_ptr instead.

Version 2.4.0

 * Support for object loading views. Object loading views allow loading of
   one or more complete objects instead of, or in addition to, a subset of
   data members and with a single SELECT statement execution. For details,
   refer to Section 10.2, "Object Loading Views" in the ODB manual.

 * Support for bulk operations in Oracle and SQL Server. Bulk operations
   persist, update, or erase a range of objects using a single database
   statement execution which often translates to a significantly better
   performance. For details, refer to Section 15.3, "Bulk Database
   Operations" in the ODB manual.

 * New database class functions, query_one() and query_value(), provide
   convenient shortcuts for situations where the query is known to return
   at most one element (query_one) or exactly one element (query_value).
   Corresponding execute_one() and execute_value() functions for prepared
   queries are also provided. For details, refer to Sections 4.3, "Executing
   a Query" and 4.5, "Prepared Queries" in the ODB manual.

 * Support for defining persistent objects as instantiations of C++ class
   templates, similar to composite value types. For details, refer to
   Section 15.2, "Persistent Class Template Instantiations" in the ODB
   manual.

 * Support for object and table join types in views. Supported join type
   are left, right, full, inner, and cross with left being the default.
   For details, refer to Sections 10.1, "Object Views" and 10.3, "Table
   Views" in the ODB manual.

 * Support for result modifiers in view query conditions. Currently
   supported result modifiers are 'distinct' (which is translated to
   SELECT DISTINCT) and 'for_update' (which is translated to FOR UPDATE or
   equivalent for database systems that support it). For details, refer to
   Section 10.5, "View Query Conditions" in the ODB manual.

 * Support for persisting std::deque containers.

 * New pragma, on_delete, allows the specification of an on-delete semantics
   (translated to the ON DELETE SQL clause) for an object pointer. For more
   information, refer to Section 14.4.15, "on_delete" in the ODB manual.

 * Besides odb::stderr_tracer there is now odb::stderr_full_tracer that
   traces statement preparations and deallocations in addition to their
   executions. This new implementation can be useful when you want to see
   the text of a statement that contains a syntax error and therefore
   will not actually be executed. For more information, refer to Section
   3.13, "Tracing SQL Statement Execution" in the ODB manual.

 * ODB can now compile headers that use #pragma once instead of include
   guards.

 * User-supplied prologues and epilogues are now generated outside the
   pre.hxx/post.hxx includes. This allows the use of precompiled headers
   with the generated files.

 * Support for calling MySQL stored procedures. For details and limitations
   refer to Section 17.7, "MySQL Stored Procedures" in the ODB manual.

 * Support for calling SQL Server stored procedures. For details and
   limitations refer to Section 21.7, "SQL Server Stored Procedures" in
   the ODB manual.

 * New option, --oracle-warn-truncation, makes ODB warn about SQL names
   that are longer than 30 characters and are therefore truncated. ODB
   now also detects when such truncations lead to Oracle name conflicts
   and issues diagnostics even without this option specified.

 * For MySQL, PostgreSQL, and SQL Server, ODB now warns when an SQL name
   exceeds the database limit (64, 63, and 128 characters, respectively).
   SQLite has no limitation on name lengths. For Oracle, which has a limit
   that is much more likely to be reached in normal circumstances (30
   characters), a more comprehensive detection is implemented (see the item
   above).

 * New option, --statement-regex, can be used to process prepared statement
   names that are used by PostgreSQL. This can be useful, for example, to
   shorten names that exceed the PostgreSQL name limit.

 * The --std option now accepts the 'c++14' value.

Version 2.3.0

 * Support for database schema evolution, including schema migration, data
   migration, and soft model changes. For more information, refer to Chapter
   13, "Database Schema Evolution" in the ODB manual.

 * Support for object sections. Sections are an optimization mechanism that
   allows the partitioning of data members of a persistent class into groups
   that can be loaded and/or updated separately. For more information, refer
   to Chapter 9, "Sections" in the ODB manual as well as the 'section'
   example in the odb-examples package.

 * Support for automatic mapping of C++11 enum classes in addition to "old"
   enums. For more information, refer to the ODB manual "Type Mapping"
   sections for each database system.

 * Support for defining composite value types inside persistent classes,
   views, and other composite values. For more information, refer to Section
   7.2, "Composite Value Types" in the ODB manual.

 * Support for pattern matching (SQL LIKE operator) in the C++-integrated
   queries. For more information, refer to Section 4.1, "ODB Query Language"
   in the ODB manual.

 * The schema_catalog::create_schema() function now has a third argument
   which indicates whether to drop the schema prior to creating the new one.
   The default is true which is backwards-compatible. The schema_catalog
   class now also provides the drop_schema() function which allows you to
   drop the schema without creating the new one. Finally, the exists()
   function now has the schema name argument which by default is an empty
   string (the default schema name). For more information, refer to Section
   3.4, "Database" in the ODB manual.

 * The transaction class now provides the default constructor that allows
   the creation of finalized transactions which can then be re-initialized
   with the reset() function. The finalized() accessor has also been added
   which allows querying of the finalization state. For more information,
   refer to Section 3.5, "Transactions" in the ODB manual.

 * New option, --fkeys-deferrable-mode, specifies the alternative deferrable
   mode for foreign keys. By default, the ODB compiler generates deferred
   foreign keys for databases that support them (SQLite, PostgreSQL, and
   Oracle) and comments the foreign keys out for databases that don't (MySQL
   and SQL Server). This option can be used to override this behavior. Refer
   to the ODB compiler command line interface documentation (man pages) for
   details.

 * Starting with MySQL version 5.6.4 it is possible to store fractional
   seconds up to microsecond precision in TIME, DATETIME, and TIMESTAMP
   columns. Both Boost and Qt profiles have been updated to support this
   new functionality. Note, however, that to enable sub-second precision,
   the corresponding type with the desired precision has to be specified
   explicitly. For details, refer to the "MySQL Database Type Mapping"
   sections in the Boost and Qt profile chapters.

 * New SQLite-specific exception, odb::sqlite::forced_rollback, which is
   thrown if SQLite forces a transaction to roll back. For more information,
   refer to Section 16.5.6, "Forced Rollback" in the ODB manual.

 * New options, --pgsql-server-version, can be used to specify the minimum
   PostgreSQL server version with which the generated C++ code and schema
   will be used. Right now this information is used to enable the use of
   the IF NOT EXISTS clause in the CREATE TABLE statement for the schema
   version table creation in PostgreSQL 9.1 and later. Refer to the ODB
   compiler command line interface documentation (man pages) for details.

 * The --output-name option has been renamed to --input-name, which is more
   semantically correct.

 * The generated database schema now explicitly specify NULL for nullable
   columns.

 * The generated separate C++ schema file (--schema-format separate) no
   longer includes the generated header file (-odb.hxx). As a result, it is
   now possible to use the --generate-schema-only and --at-once options to
   generate a combined C++ schema file for several headers.

Version 2.2.0

 * Multi-database support. This mechanism allows an application to
   simultaneously work with multiple database systems and comes in two
   flavors: static and dynamic. With static support the application uses
   the static database interfaces (that is, odb::<db>::database instead
   of odb::database). With dynamic support the same application code can
   access multiple databases via a common interface. Dynamic multi-database
   supports also allows the application to dynamically load the database
   support code for individual database systems if and when necessary. For
   more information, refer to Chapter 14, "Multi-Database Support" in the
   ODB manual.

 * Support for prepared queries. Prepared queries are a thin wrapper around
   the underlying database system's prepared statements functionality. They
   provide a way to perform potentially expensive query preparation tasks
   only once and then execute the query multiple times. For more information,
   refer to Section 4.5, "Prepared Queries" in the ODB manual as well as the
   'prepared' example in the odb-examples package.

 * Mapping for char[N] and std::array<char, N> to database VARCHAR(N-1) (or
   similar) as well as for char to database CHAR(1) (or similar). For SQL
   Server and SQLite on Windows equivalent mappings for wchar_t are also
   provided. Also the query support for arrays has been improved to allow
   passing a value of the decayed type (pointer) as a query parameter.
   For more information, refer to the ODB manual "Type Mapping" sections
   for each database system.

 * Support for change-tracking std::vector and QList container equivalents.
   Change-tracking containers minimize the number of database operations
   necessary to synchronize the container state with the database. For
   more information, refer to Sections 5.4, "Change-Tracking Containers",
   5.4.1 "Change-Tracking vector", and 22.3.1, "Change-Tracking QList"
   in the ODB manual.

 * Support for automatically-derived SQL name transformations (table, column,
   index, etc). At the higher level, it is possible to assign prefixes and
   suffixes (--table-prefix, --{index,fkey,sequence}--suffix options) as
   well as to convert to upper or lower case (--sql-name-case option). At
   the lower level, it is possible to specify transformations as regular
   expressions (--{table,column,index,fkey,sequence,sql-name}-regex options).
   For more information, refer to the SQL NAME TRANSFORMATIONS section in
   the ODB compiler command line interface documentation (man pages).

 * New options, --export-symbol and --extern-symbol, allow DLL-exporting of
   the generated database support code.

 * Support for transaction post- commit/rollback callbacks. For more
   information, refer to Section 13.1, "Transaction Callbacks" in the ODB
   manual.

 * Support for custom session implementations. For more information, refer
   to Section 10.2, "Custom Sessions" in the ODB manual.

 * Support for early connection release. Now the database connection is
   released when commit()/rollback() is called rather than when the
   transaction instance goes out of scope.

 * New odb::schema_catalog function, exists(), can be used to check whether
   a schema with the specified name exists in the catalog.

 * Support for SQL Server ROWVERSION-based optimistic concurrency. For more
   information, refer to Section 19.1.1, "ROWVERSION Support" in the ODB
   manual.

 * Support for specifying the SQL Server transaction isolation level. For
   more information, refer to Section 19.2, "SQL Server Database Class" in
   the ODB manual.

 * Support for "smart" containers. A smart container is provided with
   additional functions which allow it to insert, update, and delete
   individual elements in the database. Change-tracking containers are
   examples of smart containers that utilizes this new functionality.
   Currently only ordered smart containers are supported. Note also that
   with this addition the names of the database functions provided by the
   ODB compiler (see libodb/odb/container-traits.hxx) have changed. This
   will only affect you if you have added ODB persistence support for a
   custom container.

Version 2.1.0

 * The ODB compiler is now capable of automatically discovering accessor and
   modifier functions for inaccessible data members in persistent classes,
   composite value types, and views. It will then use these accessors and
   modifiers in the generated code instead of trying to access such data
   members directly. The names of these functions are derived from the
   data member names and, by default, the ODB compiler will look for names
   in the form: get_foo/set_foo, getFoo/setFoo, getfoo/setfoo, and just
   foo. You can also add custom name derivations with the --accessor-regex
   and --modifier-regex ODB compiler options. For more information, refer
   to Section 3.2, "Declaring Persistent Objects and Values" in the ODB
   manual.

 * New pragmas, get, set, and access, allow the specification of custom
   accessor and modifier expressions for data members in persistent classes,
   composite value types, and views. For more information, refer to Section
   12.4.5, "get/set/access" in the ODB manual as well as the 'access' example
   in the odb-examples package.

 * New pragma, virtual, allows the declaration of virtual data members. A
   virtual data member is an imaginary data member that is only used for
   the purpose of database persistence. This mechanism can be useful to
   aggregate or dis-aggregate real data members, implement the pimpl idiom,
   and to handle third-party types for which names of real data members may
   not be known. For more information, refer to Section 12.4.13, "virtual"
   in the ODB manual as well as the 'access' and 'pimpl' examples in the
   odb-examples package.

 * Support for defining database indexes. Both simple and composite indexes
   can be defined with support for database-specific index types, methods,
   and options. For more information, refer to Section 12.6, "Index
   Definition Pragmas" as well as Sections [13-17].16, "<Database> Index
   Definition" in the ODB manual.

 * Support for mapping extended database types, such as geospatial types,
   user-defined types, and collections. This mechanism allows you to map
   any database type to one of the types for which ODB provides built-in
   support (normally string or binary). The text or binary representation
   of the data can then be extracted into a C++ data type of your choice.
   For more information, refer to Section 12.7, "Database Type Mapping
   Pragmas" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost Multi-
   Index container (boost::multi_index_container). For more information,
   refer to Section 19.3, "Multi-Index Container Library" in the ODB manual.

 * The Boost profile now provides persistence support for the Boost uuid type
   (boost::uuids::uuid). For more information, refer to Section 19.6, "Uuid
   Library" in the ODB manual as well as the 'boost' example in the odb-
   examples package.

 * The Qt profile now provides persistence support for the QUuid type. For
   more information, refer to Section 20.1, "Basic Types" in the ODB manual
   as well as the 'qt' example in the odb-examples package.

 * SQLite improvements: Persistence support for std::wstring on Windows
   (Section 14.1, "SQLite Type Mapping"). Ability to pass the database
   name as std::wstring on Windows (Section 14.2, "SQLite Database Class").
   Ability to specify the virtual filesystem (vfs) module in the database
   constructors (Section 14.2, "SQLite Database Class").

 * Support for mapping C++11 std::array<char, N> and std::array<unsigned
   char, N> types to BLOB/BINARY database types. For more information,
   refer to Sections [13-17].1, "<Database> Type Mapping" in the ODB manual.

 * Support for mapping the char[16] array to PostgreSQL UUID and SQL Server
   UNIQUEIDENTIFIER types. For more information, refer to Sections 15.1,
   "PostgreSQL Type Mapping" and 17.1, "SQL Server Type Mapping" in the
   ODB manual.

 * New option, --output-name, specifies the alternative base name used to
   construct the names of the generated files. Refer to the ODB compiler
   command line interface documentation (man pages) for details.

 * New option, --generate-schema-only, instructs the ODB compiler to
   generate the database schema only. Refer to the ODB compiler command
   line interface documentation (man pages) for details.

 * New option, --at-once, triggers the generation of code for all the input
   files as well as for all the files that they include at once. Refer to
   the ODB compiler command line interface documentation (man pages) for
   details.

 * New options, --sql-interlude and --sql-interlude-file, allow the insertion
   of custom SQL between the DROP and CREATE statements in the generated
   database schema file.

 * New options, --omit-drop and --omit-create, trigger the omission of DROP
   and CREATE statements, respectively, from the generated database schema.

 * New ODB manual Section, 6.3 "Circular Relationships", explains how to
   handle persistent classes with circular dependencies that are defined
   in separate headers.

 * The id() pragma that was used to declare a persistent class without an
   object id has been renamed to no_id.

 * New pragma, definition, allows the specification of an alternative code
   generation point for persistent classes, views, and composite value
   types. This mechanism is primarily useful for converting third-party
   types to ODB composite value types. For more information, refer to
   Section 12.3.7, "Definition" in the ODB manual.

 * The session constructor now accepts an optional bool argument (true by
   default) which indicates whether to make this session current for this
   thread. For more information, refer to Chapter 10, "Session" in the ODB
   manual.

 * Simplified Oracle automatically-assigned object id implementation that
   does not rely on triggers.

 * Support for mapping boost::posix_time::ptime and QDateTime to the DATE
   Oracle type. For more information, refer to Sections 19.4.4 (Boost) and
   20.4.4 (Qt) in the ODB manual.

 * Default SQLite mapping for float and double now allows NULL since SQLite
   treats NaN FLOAT values as NULL. For more information, refer to Section
   14.1, "SQLite Type Mapping" in the ODB manual.

Version 2.0.0

  * Support for C++11. The newly supported C++11 standard library components
    include:
      - std::unique_ptr as object pointer or value wrapper
      - odb::lazy_unique_ptr lazy counterpart
      - std::shared_ptr/weak_ptr as object pointer or value wrapper
      - odb::lazy_shared_ptr/lazy_weak_ptr lazy counterparts
      - support for array, forward_list, and unordered containers
      - connection factory can be passed to the database constructor as
        std::unique_ptr instead of std::auto_ptr

    The ODB compiler now recognizes the --std option. Valid values for this
    option are 'c++98' (default) and 'c++11'. In the runtime libraries the
    C++11 support is header-only which means that the same build of a runtime
    library can be used in both the C++98 and C++11 modes. On UNIX, the tests
    and examples can be compiled in the C++11 mode by passing the necessary
    options to turn the C++ compiler into this mode (e.g., -std=c++0x GCC
    option). On Windows, the tests and examples are always built in the C++11
    mode with VC++ 10 and later. The new 'c++11' example in the odb-examples
    package shows ODB support for some of the C++11 features.

  * Support for polymorphism. Now a persistent class hierarchy can be
    declared polymorphic which makes it possible to persist, load, update,
    erase, and query objects of derived classes using their base class
    interfaces. For more information, refer to Chapter 8, "Inheritance" in
    the ODB manual as well as the 'inheritance/polymorphism' example in the
    odb-examples package.

  * Support for composite object ids. Now a composite value type can be used
    to declare an object id member. For more information, refer to Section
    7.2.1, "Composite Object Ids" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for the NULL value semantics for composite values. For more
    information, refer to Section 7.3, "Pointers and NULL Value Semantics"
    in the ODB manual.

  * New schema format (--schema-format), 'separate', allows the generation
    of the schema creation code into a separate C++ source file (called
    '<name>-schema.cxx' by default). This value is primarily useful if you
    want to place the schema creation functionality into a separate program
    or library.

  * New namespace-level pragmas: table, pointer. The table pragma specifies
    the table prefix that is added to table names for all the persistent
    classes inside a namespace. The pointer pragma specifies the default
    pointer type to be used for persistent classes and views inside a
    namespace. For more information, refer to Section 12.5.1, "pointer" and
    Section 12.5.2, "table" in the ODB manual.

  * Session support is now optional and is disabled by default. This is a
    backwards-incompatible change. Session support can be enabled on the
    per class basis or at the namespace level using the new session pragma.
    It can also be enabled by default for all the persistent classes using
    the --generate-session ODB compiler option. Thus, to get the old behavior
    where all the objects were session-enabled, simply add --generate-session
    to your ODB compiler command line. For more information, refer to Chapter
    10, "Session" in the ODB manual.

  * The semantics of the database operations callbacks has changed with
    respect to object const-ness. This is a backwards-incompatible change.
    Now the callback function for the *_persist, *_update, and *_erase events
    is always called on the constant object reference while for the *_load
    events -- always on the unrestricted reference. For more information,
    refer to Section 12.1.7, "callback" in the ODB manual.

  * New function, transaction::reset(), allows the reuse of the same
    transaction instance to complete several database transactions. For more
    information, refer to Section 3.4, "Transactions" in the ODB manual.

  * New exception, odb::session_required, is thrown when ODB detects that
    correctly loading a bidirectional object relationship requires a session
    but one is not used. For more information, refer to Section 6.2,
    "Bidirectional Relationships" in the ODB manual.

Version 1.8.0

  * Support for the Microsoft SQL Server database. The provided connection
    factories include 'new' (a new connection is created every time one is
    requested) and 'pool' (a pool of connections is maintained). The Boost
    and Qt profiles have been updated to support this database. For more
    information, refer to Chapter 17, "Microsoft SQL Server Database" in
    the ODB manual.

  * Support for defining composite value types as C++ class template
    instantiations. For more information, refer to Section 7.2, "Composite
    Value Types" in the ODB manual as well as the 'composite' example in the
    odb-examples package.

  * Support for database schemas ("database namespaces"). A schema can be
    specified for a persistent class, for a C++ namespace (the schema then
    applies to all the persistent classes within this namespace), and for a
    file with the --schema ODB compiler option. For more information, refer
    to Section 12.1.8, "schema" in the ODB manual.

  * The --default-schema option has been renamed to --schema-name.

  * The default Oracle mapping for std::string has changed from VARCHAR2(4000)
    to VARCHAR2(512).

Version 1.7.0

  * Support for the Oracle database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 16, "Oracle Database" in the ODB manual.

  * Support for optimistic concurrency. For more information refer to Chapter
    11, "Optimistic Concurrency" in the ODB manual as well as the 'optimistic'
    example in the odb-examples package.

  * Support for read-only objects, composite value types, and data members.
    The new readonly pragma can be used to declare one of these entities as
    read-only. Constant data members are automatically treated as read-only.
    For more information, refer to Section 12.1.4 "readonly (object)",
    Section 12.3.6 "readonly (composite value)", and Section 12.4.10
    "readonly (data member)" in the ODB manual.

  * Support for persistent classes without object identifiers. Such classes
    have to be explicitly declared as not having an object id and they have
    limited functionality. For more information, refer to Section 12.1.5
    "id" in the ODB manual.

  * Support for SQL statement execution tracing. For more information, refer
    to Section 3.12 "Tracing SQL Statement Execution" in the ODB manual.

  * Support for mapping char[N], unsigned char[N], and std::vector<unsigned
    char> to the BLOB (or equivalent) types. For more information, refer to
    Chapters 13 (for MySQL), 14 (for SQLite), 15 (for PostgreSQL), and 16
    (for Oracle) in the ODB manual.

  * Query result iterator now provides the id() function which allows one
    to get the object id without loading the object. For more information,
    refer to Section 4.4 "Query Result" in the ODB manual.

  * Support for microsecond precision in Boost and Qt date-time types
    mapping to PostgreSQL date-time data types. Additionally, Qt QDateTime
    values stored in a PostgreSQL database can now be earlier than the UNIX
    epoch.

Version 1.6.0

  * New concept, view, is a C++ class that embodies a light-weight, read-
    only projection of one or more persistent objects or database tables
    or the result of a native SQL query execution. Some of the common
    applications of views include loading a subset of data members from
    objects or columns from database tables, executing and handling
    results of arbitrary SQL queries, including aggregate queries, as
    well as joining multiple objects and/or database tables using object
    relationships or custom join conditions. For more information refer
    to Chapter 9, "Views" in the ODB manual as well as the 'view' example
    in the odb-examples package.

  * New function, database::erase_query(), allows the deletion of the
    database state of multiple objects matching certain criteria. It uses
    the same query expression as the database::query() function. For more
    information, refer to Section 3.10, "Deleting Persistent Objects" in
    the ODB manual.

  * Support for value wrappers. An ODB value wrapper is a class template
    that wraps a value type or a container. Common examples of wrappers
    are smart pointers, holders, and "optional value" containers such as
    boost::optional. A wrapper can be transparent or it can handle the
    NULL semantics. To allow the easy conversion of value types that do
    not support the NULL semantics into the ones that do, the odb::nullable
    class template has been added. ODB now also includes built-in support for
    std::auto_ptr and std::tr1::shared_ptr smart pointers as value wrappers
    as well as for boost::shared_ptr and QSharedPointer via the Boost and Qt
    profiles. Currently, the NULL semantics is only supported for simple
    values but smart pointers can still be used with composite values and
    containers. For more information, refer to Section 7.3, "NULL Value
    Semantics" in the ODB manual.

  * Support for the boost::optional container in the Boost profile. A data
    member of the boost::optional type is mapped to a column that can have
    a NULL value. For more information, refer to Section 15.3 "Optional
    Library" in the ODB manual.

  * Support for mapping std::vector<char> to the BLOB (or equivalent) types.
    For more information, refer to Chapters 11 (for MySQL), 12 (for SQLite)
    and 13 (for PostgreSQL) in the ODB manual.

  * New option, --table-prefix, allows the specification of a prefix that
    is added to table and index names. For more information, refer to the
    ODB compiler command line interface documentation (man pages).

  * New ODB runtime library interface, odb::connection, represents a
    connection to the database. The primary use case for a connection is to
    execute native statements outside of a transaction. For more information,
    refer to Section 3.5, "Connections" in the ODB manual.

  * Support for multiplexing several transactions on the same thread. For
    more information, refer to Section 3.4, "Transactions" in the ODB
    manual.

  * All the concrete connection classes now have a second constructor which
    allows the creation of a connection instance from an already established
    underlying connection handle. The connection_pool_factory and, in case of
    SQLite, single_connection_factory now have a virtual create() function
    that can be overridden to implement custom connection establishment and
    configuration.

  * The query expression syntax for object pointers and composite values has
    changed. Now, instead of using the scope resolution operator ('::'), the
    member access via a pointer operator (->) is used for object pointers and
    the member access operator (.) is used for composite values. Examples of
    old and new syntax for pointers, old: query<employee>::employer::name,
    new: query<employee>::employer->name. For composites values, old:
    query<employee>::name::first, new: query<employee>::name.first.

  * SQLite ODB runtime now enables foreign key constraints checking by
    default. While this should not affect correct applications, due to
    bugs in SQLite DDL foreign keys support, you may need to temporarily
    disable foreign key constraints checking when re-creating the database
    schema (the sign that you may need to do so is the "foreign key
    constraint failed" exception thrown by the commit() function after the
    call to schema_catalog::create_schema()). For more information, refer
    to Section 12.5.3, "Foreign Key Constraints" in the ODB manual.

  * Support for specifying the client character set for the MySQL database.
    For more information, refer to Section 11.2, "MySQL Database Class" in
    the ODB manual.

  * Object cache maintained by a session no longer distinguishes between
    const and non-const objects. Instead, const objects are treated as
    non-const by casting away constness. For more information on this new
    behavior, refer to Section 9.1, "Object Cache" in the ODB manual.

Version 1.5.0

  * Support for the PostgreSQL database. The provided connection factories
    include 'new' (a new connection is created every time one is requested)
    and 'pool' (a pool of connections is maintained). The Boost and Qt
    profiles have been updated to support this database. For more information,
    refer to Chapter 13, "PostgreSQL Database" in the ODB manual.

  * New handling of the NULL semantics. Now, instead of being specified as
    part of the SQL type with the type pragma, there are separate null and
    not_null pragmas. The not_null pragma was used to control the NULL
    semantics of object pointers. Now the two pragmas are used consistently
    for object pointers and simple values (and, in the future, they will work
    for composite values and containers). To control the NULL semantics of
    the container's element values, the value_null and value_not_null pragmas
    have been added, similar to the value_type, value_column, etc., pragmas.
    For more information about the new mechanism, refer to Sections 10.2.3,
    10.2.8, 10.3.4, and 10.3.13 in the ODB manual.

    This is a backwards-incompatible change. Existing use cases that will
    require manual changes are listed below.

    For pragmas that apply to simple value types and data members of
    such types:

    #pragma db type("TEXT NOT NULL") => #pragma db type("TEXT")
    #pragma db type("TEXT NULL")     => #pragma db type("TEXT") null
    #pragma db type("TEXT")          => #pragma db type("TEXT") null

    For pragmas that apply to containers of pointers and data members of
    such types:

    #pragma db not_null              => #pragma db value_not_null

  * New pragma, default, allows the specification of the database default
    value. For more information, refer to Section 10.3.5, "default" in the
    ODB manual.

  * New pragmas, options, id_options, index_options, key_options, and
    value_options, allow the specification of additional column definition
    options. For more information, refer to Section 10.3.6, "options" in
    the ODB manual.

  * Support for database operations callbacks. Now a persistent class can
    register a callback function that will be called before and after every
    database operation (such as persist, load, update, or erase) is performed
    on an object of this class. A database operations callback can be used to
    implement object-specific pre and post initializations, registrations,
    and cleanups. For more information and an example, refer to Section
    10.1.4, "callback" in the ODB manual.

  * New option, --include-regex, allows the modification of the #include
    directive paths generated by the ODB compiler. This is primarily useful
    when placing the generated code into subdirectories and the #include
    directives have to be adjusted accordingly. The --include-regex-trace
    option is useful for debugging the expressions specified with
    --include-regex.

Version 1.4.0

  * New profile, qt, provides persistence support for the Qt framework. This
    version covers the most commonly used basic types, date-time types, smart
    pointers, and containers. The qt profile implementation is provided by the
    libodb-qt library. For more information refer to Chapter 13, "Profiles
    Introduction" and Chapter 15, "Qt Profile" in the ODB manual as well as
    the 'qt' example in the odb-examples package.

  * Support for non-polymorphic object inheritance, including the new abstract
    pragma. For more information refer to Chapter 8, "Inheritance" in the ODB
    manual as well as the 'inheritance' example in the odb-examples package.

  * Automatic mapping of C++ enumerations to suitable database types. In
    database systems that support enumeration types (such as MySQL), a C++
    enum is mapped to such a type (for example, ENUM('red', 'green', 'blue')
    in MySQL). Otherwise, it is mapped to a suitable integer type. Refer to
    Part II, "Database Systems" in the ODB manual for more details on the
    provided mappings.

  * New pragma, id_type, allows the specification of the native database type
    that should be used for data members designated as object identifiers. In
    combination with the type pragma, id_type allows you to map a C++ type
    differently depending on whether it is used in an ordinary member or an
    object id.

  * New options, --odb-prologue-file and --odb-epilogue-file, allow the
    inclusion of file contents into the ODB compilation.

  * Default mapping of the size_t and std::size_t types to a 64-bit integer
    database type irrespective of the platform width. This can be overridden
    with the type pragma.

Version 1.3.0

  * Support for the SQLite database. The provided connection factories include
    'new' (a new connection is created every time one is requested), 'single'
    (single connection is shared among all the callers), and 'pool' (a pool
    of connections is maintained). In multi-threaded applications the runtime
    uses the SQLite shared cache and unlock notification features to aid
    concurrency. For more information, refer to Chapter 11, "SQLite Database"
    in the ODB manual.

  * Support for database-specific profiles. Now the ODB compiler first looks
    for the <profile>-<database>.options file and only if this file is not
    found, does it fall back to <profile>.options.

  * Support for the GCC 4.6 plugin interface changes.

Version 1.2.0

  * New profile, boost, provides persistence support for the Boost libraries.
    This version covers the most commonly used types from the smart_ptr,
    unordered, and date_time libraries. The boost profile implementation is
    provided by the libodb-boost library. For more information refer to
    Chapter 11, "Profiles Introduction" and Chapter 12, "Boost Profile" in
    the ODB manual as well as the 'boost' example in the odb-examples package.

  * Support for embedded database schemas. The new option, --schema-format,
    allows the selection of the schema format. The valid values for this
    option are 'sql' for a standalone SQL file and 'embedded' for a schema
    embedded into the generated C++ code. The new odb::schema_catalog class
    provides support for accessing embedded schemas from within the
    application. For details refer to Section 3.3, "Database" in the ODB
    manual as well as the 'schema/embedded' example in the odb-examples
    package.

  * New exceptions: odb::recoverable, odb::connection_lost, and odb::timeout.
    The odb::recoverable exception is a common base class for all recoverable
    ODB exceptions. The other two exceptions plus odb::deadlock now inherit
    from this base. Refer to Section 3.5, "Error Handling and Recovery" for
    details.

  * Support for connection validation (ping) in MySQL connection_pool_factory.
    This transparently deals with the MySQL server closing connections after
    a certain period of inactivity.

  * New namespace, odb::core, contains using-declarations for the core ODB
    constructs, such as the database, transaction, etc. The primary use of
    this namespace is in the using-directives:

    using namespace odb::core;

    The above form should be preferred over the old variant:

    using namespace odb;

    The new approach brings all the essential ODB names into the current
    namespace without any of the auxiliary objects such as traits, etc., which
    minimizes the likelihood of conflicts with other libraries.  Note that you
    should still use the odb namespace when qualifying individual names, for
    example, odb::database.

  * New option aliases: -q for --generate-query and -s for --generate-schema.

  * Support for the default options file. Now, if configured, the ODB compiler
    loads the default options file (by default ../etc/odb/default.options,
    relative to the ODB compiler binary). This file can be used for
    installation-wide customization, such as adding extra include search
    paths.

Version 1.1.0

  * Support for storing containers in the database. For more information refer
    to Chapter 5, "Containers" in the ODB manual as well as the 'container'
    example in the odb-examples package.

  * Support for unidirectional and bidirectional object relationships,
    including lazy loading. For more information refer to Chapter 6,
    "Relationships" in the ODB manual as well as the 'relationship' and
    'inverse' examples in the odb-examples package.

  * Support for composite value types. For more information refer to Chapter
    7, "Composite Value Types" in the ODB manual as well as the 'composite'
    example in the odb-examples package.

  * Support for sessions. A session is an application's unit of work that
    may encompass several database transactions. In this version of ODB a
    session is just an object cache. For more information refer to Chapter
    8, "Session" in the ODB manual.

  * Support for custom object pointers that allows you to use smart pointers
    to return, pass, and cache persistent objects. See Section 3.2, "Object
    Pointers" in the ODB manual for details.

  * Support for native SQL statement execution. See Section 3.9, "Executing
    Native SQL Statements" in the ODB manual for details.

  * New option, --profile/-p, instructs the ODB compiler to use the specified
    profile library. See the ODB compiler command line manual for details.

  * Support for literal names (template-id, derived type declarator such as
    pointers, etc) in data member declarations. Now, for example, you can use
    std::vector<std::string> directly instead of having to create a typedef
    alias for it.

  * Support for inheritance from transient base types for object types and
    composite value types.

  * New example, 'schema/custom', shows how to map persistent C++ classes to
    a custom database schema.

  * New options, --odb-prologue, --odb-epilogue, allow inclusion of extra code
    into the ODB compilation process. This can be useful for making additional
    traits specializations or ODB pragmas known to the ODB compiler.

  * Support for persistent classes without default constructors. For objects
    of such classes only the load() and find() database functions that
    populate an existing instance can be used. Similarly, only the load()
    query result iterator function which populates an existing instance can
    be used.

Version 1.0.0

  * Initial release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com
build-warning-email: odb-builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libstudxml ^1.1.0
depends: libcutl ^1.11.0
depends: * cli ^1.2.0 ? ($config.odb.develop)
requires: host
requires: c++11
builds: all relocatable
builds: -( +windows -gcc ); Requires MinGW GCC.
builds: &gcc; Requires GCC with plugin support enabled.
builds: &gcc-5+; Requires GCC 5 or later.
builds: -static; Implementation uses plugins and requires -fPIC.
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-include: linux_ubuntu*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
bpkg.bindist.debian:--recursive=auto
bpkg.bindist.debian:--debian-main-extradep=g++

# Prepend system package manager options instead of overriding.
#
bpkg.bindist.debian:--debian-buildflags=prepend

bpkg.create:config.bin.lib=static

# Reset common options for dependencies (because we are prepending).
#
bpkg.create:config.cc.poptions=[null]
bpkg.create:config.cc.coptions=[null]
bpkg.create:config.cc.loptions=[null]

# Append custom options for dependencies.
#
bpkg.create:config.c.coptions="-fPIC -fno-lto"
bpkg.create:config.cxx.coptions="-fPIC -fno-lto"

# Reset common options for odb (because we are prepending).
#
bpkg.configure.build:.../config.cc.poptions=[null]
bpkg.configure.build:.../config.cc.coptions=[null]
bpkg.configure.build:.../config.cc.loptions=[null]

# Append custom options for odb.
#
bpkg.configure.build:.../config.cxx.coptions=-fno-lto
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-include: linux_rhel*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
bpkg.bindist.fedora:--recursive=auto
bpkg.bindist.fedora:--fedora-main-extrareq=g++

# Prepend system package manager options instead of overriding.
#
bpkg.bindist.fedora:--fedora-buildflags=prepend

bpkg.create:config.bin.lib=static

# Reset common options for dependencies (because we are prepending).
#
bpkg.create:config.cc.poptions=[null]
bpkg.create:config.cc.coptions=[null]
bpkg.create:config.cc.loptions=[null]

# Append custom options for dependencies.
#
bpkg.create:config.c.coptions="-fPIC -fno-lto"
bpkg.create:config.cxx.coptions="-fPIC -fno-lto"

# Reset common options for odb (because we are prepending).
#
bpkg.configure.build:.../config.cc.poptions=[null]
bpkg.configure.build:.../config.cc.coptions=[null]
bpkg.configure.build:.../config.cc.loptions=[null]

# Append custom options for odb.
#
bpkg.configure.build:.../config.cxx.coptions=-fno-lto
\
bindist-windows-builds: bindist
bindist-windows-build-include: windows*-gcc**
bindist-windows-build-exclude: **
bindist-windows-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=auto
bpkg.bindist.archive:--archive-lang-impl=cc=

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.create:config.bin.lib=static
b.create:config.cc.coptions="-Wall -O3"

# At the bpkg.bindist.archive step, configure odb to refer to g++ using the
# relative ../mingw/bin/g++ path (see above for details). Note that g++ is not
# available at this path on the b.test-installed.test step, thus we disable
# it. @@ TODO: once we have support for script hooks, we can prepare complete
# archive and re-enable this step.
#
bpkg.bindist.archive:config.odb.gxx_name=../mingw/bin/g++
-b.test-installed.test:
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v3; see accompanying LICENSE file

project = odb

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v3; see accompanying LICENSE file

# This configuration variable can be used to specify the GCC plugin directory
# instead of auto-discovering it with -print-file-name=plugin. Primarily
# useful when dealing with cross-compilation.
#
config [dir_path, config.report.variable=plugin_dir] \\
  config.odb.plugin_dir ?= [null]

# This configuration variable can be used to specify the GCC g++ executable
# name that will be called by the ODB compiler instead of auto-deriving it
# from config.cxx. Primarily useful when dealing with cross-compilation.
#
config [string, config.report.variable=gxx_name] \\
  config.odb.gxx_name ?= [null]

config [bool] config.odb.develop ?= false

develop = $config.odb.develop

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

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

cxx.poptions =+ "-I$out_root" "-I$src_root"

# Specify the test target for cross-testing.
#
test.target = $cxx.target

# Omit the rest during the skeleton load.
#
if ($build.mode != 'skeleton')
{
  if ($cxx.id != 'gcc')
    fail 'ODB compiler can only be built with GCC'

  # Determine the GCC plugin directory unless specified explicitly.
  #
  if ($config.odb.plugin_dir != [null])
    plugin_dir = $config.odb.plugin_dir
  else
  {
    # If plugin support is disabled, then -print-file-name will print the name
    # we have passed (the real plugin directory will always be absolute).
    #
    plugin_dir = [dir_path] $process.run($cxx.path -print-file-name=plugin)

    if ("$plugin_dir" == plugin)
      fail "$recall($cxx.path) does not support plugins"
  }

  # It can also include '..' components (e.g., on Windows) so normalize it for
  # good measure.
  #
  plugin_dir = $normalize($plugin_dir)

  # Determine the g++ executable name unless specified explicitly.
  #
  if ($config.odb.gxx_name != [null])
    gxx_name = $config.odb.gxx_name
  else
  {
    # Unless cross-compiling, pass the C++ compiler's recall path as the g++
    # name.
    #
    # Note that we used to compare complete target triplets but that prooved
    # too strict. For example, we may be running on x86_64-apple-darwin17.7.0
    # while the compiler is targeting x86_64-apple-darwin17.3.0.
    #
    if ($cxx.target.cpu    == $build.host.cpu && \\
        $cxx.target.system == $build.host.system)
    {
      gxx_name = $recall($cxx.path)
    }
    else
      fail "g++ executable name must be specified explicitly with \\
config.odb.gxx_name when cross-compiling"
  }

  # Extract the copyright notice from the LICENSE file.
  #
  # Note that cat is a builtin which means this is both portable and fast.
  #
  copyright = $process.run_regex(cat $src_root/LICENSE,    \\
                                 'Copyright \(c\) (.+)\.', \\
                                 '\1')
}
else
{
  # Set for report.
  #
  plugin_dir = [null]
  gxx_name = [null]
}

\
location: odb/odb-2.5.0.tar.gz
sha256sum: 9151172907f8d0116a6429b259dcc900ced0a2992a5eb6144b8e4ca0525fc648
:
name: odb-examples
version: 2.5.0
type: examples
language: c++
project: odb
summary: ODB compiler usage examples
license: Unlicense
description:
\
# odb-examples - ODB usage examples

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains examples of using ODB with the following list giving an
overview of the available examples. See the `README` file accompanying each
example for more information. See `odb-tests/README.md` for instructions on
setting up various databases to run these examples.

Note also that most of the examples use the --table-prefix ODB compiler
option to assign a unique prefix to tables created by each example. This
is done to allow examples to run against the same  database without
causing any schema conflicts. You don't have to use this option in your
own applications.

## hello

A "Hello World" example that shows how to use ODB to perform basic database
operations.

## query

Shows how to use the ODB Query Language to search the database for persistent
objects matching certain criteria.

## composite

Shows how to declare and use composite value types.

## container

Shows how to use containers as data members in persistent objects.

## relationship

Shows how to declare and use unidirectional to-one and to-many relationships.

## inverse

Shows how to declare and use bidirectional one-to-one, one-to-many, and
many-to-many relationships.

## inheritance/reuse

Shows how to use reuse inheritance with ODB.

## inheritance/polymorphism

Shows how to use polymorphism inheritance with ODB.

## section

Shows how to use object sections to implement lazy-loading and change-updating
of a subset of data members in a persistent class.

## view

Shows how to define and use object, table, mixed, and native views.

## prepared

Shows how to use prepared queries.

## optimistic

Shows how to use optimistic concurrency in ODB.

## pimpl

Shows how to use virtual data members to implement a persistent class that
employs the pimpl C++ idiom.

## c++11

Shows how to use ODB with C++11.

## access

Shows various approaches used by ODB to access data members that cannot be
accessed directly.

## boost

Shows how to persist objects that use Boost smart pointers, containers, and
value types with the help of the Boost profile library (libodb-boost).

## qt

Shows how to persist objects that use Qt smart pointers, containers, and value
types with the help of the Qt profile library (libodb-qt).

## schema/embedded

Shows how to generate and use a database schema that is embedded into the
application.

## schema/custom

Shows how to map persistent C++ classes to a custom database schema.

## mapping

Shows how to customize the mapping between C++ value types and database types.

\
description-type: text/markdown;variant=GFM
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: * odb == 2.5.0
depends: libodb == 2.5.0
depends: libodb-mysql == 2.5.0 ? ($mysql)
depends: libodb-sqlite == 2.5.0 ? ($sqlite)
depends: libodb-pgsql == 2.5.0 ? ($pgsql)
depends: libodb-oracle == 2.5.0 ? ($oracle)
depends: libodb-mssql == 2.5.0 ? ($mssql)
depends: libodb-boost == 2.5.0 ? ($boost)
depends: libodb-qt == 2.5.0 ? ($qt)
depends: libboost-multi-index ? ($boost)
depends: libboost-optional ? ($boost)
depends: libboost-smart-ptr ? ($boost)
depends: libboost-unordered ? ($boost)
depends: libboost-uuid ? ($boost)
depends: libboost-date-time ? ($boost)
depends: libQt5Core ? ($qt && $qt_ver == 5)
depends: libQt6Core ? ($qt && $qt_ver == 6)
depends: * mysql-client >= 5.0.3 ? ($mysql)
depends: * psql >= 7.4.0 ? ($pgsql)
requires: * sqlplus ? ($oracle)
requires: * sqlcmd ? ($mssql)
builds: all
builds: -( +windows -gcc ); Requires MinGW GCC.
builds: &gcc; Requires GCC with plugin support enabled.
builds: &gcc-5+; Requires GCC 5 or later.
builds: -static; Implementation uses plugins and requires -fPIC.
custom-builds: default; Requires default config with GCC as host compiler.
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
multi-builds: none; Multiple databases cannot be configured.
custom-multi-builds: none; Multiple databases cannot be configured.
custom-multi-oracle-builds: none; Multiple databases cannot be configured.
custom-multi-mssql-builds: none; Multiple databases cannot be configured.
boost-custom-builds: default; Requires default config with GCC as host\
 compiler.
boost-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
boost-custom-builds: -static; Implementation uses plugins and requires -fPIC.
boost-custom-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt5-custom-builds: default; Requires default config with GCC as host compiler.
qt5-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
qt5-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-custom-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt6-custom-builds: default; Requires default config with GCC as host compiler.
qt6-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
qt6-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-custom-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : not copyrighted - public domain

project = odb-examples

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : not copyrighted - public domain

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

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

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

skeleton = ($build.mode == 'skeleton')

# The identifier of the database to compile and run the examples against. The
# valid identifiers are mysql, sqlite, pgsql, oracle, and mssql.
#
# Note: can be specified by the user but is also conditionally reflected by
#       the libodb-* libraries' examples manifest values.
#
config [string] config.odb_examples.database

database = [string] ($defined(config.odb_examples.database) \\
                     ? $config.odb_examples.database        \\
                     : '')

mysql  = false
sqlite = false
pgsql  = false
oracle = false
mssql  = false

switch $database
{
  case 'mysql'
    mysql = true

  case 'sqlite'
    sqlite = true

  case 'pgsql'
    pgsql = true

  case 'oracle'
    oracle = true

  case 'mssql'
    mssql = true

  case ''
    assert ($skeleton) \\
      'database must be configured via config.odb_examples.database variable'

  default
    fail "invalid database '$database' specified in config.odb_examples.datab\
ase value"
}

# If true, then this package is enabled as external examples for libodb
# library (see libodb's manifest for details).
#
# Note that this variable is not used in this package itself.
#
config [bool] config.odb_examples.libodb_example ?= false

# If true, then build the boost/ example.
#
config [bool] config.odb_examples.boost ?= false

boost = $config.odb_examples.boost

# If defined, then, depending on the value, build the qt/ example against Qt5
# (5) or Qt6 (6).
#
config [uint64] config.odb_examples.qt

qt = $defined(config.odb_examples.qt)

if $qt
{
  qt_ver = $config.odb_examples.qt

  assert ($qt_ver == 5 || $qt_ver == 6) \\
    'config.odb_examples.qt value must be between 5 and 6'
}

# Database connections.
#

# MySQL
#
# The database user.
#
config [string] config.odb_examples.mysql.user ?= 'odb_test'

# The database password.
#
config [string] config.odb_examples.mysql.passwd

# The database name. Note that it WILL BE MODIFIED by the examples.
#
config [string] config.odb_examples.mysql.database ?= 'odb_test'

# The database host.
#
config [string] config.odb_examples.mysql.host

# The database port.
#
config [uint64] config.odb_examples.mysql.port

# The database socket path.
#
config [path] config.odb_examples.mysql.socket

# PostgreSQL
#
# The database user. Note that the named user must be allowed to connect to
# the database server without specifying credentials.
#
config [string] config.odb_examples.pgsql.user ?= 'odb_test'

# The database name. Note that it WILL BE MODIFIED by the examples.
#
config [string] config.odb_examples.pgsql.database ?= 'odb_test'

# The database host or directory of Unix-domain socket. Leaving this variable
# undefined results in using Unix-domain sockets. Machines without Unix-domain
# sockets will connect to localhost.
#
config [string] config.odb_examples.pgsql.host

# The database port or the socket file name extension for Unix-domain
# connections.
#
# For example, specifying:
#
#   config.odb_examples.pgsql.host=/var/run/postgresql
#   config.odb_examples.pgsql.port=5433
#
# Will result in the /var/run/postgresql/.s.PGSQL.5433 socket being used.
#
config [string] config.odb_examples.pgsql.port

# Oracle
#
# The database user.
#
config [string] config.odb_examples.oracle.user ?= 'odb_test'

# The database password.
#
config [string] config.odb_examples.oracle.passwd

# The database host.
#
config [string] config.odb_examples.oracle.host

# The database port.
#
config [uint64] config.odb_examples.oracle.port

# The service name. Note that the database associated with this user on this
# service WILL BE MODIFIED by the examples.
#
config [string] config.odb_examples.oracle.service

# Microsoft SQL Server
#
# The database user.
#
config [string] config.odb_examples.mssql.user ?= 'odb_test'

# The database password.
#
config [string] config.odb_examples.mssql.passwd

# The database name. Note that it WILL BE MODIFIED by the examples.
#
config [string] config.odb_examples.mssql.database ?= 'odb_test'

# The database host.
#
config [string] config.odb_examples.mssql.host

# The database port.
#
config [uint64] config.odb_examples.mssql.port

# The SQL Server instance address.
#
# Note: mutually exclusive with config.odb_examples.mssql.{host,port}.
#
config [string] config.odb_examples.mssql.server

assert (!$defined(config.odb_examples.mssql.server) || \\
        !$defined(config.odb_examples.mssql.host))     \\
  'variables config.odb_examples.mssql.server and config.odb_examples.mssql.h\
ost cannot be specified both'

assert (!$defined(config.odb_examples.mssql.server) || \\
        !$defined(config.odb_examples.mssql.port))     \\
  'variables config.odb_examples.mssql.server and config.odb_examples.mssql.p\
ort cannot be specified both'

# The SQL Server ODBC Driver.
#
config [string, null] config.odb_examples.mssql.driver

if! $skeleton
{
  if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.coptions += -Wno-unknown-pragmas
    }
    case 'msvc'
    {
      cxx.coptions += /wd4068 /wd4251 /wd4275 /wd4800
    }
  }

  # Import odb that we are using.
  #
  import! [metadata] odb = odb%exe{odb}

  # Import the mysql client for creating the database schemas, etc.
  #
  if $mysql
  {
    import! mysql_client = mysql-client%exe{mysql}
    testscript{*}: mysql_client = $mysql_client
  }
  #
  # Import the psql client for creating the database schemas, etc.
  #
  elif $pgsql
  {
    import! pgsql_client = psql%exe{psql}
    testscript{*}: pgsql_client = $pgsql_client
  }
  #
  # Import the sqlplus client for creating the database schemas, etc.
  #
  # Note: expected to be system-installed.
  #
  elif $oracle
  {
    import! oracle_client = sqlplus%exe{sqlplus}
    testscript{*}: oracle_client = $oracle_client
  }
  #
  # Import the sqlcmd client for creating the database schemas, etc.
  #
  # Note: expected to be system-installed.
  #
  elif $mssql
  {
    import! mssql_client = sqlcmd%exe{sqlcmd}
    testscript{*}: mssql_client = $mssql_client
  }

  # Every exe{} in this project is by default a test.
  #
  exe{*}: test = true

  # Specify the test target for cross-testing.
  #
  test.target = $cxx.target
}

# The helper targets which can be used as prerequisites of test drivers which
# require either a specific database client or multiple clients for all the
# enabled databases.
#
alias{mysql-client}: $mysql_client:
{
  include = $mysql
  clean = false
}

alias{pgsql-client}: $pgsql_client:
{
  include = $pgsql
  clean = false
}

alias{database-client}: alias{mysql-client pgsql-client}

\
location: odb/odb-examples-2.5.0.tar.gz
sha256sum: b38997ffaef5e4c031484944a15b7456e967d0dcf128d0f2ae7d14467f199bbc
:
name: odb-tests
version: 2.5.0
type: tests
language: c++
project: odb
summary: ODB compiler tests
license: GPL-2.0-only
description:
\
# odb-tests - ODB tests

ODB is an open-source, cross-platform, and cross-database object-relational
mapping (ORM) system for C++. It allows you to persist C++ classes to a
relational database without having to deal with tables, columns, or SQL and
without manually writing any mapping code.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [ODB project
page](https://codesynthesis.com/products/odb/).

This package contains tests for the ODB compiler as well as runtime and
profile libraries.

## Setting up PostgreSQL for running tests

1. Install the PostgreSQL server. On Linux this is normally done using
   distribution packages.

2. In `/etc/postgresql/N/main/pg_hba.conf` add the following line after the
   `local all postgres ...` line:

   ```
   local   odb_test        odb_test                                trust
   ```

   If you want to be able to run tests on a different host and access
   PostgreSQL via TCP/IP, also add the following line (adjusting the IP
   network to match your setup -- never specify a public IP network here since
   the access is unauthenticated):

   ```
   host    odb_test        odb_test        192.168.0.0/24          trust
   ```

   You will also need to edit `/etc/postgresql/N/main/postgresql.conf` and
   change `listen_address` to `*`. You may also need to open port `5432` in
   your firewall.

   Restart the PostgreSQL server.

3. Add the `odb_test` user and the `odb_test` database.

   First login:

   ```
   sudo -u postgres psql
   ```

   Then execute the following statements:

   ```
   CREATE USER odb_test;
   CREATE DATABASE odb_test;
   GRANT ALL PRIVILEGES ON DATABASE odb_test TO odb_test;
   \c odb_test
   GRANT ALL PRIVILEGES ON SCHEMA public TO odb_test;
   ```

## Setting up MySQL for running tests

1. Install the MySQL server. On Linux this is normally done using distribution
   packages.

2. Setup remote access (optional).

   If you want to be able to run tests on a different host and access MySQL
   via TCP/IP (never do this on a public server since the access is
   unauthenticated), then edit `/etc/mysql/.../mysqld.cnf`, the `[mysqld]`
   section, and change `bind-address` to `0.0.0.0`. You may also need to open
   port `3306` in your firewall.

   Restart the MySQL server.

3. Add the `odb_test` user and the `odb_test` database.

   First login:

   ```
   sudo mysql
   ```

   Then execute the following statements:

   ```
   CREATE USER odb_test@'%';
   CREATE USER odb_test@'localhost';
   CREATE DATABASE odb_test;
   GRANT ALL PRIVILEGES ON odb_test.* TO odb_test@'%';
   FLUSH PRIVILEGES;
   ```

\
description-type: text/markdown;variant=GFM
url: https://www.codesynthesis.com/products/odb/
doc-url: https://www.codesynthesis.com/products/odb/doc/manual.xhtml
src-url: https://git.codesynthesis.com/cgit/odb/odb/
email: odb-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: * odb == 2.5.0
depends: libodb == 2.5.0
depends: libodb-mysql == 2.5.0 ? ($mysql)
depends: libodb-sqlite == 2.5.0 ? ($sqlite)
depends: libodb-pgsql == 2.5.0 ? ($pgsql)
depends: libodb-oracle == 2.5.0 ? ($oracle)
depends: libodb-mssql == 2.5.0 ? ($mssql)
depends: libodb-boost == 2.5.0 ? ($boost)
depends: libodb-qt == 2.5.0 ? ($qt)
depends: libboost-multi-index ? ($boost)
depends: libboost-optional ? ($boost)
depends: libboost-smart-ptr ? ($boost)
depends: libboost-unordered ? ($boost)
depends: libboost-uuid ? ($boost)
depends: libboost-date-time ? ($boost)
depends: libQt5Core ? ($qt && $qt_ver == 5)
depends: libQt6Core ? ($qt && $qt_ver == 6)
depends: libpq ? ($pgsql)
depends: libpq >= 14.0.0 ? ($pgsql) config.odb_tests.pgsql.bulk_default=true\
 | libpq >= 7.4.0 ? ($pgsql) config.odb_tests.pgsql.bulk_default=false
depends: * mysql-client >= 5.0.3 ? ($mysql)
depends: * psql >= 7.4.0 ? ($pgsql)
requires: * sqlplus ? ($oracle)
requires: * sqlcmd ? ($mssql)
builds: all
builds: -( +windows -gcc ); Requires MinGW GCC.
builds: &gcc; Requires GCC with plugin support enabled.
builds: &gcc-5+; Requires GCC 5 or later.
builds: -static; Implementation uses plugins and requires -fPIC.
custom-builds: default; Requires default config with GCC as host compiler.
custom-builds: -static; Implementation uses plugins and requires -fPIC.
custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-builds: default; Requires default config with GCC as host\
 compiler.
custom-multi-builds: -static; Implementation uses plugins and requires -fPIC.
custom-multi-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-oracle-builds: default; Requires proprietary software.
custom-multi-oracle-builds: -static; Implementation uses plugins and requires\
 -fPIC.
custom-multi-oracle-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
custom-multi-mssql-builds: default; Requires proprietary software.
custom-multi-mssql-builds: -static; Implementation uses plugins and requires\
 -fPIC.
custom-multi-mssql-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
boost-custom-builds: default; Requires default config with GCC as host\
 compiler.
boost-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
boost-custom-builds: -static; Implementation uses plugins and requires -fPIC.
boost-custom-builds: -( +macos &gcc ); Not supported by libboost-*.
boost-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt5-custom-builds: default; Requires default config with GCC as host compiler.
qt5-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
qt5-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt5-custom-builds: -( +macos &gcc ); Not supported by libQt5Core.
qt5-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
qt6-custom-builds: default; Requires default config with GCC as host compiler.
qt6-custom-builds: &( +( +windows &msvc ) +( +linux &gcc ) ); Only test on\
 Windows and Linux with main compiler.
qt6-custom-builds: -static; Implementation uses plugins and requires -fPIC.
qt6-custom-builds: -( +macos &gcc ); Not supported by libQt6Core.
qt6-custom-build-bot:
\
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuF4YmJmPHY52Q6N+YO0M
lt/fCovdezleb2tVplyTnvbyAiPdmYCIIjVrsqUn3y46PdFtWEiSdsrCcncoxi6H
8KelOB/oQ9pNTyEvwGKEH5ZIU7noLZYdXEfoNdvdL/pbY/7uLBZOSekfdQShZtbe
uOZCM2Mhg2DD76TP/VAwaXuDCnEvxxU/yneUl5ZaBo62AWNrYJuSGAliCOpVpl6X
X1kbHOvnCx7c9e3LxgaVivPaeZRKYg0OaFt96SBYEZzNPvjA8pMuKuj/vatHaCQ3
NO9+r3TJ+4dQd7qN6Ju3zUJq9J/ndSh4lPvUalvvhdykecefhcyHwRZOG4xyFMFE
nJM4sM+aZu6WoKATIKtk7On70inVr0sZJXwJ4Lt4oqaK2VthcSTby3wf2Yv4p5hL
zNo31cCPmBRYzABcIc6ADYvexVK4uCwaim8xs7RK5Ug2Gv6vUWoRNZW8grIgDwUY
5pZ4Zk3hW4ii2vehTaVrrmdW6XipIsT+ayiVX7eWuHHNxAeCojXVjOJu9B0ExMlD
5tHZCs+SNdV5MceexecbptB7fZtRebP120yjLiSnZ5FpaQ1stusr0hSg+VQaX4np
f5m1W/CcDr53PKWg/ayY9nWMUQaIwH4b69kLM+VTpYSbzu5UQJkmNBNq2EOHgoTv
9MLA+cE/nNJ/rMI//MZ1+kcCAwEAAQ==
-----END PUBLIC KEY-----
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2; see accompanying LICENSE file

project = odb-tests

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

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

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

skeleton = ($build.mode == 'skeleton')

# List of the identifiers of the databases to compile and run the tests
# against. The valid identifiers are mysql, sqlite, pgsql, oracle, and mssql.
#
# Note: can be specified by the user but is also conditionally reflected by
#       the libodb-* libraries' tests manifest values.
#
config [string_set] config.odb_tests.database

databases = [strings] ($defined(config.odb_tests.database) \\
                       ? $config.odb_tests.database        \\
                       : )

assert ($skeleton || $size($databases) > 0) \\
  'at least one database must be configured via config.odb_tests.database\
 variable'

mysql  = false
sqlite = false
pgsql  = false
oracle = false
mssql  = false

for db: $databases
{
  switch $db
  {
    case 'mysql'
      mysql = true

    case 'sqlite'
      sqlite = true

    case 'pgsql'
      pgsql = true

    case 'oracle'
      oracle = true

    case 'mssql'
      mssql = true

    default
      fail "invalid database '$db' specified in config.odb_tests.database\
 value"
  }
}

# If true, then build and run the test drivers in the dynamic multi-database
# mode.
#
# Note: do not assign the default value so that if it's not specified by the
# user, then it won't be saved into config.build. Failed that, if we need to
# reconfigure a single-database configuration into multi (or vise-versa), then
# we will have to (remember to) override the saved multi_database value
# explicitly.
#
config [bool, config.report.variable=multi] config.odb_tests.multi_database

multi = ($defined(config.odb_tests.multi_database) \\
         ? $config.odb_tests.multi_database        \\
         : $size($databases) > 1)

assert ($skeleton || $multi || $size($databases) == 1) \\
  'only one database can be configured if config.odb_tests.multi_database\
 value is false'

# If true, then this package is enabled as an external test for libodb library
# (see libodb's manifest for details).
#
# Note that this variable is not used in this package itself.
#
config [bool] config.odb_tests.libodb_test ?= false

# If true, then build and run the boost/* tests.
#
config [bool] config.odb_tests.boost ?= false

boost = $config.odb_tests.boost

# If defined, then, depending on the value, build and run the qt/* tests
# against Qt5 (5) or Qt6 (6).
#
config [uint64] config.odb_tests.qt

qt = $defined(config.odb_tests.qt)

if $qt
{
  qt_ver = $config.odb_tests.qt

  assert ($qt_ver == 5 || $qt_ver == 6) \\
    'config.odb_tests.qt value must be between 5 and 6'
}

# Database connections.
#

# MySQL
#
# The database user.
#
config [string] config.odb_tests.mysql.user ?= 'odb_test'

# The database password.
#
config [string] config.odb_tests.mysql.passwd

# The database name. Note that it WILL BE MODIFIED by the tests.
#
config [string] config.odb_tests.mysql.database ?= 'odb_test'

# The database host.
#
config [string] config.odb_tests.mysql.host

# The database port.
#
config [uint64] config.odb_tests.mysql.port

# The database socket path.
#
config [path] config.odb_tests.mysql.socket

# PostgreSQL
#
# The database user. Note that the named user must be allowed to connect to
# the database server without specifying credentials.
#
config [string] config.odb_tests.pgsql.user ?= 'odb_test'

# The database name. Note that it WILL BE MODIFIED by the tests.
#
config [string] config.odb_tests.pgsql.database ?= 'odb_test'

# The database host or directory of Unix-domain socket. Leaving this variable
# undefined results in using Unix-domain sockets. Machines without Unix-domain
# sockets will connect to localhost.
#
config [string] config.odb_tests.pgsql.host

# The database port or the socket file name extension for Unix-domain
# connections.
#
# For example, specifying:
#
#   config.odb_tests.pgsql.host=/var/run/postgresql
#   config.odb_tests.pgsql.port=5433
#
# Will result in the /var/run/postgresql/.s.PGSQL.5433 socket being used.
#
config [string] config.odb_tests.pgsql.port

# If true, then assume that libodb-pgsql supports the bulk operations.
#
# Note: config.odb_tests.pgsql.bulk_default is reflected from manifest.
#
config [bool] config.odb_tests.pgsql.bulk_default ?= false
config [bool] config.odb_tests.pgsql.bulk ?= $config.odb_tests.pgsql.bulk_def\
ault
pgsql_bulk = $config.odb_tests.pgsql.bulk

# Oracle
#
# The database user.
#
config [string] config.odb_tests.oracle.user ?= 'odb_test'

# The database password.
#
config [string] config.odb_tests.oracle.passwd

# The database host.
#
config [string] config.odb_tests.oracle.host

# The database port.
#
config [uint64] config.odb_tests.oracle.port

# The service name. Note that the database associated with this user on this
# service WILL BE MODIFIED by the tests.
#
config [string] config.odb_tests.oracle.service

# Microsoft SQL Server
#
# The database user.
#
config [string] config.odb_tests.mssql.user ?= 'odb_test'

# The database password.
#
config [string] config.odb_tests.mssql.passwd

# The database name. Note that it WILL BE MODIFIED by the tests.
#
config [string] config.odb_tests.mssql.database ?= 'odb_test'

# The database host.
#
config [string] config.odb_tests.mssql.host

# The database port.
#
config [uint64] config.odb_tests.mssql.port

# The SQL Server instance address.
#
# Note: mutually exclusive with config.odb_tests.mssql.{host,port}.
#
config [string] config.odb_tests.mssql.server

assert (!$defined(config.odb_tests.mssql.server) || \\
        !$defined(config.odb_tests.mssql.host))     \\
  'variables config.odb_tests.mssql.server and config.odb_tests.mssql.host\
 cannot be specified both'

assert (!$defined(config.odb_tests.mssql.server) || \\
        !$defined(config.odb_tests.mssql.port))     \\
  'variables config.odb_tests.mssql.server and config.odb_tests.mssql.port\
 cannot be specified both'

# The SQL Server ODBC Driver.
#
config [string, null] config.odb_tests.mssql.driver

if! $skeleton
{
  if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

  switch $cxx.class
  {
    case 'gcc'
    {
      cxx.coptions += -Wno-unknown-pragmas
    }
    case 'msvc'
    {
      cxx.coptions += /wd4068 /wd4251 /wd4275 /wd4800
    }
  }

  # Import odb that we are testing.
  #
  import! [metadata] odb = odb%exe{odb}

  # Import the mysql client for creating the database schemas, etc.
  #
  if $mysql
  {
    import! mysql_client = mysql-client%exe{mysql}
    testscript{*}: mysql_client = $mysql_client
  }

  # Import the psql client for creating the database schemas, etc.
  #
  if $pgsql
  {
    import! pgsql_client = psql%exe{psql}
    testscript{*}: pgsql_client = $pgsql_client
  }

  # Import the sqlplus client for creating the database schemas, etc.
  #
  # Note: expected to be system-installed.
  #
  if $oracle
  {
    import! oracle_client = sqlplus%exe{sqlplus}
    testscript{*}: oracle_client = $oracle_client
  }

  # Import the sqlcmd client for creating the database schemas, etc.
  #
  # Note: expected to be system-installed.
  #
  if $mssql
  {
    import! mssql_client = sqlcmd%exe{sqlcmd}
    testscript{*}: mssql_client = $mssql_client
  }

  # Notes:
  #
  # - The second prerequisite ($<[1]) is expected to be a metadata library
  #   target which we will use to extract the poptions variable value for
  #   specifying the contained options on the ODB compiler command line.
  #
  # - The additional options for the ODB compiler command line must be
  #   specified via the odb_options variable.
  #
  # - If the pre/post-migration SQL files are being generated, then the
  #   version numbers the object model is being migrated through must be
  #   specified via the schema_versions variable in the NNN form (001 002,
  #   etc; see the implementation for details).
  #
  # Also note that we need ((-.+)?) instead of just (-.+)? because we use this
  # capture as a back-reference in the pattern.
  #
  [rule_name=odb_compile]                                     \\
  <hxx{~'/(.+)-odb((-.+)?)/'}                                 \\
   ixx{~'/\1-odb\2/'}                                         \\
   cxx{~'/\1-odb\2/'}>: hxx{~'/\1/'} libue{~'/.+-meta/'} $odb
  {{
    pops = $cxx.lib_poptions($<[1])
    depdb hash $pops

    hp = $path($>[0])
    bn = $base($leaf($hp))
    db = $regex.replace($bn, '.+-odb(-(.+))?', '\2')

    if ($db == '') # *-odb.?xx target group?
      db = ($multi ? 'common' : $databases[0])
    end

    # If the external SQL schema file will be generated, then add it as a
    # dynamic target group member.
    #
    # @@ BUILD2 Probably we should add support for --generate-dep ODB compiler
    # option. Then presumably this will be take care of automatically.
    #
    # We assume that the '--generate-schema' and '--schema-format' strings
    # will never appear as standalone option values.
    #
    if ($db != 'common' && $regex.find_match($odb_options,\
 '--generate-schema'))
      schema_format = ($db == 'sqlite' ? 'embedded' : 'sql')

      for o: $odb_options
        if ($o == '--schema-format')
          schema_format = [null] # Indicate that the schema format comes next.
        elif ($schema_format == [null])
          schema_format = $o
        end
      end
    else
      schema_format = ''
    end

    ts = ($schema_format == 'sql'                                            \
   \\
          ? "$directory($hp)/$regex.replace($bn, '(.+)-odb(-.+)?',\
 '\1\2').sql" \\
          : '')

    # If the object model change log and/or migration SQL files will be
    # generated, then add them as a dynamic target group member. While at it,
    # check if the --std options is specified.
    #
    changelog = ''
    init_changelog = false
    suppress_migration = false
    std = false

    for o: $odb_options
      if ($o == '--changelog')
        changelog = [null] # Indicate that the changelog path comes next.
      elif ($changelog == [null])
        changelog = $o
      elif ($o == '--init-changelog')
        init_changelog = true
      elif ($o == '--suppress-migration')
        suppress_migration = true
      elif ($o == '--std')
        std = true
      end
    end

    if ($changelog != '')
      if ($init_changelog)
        ts = ($ts == '' ? "$changelog" : "$ts$\n$changelog")
      end

      if ($schema_format == 'sql' && !$suppress_migration)
        n = $base($leaf($path($<[0])))

        # Note that it's not easy to deduce the object model migration files
        # list. Thus, we expect the version numbers the object model is being
        # migrated through to be explicitly specified via the schema_versions
        # variable.
        #
        for v: $schema_versions
          ns = "$out_base/$n-$v-pre.sql$\n$out_base/$n-$v-post.sql"
          ts = ($ts == '' ? "$ns" : "$ts$\n$ns")
        end
      end
    end

    depdb dyndep --dyn-target --target-what 'generated schema' --format lines\
 \\
    -- echo "$ts"

    $odb (!$std ? --std c++11 : )               \\
         ($multi ? --multi-database dynamic : ) \\
         --database $db                         \\
         --output-dir $out_base                 \\
         $odb_options                           \\
         "-I$src_base"                          \\
         $pops                                  \\
         $path($<[0])
  }}

  # Every exe{} in this project is by default a test.
  #
  exe{*}: test = true

  # Specify the test target for cross-testing.
  #
  test.target = $cxx.target
}

# The helper targets which can be used as prerequisites of test drivers which
# require either a specific database client or multiple clients for all the
# enabled databases.
#
alias{mysql-client}: $mysql_client:
{
  include = $mysql
  clean = false
}

alias{pgsql-client}: $pgsql_client:
{
  include = $pgsql
  clean = false
}

alias{database-client}: alias{mysql-client pgsql-client}

\
location: odb/odb-tests-2.5.0.tar.gz
sha256sum: 10d0ee977a7a77c7357b57f020ca3763c1e65f037a32e9e2ce5a930da79fed9f
:
name: openbsd-m4
version: 6.9
summary: OpenBSD m4 general-purpose macro processor
license: BSD-3-Clause
topics: m4, macro processor, macro language
description:
\
# openbsd-m4

OpenBSD `m4` is an implementation of the POSIX `m4` general-purpose macro
processor that supports many GNU `m4` extensions.

Note also that the `openbsd-m4` executable provides `build2` metadata.

\
description-type: text/markdown;variant=GFM
url: https://github.com/build2-packaging/openbsd-m4
package-email: boris@codesynthesis.com
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: * byacc >= 20210619
depends: * reflex >= 20210510
requires: host
builds: default
builds: -windows; Windows is not yet supported.
bootstrap-build:
\
project = openbsd-m4
version = $process.run(sed -n -e 's/^version: (.+)/\1/p' $src_root/manifest)

dist.package = $project-$version

using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS \\
-D_CRT_NONSTDC_NO_WARNINGS

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: openbsd-m4/openbsd-m4-6.9.tar.gz
sha256sum: 76a1de080d184014a56b01ea26ad21f44ca7dee8bf5a9d3e93472277e51ac965
:
name: openssl
version: 1.1.1+21
upstream-version: 1.1.1u
priority: security
summary: Command line tool providing various cryptography functions
license: OpenSSL; OpenSSL and Original SSLeay Licenses.
topics: x.509, TLS, SSL, cryptography
description:
\
OpenSSL is a robust, commercial-grade, and full-featured toolkit for the
Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols with
openssl command line tool for using the various cryptography functions of
libcrypto and libssl libraries from the shell. For more information see:

https://www.openssl.org

This package contains the original openssl program source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the OpenSSL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of openssl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/openssl/

\
description-type: text/plain
url: https://www.openssl.org/
doc-url: https://www.openssl.org/docs/man1.1.1/man1/
src-url: https://git.build2.org/cgit/packaging/openssl/openssl/tree/openssl/
package-url: https://git.build2.org/cgit/packaging/openssl/
email: openssl-users@openssl.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: libcrypto == 1.1.1
depends: libssl == 1.1.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : OpenSSL and SSLeay Licenses; see accompanying LICENSE file

project = openssl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : OpenSSL and SSLeay Licenses; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: openssl/openssl-1.1.1+21.tar.gz
sha256sum: bcddbc12123b52e7710a3f504ee4a2cf2d480b752dbc00fe18b44725cc9f5cb9
:
name: openssl
version: 3.3.1
summary: Command line tool providing various cryptography functions
license: Apache-2.0; Apache License 2.0.
topics: x.509, TLS, SSL, cryptography
description:
\
OpenSSL is a robust, commercial-grade, and full-featured toolkit for the
Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols with
openssl command line tool for using the various cryptography functions of
libcrypto and libssl libraries from the shell. For more information see:

https://www.openssl.org

This package contains the original openssl program source code overlaid with
the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the OpenSSL mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for\
 posting
guidelines, etc).

The packaging of openssl for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/openssl/

\
description-type: text/plain
url: https://www.openssl.org/
doc-url: https://docs.openssl.org/3.3/man1/openssl/
src-url: https://git.build2.org/cgit/packaging/openssl/openssl/tree/openssl/
package-url: https://git.build2.org/cgit/packaging/openssl/
email: openssl-users@openssl.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libcrypto == 3.3.1
depends: libssl == 3.3.1
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : Apache License 2.0; see accompanying LICENSE file

project = openssl

using version
using config
using test
using install
using dist

\
root-build:
\
# file      : build/root.build
# license   : Apache License 2.0; see accompanying LICENSE file

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

\
location: openssl/openssl-3.3.1.tar.gz
sha256sum: 2621b561fd62a546ff07e16c14c1c711562375e2cbf3c761b0d9cca637a2272c
:
name: pest
version: 1.0.1
summary: pest is macro free otherwise simplistic c++17 unit testing
license: public domain
description:
\

# pest ![plague-doc](https://64k.by/assets/pest.png)

antibloat & turbo simplistic header only cxx unit testing & benchmarking\
 thingy.

implemented this because a hackable solution for unit testing was needed not
causing excessive compile times once you have more than one assertion.

- reduced sloc
- easy to understand and hack
- does not suffer from extraordinarily compile time bloat
- does not suffer from extraordinarily compiled binary bloat
- macro free

`pest` includes a `xoshiro` prng and a `zipfian distribution` helper class:

- `#include <pest/xoshiro.hxx>`
- `#include <pest/zipfian-distribution.hxx`>

## requires

- c++17
- `__builtin_FILE`, `__builtin_LINE` and `__builtin_FUNCTION` ( gcc and clang\
 )
    - for the custom `source_location` impl :/

## examples

### unit tests ( `using emptyspace::pest` )

source file ...

```cpp
#include <pest/pest.hxx>

namespace {

emptyspace::pest::suite basic( "pest self test", []( auto& test ) {
  using namespace emptyspace::pest;

  test( "true equal_to true", []( auto& expect ) {
    expect( true, equal_to( true ) );
  } );

  test( "vector<> equal_to initializer_list<>", []( auto& expect ) {
    auto const inputs = std::vector<int>{ 3, 4, 7 };
    expect( inputs, equal_to( { 3, 4, 7 } ) );
  } );
} );

} // namespace

int main() {
  basic( std::clog );
  return 0;
}
```

... and example output

```
# assuming the example from above is in `example.cxx`
pest $ clang++10 -I. -std=c++17 example.cxx -o ex
pest $ ./ex
[suite <pest self test> | true equal_to true]
[suite <pest self test> | vector<> equal_to initializer_list<>]
[suite <pest self test> | summary]
  total assertions failed = 0
  total assertions pass = 2
  total assertions skipped = 0
  total uncaught exceptions = 0
  total tests = 2
```

### benchmarks ( `using emptyspace::pnch` )

suppose we want to benchmark the `strftime` function ...

```cpp
#include <pest/pnch.hxx>
#include <ctime>

int main() {
  emptyspace::pnch::config cfg;
  std::size_t n = 0;
  char buffer[128];
  cfg.run(
         "strftime",
         [&]() {
           auto stamp1 = std::chrono::system_clock::now();
           auto epoch = std::chrono::system_clock::to_time_t( stamp1 );
           auto gmtime = std::gmtime( &epoch );
           n += std::strftime( buffer, 64, "%Y.%m.%d:%T.", gmtime );
         } )
      .touch( n )
      .report_to( std::cerr );
      
  return n > 0;
}
```

... could lead to the following output

```
[benchmark | strftime]
  stats/total = 2.27702e+09
  stats/average = 990.007
  stats/stddev = 7.18419
```

## development & packaging

[build2](https://build2.org) is used for life cycle management. for using\
 without `build2`
just drop the header into your project.

cloning the repository and running the test driver `test/unit/driver.cxx`

```
$ git clone https://github.com/stackless-goto/pest
$ cd pest
$ bdep init -C @clang10 cc config.cxx=clang++10
$ bdep test
test tests/unit/testscript{testscript}@../pest-clang10/pest/tests/unit/\
 ../pest-clang10/pest/tests/unit/exe{driver}
```

declaring `pest` as dependency in a `build2` project:

```
TODO
```

## references

similar libraries. might be better suited ...

unit test helpers

- [~martinmoene/lest](https://github.com/martinmoene/lest) ( small-ish,\
 compile-time and binary bloat )
- [~jimporter/mettle](https://github.com/jimporter/mettle) ( big-ish,\
 compile-time bloat )

benchmark helpers

- [~martinus/nanobench](https://github.com/martinus/nanobench)
- [~cameron314](https://github.com/cameron314/microbench)

## mirrors

- darcs :: <https://hub.darcs.net/magenbluten/pest>
- git :: <https://github.com/stackless-goto/pest>

## license

choose between `UNLICENSE` or `LICENSE` freely. `zipfian` and `xoshiro` are\
 derived work and
therefore -- as indicated in the corresponding source files -- `MIT` licensed.

## support and blame-game

magenbluten < mb [at] 64k.by > :: <https://64k.by>

\
description-type: text/markdown;variant=GFM
url: https://hub.darcs.net/magenbluten/pest
email: mb@64k.by
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
requires: c++17
bootstrap-build:
\
project = pest

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: pest/pest-1.0.1.tar.gz
sha256sum: cc4e2c83c78cd5d86d6412c6cc29558e17304f2b93728978719da6a9d42d9fde
:
name: plf-colony
version: 5.11.0+1
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib license
url: https://plflib.org/colony.htm
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.11.0-
depends: * bpkg >= 0.11.0-
requires: c++17
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-5.11.0+1.tar.gz
sha256sum: 48003094a19a4ab1253f331fe1682fef5fb3b5e716255ea716fe76e2fc2fd75a
:
name: plf-colony
version: 5.20.0+1
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib license
url: https://plflib.org/colony.htm
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.11.0-
depends: * bpkg >= 0.11.0-
requires: c++17
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-5.20.0+1.tar.gz
sha256sum: 06f2077961b9c0cb2585dd8a965c8cf5fd3c28d9e6070c4e14ae3c2e8a7f7337
:
name: plf-colony
version: 6.0.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.11.0-
depends: * bpkg >= 0.11.0-
build-exclude: *-msvc_16.3-O2; Weird runtime crash of tests on CI but cannot\
 reproduce and only with this version of msvc.
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-6.0.0.tar.gz
sha256sum: c2ba8cdcb31833e21845fd15d5b2c2cf73663760a49946bfba1e27671c966602
:
name: plf-colony
version: 6.12.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.11.0-
depends: * bpkg >= 0.11.0-
tests: plf-colony-tests == 6.12.0
build-exclude: *-msvc_16.3-O2; Weird runtime crash of tests on CI but cannot\
 reproduce and only with this version of msvc.
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-6.12.0.tar.gz
sha256sum: e82e39d0cf066755a04f406f366c54cdc240b84eeb3a61c40f320f767e8fa3d8
:
name: plf-colony
version: 6.24.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.11.0-
depends: * bpkg >= 0.11.0-
tests: plf-colony-tests == 6.24.0
build-exclude: *-msvc_16.3-O2; Weird runtime crash of tests on CI but cannot\
 reproduce and only with this version of msvc.
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-6.24.0.tar.gz
sha256sum: 4327c422317144d270dc5d6cac99229bef5a5777dca617af6b1ac8df1b5ca470
:
name: plf-colony
version: 7.3.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.11.0-
depends: * bpkg >= 0.11.0-
requires: c++ >= 20
tests: plf-colony-tests == 7.3.0
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.3.0.tar.gz
sha256sum: 115c05b7de0b2e9656de85cb1e54097213d468ce0a6e9033f6e764e4135221ff
:
name: plf-colony
version: 7.10.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.10.0
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.10.0.tar.gz
sha256sum: 10680a3433f49a93f9c89483801fd97d48f445763e2e768df0d7bf81d0e856cb
:
name: plf-colony
version: 7.16.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.16.0
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.16.0.tar.gz
sha256sum: df4bc78535d61ca7ec717ee5452c1448154ff862e7d51edbf598701373cc282e
:
name: plf-colony
version: 7.31.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.31.0
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.31.0.tar.gz
sha256sum: 7899afe0d1b80c2e5a1c5ddcd2409c0fad13cb1b92e71baad0e0cb337bd8b3e9
:
name: plf-colony
version: 7.33.1
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.33.1
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.33.1.tar.gz
sha256sum: d4062bb245014e25adfd805af43c36495cb0c3c85ff9dbc659bcb333290141a1
:
name: plf-colony
version: 7.39.0
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements. Provides higher-performance than std:: library containers for\
 high-modification scenarios with unordered data.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.39.0
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.39.0.tar.gz
sha256sum: 554f6be75b7c6fc32f26209229a9b7bcdea6d48faf04a2ddc84e68c52bbc33fe
:
name: plf-colony
version: 7.43.0
upstream-version: 7.4.3
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.43.0
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.43.0.tar.gz
sha256sum: 77b9169e3829e52458e6e45e32e36296f38fdf15b1cd773095feafcb52059441
:
name: plf-colony
version: 7.47.0
upstream-version: 7.4.7
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.47.0
builds: latest experimental
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.47.0.tar.gz
sha256sum: aca7e8f6e22138b021b2b7015a74bc41ace7fd6335b74be89d169d53d814001e
:
name: plf-colony
version: 7.55.0
upstream-version: 7.5.5
summary: PLF Colony library: An unordered C++ data container providing fast\
 iteration/insertion/erasure while maintaining pointer validity to non-erased\
 elements.
license: zLib
description:
\
PLF Colony - Build2 Package
===========================

This repository is only setting up the library and it's tests to be published\
 in https://cppget.org through [Build2](http://build2.org).
We use a git submodule targetting a specific version of the library for each\
 package version.

PLF Colony
----------

 - PLF Colony: https://plflib.org/colony.htm
    - Also contain the change history at the end of the page.
 - Repository: https://github.com/mattreecebentley/plf_colony/

## Note about the separate test package:

The separate test package exists because the tests of `plf-colony v6.x`\
 depended on `plf-rand` so to avoid additional dependencies for people\
 wanting to use `plf-colony` without the tests we split it in 2 packages, the\
 test one being the one depending on `plf-rand`, while `plf-colony` does not.
However tests in versions `7.x` of `plf-colony` do NOT have any dependencies,\
 which makes the separated test package more complicated than necessary as\
 the tests could be part of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as before.


Package Maintainers
-------------------

- A. Joël Lamotte - mjklaim@gmail.com
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
tests: plf-colony-tests == 7.55.0
builds: latest experimental
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp


# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target


\
location: plf-colony/plf-colony-7.55.0.tar.gz
sha256sum: 45e17f7e15d5881c0846e7b6005d91695724ad0f4ff5bb1721008bb1bd3f9347
:
name: plf-colony-tests
version: 6.12.0
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: plf-rand ^1.0.0
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-6.12.0.tar.gz
sha256sum: 9b076c5b00ae0b75f4903f317be556669f724d5b64a19ecfe31594dcbb7b59e7
:
name: plf-colony-tests
version: 6.24.0
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.
\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: plf-rand ^1.0.0
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-6.24.0.tar.gz
sha256sum: 60b61ae0f96b2d31d075fe494579cb40951003a2eca7f7f83d7ffd1548093426
:
name: plf-colony-tests
version: 7.3.0
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++ >= 20
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.3.0.tar.gz
sha256sum: dd727268dbe132e8f0942575789bd08c198ad1d62e5b7cfea05e77ccea31ebd6
:
name: plf-colony-tests
version: 7.10.0
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.10.0.tar.gz
sha256sum: eff45d58c3c3d399efd6939314212ea7392f3e65e6487c92851f26221da31e33
:
name: plf-colony-tests
version: 7.16.0
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.16.0.tar.gz
sha256sum: 859f3755cf4c7ec67e798cf372e4c4ae049e7bcb15a5a611ef541f3e5f5cb117
:
name: plf-colony-tests
version: 7.31.0
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.31.0.tar.gz
sha256sum: 2d802fd40c72645efafdd93bc014295831949d474db985ba3b3709cf38e19d57
:
name: plf-colony-tests
version: 7.33.1
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.33.1.tar.gz
sha256sum: b6333100507ed1222a586d4c7b49e312c0e41294bfa4bd7e9a196151110e6727
:
name: plf-colony-tests
version: 7.39.0
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-error-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.39.0.tar.gz
sha256sum: ad6512e05d074f3dfa811052a87837470e4d837a15ab00213a9a1a2f413eba96
:
name: plf-colony-tests
version: 7.43.0
upstream-version: 7.4.3
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: default experimental : -wasm; Emscripten is not supported yet
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.43.0.tar.gz
sha256sum: ccab2ca38b9321e8004a0fb20da269f39d8e2f6b13a3afded5bcd279d146e041
:
name: plf-colony-tests
version: 7.47.0
upstream-version: 7.4.7
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: latest experimental
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.47.0.tar.gz
sha256sum: 0c36a5299d6ba05a1050a9b09d7eb8d45c5876d33802c13ec615aabff2d477db
:
name: plf-colony-tests
version: 7.55.0
upstream-version: 7.5.5
project: plf-colony
summary: Tests for `plf-colony`
license: zLib
description:
\
# plf-colony-tests

Tests for the `plf-colony` package.

### Note

This package exists because the tests of `plf-colony v6.x` depended on\
 `plf-rand` so to avoid additional dependencies for people wanting to use\
 `plf-colony` without the tests we split it in 2 packages, the present one\
 being the one with the tests and depending on `plf-rand`.
Versions `7.x` of `plf-colony` do NOT have any dependencies however, which\
 makes this package more complicated than necessar as the tests can be part\
 of the `plf-colony` package.
However, to avoid complicated changes in this repository and to allow easilly\
 re-enabling dependencies in tests in the future, we will keep the separate\
 packages as here for now.


\
description-type: text/markdown;variant=GFM
doc-url: https://plflib.org/colony.htm
src-url: https://github.com/mattreecebentley/plf_colony.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++ >= 20
builds: latest experimental
build-exclude: **clang_13**; Requires C++20 with ranges
build-exclude: **clang_14**; Requires C++20 with ranges
build-exclude: **clang_15.*_libc++**; Requires C++20 with ranges
build-exclude: **clang_16.*_libc++**; Requires `lexicographical_compare_three\
_way`
build-exclude: linux_debian_12-clang_16**; clang16 doesnt compile gcc's\
 ranges library in that config
build-exclude: linux_debian_12-clang_15_libc++; `std::ranges::distance` is\
 not implemented
build-exclude: **msvc_16.11**; Requires C++20 with ranges
bootstrap-build:
\
project = plf-colony-tests

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: plf-colony/plf-colony-tests-7.55.0.tar.gz
sha256sum: bbf559422abad97cbde3aafb25fdb05383b01bd78688943f864a92912992ab91
:
name: plf-nanotimer
version: 1.3.0
summary: A simple C++ 03/11/etc timer class for ~microsecond-precision\
 cross-platform benchmarking.
license: zLib
doc-url: https://plflib.org/nanotimer.htm
src-url: https://github.com/mattreecebentley/plf_nanotimer.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++ >= 17
bootstrap-build:
\
project = plf-nanotimer

using version
using config
using install
using dist
using test
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: plf-nanotimer/plf-nanotimer-1.3.0.tar.gz
sha256sum: 6b4c547e67848935d4f07deb0adeaa456a4dca6935ac1ba2bc693ce3b129a767
:
name: plf-nanotimer
version: 1.4.0
summary: A simple C++ 03/11/etc timer class for ~microsecond-precision\
 cross-platform benchmarking.
license: zLib
doc-url: https://plflib.org/nanotimer.htm
src-url: https://github.com/mattreecebentley/plf_nanotimer.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++ >= 17
bootstrap-build:
\
project = plf-nanotimer

using version
using config
using install
using dist
using test
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: plf-nanotimer/plf-nanotimer-1.4.0.tar.gz
sha256sum: 3e223a1ce6aa9339bcbf461577023c057025b8e004c2da11546a7f0f468648f5
:
name: plf-nanotimer
version: 1.7.0
summary: A simple C++ 03/11/etc timer class for ~microsecond-precision\
 cross-platform benchmarking.
license: zLib
doc-url: https://plflib.org/nanotimer.htm
src-url: https://github.com/mattreecebentley/plf_nanotimer.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
requires: c++ >= 17
builds: all : -wasm; Emscripten is not supported yet
bootstrap-build:
\
project = plf-nanotimer

using version
using config
using install
using dist
using test
\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: plf-nanotimer/plf-nanotimer-1.7.0.tar.gz
sha256sum: 3977758e825b542c82a2dfa2ce5ef9d38a54cabb2ad8c75e56f3f248284975f5
:
name: plf-rand
version: 1.1.0+1
summary: A C++ 03/11/etc replacement for rand()/srand() that's ~700% faster\
 and typically has better statistical distribution.
license: zLib
doc-url: https://plflib.org/rand.htm
src-url: https://github.com/mattreecebentley/plf_rand.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: plf-nanotimer ^1.0.0
requires: c++ >= 17
bootstrap-build:
\
project = plf-rand

using version
using config
using install
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: plf-rand/plf-rand-1.1.0+1.tar.gz
sha256sum: 8e3fd6fce38fb011bd265e051c722b057005f04ba23147752d00ffb6a449adf3
:
name: plf-rand
version: 1.2.0
summary: A C++ 03/11/etc replacement for rand()/srand() that's ~700% faster\
 and typically has better statistical distribution.
license: zLib
doc-url: https://plflib.org/rand.htm
src-url: https://github.com/mattreecebentley/plf_rand.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: plf-nanotimer ^1.0.0
requires: c++ >= 17
bootstrap-build:
\
project = plf-rand

using version
using config
using install
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: plf-rand/plf-rand-1.2.0.tar.gz
sha256sum: aa53c574b2e7997b419517bc9bc302b6454cd704614848e1da5d651e2e0d8924
:
name: plf-rand
version: 1.3.0
summary: A C++ 03/11/etc replacement for rand()/srand() that's ~700% faster\
 and typically has better statistical distribution.
license: zLib
doc-url: https://plflib.org/rand.htm
src-url: https://github.com/mattreecebentley/plf_rand.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: plf-nanotimer ^1.0.0
requires: c++ >= 17
bootstrap-build:
\
project = plf-rand

using version
using config
using install
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: plf-rand/plf-rand-1.3.0.tar.gz
sha256sum: f175fd03396ff43a90c189c430d2a3f5e6578362523003386391e37c24b62173
:
name: plf-rand
version: 1.5.0
summary: A C++ 03/11/etc replacement for rand()/srand() that's ~700% faster\
 and typically has better statistical distribution.
license: zLib
doc-url: https://plflib.org/rand.htm
src-url: https://github.com/mattreecebentley/plf_rand.git
email: mattreecebentley@gmail.com
package-email: mjklaim@gmail.com
build-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: plf-nanotimer ^1.7.0
requires: c++ >= 17
builds: all : -wasm; Emscripten is not supported yet
bootstrap-build:
\
project = plf-rand

using version
using config
using install
using dist
using test

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: plf-rand/plf-rand-1.5.0.tar.gz
sha256sum: a2feb5b0747e3e99afc77577b36c1c2afe81f9a70cba2fca61889c2f278c32e4
:
name: psql
version: 14.1.0+7
upstream-version: 14.1
project: postgresql
summary: PostgreSQL interactive terminal
license: PostgreSQL; Permissive free software license.
topics: PostgreSQL, SQL, relational database
description:
\
PostgreSQL is an object-relational SQL database management system with psql
being its terminal-based front-end. It enables the user to type in queries
interactively, issue them to PostgreSQL, and see the query results.
Alternatively, input can be from a file or from command line arguments. For
more information see:

https://www.postgresql.org/

This package contains the original psql program source code overlaid with the
build2-based build system and packaged for the build2 package manager (bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the PostgreSQL mailing lists. Send build system and packaging-related feedback
to the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of PostgreSQL for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/postgresql/

\
description-type: text/plain
url: https://www.postgresql.org/
doc-url: https://www.postgresql.org/docs/14/app-psql.html
src-url: https://git.build2.org/cgit/packaging/postgresql/postgresql/tree/psq\
l/
package-url: https://git.build2.org/cgit/packaging/postgresql/
email: pgsql-general@lists.postgresql.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libpq == 14.1.0
depends: libcrypto >= 1.1.1
builds: all relocatable
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

project = psql

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# license   : PostgreSQL License; see accompanying COPYRIGHT file

# We rely on this in macros/options deduction (see
# psql/{buildfile,include/pg_config.h} for details).
#
c.std = 99

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $c.target

\
debian_13-name: postgresql-client
debian_13-to-downstream-version: /(.*)/16.0.0/
debian_12-name: postgresql-client-15
debian_11-name: postgresql-client-13
ubuntu_26-name: postgresql-client-18
ubuntu_24-name: postgresql-client-16
ubuntu_22-name: postgresql-client-14
debian-to-downstream-version: /(.*)/\1.0/
fedora-to-downstream-version: /(.*)/\1.0/
location: postgresql/psql-14.1.0+7.tar.gz
sha256sum: 54f8378008618c11d75354a150f78420bb1849c11a75670ad5cb3951aff413ff
:
name: pugixml
version: 1.10.0+2
summary: Light-weight, simple and fast XML parser for C++ with XPath support
license: MIT
description:
\
pugixml [![Build Status](https://travis-ci.org/zeux/pugixml.svg?branch=master\
)](https://travis-ci.org/zeux/pugixml) [![Build status](https://ci.appveyor.c\
om/api/projects/status/9hdks1doqvq8pwe7/branch/master?svg=true)](https://ci.a\
ppveyor.com/project/zeux/pugixml) [![codecov.io](https://codecov.io/github/ze\
ux/pugixml/coverage.svg?branch=master)](https://codecov.io/github/zeux/pugixm\
l?branch=master) ![MIT](https://img.shields.io/badge/license-MIT-blue.svg)
=======

pugixml is a C++ XML processing library, which consists of a DOM-like\
 interface with rich traversal/modification
capabilities, an extremely fast XML parser which constructs the DOM tree from\
 an XML file/buffer, and an XPath 1.0
implementation for complex data-driven tree queries. Full Unicode support is\
 also available, with Unicode interface
variants and conversions between different Unicode encodings (which happen\
 automatically during parsing/saving).

pugixml is used by a lot of projects, both open-source and proprietary, for\
 performance and easy-to-use interface.

## Documentation

Documentation for the current release of pugixml is available on-line as two\
 separate documents:

* [Quick-start guide](https://pugixml.org/docs/quickstart.html), that aims to\
 provide enough information to start using the library;
* [Complete reference manual](https://pugixml.org/docs/manual.html), that\
 describes all features of the library in detail.

You’re advised to start with the quick-start guide; however, many important\
 library features are either not described in it at all or only mentioned\
 briefly; if you require more information you should read the complete manual.

## Example

Here's an example of how code using pugixml looks; it opens an XML file, goes\
 over all Tool nodes and prints tools that have a Timeout attribute greater\
 than 0:

```c++
#include "pugixml.hpp"
#include <iostream>

int main()
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
    if (!result)
        return -1;
        
    for (pugi::xml_node tool: doc.child("Profile").child("Tools").children("T\
ool"))
    {
        int timeout = tool.attribute("Timeout").as_int();
        
        if (timeout > 0)
            std::cout << "Tool " << tool.attribute("Filename").value() << "\
 has timeout " << timeout << "\n";
    }
}
```

And the same example using XPath:

```c++
#include "pugixml.hpp"
#include <iostream>

int main()
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
    if (!result)
        return -1;
        
    pugi::xpath_node_set tools_with_timeout = doc.select_nodes("/Profile/Tool\
s/Tool[@Timeout > 0]");
    
    for (pugi::xpath_node node: tools_with_timeout)
    {
        pugi::xml_node tool = node.node();
        std::cout << "Tool " << tool.attribute("Filename").value() <<
            " has timeout " << tool.attribute("Timeout").as_int() << "\n";
    }
}
```


## License

This library is available to anybody free of charge, under the terms of MIT\
 License (see LICENSE.md).

\
description-type: text/markdown;variant=GFM
url: https://pugixml.org/
src-url: https://github.com/zeux/pugixml
package-url: https://github.com/build2-packaging/pugixml
email: arseny.kapoulkine@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
build-exclude: windows**; Windows is not officially supported, but might work\
 if you don't use unicode file paths.
bootstrap-build:
\
project = pugixml

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: pugixml/pugixml-1.10.0+2.tar.gz
sha256sum: 142afb9b2eae5f1f056be7fa06ac89a7a0551caa778f849c360593bbd0a7225a
:
name: pugixml
version: 1.11.4
summary: Light-weight, simple and fast XML parser for C++ with XPath support
license: MIT
description:
\
pugixml [![Build Status](https://travis-ci.org/zeux/pugixml.svg?branch=master\
)](https://travis-ci.org/zeux/pugixml) [![Build status](https://ci.appveyor.c\
om/api/projects/status/9hdks1doqvq8pwe7/branch/master?svg=true)](https://ci.a\
ppveyor.com/project/zeux/pugixml) [![codecov.io](https://codecov.io/github/ze\
ux/pugixml/coverage.svg?branch=master)](https://codecov.io/github/zeux/pugixm\
l?branch=master) ![MIT](https://img.shields.io/badge/license-MIT-blue.svg)
=======

pugixml is a C++ XML processing library, which consists of a DOM-like\
 interface with rich traversal/modification
capabilities, an extremely fast XML parser which constructs the DOM tree from\
 an XML file/buffer, and an XPath 1.0
implementation for complex data-driven tree queries. Full Unicode support is\
 also available, with Unicode interface
variants and conversions between different Unicode encodings (which happen\
 automatically during parsing/saving).

pugixml is used by a lot of projects, both open-source and proprietary, for\
 performance and easy-to-use interface.

## Documentation

Documentation for the current release of pugixml is available on-line as two\
 separate documents:

* [Quick-start guide](https://pugixml.org/docs/quickstart.html), that aims to\
 provide enough information to start using the library;
* [Complete reference manual](https://pugixml.org/docs/manual.html), that\
 describes all features of the library in detail.

You’re advised to start with the quick-start guide; however, many important\
 library features are either not described in it at all or only mentioned\
 briefly; if you require more information you should read the complete manual.

## Example

Here's an example of how code using pugixml looks; it opens an XML file, goes\
 over all Tool nodes and prints tools that have a Timeout attribute greater\
 than 0:

```c++
#include "pugixml.hpp"
#include <iostream>

int main()
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
    if (!result)
        return -1;
        
    for (pugi::xml_node tool: doc.child("Profile").child("Tools").children("T\
ool"))
    {
        int timeout = tool.attribute("Timeout").as_int();
        
        if (timeout > 0)
            std::cout << "Tool " << tool.attribute("Filename").value() << "\
 has timeout " << timeout << "\n";
    }
}
```

And the same example using XPath:

```c++
#include "pugixml.hpp"
#include <iostream>

int main()
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
    if (!result)
        return -1;
        
    pugi::xpath_node_set tools_with_timeout = doc.select_nodes("/Profile/Tool\
s/Tool[@Timeout > 0]");
    
    for (pugi::xpath_node node: tools_with_timeout)
    {
        pugi::xml_node tool = node.node();
        std::cout << "Tool " << tool.attribute("Filename").value() <<
            " has timeout " << tool.attribute("Timeout").as_int() << "\n";
    }
}
```


## License

This library is available to anybody free of charge, under the terms of MIT\
 License (see LICENSE.md).

\
description-type: text/markdown;variant=GFM
url: https://pugixml.org/
src-url: https://github.com/zeux/pugixml
package-url: https://github.com/build2-packaging/pugixml
email: arseny.kapoulkine@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
build-exclude: windows**; Windows is not officially supported, but might work\
 if you don't use unicode file paths.
bootstrap-build:
\
project = pugixml

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: pugixml/pugixml-1.11.4.tar.gz
sha256sum: 674b1f8645e29a8b6078d0ed846d69ae633504d0beefa4d954256ce49894b910
:
name: pugixml
version: 1.12.1
summary: Light-weight, simple and fast XML parser for C++ with XPath support
license: MIT
description:
\
pugixml [![Actions Status](https://github.com/zeux/pugixml/workflows/build/ba\
dge.svg)](https://github.com/zeux/pugixml/actions) [![Build\
 status](https://ci.appveyor.com/api/projects/status/9hdks1doqvq8pwe7/branch/\
master?svg=true)](https://ci.appveyor.com/project/zeux/pugixml)\
 [![codecov.io](https://codecov.io/github/zeux/pugixml/coverage.svg?branch=ma\
ster)](https://codecov.io/github/zeux/pugixml?branch=master)\
 ![MIT](https://img.shields.io/badge/license-MIT-blue.svg)
=======

pugixml is a C++ XML processing library, which consists of a DOM-like\
 interface with rich traversal/modification
capabilities, an extremely fast XML parser which constructs the DOM tree from\
 an XML file/buffer, and an XPath 1.0
implementation for complex data-driven tree queries. Full Unicode support is\
 also available, with Unicode interface
variants and conversions between different Unicode encodings (which happen\
 automatically during parsing/saving).

pugixml is used by a lot of projects, both open-source and proprietary, for\
 performance and easy-to-use interface.

## Documentation

Documentation for the current release of pugixml is available on-line as two\
 separate documents:

* [Quick-start guide](https://pugixml.org/docs/quickstart.html), that aims to\
 provide enough information to start using the library;
* [Complete reference manual](https://pugixml.org/docs/manual.html), that\
 describes all features of the library in detail.

You’re advised to start with the quick-start guide; however, many important\
 library features are either not described in it at all or only mentioned\
 briefly; if you require more information you should read the complete manual.

## Example

Here's an example of how code using pugixml looks; it opens an XML file, goes\
 over all Tool nodes and prints tools that have a Timeout attribute greater\
 than 0:

```c++
#include "pugixml.hpp"
#include <iostream>

int main()
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
    if (!result)
        return -1;
        
    for (pugi::xml_node tool: doc.child("Profile").child("Tools").children("T\
ool"))
    {
        int timeout = tool.attribute("Timeout").as_int();
        
        if (timeout > 0)
            std::cout << "Tool " << tool.attribute("Filename").value() << "\
 has timeout " << timeout << "\n";
    }
}
```

And the same example using XPath:

```c++
#include "pugixml.hpp"
#include <iostream>

int main()
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
    if (!result)
        return -1;
        
    pugi::xpath_node_set tools_with_timeout = doc.select_nodes("/Profile/Tool\
s/Tool[@Timeout > 0]");
    
    for (pugi::xpath_node node: tools_with_timeout)
    {
        pugi::xml_node tool = node.node();
        std::cout << "Tool " << tool.attribute("Filename").value() <<
            " has timeout " << tool.attribute("Timeout").as_int() << "\n";
    }
}
```


## License

This library is available to anybody free of charge, under the terms of MIT\
 License (see LICENSE.md).

\
description-type: text/markdown;variant=GFM
url: https://pugixml.org/
src-url: https://github.com/zeux/pugixml
package-url: https://github.com/build2-packaging/pugixml
email: arseny.kapoulkine@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
build-exclude: windows**; Windows is not officially supported, but might work\
 if you don't use unicode file paths.
bootstrap-build:
\
project = pugixml

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: pugixml/pugixml-1.12.1.tar.gz
sha256sum: 15c878096befcafb7b08f8a4ca4bed45029ffe4a5e409e219ac8889e021b681b
:
name: Qt5Moc
version: 5.15.10+1
project: Qt5
summary: Qt meta object compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt5Moc

This package contains the Qt5 meta object compiler (`moc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt5Moc

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qtbase5-dev-tools
fedora-name: qt5-qtbase-devel
location: Qt5/Qt5Moc-5.15.10+1.tar.gz
sha256sum: 6ba73147724c96766bacab560b505de2b2832e11299d580f6bef7a6368ffa36b
:
name: Qt5Moc
version: 5.15.12+1
project: Qt5
summary: Qt meta object compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt5Moc

This package contains the Qt5 meta object compiler (`moc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt5Moc

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qtbase5-dev-tools
fedora-name: qt5-qtbase-devel
location: Qt5/Qt5Moc-5.15.12+1.tar.gz
sha256sum: d20e790434cb68495e54cbb48722b2cf9560bd0eae5d6e12e1b16dbc56c8f94f
:
name: Qt5Rcc
version: 5.15.10+1
project: Qt5
summary: Qt resource compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt5Rcc

This package contains the Qt5 resource compiler (`rcc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libz ^1.2.1100
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt5Rcc

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qtbase5-dev-tools
fedora-name: qt5-qtbase-devel
location: Qt5/Qt5Rcc-5.15.10+1.tar.gz
sha256sum: 465a0704bec7176182bd54dc6fef7bf58557810ef50e4979732fb91f38301111
:
name: Qt5Rcc
version: 5.15.12+1
project: Qt5
summary: Qt resource compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt5Rcc

This package contains the Qt5 resource compiler (`rcc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libz ^1.2.1100
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt5Rcc

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qtbase5-dev-tools
fedora-name: qt5-qtbase-devel
location: Qt5/Qt5Rcc-5.15.12+1.tar.gz
sha256sum: 06b45fccaeb7fbe7040ee6c7365fb08d10fa20b2e018fd6c263b028b9a6a92ec
:
name: Qt5Uic
version: 5.15.10+1
project: Qt5
summary: Qt user interface compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt5Uic

This package contains the Qt5 user interface compiler (`uic`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt5Uic

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qtbase5-dev-tools
fedora-name: qt5-qtbase-devel
location: Qt5/Qt5Uic-5.15.10+1.tar.gz
sha256sum: 1c6293c9a0441ed7ec016f438cc20be749edbbc3c48bb1a32d5925a00376d794
:
name: Qt5Uic
version: 5.15.12+1
project: Qt5
summary: Qt user interface compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt5Uic

This package contains the Qt5 user interface compiler (`uic`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt5
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt5Uic

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qtbase5-dev-tools
fedora-name: qt5-qtbase-devel
location: Qt5/Qt5Uic-5.15.12+1.tar.gz
sha256sum: a708a21c67492b8124f7b373314bf8c4ec575642ae03c45a76106ac422e47219
:
name: Qt6Moc
version: 6.4.3+1
project: Qt6
summary: Qt meta object compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Moc

This package contains the Qt6 meta object compiler (`moc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Moc

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Moc-6.4.3+1.tar.gz
sha256sum: 183adab4978324ba90b5bdd47e7df11182f9652490659b1698a6ccb95654716c
:
name: Qt6Moc
version: 6.5.2
project: Qt6
summary: Qt meta object compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Moc

This package contains the Qt6 meta object compiler (`moc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Moc

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Moc-6.5.2.tar.gz
sha256sum: fdb531d6312cb49d10882bdf83db6fee63b4a0bbd53072c5768185d211cd517c
:
name: Qt6Moc
version: 6.7.3
project: Qt6
summary: Qt meta object compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Moc

This package contains the Qt6 meta object compiler (`moc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Moc

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Moc-6.7.3.tar.gz
sha256sum: f77a5a1b2819e86ba3e2aa08066f37a258bfdfc2fd4d2943754cc99fa5ddb903
:
name: Qt6Rcc
version: 6.4.3+1
project: Qt6
summary: Qt resource compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Rcc

This package contains the Qt6 resource compiler (`rcc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libz ^1.2.1100
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Rcc

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Rcc-6.4.3+1.tar.gz
sha256sum: 586bff89e2ba21cf4b28d8cc94212eda31eb2dfed39c45953f3980be2a1408ea
:
name: Qt6Rcc
version: 6.5.2
project: Qt6
summary: Qt resource compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Rcc

This package contains the Qt6 resource compiler (`rcc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Rcc

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Rcc-6.5.2.tar.gz
sha256sum: 5bed91b8f003ffdd4a08317b3c1de3395a8d46417cd68037854cbd2689d14321
:
name: Qt6Rcc
version: 6.7.3
project: Qt6
summary: Qt resource compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Rcc

This package contains the Qt6 resource compiler (`rcc`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: git://code.qt.io/qt/qtbase.git
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
depends: libz ^1.2.1100
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Rcc

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Rcc-6.7.3.tar.gz
sha256sum: 6218f11436b6000d7ed321d65dbe4d9956318dc378928f1156049ee1f345377f
:
name: Qt6Uic
version: 6.4.3+1
project: Qt6
summary: Qt user interface compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Uic

This package contains the Qt6 user interface compiler (`uic`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Uic

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Uic-6.4.3+1.tar.gz
sha256sum: cee2428038fdb569a149f0fab3cff6a925d5b7415ef1d6f24d39a46984ce8a0d
:
name: Qt6Uic
version: 6.5.2
project: Qt6
summary: Qt user interface compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Uic

This package contains the Qt6 user interface compiler (`uic`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Uic

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Uic-6.5.2.tar.gz
sha256sum: d38c355f78a7cee16928012027aea786f00204d2069afe6950864cabf67403e4
:
name: Qt6Uic
version: 6.7.3
project: Qt6
summary: Qt user interface compiler
license: other: GPL-3.0-only-with-Qt-GPL-Exception-1.0
license: other: available source
description:
\
# Qt6Uic

This package contains the Qt6 user interface compiler (`uic`).

\
description-type: text/markdown;variant=GFM
url: https://www.qt.io/
src-url: https://invent.kde.org/qt/qt/qtbase
package-url: https://github.com/build2-packaging/Qt6
email: interest@qt-project.org; Mailing list for developers using Qt.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libpcre2 ^10.38.0
depends: libtinycbor ^0.6.0
builds: host : &default
builds: -( +macos &gcc ); Not supported by upstream.
builds: -wasm; Not supported.
bootstrap-build:
\
project = Qt6Uic

using version
using config
using test
using install
using dist

\
root-build:
\
using in

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

using cxx.objcxx

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

if ($build.mode != 'skeleton')
  source build/common.build

\
debian-name: qt6-base-dev-tools
fedora-name: qt6-qtbase-devel
location: Qt6/Qt6Uic-6.7.3.tar.gz
sha256sum: 4dfedc2de3306ca9ec0f95af77260572ee9e444c557566df48873ddc38e6c557
:
name: re2
version: 2021.9.1+1
summary: RE2 is a fast, safe, thread-friendly alternative to backtracking\
 regular expression engines like those used in PCRE, Perl, and Python. It is\
 a C++ library.
license: BSD-2-Clause
description:
\
This is the source code repository for RE2, a regular expression library.

For documentation about how to install and use RE2,
visit https://github.com/google/re2/.

The short version is:

make
make test
make install
make testinstall

There is a fair amount of documentation (including code snippets) in
the re2.h header file.

More information can be found on the wiki:
https://github.com/google/re2/wiki

Issue tracker:
https://github.com/google/re2/issues

Mailing list:
https://groups.google.com/group/re2-dev

Unless otherwise noted, the RE2 source files are distributed
under the BSD-style license found in the LICENSE file.

RE2's native language is C++.

The Python wrapper is at https://github.com/google/re2/tree/abseil/python
and on PyPI (https://pypi.org/project/google-re2/).

A C wrapper is at https://github.com/marcomaggi/cre2/.
A D wrapper is at https://github.com/ShigekiKarita/re2d/ and on DUB\
 (code.dlang.org).
An Erlang wrapper is at https://github.com/dukesoferl/re2/ and on Hex\
 (hex.pm).
An Inferno wrapper is at https://github.com/powerman/inferno-re2/.
A Node.js wrapper is at https://github.com/uhop/node-re2/ and on NPM\
 (npmjs.com).
An OCaml wrapper is at https://github.com/janestreet/re2/ and on OPAM\
 (opam.ocaml.org).
A Perl wrapper is at https://github.com/dgl/re-engine-RE2/ and on CPAN\
 (cpan.org).
An R wrapper is at https://github.com/girishji/re2/ and on CRAN\
 (cran.r-project.org).
A Ruby wrapper is at https://github.com/mudge/re2/ and on RubyGems\
 (rubygems.org).
A WebAssembly wrapper is at https://github.com/google/re2-wasm/ and on NPM\
 (npmjs.com).

\
description-type: text/plain
url: https://github.com/google/re2
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = re2

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cc

\
location: re2/re2-2021.9.1+1.tar.gz
sha256sum: 9f88d2396100dfe22f0c5284691055f4f581e1b1d5747dab6f5d34f1f78747f9
:
name: readerwriterqueue
version: 1.0.6+4
summary: A fast single-producer, single-consumer lock-free queue for C++
license: BSD-2-Clause
description:
\

# A single-producer, single-consumer lock-free queue for C++

This mini-repository has my very own implementation of a lock-free queue\
 (that I designed from scratch) for C++.

It only supports a two-thread use case (one consuming, and one producing).\
 The threads can't switch roles, though
you could use this queue completely from a single thread if you wish (but\
 that would sort of defeat the purpose!).

Note: If you need a general-purpose multi-producer, multi-consumer lock free\
 queue, I have [one of those too][mpmc].

This repository also includes a [circular-buffer SPSC queue][circular] which\
 supports blocking on enqueue as well as dequeue.


## Features

- [Blazing fast][benchmarks]
- Compatible with C++11 (supports moving objects instead of making copies)
- Fully generic (templated container of any type) -- just like `std::queue`,\
 you never need to allocate memory for elements yourself
  (which saves you the hassle of writing a lock-free memory manager to hold\
 the elements you're queueing)
- Allocates memory up front, in contiguous blocks
- Provides a `try_enqueue` method which is guaranteed never to allocate\
 memory (the queue starts with an initial capacity)
- Also provides an `enqueue` method which can dynamically grow the size of\
 the queue as needed
- Also provides `try_emplace`/`emplace` convenience methods
- Has a blocking version with `wait_dequeue`
- Completely "wait-free" (no compare-and-swap loop). Enqueue and dequeue are\
 always O(1) (not counting memory allocation)
- On x86, the memory barriers compile down to no-ops, meaning enqueue and\
 dequeue are just a simple series of loads and stores (and branches)


## Use

Simply drop the readerwriterqueue.h (or readerwritercircularbuffer.h) and\
 atomicops.h files into your source code and include them :-)
A modern compiler is required (MSVC2010+, GCC 4.7+, ICC 13+, or any C++11\
 compliant compiler should work).

Note: If you're using GCC, you really do need GCC 4.7 or above -- [4.6 has a\
 bug][gcc46bug] that prevents the atomic fence primitives
from working correctly.

Example:

```cpp
using namespace moodycamel;

ReaderWriterQueue<int> q(100);       // Reserve space for at least 100\
 elements up front

q.enqueue(17);                       // Will allocate memory if the queue is\
 full
bool succeeded = q.try_enqueue(18);  // Will only succeed if the queue has an\
 empty slot (never allocates)
assert(succeeded);

int number;
succeeded = q.try_dequeue(number);  // Returns false if the queue was empty

assert(succeeded && number == 17);

// You can also peek at the front item of the queue (consumer only)
int* front = q.peek();
assert(*front == 18);
succeeded = q.try_dequeue(number);
assert(succeeded && number == 18);
front = q.peek(); 
assert(front == nullptr);           // Returns nullptr if the queue was empty
```

The blocking version has the exact same API, with the addition of\
 `wait_dequeue` and
`wait_dequeue_timed` methods:

```cpp
BlockingReaderWriterQueue<int> q;

std::thread reader([&]() {
    int item;
#if 1
    for (int i = 0; i != 100; ++i) {
        // Fully-blocking:
        q.wait_dequeue(item);
    }
#else
    for (int i = 0; i != 100; ) {
        // Blocking with timeout
        if (q.wait_dequeue_timed(item, std::chrono::milliseconds(5)))
            ++i;
    }
#endif
});
std::thread writer([&]() {
    for (int i = 0; i != 100; ++i) {
        q.enqueue(i);
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
});
writer.join();
reader.join();

assert(q.size_approx() == 0);
```
    
Note that `wait_dequeue` will block indefinitely while the queue is empty;\
 this
means care must be taken to only call `wait_dequeue` if you're sure another\
 element
will come along eventually, or if the queue has a static lifetime. This is\
 because
destroying the queue while a thread is waiting on it will invoke undefined\
 behaviour.

The blocking circular buffer has a fixed number of slots, but is otherwise\
 quite similar to
use:

```cpp
BlockingReaderWriterCircularBuffer<int> q(1024);  // pass initial capacity

q.try_enqueue(1);
int number;
q.try_dequeue(number);
assert(number == 1);

q.wait_enqueue(123);
q.wait_dequeue(number);
assert(number == 123);

q.wait_dequeue_timed(number, std::chrono::milliseconds(10));
```


## CMake
### Using targets in your project
Using this project as a part of an existing CMake project is easy.

In your CMakeLists.txt:
```
include(FetchContent)

FetchContent_Declare(
  readerwriterqueue
  GIT_REPOSITORY    https://github.com/cameron314/readerwriterqueue
  GIT_TAG           master
)

FetchContent_MakeAvailable(readerwriterqueue)

add_library(my_target main.cpp)
target_link_libraries(my_target PUBLIC readerwriterqueue)
```

In main.cpp:
```cpp
#include <readerwriterqueue.h>

int main()
{
    moodycamel::ReaderWriterQueue<int> q(100);
}
```

### Installing into system directories
As an alternative to including the source files in your project directly,
you can use CMake to install the library in your system's include directory:

```
mkdir build
cd build
cmake ..
make install
```

Then, you can include it from your source code:
```
#include <readerwriterqueue/readerwriterqueue.h>
```

## Disclaimers

The queue should only be used on platforms where aligned integer and pointer\
 access is atomic; fortunately, that
includes all modern processors (e.g. x86/x86-64, ARM, and PowerPC). *Not* for\
 use with a DEC Alpha processor (which has very weak memory ordering) :-)

Note that it's only been tested on x86(-64); if someone has access to other\
 processors I'd love to run some tests on
anything that's not x86-based.

## More info

See the [LICENSE.md][license] file for the license (simplified BSD).

My [blog post][blog] introduces the context that led to this code, and may be\
 of interest if you're curious
about lock-free programming.


[blog]: http://moodycamel.com/blog/2013/a-fast-lock-free-queue-for-c++
[license]: LICENSE.md
[benchmarks]: http://moodycamel.com/blog/2013/a-fast-lock-free-queue-for-c++#\
benchmarks
[gcc46bug]: http://stackoverflow.com/questions/16429669/stdatomic-thread-fenc\
e-has-undefined-reference
[mpmc]: https://github.com/cameron314/concurrentqueue
[circular]: readerwritercircularbuffer.h

\
description-type: text/markdown;variant=GFM
url: https://github.com/cameron314/readerwriterqueue
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = readerwriterqueue

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h

\
location: readerwriterqueue/readerwriterqueue-1.0.6+4.tar.gz
sha256sum: eca938066c6843357fafaed2c1aacea507445e024476cf6d4125659c394502b1
:
name: redis-plus-plus
version: 1.3.3+1
summary: Redis client written in C++
license: Apache-2.0
description:
\
# redis-plus-plus

[![Build Status](https://travis-ci.org/sewenew/redis-plus-plus.svg?branch=mas\
ter)](https://travis-ci.org/sewenew/redis-plus-plus)

## Overview

This is a C++ client library for Redis. It's based on [hiredis](https://githu\
b.com/redis/hiredis), and is compatible with C++ 17, C++ 14, and C++ 11.

**NOTE**: I'm not a native speaker. So if the documentation is unclear,\
 please feel free to open an issue or pull request. I'll response ASAP.

### Features
- Most commands for Redis.
- Connection pool.
- Redis scripting.
- Thread safe unless otherwise stated.
- Redis publish/subscribe.
- Redis pipeline.
- Redis transaction.
- Redis Cluster.
- Redis Sentinel.
- STL-like interfaces.
- Generic command interface.
- Redis Stream.
- Redlock.
- Redis ACL.
- TLS/SSL support.

\
description-type: text/markdown;variant=GFM
url: https://github.com/sewenew/redis-plus-plus
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: hiredis >= 0.12.1
bootstrap-build:
\
project = redis-plus-plus

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: redis-plus-plus/redis-plus-plus-1.3.3+1.tar.gz
sha256sum: 59c856e00d9d0d45eb457feb05a16b3f9103c5868b778b1eaafd9f6d89aa23ae
:
name: reflex
version: 20210808+1
summary: Relocalized fast lexical analyzer generator
license: other: BSD-AdClause; Customized version of BSD-4-Clause
topics: lex, flex, lexer
description:
\
# reflex

`reflex` is a variant of `flex`, a tool for generating scanners (programs
which recognize lexical patterns in text).

It reads the given input files for a description of a scanner to generate. The
description is in the form of pairs of regular expressions and C code, called
rules. Reflex generates as output a C source file, `lex.yy.c`, which defines a
routine `yylex()`. When this routine is called, it analyzes its input for
occurrences of the regular expressions. Whenever it finds one, it executes the
corresponding C code.

`reflex` is based on `flex` 2.5.4a, and unlike so-called "new" `flex`, remains
compatible with POSIX `lex`.

Note that the `reflex` executable provides `build2` metadata.

\
description-type: text/markdown;variant=GFM
changes:
\
-- $Id: NEWS,v 1.58 2021/08/08 22:44:04 tom Exp $
-----------------------------------------------------------------------------\
--
-- Changes by Thomas E. Dickey
-- vile:txtmode
-----------------------------------------------------------------------------\
--

2021/08/08
	+ add symbolic link for flex++ manpage in makefile "install" rule.
	> Boris Kolpackov:
	+ add/use yylex_destroy() function like "new" flex which can be used to
	  reset the lexer in order to re-execute it on different input.
	+ fix a memory leak in gentab()

2021/08/06
	+ compiler-warning fixes

2021/08/04
	+ rewrote command-line options parsing, adding a table to map long
	  options into the normal single-letter options.

	+ updated config.guess, config.sub

2021/05/10
	+ modify skeleton to allow override of YY_BUF_SIZE

	+ fix cppcheck warnings

	+ update configure macros, e.g., for clang, BSDs, etc.
	  CF_ADD_CFLAGS, CF_AR_FLAGS, CF_CC_ENV_FLAGS, CF_CHECK_CACHE,
	  CF_CLANG_COMPILER, CF_CONST_X_STRING, CF_GCC_ATTRIBUTES,
	  CF_GCC_WARNINGS, CF_INTEL_COMPILER, CF_LOCALE, CF_MAKE_DOCS,
	  CF_MIXEDCASE_FILENAMES, CF_PATH_SYNTAX, CF_PROG_EXT, CF_WITHOUT_X,
	  CF_WITH_MAN2HTML, CF_XOPEN_SOURCE

	+ updated config.guess, config.sub

2020/07/15
	+ compiler-warning and shellcheck fixes

	+ update configure macros, e.g., for clang, BSDs, etc.
	  CF_ADD_CFLAGS, CF_AR_FLAGS, CF_CONST_X_STRING, CF_GCC_ATTRIBUTES,
	  CF_GCC_WARNINGS, CF_PROG_CC, CF_WITHOUT_X

	+ updated config.guess, config.sub

2019/11/23
	+ cleanup manual-page formatting.

	+ add lower- and patch-version information to skeleton.

	+ modify generated file to include unistd.h unless overridden, so that
	  isatty() will be prototyped by default.

	+ update configure macros, e.g., for clang, BSDs, etc.
	  CF_CC_ENV_FLAGS, CF_CONST_X_STRING, CF_GCC_VERSION, CF_GCC_WARNINGS,
	  CF_GNU_SOURCE, CF_POSIX_C_SOURCE, CF_POSIX_VISIBLE, CF_PROG_EXT,
	  CF_PROG_GROFF, CF_PROG_LINT, CF_TRY_XOPEN_SOURCE, CF_WITH_MAN2HTML,
	  CF_XOPEN_SOURCE

	+ updated config.guess, config.sub

2017/12/31
	+ add a "FALLTHRU" comment to quiet compiler warning in vile's
	  dcl-filt.l

	+ update configure macros:
	  CF_CC_ENV_FLAGS, CF_WITH_MAN2HTML     

	+ updated config.guess, config.sub

2017/11/11
	+ build-fix for rpms with Fedora 26.

2017/05/21
	+ amend mkscan.sh script to work with "make test" when building from
	  other directories than the source-directory (report by Michael
	  Tiernan)

	+ add configure check for "ar" flags

	+ add configure --with-man2html option

	+ add "docs" rule to manpage

	+ update configure macros, e.g., for clang and MingW
	  CF_ACVERSION_CHECK, CF_ADD_CFLAGS, CF_ARG_OPTION, CF_CC_ENV_FLAGS,
	  CF_DISABLE_ECHO, CF_GCC_ATTRIBUTES, CF_GCC_WARNINGS, CF_GNU_SOURCE,
	  CF_INTEL_COMPILER, CF_MAKE_DOCS, CF_MIXEDCASE_FILENAMES,
	  CF_POSIX_C_SOURCE, CF_PROG_CC, CF_PROG_EXT, CF_PROG_LINT,
	  CF_XOPEN_SOURCE

	+ updated config.guess, config.sub

2013/12/09
	+ minor compiler-warning fixes for the skeleton.

	+ update configure macros, e.g., for clang and MingW

	+ updated config.guess, config.sub

2010/09/06
	+ fix stricter compiler warnings, e.g., for 64-bits and gcc 4.1.2
	  with -Wconversion

	+ remove unneeded "/" after $(DESTDIR) in Makefile.in, needed to
	  install with Cygwin.

2010/06/27
	+ improve rename.sh, handling "FLEX" and "Flex" cases.

	+ add configure checks for lint and tags programs.

	+ add $DESTDIR to makefile.

	+ drop mkdirs.sh, use "mkdir -p"

	+ add build-scripts for RPM and Debian packages.

	+ updates to configure script macros:
	  + CF_ADD_CFLAGS, CF_ARG_OPTION, CF_INTEL_COMPILER, CF_POSIX_C_SOURCE,
	    CF_XOPEN_SOURCE quoted params of ifelse()
	  + CF_GCC_WARNINGS, change logic for warning options, to work with c89
	    wrapper for gcc
	  + CF_GCC_VERSION, discard stderr, to work with c89 wrapper for gcc
	  + CF_DISABLE_ECHO, uses different
	    indent

	+ updated config.guess, config.sub

2009/10/27
	+ add configure macro CF_XOPEN_SOURCE, to enable use of fileno() when
	  compiling byacc output with c99.

2009/10/13
	+ more gcc warning fixes, including workaround for defective
	  implementation of atttribute warn_unused_result.

	+ change ccltbl[] to array of structs holding the reason why a
	  character was added to a character class in addition to the
	  character.

2009/09/02
	+ add patch-date to version message.

	+ modify generated code to eliminate gcc -Wconversion warnings.

	+ update utility scripts, using install-sh and mkdirs.sh

	+ updated config.guess, config.sub

2008/11/17
	+ modify makefile rules and runtime handling of skeleton to make the
	  C++ header file work using the same program prefix.

	+ update FlexLexer.h to C++ standard header and namespace.

	+ change default for --program-prefix option, to "re", making this
	  install as "reflex".

2008/11/16
	+ add a missing ifdef for YY_NO_INPUT, needed to make the function
	  actually removed.

	+ move C-code supporting YY_FATAL_ERROR() in skeleton so that if the
	  macro is overridden, then the support-code will not be compiled.
	  That eliminates unused-code warnings.

	+ modify makefile rule for "make check" to ensure that it uses POSIX
	  locale, since the reference file is generated that way.

	+ eliminate use of isascii(), which prevented flex from parsing
	  according to 8-bit locales.

	+ modify makefile to work with AC_EXEEXT and AC_OBJEXT macros.

	+ add configure --disable-echo and --enable-warnings options.

	+ eliminate register keyword.

2008/11/14
	+ modify skeleton and code-generator to improve indentation of generated
	  file for better readability.

2008/11/12
	+ update configure script, adding ability to rename executable during
	  install, e.g., as "reflex".

2008/07/26
	+ eliminate PROTO(), YY_PROTO and YY_USE_PROTOS macros.
	+ ANSIfy'd all of the C files.
	+ indent'd all of the C files.

-----------------------------------------------------------------------------\
--
-- Changes by Verne Paxson
-----------------------------------------------------------------------------\
--
Changes between release 2.5.4 (11Sep96) and release 2.5.3:

	- Fixed a bug introduced in 2.5.3 that blew it when a call
	  to input() occurred at the end of an input file.

	- Fixed scanner skeleton so the example in the man page of
	  scanning strings using exclusive start conditions works.

	- Minor Makefile tweaks.


Changes between release 2.5.3 (29May96) and release 2.5.2:

	- Some serious bugs in yymore() have been fixed.  In particular,
	  when using AT&T-lex-compatibility or %array, you can intermix
	  calls to input(), unput(), and yymore().  (This still doesn't
	  work for %pointer, and isn't likely to in the future.)

	- A bug in handling NUL's in the input stream of scanners using
	  REJECT has been fixed.

	- The default main() in libfl.a now repeatedly calls yylex() until
	  it returns 0, rather than just calling it once.

	- Minor tweak for Windows NT Makefile, MISC/NT/Makefile.


Changes between release 2.5.2 (25Apr95) and release 2.5.1:

	- The --prefix configuration option now works.

	- A bug that completely broke the "-Cf" table compression
	  option has been fixed.

	- A major headache involving "const" declarators and Solaris
	  systems has been fixed.

	- An octal escape sequence in a flex regular expression must
	  now contain only the digits 0-7.

	- You can now use "--" on the flex command line to mark the
	  end of flex options.

	- You can now specify the filename '-' as a synonym for stdin.

	- By default, the scanners generated by flex no longer
	  statically initialize yyin and yyout to stdin and stdout.
	  This change is necessary because in some ANSI environments,
	  stdin and stdout are not compile-time constant.  You can
	  force the initialization using "%option stdinit" in the first
	  section of your flex input.

	- "%option nounput" now correctly omits the unput() routine
	  from the output.

	- "make clean" now removes config.log, config.cache, and the
	  flex binary.  The fact that it removes the flex binary means
	  you should take care if making changes to scan.l, to make
	  sure you don't wind up in a bootstrap problem.

	- In general, the Makefile has been reworked somewhat (thanks
	  to Francois Pinard) for added flexibility - more changes will
	  follow in subsequent releases.

	- The .texi and .info files in MISC/texinfo/ have been updated,
	  thanks also to Francois Pinard.

	- The FlexLexer::yylex(istream* new_in, ostream* new_out) method
	  now does not have a default for the first argument, to disambiguate
	  it from FlexLexer::yylex().

	- A bug in destructing a FlexLexer object before doing any scanning
	  with it has been fixed.

	- A problem with including FlexLexer.h multiple times has been fixed.

	- The alloca() chud necessary to accommodate bison has grown
	  even uglier, but hopefully more correct.

	- A portability tweak has been added to accommodate compilers that
	  use char* generic pointers.

	- EBCDIC contact information in the file MISC/EBCDIC has been updated.

	- An OS/2 Makefile and config.h for flex 2.5 is now available in
	  MISC/OS2/, contributed by Kai Uwe Rommel.

	- The descrip.mms file for building flex under VMS has been updated,
	  thanks to Pat Rankin.

	- The notes on building flex for the Amiga have been updated for
	  flex 2.5, contributed by Andreas Scherer.


Changes between release 2.5.1 (28Mar95) and release 2.4.7:

	- A new concept of "start condition" scope has been introduced.
	  A start condition scope is begun with:

		<SCs>{

	  where SCs is a list of one or more start conditions.  Inside
	  the start condition scope, every rule automatically has the
	  prefix <SCs> applied to it, until a '}' which matches the
	  initial '{'.  So, for example:

		<ESC>{
			"\\n"	return '\n';
			"\\r"	return '\r';
			"\\f"	return '\f';
			"\\0"	return '\0';
		}

	  is equivalent to:

		<ESC>"\\n"	return '\n';
		<ESC>"\\r"	return '\r';
		<ESC>"\\f"	return '\f';
		<ESC>"\\0"	return '\0';

	  As indicated in this example, rules inside start condition scopes
	  (and any rule, actually, other than the first) can be indented,
	  to better show the extent of the scope.

	  Start condition scopes may be nested.

	- The new %option directive can be used in the first section of
	  a flex scanner to control scanner-generation options.  Most
	  options are given simply as names, optionally preceded by the
	  word "no" (with no intervening whitespace) to negate their
	  meaning.  Some are equivalent to flex flags, so putting them
	  in your scanner source is equivalent to always specifying
	  the flag (%option's take precedence over flags):

		7bit	-7 option
		8bit	-8 option
		align	-Ca option
		backup	-b option
		batch	-B option
		c++	-+ option
		caseful	opposite of -i option (caseful is the default);
		case-sensitive	same as above
		caseless	-i option;
		case-insensitive	same as above
		debug	-d option
		default	opposite of -s option
		ecs	-Ce option
		fast	-F option
		full	-f option
		interactive	-I option
		lex-compat	-l option
		meta-ecs	-Cm option
		perf-report	-p option
		read	-Cr option
		stdout	-t option
		verbose	-v option
		warn	opposite of -w option (so use "%option nowarn" for -w)

		array	equivalent to "%array"
		pointer	equivalent to "%pointer" (default)

	  Some provide new features:

		always-interactive	generate a scanner which always
			considers its input "interactive" (no call to isatty()
			will be made when the scanner runs)
		main	supply a main program for the scanner, which
			simply calls yylex().  Implies %option noyywrap.
		never-interactive	generate a scanner which never
			considers its input "interactive" (no call to isatty()
			will be made when the scanner runs)
		stack	if set, enable start condition stacks (see below)
		stdinit	if unset ("%option nostdinit"), initialize yyin
			and yyout statically to nil FILE* pointers, instead
			of stdin and stdout
		yylineno	if set, keep track of the current line
			number in global yylineno (this option is expensive
			in terms of performance).  The line number is available
			to C++ scanning objects via the new member function
			lineno().
		yywrap	if unset ("%option noyywrap"), scanner does not
			call yywrap() upon EOF but simply assumes there
			are no more files to scan

	  Flex scans your rule actions to determine whether you use the
	  REJECT or yymore features (this is not new).  Two %options can be
	  used to override its decision, either by setting them to indicate
	  the feature is indeed used, or unsetting them to indicate it
	  actually is not used:

		reject
		yymore

	  Three %option's take string-delimited values, offset with '=':

		outfile="<name>"	equivalent to -o<name>
		prefix="<name>"		equivalent to -P<name>
		yyclass="<name>"	set the name of the C++ scanning class
					(see below)

	  A number of %option's are available for lint purists who
	  want to suppress the appearance of unneeded routines in
	  the generated scanner.  Each of the following, if unset,
	  results in the corresponding routine not appearing in the
	  generated scanner:

		input, unput
		yy_push_state, yy_pop_state, yy_top_state
		yy_scan_buffer, yy_scan_bytes, yy_scan_string

	  You can specify multiple options with a single %option directive,
	  and multiple directives in the first section of your flex input file.

	- The new function:

		YY_BUFFER_STATE yy_scan_string( const char *str )

	  returns a YY_BUFFER_STATE (which also becomes the current input
	  buffer) for scanning the given string, which occurs starting
	  with the next call to yylex().  The string must be NUL-terminated.
	  A related function:

		YY_BUFFER_STATE yy_scan_bytes( const char *bytes, int len )

	  creates a buffer for scanning "len" bytes (including possibly NUL's)
	  starting at location "bytes".

	  Note that both of these functions create and scan a *copy* of
	  the string/bytes.  (This may be desirable, since yylex() modifies
	  the contents of the buffer it is scanning.)  You can avoid the
	  copy by using:

		YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )

	  which scans in place the buffer starting at "base", consisting
	  of "size" bytes, the last two bytes of which *must* be
	  YY_END_OF_BUFFER_CHAR (these bytes are not scanned; thus, scanning
	  consists of base[0] through base[size-2], inclusive).  If you
	  fail to set up "base" in this manner, yy_scan_buffer returns a
	  nil pointer instead of creating a new input buffer.

	  The type yy_size_t is an integral type to which you can cast
	  an integer expression reflecting the size of the buffer.

	- Three new routines are available for manipulating stacks of
	  start conditions:

		void yy_push_state( int new_state )

	  pushes the current start condition onto the top of the stack
	  and BEGIN's "new_state" (recall that start condition names are
	  also integers).

		void yy_pop_state()

	  pops the top of the stack and BEGIN's to it, and

		int yy_top_state()

	  returns the top of the stack without altering the stack's
	  contents.

	  The start condition stack grows dynamically and so has no built-in
	  size limitation.  If memory is exhausted, program execution
	  is aborted.

	  To use start condition stacks, your scanner must include
	  a "%option stack" directive.

	- flex now supports POSIX character class expressions.  These
	  are expressions enclosed inside "[:" and ":]" delimiters (which
	  themselves must appear between the '[' and ']' of a character
	  class; other elements may occur inside the character class, too).
	  The expressions flex recognizes are:

		[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:]
		[:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]

	  These expressions all designate a set of characters equivalent to
	  the corresponding isXXX function (for example, [:alnum:] designates
	  those characters for which isalnum() returns true - i.e., any
	  alphabetic or numeric).  Some systems don't provide isblank(),
	  so flex defines [:blank:] as a blank or a tab.

	  For example, the following character classes are all equivalent:

		[[:alnum:]]
		[[:alpha:][:digit:]
		[[:alpha:]0-9]
		[a-zA-Z0-9]

	  If your scanner is case-insensitive (-i flag), then [:upper:]
	  and [:lower:] are equivalent to [:alpha:].

	- The promised rewrite of the C++ FlexLexer class has not yet
	  been done.  Support for FlexLexer is limited at the moment to
	  fixing show-stopper bugs, so, for example, the new functions
	  yy_scan_string() & friends are not available to FlexLexer
	  objects.

	- The new macro

		yy_set_interactive(is_interactive)

	  can be used to control whether the current buffer is considered
	  "interactive".  An interactive buffer is processed more slowly,
	  but must be used when the scanner's input source is indeed
	  interactive to avoid problems due to waiting to fill buffers
	  (see the discussion of the -I flag in flex.1).  A non-zero value
	  in the macro invocation marks the buffer as interactive, a zero
	  value as non-interactive.  Note that use of this macro overrides
	  "%option always-interactive" or "%option never-interactive".

	  yy_set_interactive() must be invoked prior to beginning to
	  scan the buffer.

	- The new macro

		yy_set_bol(at_bol)

	  can be used to control whether the current buffer's scanning
	  context for the next token match is done as though at the
	  beginning of a line (non-zero macro argument; makes '^' anchored
	  rules active) or not at the beginning of a line (zero argument,
	  '^' rules inactive).

	- Related to this change, the mechanism for determining when a scan is
	  starting at the beginning of a line has changed.  It used to be
	  that '^' was active iff the character prior to that at which the
	  scan started was a newline.  The mechanism now is that '^' is
	  active iff the last token ended in a newline (or the last call to
	  input() returned a newline).  For most users, the difference in
	  mechanisms is negligible.  Where it will make a difference,
	  however, is if unput() or yyless() is used to alter the input
	  stream.  When in doubt, use yy_set_bol().

	- The new beginning-of-line mechanism involved changing some fairly
	  twisted code, so it may have introduced bugs - beware ...

	- The macro YY_AT_BOL() returns true if the next token scanned from
	  the current buffer will have '^' rules active, false otherwise.

	- The new function

		void yy_flush_buffer( struct yy_buffer_state* b )

	  flushes the contents of the current buffer (i.e., next time
	  the scanner attempts to match a token using b as the current
	  buffer, it will begin by invoking YY_INPUT to fill the buffer).
	  This routine is also available to C++ scanners (unlike some
	  of the other new routines).

	  The related macro

		YY_FLUSH_BUFFER

	  flushes the contents of the current buffer.

	- A new "-ooutput" option writes the generated scanner to "output".
	  If used with -t, the scanner is still written to stdout, but
	  its internal #line directives (see previous item) use "output".

	- Flex now generates #line directives relating the code it
	  produces to the output file; this means that error messages
	  in the flex-generated code should be correctly pinpointed.

	- When generating #line directives, filenames with embedded '\'s
	  have those characters escaped (i.e., turned into '\\').  This
	  feature helps with reporting filenames for some MS-DOS and OS/2
	  systems.

	- The FlexLexer class includes two new public member functions:

		virtual void switch_streams( istream* new_in = 0,
						ostream* new_out = 0 )

	  reassigns yyin to new_in (if non-nil) and yyout to new_out
	  (ditto), deleting the previous input buffer if yyin is
	  reassigned.  It is used by:

		int yylex( istream* new_in = 0, ostream* new_out = 0 )

	  which first calls switch_streams() and then returns the value
	  of calling yylex().

	- C++ scanners now have yy_flex_debug as a member variable of
	  FlexLexer rather than a global, and member functions for testing
	  and setting it.

	- When generating a C++ scanning class, you can now use

		%option yyclass="foo"

	  to inform flex that you have derived "foo" as a subclass of
	  yyFlexLexer, so flex will place your actions in the member
	  function foo::yylex() instead of yyFlexLexer::yylex().  It also
	  generates a yyFlexLexer::yylex() member function that generates a
	  run-time error if called (by invoking yyFlexLexer::LexerError()).
	  This feature is necessary if your subclass "foo" introduces some
	  additional member functions or variables that you need to access
	  from yylex().

	- Current texinfo files in MISC/texinfo, contributed by Francois
	  Pinard.

	- You can now change the name "flex" to something else (e.g., "lex")
	  by redefining $(FLEX) in the Makefile.

	- Two bugs (one serious) that could cause "bigcheck" to fail have
	  been fixed.

	- A number of portability/configuration changes have been made
	  for easier portability.

	- You can use "YYSTATE" in your scanner as an alias for YY_START
	  (for AT&T lex compatibility).

	- input() now maintains yylineno.

	- input() no longer trashes yytext.

	- interactive scanners now read characters in YY_INPUT up to a
	  newline, a large performance gain.

	- C++ scanner objects now work with the -P option.  You include
	  <FlexLexer.h> once per scanner - see comments in <FlexLexer.h>
	  (or flex.1) for details.

	- C++ FlexLexer objects now use the "cerr" stream to report -d output
	  instead of stdio.

	- The -c flag now has its full glorious POSIX interpretation (do
	  nothing), rather than being interpreted as an old-style -C flag.

	- Scanners generated by flex now include two #define's giving
	  the major and minor version numbers (YY_FLEX_MAJOR_VERSION,
	  YY_FLEX_MINOR_VERSION).  These can then be tested to see
	  whether certain flex features are available.

	- Scanners generated using -l lex compatibility now have the symbol
	  YY_FLEX_LEX_COMPAT #define'd.

	- When initializing (i.e., yy_init is non-zero on entry to yylex()),
	  generated scanners now set yy_init to zero before executing
	  YY_USER_INIT.  This means that you can set yy_init back to a
	  non-zero value in YY_USER_INIT if you need the scanner to be
	  reinitialized on the next call.

	- You can now use "#line" directives in the first section of your
	  scanner specification.

	- When generating full-table scanners (-Cf), flex now puts braces
	  around each row of the 2-d array initialization, to silence warnings
	  on over-zealous compilers.

	- Improved support for MS-DOS.  The flex sources have been successfully
	  built, unmodified, for Borland 4.02 (all that's required is a
	  Borland Makefile and config.h file, which are supplied in
	  MISC/Borland - contributed by Terrence O Kane).

	- Improved support for Macintosh using Think C - the sources should
	  build for this platform "out of the box".  Contributed by Scott
	  Hofmann.

	- Improved support for VMS, in MISC/VMS/, contributed by Pat Rankin.

	- Support for the Amiga, in MISC/Amiga/, contributed by Andreas
	  Scherer.  Note that the contributed files were developed for
	  flex 2.4 and have not been tested with flex 2.5.

	- Some notes on support for the NeXT, in MISC/NeXT, contributed
	  by Raf Schietekat.

	- The MISC/ directory now includes a preformatted version of flex.1
	  in flex.man, and pre-yacc'd versions of parse.y in parse.{c,h}.

	- The flex.1 and flexdoc.1 manual pages have been merged.  There
	  is now just one document, flex.1, which includes an overview
	  at the beginning to help you find the section you need.

	- Documentation now clarifies that start conditions persist across
	  switches to new input files or different input buffers.  If you
	  want to e.g., return to INITIAL, you must explicitly do so.

	- The "Performance Considerations" section of the manual has been
	  updated.

	- Documented the "yy_act" variable, which when YY_USER_ACTION is
	  invoked holds the number of the matched rule, and added an
	  example of using yy_act to profile how often each rule is matched.

	- Added YY_NUM_RULES, a definition that gives the total number
	  of rules in the file, including the default rule (even if you
	  use -s).

	- Documentation now clarifies that you can pass a nil FILE* pointer
	  to yy_create_buffer() or yyrestart() if you've arrange YY_INPUT
	  to not need yyin.

	- Documentation now clarifies that YY_BUFFER_STATE is a pointer to
	  an opaque "struct yy_buffer_state".

	- Documentation now stresses that you gain the benefits of removing
	  backing-up states only if you remove *all* of them.

	- Documentation now points out that traditional lex allows you
	  to put the action on a separate line from the rule pattern if
	  the pattern has trailing whitespace (ugh!), but flex doesn't
	  support this.

	- A broken example in documentation of the difference between
	  inclusive and exclusive start conditions is now fixed.

	- Usage (-h) report now goes to stdout.

	- Version (-V) info now goes to stdout.

	- More #ifdef chud has been added to the parser in attempt to
	  deal with bison's use of alloca().

	- "make clean" no longer deletes emacs backup files (*~).

	- Some memory leaks have been fixed.

	- A bug was fixed in which dynamically-expanded buffers were
	  reallocated a couple of bytes too small.

	- A bug was fixed which could cause flex to read and write beyond
	  the end of the input buffer.

	- -S will not be going away.


Changes between release 2.4.7 (03Aug94) and release 2.4.6:

	- Fixed serious bug in reading multiple files.

	- Fixed bug in scanning NUL's.

	- Fixed bug in input() returning 8-bit characters.

	- Fixed bug in matching text with embedded NUL's when
	  using %array or lex compatibility.

	- Fixed multiple invocations of YY_USER_ACTION when using '|'
	  continuation action.

	- Minor prototyping fixes.

Changes between release 2.4.6 (04Jan94) and release 2.4.5:

	- Linking with -lfl no longer required if your program includes
	  its own yywrap() and main() functions.  (This change will cause
	  problems if you have a non-ANSI compiler on a system for which
	  sizeof(int) != sizeof(void*) or sizeof(int) != sizeof(size_t).)

	- The use of 'extern "C++"' in FlexLexer.h has been modified to
	  get around an incompatibility with g++'s header files.

Changes between release 2.4.5 (11Dec93) and release 2.4.4:

	- Fixed bug breaking C++ scanners that use REJECT or variable
	  trailing context.

	- Fixed serious input problem for interactive scanners on
	  systems for which char is unsigned.

	- Fixed bug in incorrectly treating '$' operator as variable
	  trailing context.

	- Fixed bug in -CF table representation that could lead to
	  corrupt tables.

	- Fixed fairly benign memory leak.

	- Added `extern "C++"' wrapper to FlexLexer.h header.  This
	  should overcome the g++ 2.5.X problems mentioned in the
	  NEWS for release 2.4.3.

	- Changed #include of FlexLexer.h to use <> instead of "".

	- Added feature to control whether the scanner attempts to
	  refill the input buffer once it's exhausted.  This feature
	  will be documented in the 2.5 release.


Changes between release 2.4.4 (07Dec93) and release 2.4.3:

	- Fixed two serious bugs in scanning 8-bit characters.

	- Fixed bug in YY_USER_ACTION that caused it to be executed
	  inappropriately (on the scanner's own internal actions, and
	  with incorrect yytext/yyleng values).

	- Fixed bug in pointing yyin at a new file and resuming scanning.

	- Portability fix regarding min/max/abs macros conflicting with
	  function definitions in standard header files.

	- Added a virtual LexerError() method to the C++ yyFlexLexer class
	  for reporting error messages instead of always using cerr.

	- Added warning in flexdoc that the C++ scanning class is presently
	  experimental and subject to considerable change between major
	  releases.


Changes between release 2.4.3 (03Dec93) and release 2.4.2:

	- Fixed bug causing fatal scanner messages to fail to print.

	- Fixed things so FlexLexer.h can be included in other C++
	  sources.  One side-effect of this change is that -+ and -CF
	  are now incompatible.

	- libfl.a now supplies private versions of the the <string.h>/
	  <strings.h> string routines needed by flex and the scanners
	  it generates, to enhance portability to some BSD systems.

	- More robust solution to 2.4.2's flexfatal() bug fix.

	- Added ranlib of installed libfl.a.

	- Some lint tweaks.

	- NOTE: problems have been encountered attempting to build flex
	  C++ scanners using g++ version 2.5.X.  The problem is due to an
	  unfortunate heuristic in g++ 2.5.X that attempts to discern between
	  C and C++ headers.  Because FlexLexer.h is installed (by default)
	  in /usr/local/include and not /usr/local/lib/g++-include, g++ 2.5.X
	  decides that it's a C header :-(.  So if you have problems, install
	  the header in /usr/local/lib/g++-include instead.


Changes between release 2.4.2 (01Dec93) and release 2.4.1:

	- Fixed bug in libfl.a referring to non-existent "flexfatal" function.

	- Modified to produce both compress'd and gzip'd tar files for
	  distributions (you probably don't care about this change!).


Changes between release 2.4.1 (30Nov93) and release 2.3.8:

	- The new '-+' flag instructs flex to generate a C++ scanner class
	  (thanks to Kent Williams).  flex writes an implementation of the
	  class defined in FlexLexer.h to lex.yy.cc.  You may include
	  multiple scanner classes in your program using the -P flag.  Note
	  that the scanner class also provides a mechanism for creating
	  reentrant scanners.  The scanner class uses C++ streams for I/O
	  instead of FILE*'s (thanks to Tom Epperly).  If the flex executable's
	  name ends in '+' then the '-+' flag is automatically on, so creating
	  a symlink or copy of "flex" to "flex++" results in a version of
	  flex that can be used exclusively for C++ scanners.

	  Note that without the '-+' flag, flex-generated scanners can still
	  be compiled using C++ compilers, though they use FILE*'s for I/O
	  instead of streams.

	  See the "GENERATING C++ SCANNERS" section of flexdoc for details.

	- The new '-l' flag turns on maximum AT&T lex compatibility.  In
	  particular, -l includes support for "yylineno" and makes yytext
	  be an array instead of a pointer.  It does not, however, do away
	  with all incompatibilities.  See the "INCOMPATIBILITIES WITH LEX
	  AND POSIX" section of flexdoc for details.

	- The new '-P' option specifies a prefix to use other than "yy"
	  for the scanner's globally-visible variables, and for the
	  "lex.yy.c" filename.  Using -P you can link together multiple
	  flex scanners in the same executable.

	- The distribution includes a "texinfo" version of flexdoc.1,
	  contributed by Roland Pesch (thanks also to Marq Kole, who
	  contributed another version).  It has not been brought up to
	  date, but reflects version 2.3.  See MISC/flex.texinfo.

	  The flex distribution will soon include G.T. Nicol's flex
	  manual; he is presently bringing it up-to-date for version 2.4.

	- yywrap() is now a function, and you now *must* link flex scanners
	  with libfl.a.

	- Site-configuration is now done via an autoconf-generated
	  "configure" script contributed by Francois Pinard.

	- Scanners now use fread() (or getc(), if interactive) and not
	  read() for input.  A new "table compression" option, -Cr,
	  overrides this change and causes the scanner to use read()
	  (because read() is a bit faster than fread()).  -f and -F
	  are now equivalent to -Cfr and -CFr; i.e., they imply the
	  -Cr option.

	- In the blessed name of POSIX compliance, flex supports "%array"
	  and "%pointer" directives in the definitions (first) section of
	  the scanner specification.  The former specifies that yytext
	  should be an array (of size YYLMAX), the latter, that it should
	  be a pointer.  The array version of yytext is universally slower
	  than the pointer version, but has the advantage that its contents
	  remain unmodified across calls to input() and unput() (the pointer
	  version of yytext is, still, trashed by such calls).

	  "%array" cannot be used with the '-+' C++ scanner class option.

	- The new '-Ca' option directs flex to trade off memory for
	  natural alignment when generating a scanner's tables.  In
	  particular, table entries that would otherwise be "short"
	  become "long".

	- The new '-h' option produces a summary of the flex flags.

	- The new '-V' option reports the flex version number and exits.

	- The new scanner macro YY_START returns an integer value
	  corresponding to the current start condition.  You can return
	  to that start condition by passing the value to a subsequent
	  "BEGIN" action.  You also can implement "start condition stacks"
	  by storing the values in an integer stack.

	- You can now redefine macros such as YY_INPUT by just #define'ing
	  them to some other value in the first section of the flex input;
	  no need to first #undef them.

	- flex now generates warnings for rules that can't be matched.
	  These warnings can be turned off using the new '-w' flag.  If
	  your scanner uses REJECT then you will not get these warnings.

	- If you specify the '-s' flag but the default rule can be matched,
	  flex now generates a warning.

	- "yyleng" is now a global, and may be modified by the user (though
	  doing so and then using yymore() will yield weird results).

	- Name definitions in the first section of a scanner specification
	  can now include a leading '^' or trailing '$' operator.  In this
	  case, the definition is *not* pushed back inside of parentheses.

	- Scanners with compressed tables are now "interactive" (-I option)
	  by default.  You can suppress this attribute (which makes them
	  run slightly slower) using the new '-B' flag.

	- Flex now generates 8-bit scanners by default, unless you use the
	  -Cf or -CF compression options (-Cfe  and -CFe result in 8-bit
	  scanners).  You can force it to generate a 7-bit scanner using
	  the new '-7' flag.  You can build flex to generate 8-bit scanners
	  for -Cf and -CF, too, by adding -DDEFAULT_CSIZE=256 to CFLAGS
	  in the Makefile.

	- You no longer need to call the scanner routine yyrestart() to
	  inform the scanner that you have switched to a new file after
	  having seen an EOF on the current input file.  Instead, just
	  point yyin at the new file and continue scanning.

	- You no longer need to invoke YY_NEW_FILE in an <<EOF>> action
	  to indicate you wish to continue scanning.  Simply point yyin
	  at a new file.

	- A leading '#' no longer introduces a comment in a flex input.

	- flex no longer considers formfeed ('\f') a whitespace character.

	- %t, I'm happy to report, has been nuked.

	- The '-p' option may be given twice ('-pp') to instruct flex to
	  report minor performance problems as well as major ones.

	- The '-v' verbose output no longer includes start/finish time
	  information.

	- Newlines in flex inputs can optionally include leading or
	  trailing carriage-returns ('\r'), in support of several PC/Mac
	  run-time libraries that automatically include these.

	- A start condition of the form "<*>" makes the following rule
	  active in every start condition, whether exclusive or inclusive.

	- The following items have been corrected in the flex documentation:

		- '-C' table compression options *are* cumulative.

		- You may modify yytext but not lengthen it by appending
		  characters to the end.  Modifying its final character
		  will affect '^' anchoring for the next rule matched
		  if the character is changed to or from a newline.

		- The term "backtracking" has been renamed "backing up",
		  since it is a one-time repositioning and not a repeated
		  search.  What used to be the "lex.backtrack" file is now
		  "lex.backup".

		- Unindented "/* ... */" comments are allowed in the first
		  flex input section, but not in the second.

		- yyless() can only be used in the flex input source, not
		  externally.

		- You can use "yyrestart(yyin)" to throw away the
		  current contents of the input buffer.

		- To write high-speed scanners, attempt to match as much
		  text as possible with each rule.  See MISC/fastwc/README
		  for more information.

		- Using the beginning-of-line operator ('^') is fairly
		  cheap.  Using unput() is expensive.  Using yyless() is
		  cheap.

		- An example of scanning strings with embedded escape
		  sequences has been added.

		- The example of backing-up in flexdoc was erroneous; it
		  has been corrected.

	- A flex scanner's internal buffer now dynamically grows if needed
	  to match large tokens.  Note that growing the buffer presently
	  requires rescanning the (large) token, so consuming a lot of
	  text this way is a slow process.  Also note that presently the
	  buffer does *not* grow if you unput() more text than can fit
	  into the buffer.

	- The MISC/ directory has been reorganized; see MISC/README for
	  details.

	- yyless() can now be used in the third (user action) section
	  of a scanner specification, thanks to Ceriel Jacobs.  yyless()
	  remains a macro and cannot be used outside of the scanner source.

	- The skeleton file is no longer opened at run-time, but instead
	  compiled into a large string array (thanks to John Gilmore and
	  friends at Cygnus).  You can still use the -S flag to point flex
	  at a different skeleton file.

	- flex no longer uses a temporary file to store the scanner's
	  actions.

	- A number of changes have been made to decrease porting headaches.
	  In particular, flex no longer uses memset() or ctime(), and
	  provides a single simple mechanism for dealing with C compilers
	  that still define malloc() as returning char* instead of void*.

	- Flex now detects if the scanner specification requires the -8 flag
	  but the flag was not given or on by default.

	- A number of table-expansion fencepost bugs have been fixed,
	  making flex more robust for generating large scanners.

	- flex more consistently identifies the location of errors in
	  its input.

	- YY_USER_ACTION is now invoked only for "real" actions, not for
	  internal actions used by the scanner for things like filling
	  the buffer or handling EOF.

	- The rule "[^]]" now matches any character other than a ']';
	  formerly it matched any character at all followed by a ']'.
	  This change was made for compatibility with AT&T lex.

	- A large number of miscellaneous bugs have been found and fixed
	  thanks to Gerhard Wilhelms.

	- The source code has been heavily reformatted, making patches
	  relative to previous flex releases no longer accurate.


Changes between 2.3 Patch #8 (21Feb93) and 2.3 Patch #7:

	- Fixed bugs in dynamic memory allocation leading to grievous
	  fencepost problems when generating large scanners.
	- Fixed bug causing infinite loops on character classes with 8-bit
	  characters in them.
	- Fixed bug in matching repetitions with a lower bound of 0.
	- Fixed bug in scanning NUL characters using an "interactive" scanner.
	- Fixed bug in using yymore() at the end of a file.
	- Fixed bug in misrecognizing rules with variable trailing context.
	- Fixed bug compiling flex on Suns using gcc 2.
	- Fixed bug in not recognizing that input files with the character
	  ASCII 128 in them require the -8 flag.
	- Fixed bug that could cause an infinite loop writing out
	  error messages.
	- Fixed bug in not recognizing old-style lex % declarations if
	  followed by a tab instead of a space.
	- Fixed potential crash when flex terminated early (usually due
	  to a bad flag) and the -v flag had been given.
	- Added some missing declarations of void functions.
	- Changed to only use '\a' for __STDC__ compilers.
	- Updated mailing addresses.


Changes between 2.3 Patch #7 (28Mar91) and 2.3 Patch #6:

	- Fixed out-of-bounds array access that caused bad tables
	  to be produced on machines where the bad reference happened
	  to yield a 1.  This caused problems installing or running
	  flex on some Suns, in particular.


Changes between 2.3 Patch #6 (29Aug90) and 2.3 Patch #5:

	- Fixed a serious bug in yymore() which basically made it
	  completely broken.  Thanks goes to Jean Christophe of
	  the Nethack development team for finding the problem
	  and passing along the fix.


Changes between 2.3 Patch #5 (16Aug90) and 2.3 Patch #4:

	- An up-to-date version of initscan.c so "make test" will
	  work after applying the previous patches


Changes between 2.3 Patch #4 (14Aug90) and 2.3 Patch #3:

	- Fixed bug in hexadecimal escapes which allowed only digits,
	  not letters, in escapes
	- Fixed bug in previous "Changes" file!


Changes between 2.3 Patch #3 (03Aug90) and 2.3 Patch #2:

	- Correction to patch #2 for gcc compilation; thanks goes to
	  Paul Eggert for catching this.


Changes between 2.3 Patch #2 (02Aug90) and original 2.3 release:

	- Fixed (hopefully) headaches involving declaring malloc()
	  and free() for gcc, which defines __STDC__ but (often) doesn't
	  come with the standard include files such as <stdlib.h>.
	  Reordered #ifdef maze in the scanner skeleton in the hope of
	  getting the declarations right for cfront and g++, too.

	- Note that this patch supercedes patch #1 for release 2.3,
	  which was never announced but was available briefly for
	  anonymous ftp.


Changes between 2.3 (full) release of 28Jun90 and 2.2 (alpha) release:

    User-visible:

	- A lone <<EOF>> rule (that is, one which is not qualified with
	  a list of start conditions) now specifies the EOF action for
	  *all* start conditions which haven't already had <<EOF>> actions
	  given.  To specify an end-of-file action for just the initial
	  state, use <INITIAL><<EOF>>.

	- -d debug output is now contigent on the global yy_flex_debug
	  being set to a non-zero value, which it is by default.

	- A new macro, YY_USER_INIT, is provided for the user to specify
	  initialization action to be taken on the first call to the
	  scanner.  This action is done before the scanner does its
	  own initialization.

	- yy_new_buffer() has been added as an alias for yy_create_buffer()

	- Comments beginning with '#' and extending to the end of the line
	  now work, but have been deprecated (in anticipation of making
	  flex recognize #line directives).

	- The funky restrictions on when semi-colons could follow the
	  YY_NEW_FILE and yyless macros have been removed.  They now
	  behave identically to functions.

	- A bug in the sample redefinition of YY_INPUT in the documentation
	  has been corrected.

	- A bug in the sample simple tokener in the documentation has
	  been corrected.

	- The documentation on the incompatibilities between flex and
	  lex has been reordered so that the discussion of yylineno
	  and input() come first, as it's anticipated that these will
	  be the most common source of headaches.


    Things which didn't used to be documented but now are:

	- flex interprets "^foo|bar" differently from lex.  flex interprets
	  it as "match either a 'foo' or a 'bar', providing it comes at the
	  beginning of a line", whereas lex interprets it as "match either
	  a 'foo' at the beginning of a line, or a 'bar' anywhere".

	- flex initializes the global "yyin" on the first call to the
	  scanner, while lex initializes it at compile-time.

	- yy_switch_to_buffer() can be used in the yywrap() macro/routine.

	- flex scanners do not use stdio for their input, and hence when
	  writing an interactive scanner one must explictly call fflush()
	  after writing out a prompt.

	- flex scanner can be made reentrant (after a fashion) by using
	  "yyrestart( yyin );".  This is useful for interactive scanners
	  which have interrupt handlers that long-jump out of the scanner.

	- a defense of why yylineno is not supported is included, along
	  with a suggestion on how to convert scanners which rely on it.


    Other changes:

	- Prototypes and proper declarations of void routines have
	  been added to the flex source code, courtesy of Kevin B. Kenny.

	- Routines dealing with memory allocation now use void* pointers
	  instead of char* - see Makefile for porting implications.

	- Error-checking is now done when flex closes a file.

	- Various lint tweaks were added to reduce the number of gripes.

	- Makefile has been further parameterized to aid in porting.

	- Support for SCO Unix added.

	- Flex now sports the latest & greatest UC copyright notice
	  (which is only slightly different from the previous one).

	- A note has been added to flexdoc.1 mentioning work in progress
	  on modifying flex to generate straight C code rather than a
	  table-driven automaton, with an email address of whom to contact
	  if you are working along similar lines.


Changes between 2.2 Patch #3 (30Mar90) and 2.2 Patch #2:

	- fixed bug which caused -I scanners to bomb


Changes between 2.2 Patch #2 (27Mar90) and 2.2 Patch #1:

	- fixed bug writing past end of input buffer in yyunput()
	- fixed bug detecting NUL's at the end of a buffer


Changes between 2.2 Patch #1 (23Mar90) and 2.2 (alpha) release:

	- Makefile fixes: definition of MAKE variable for systems
	  which don't have it; installation of flexdoc.1 along with
	  flex.1; fixed two bugs which could cause "bigtest" to fail.

	- flex.skel fix for compiling with g++.

	- README and flexdoc.1 no longer list an out-of-date BITNET address
	  for contacting me.

	- minor typos and formatting changes to flex.1 and flexdoc.1.


Changes between 2.2 (alpha) release of March '90 and previous release:

    User-visible:

	- Full user documentation now available.

	- Support for 8-bit scanners.

	- Scanners now accept NUL's.

	- A facility has been added for dealing with multiple
	  input buffers.

	- Two manual entries now.  One which fully describes flex
	  (rather than just its differences from lex), and the
	  other for quick(er) reference.

	- A number of changes to bring flex closer into compliance
	  with the latest POSIX lex draft:

		%t support
		flex now accepts multiple input files and concatenates
		    them together to form its input
		previous -c (compress) flag renamed -C
		do-nothing -c and -n flags added
		Any indented code or code within %{}'s in section 2 is
		    now copied to the output

	- yyleng is now a bona fide global integer.

	- -d debug information now gives the line number of the
	  matched rule instead of which number rule it was from
	  the beginning of the file.

	- -v output now includes a summary of the flags used to generate
	  the scanner.

	- unput() and yyrestart() are now globally callable.

	- yyrestart() no longer closes the previous value of yyin.

	- C++ support; generated scanners can be compiled with C++ compiler.

	- Primitive -lfl library added, containing default main()
	  which calls yylex().  A number of routines currently living
	  in the scanner skeleton will probably migrate to here
	  in the future (in particular, yywrap() will probably cease
	  to be a macro and instead be a function in the -lfl library).

	- Hexadecimal (\x) escape sequences added.

	- Support for MS-DOS, VMS, and Turbo-C integrated.

	- The %used/%unused operators have been deprecated.  They
	  may go away soon.


    Other changes:

	- Makefile enhanced for easier testing and installation.
	- The parser has been tweaked to detect some erroneous
	  constructions which previously were missed.
	- Scanner input buffer overflow is now detected.
	- Bugs with missing "const" declarations fixed.
	- Out-of-date Minix/Atari patches provided.
	- Scanners no longer require printf() unless FLEX_DEBUG is being used.
	- A subtle input() bug has been fixed.
	- Line numbers for "continued action" rules (those following
	  the special '|' action) are now correct.
	- unput() bug fixed; had been causing problems porting flex to VMS.
	- yymore() handling rewritten to fix bug with interaction
	  between yymore() and trailing context.
	- EOF in actions now generates an error message.
	- Bug involving -CFe and generating equivalence classes fixed.
	- Bug which made -CF be treated as -Cf fixed.
	- Support for SysV tmpnam() added.
	- Unused #define's for scanner no longer generated.
	- Error messages which are associated with a particular input
	  line are now all identified with their input line in standard
	  format.
	- % directives which are valid to lex but not to flex are
	  now ignored instead of generating warnings.
	- -DSYS_V flag can now also be specified -DUSG for System V
	  compilation.


Changes between 2.1 beta-test release of June '89 and previous release:

    User-visible:

	- -p flag generates a performance report to stderr.  The report
	  consists of comments regarding features of the scanner rules
	  which result in slower scanners.

	- -b flag generates backtracking information to lex.backtrack.
	  This is a list of scanner states which require backtracking
	  and the characters on which they do so.  By adding rules
	  one can remove backtracking states.  If all backtracking states
	  are eliminated, the generated scanner will run faster.
	  Backtracking is not yet documented in the manual entry.

	- Variable trailing context now works, i.e., one can have
	  rules like "(foo)*/[ \t]*bletch".  Some trailing context
	  patterns still cannot be properly matched and generate
	  error messages.  These are patterns where the ending of the
	  first part of the rule matches the beginning of the second
	  part, such as "zx*/xy*", where the 'x*' matches the 'x' at
	  the beginning of the trailing context.  Lex won't get these
	  patterns right either.

	- Faster scanners.

	- End-of-file rules.  The special rule "<<EOF>>" indicates
	  actions which are to be taken when an end-of-file is
	  encountered and yywrap() returns non-zero (i.e., indicates
	  no further files to process).  See manual entry for example.

	- The -r (reject used) flag is gone.  flex now scans the input
	  for occurrences of the string "REJECT" to determine if the
	  action is needed.  It tries to be intelligent about this but
	  can be fooled.  One can force the presence or absence of
	  REJECT by adding a line in the first section of the form
	  "%used REJECT" or "%unused REJECT".

	- yymore() has been implemented.  Similarly to REJECT, flex
	  detects the use of yymore(), which can be overridden using
	  "%used" or "%unused".

	- Patterns like "x{0,3}" now work (i.e., with lower-limit == 0).

	- Removed '\^x' for ctrl-x misfeature.

	- Added '\a' and '\v' escape sequences.

	- \<digits> now works for octal escape sequences; previously
	  \0<digits> was required.

	- Better error reporting; line numbers are associated with rules.

	- yyleng is a macro; it cannot be accessed outside of the
	  scanner source file.

	- yytext and yyleng should not be modified within a flex action.

	- Generated scanners #define the name FLEX_SCANNER.

	- Rules are internally separated by YY_BREAK in lex.yy.c rather
	  than break, to allow redefinition.

	- The macro YY_USER_ACTION can be redefined to provide an action
	  which is always executed prior to the matched rule's action.

	- yyrestart() is a new action which can be used to restart
	  the scanner after it has seen an end-of-file (a "real" one,
	  that is, one for which yywrap() returned non-zero).  It takes
	  a FILE* argument indicating a new file to scan and sets
	  things up so that a subsequent call to yylex() will start
	  scanning that file.

	- Internal scanner names all preceded by "yy_"

	- lex.yy.c is deleted if errors are encountered during processing.

	- Comments may be put in the first section of the input by preceding
	  them with '#'.



    Other changes:

	- Some portability-related bugs fixed, in particular for machines
	  with unsigned characters or sizeof( int* ) != sizeof( int ).
	  Also, tweaks for VMS and Microsoft C (MS-DOS), and identifiers all
	  trimmed to be 31 or fewer characters.  Shortened file names
	  for dinosaur OS's.  Checks for allocating > 64K memory
	  on 16 bit'ers.  Amiga tweaks.  Compiles using gcc on a Sun-3.
	- Compressed and fast scanner skeletons merged.
	- Skeleton header files done away with.
	- Generated scanner uses prototypes and "const" for __STDC__.
	- -DSV flag is now -DSYS_V for System V compilation.
	- Removed all references to FTL language.
	- Software now covered by BSD Copyright.
	- flex will replace lex in subsequent BSD releases.

\
changes-type: text/plain
url: https://invisible-island.net/reflex/reflex.html
package-url: https://github.com/build2-packaging/reflex
package-email: boris@codesynthesis.com
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: * byacc >= 20210619
requires: host
bootstrap-build:
\
project = reflex
version = $process.run(sed -n -e 's/^version: (.+)/\1/p' $src_root/manifest)

dist.package = $project-$version

using config
using test
using install
using dist

\
root-build:
\
config [bool] config.reflex.develop ?= false

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS \\
-D_CRT_NONSTDC_NO_WARNINGS

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: reflex/reflex-20210808+1.tar.gz
sha256sum: 27a76030a9ad4282d227f93ad50e372462f0ce2a1a322c3a3d6ea78e8d3cd02a
:
name: robin-hood-hashing
version: 3.11.5+1
summary: Fast & memory efficient hashtable based on robin hood hashing for\
 C++11/14/17/20
license: MIT; MIT License.
description:
\
➵ robin_hood unordered map & set  [![Release](https://img.shields.io/github/r\
elease/martinus/robin-hood-hashing.svg)](https://github.com/martinus/robin-ho\
od-hashing/releases) [![GitHub license](https://img.shields.io/github/license\
/martinus/robin-hood-hashing.svg)](https://raw.githubusercontent.com/martinus\
/robin-hood-hashing/master/LICENSE)
============


[![Travis CI Build Status](https://travis-ci.com/martinus/robin-hood-hashing.\
svg?branch=master)](https://travis-ci.com/martinus/robin-hood-hashing)
[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/github/\
martinus/robin-hood-hashing?branch=master&svg=true)](https://ci.appveyor.com/\
project/martinus/robin-hood-hashing)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/9308495247b542c98\
02016caa6fd3461)](https://www.codacy.com/app/martinus/robin-hood-hashing?utm_\
source=github.com&amp;utm_medium=referral&amp;utm_content=martinus/robin-hood\
-hashing&amp;utm_campaign=Badge_Grade)
[![Total alerts](https://img.shields.io/lgtm/alerts/g/martinus/robin-hood-has\
hing.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/martinus/robin-\
hood-hashing/alerts/)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/martinus/ro\
bin-hood-hashing.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/mar\
tinus/robin-hood-hashing/context:cpp)
[![Coverage Status](https://coveralls.io/repos/github/martinus/robin-hood-has\
hing/badge.svg)](https://coveralls.io/github/martinus/robin-hood-hashing)

`robin_hood::unordered_map` and `robin_hood::unordered_set` is a platform\
 independent replacement for `std::unordered_map` / `std::unordered_set`\
 which is both faster and more memory efficient for real-world use cases.

## Installation & Usage

### Direct Inclusion

1. Add [`robin_hood.h`](https://github.com/martinus/robin-hood-hashing/releas\
es) to your C++ project.
1. Use `robin_hood::unordered_map` instead of `std::unordered_map`
1. Use `robin_hood::unordered_set` instead of `std::unordered_set`

### [Conan](https://conan.io/), the C/C++ Package Manager

1. Setup your `CMakeLists.txt` (see [Conan documentation](https://docs.conan.\
io/en/latest/integrations/build_system.html) on how to use MSBuild, Meson and\
 others) like this:
   ```CMake
   project(myproject CXX)
  
   add_executable(${PROJECT_NAME} main.cpp)
  
   include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) # Include\
 Conan-generated file
   conan_basic_setup(TARGETS) # Introduce Conan-generated targets
  
   target_link_libraries(${PROJECT_NAME} CONAN_PKG::robin-hood-hashing)
   ```
1. Create `conanfile.txt` in your source dir (don't forget to update the\
 version)
   ```ini
   [requires]
   robin-hood-hashing/3.11.5

   [generators]
   cmake
   ```
1. Install and run Conan, then build your project as always:
   ```Bash
   pip install conan
   mkdir build
   cd build
   conan install ../ --build=missing
   cmake ../
   cmake --build .
   ```
   The `robin-hood-hashing` package in Conan is kept up to date by Conan\
 contributors. If the version is out of date, please [create an issue or pull\
 request](https://github.com/conan-io/conan-center-index) on the\
 `conan-center-index` repository.

## Benchmarks

Please see extensive benchmarks at [Hashmaps Benchmarks](https://martin.anker\
l.com/2019/04/01/hashmap-benchmarks-01-overview/). In short: `robin_hood` is\
 always among the fastest maps and uses far less memory than\
 `std::unordered_map`.

## Design Choices

- **Two memory layouts**. Data is either stored in a flat array, or with node\
 indirection. Access for `unordered_flat_map` is extremely fast due to no\
 indirection, but references to elements are not stable. It also causes\
 allocation spikes when the map resizes, and will need plenty of memory for\
 large objects. Node based map has stable references & pointers (NOT\
 iterators! Similar to [std::unordered_map](https://en.cppreference.com/w/cpp\
/container/unordered_map)) and uses `const Key` in the pair. It is a bit\
 slower due to indirection. The choice is yours; you can either use\
 `robin_hood::unordered_flat_map` or `robin_hood::unordered_node_map`\
 directly. If you use `robin_hood::unordered_map` It tries to choose the\
 layout that seems appropriate for your data.

- **Custom allocator**. Node based representation has a custom bulk allocator\
 that tries to make few memory allocations. All allocated memory is reused,\
 so there won't be any allocation spikes. It's very fast as well.

- **Optimized hash**. `robin_hood::hash` has custom implementations for\
 integer types and for `std::string` that are very fast and falls back to\
 `std::hash` for everything else.

- **Depends on good Hashing**. For a really bad hash the performance will not\
 only degrade like in `std::unordered_map`, the map will simply fail with an\
 `std::overflow_error`. In practice, when using the standard\
 `robin_hood::hash`, I have never seen this happening.

## License

Licensed under the MIT License. See the [LICENSE](https://github.com/martinus\
/robin-hood-hashing/blob/master/LICENSE) file for details.

by martinus

\
description-type: text/markdown;variant=GFM
url: https://github.com/martinus/robin-hood-hashing
package-url: https://github.com/build2-packaging/robin-hood-hashing
email: t.c.brindle@gmail.com
build-error-email: t.c.brindle@gmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build2:
\
project = robin-hood-hashing

using version
using config
using test
using install
using dist

\
root-build2:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: robin-hood-hashing/robin-hood-hashing-3.11.5+1.tar.gz
sha256sum: 5cee2aaf6ceb3e162788a1abd28e0b46919c3d0a1d6c11e9b3ad1a9adef139a1
:
name: sol2
version: 3.2.0+2
summary: `sol2` is a C++ library binding to Lua.
license: MIT
description:
\
## sol3 (sol2 v3.0.3)

[![Join the chat in Discord: https://discord.gg/buxkYNT](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/buxkYNT)

[![Linux & Max OSX Build Status](https://travis-ci.org/ThePhD/sol2.svg?branch\
=develop)](https://travis-ci.org/ThePhD/sol2)
[![Windows Build status](https://ci.appveyor.com/api/projects/status/n38suofr\
21e9uk7h?svg=true)](https://ci.appveyor.com/project/ThePhD/sol2)
[![Documentation Status](https://readthedocs.org/projects/sol2/badge/?version\
=latest)](http://sol2.readthedocs.io/en/latest/?badge=latest)

[![Support via Github Sponsors](https://img.shields.io/badge/Github-Become%20\
a%20Sponsor-ff69b4.svg?style=flat&logo=GitHub)](https://github.com/users/TheP\
hD/sponsorship)
[![Support via PayPal](https://cdn.rawgit.com/twolfson/paypal-github-button/1\
.0.0/dist/button.svg)](https://www.paypal.me/LMeneide)
[![Support via Ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https:/\
/ko-fi.com/W7W8Q619) 
[![Support via Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2\
Fshieldsio-patreon.herokuapp.com%2FThePhD)](https://patreon.com/thephd)
[![Support via Liberapay](https://img.shields.io/liberapay/patrons/ThePhD.svg\
)](https://liberapay.com/ThePhD/)

sol is a C++ library binding to Lua. It currently supports all Lua versions\
 5.1+ (LuaJIT 2.x included). sol aims to be easy to use and easy to add to a\
 project.
The library is header-only for easy integration with projects.

## Documentation

Find it [here](http://sol2.rtfd.io/). A run-through kind of tutorial is\
 [here](http://sol2.readthedocs.io/en/latest/tutorial/all-the-things.html)!\
 The API documentation goes over most cases (particularly, the "api/usertype"\
 and "api/table_proxy" and "api/function" sections) that should still get you\
 off your feet and going, and there's an examples directory\
 [here](https://github.com/ThePhD/sol2/tree/develop/examples) as well.

## Sneak Peek

```cpp
#include <sol/sol.hpp>
#include <cassert>

int main() {
    sol::state lua;
    int x = 0;
    lua.set_function("beep", [&x]{ ++x; });
    lua.script("beep()");
    assert(x == 1);
}
```

```cpp
#include <sol/sol.hpp>
#include <cassert>

struct vars {
    int boop = 0;
};

int main() {
    sol::state lua;
    lua.new_usertype<vars>("vars", "boop", &vars::boop);
    lua.script("beep = vars.new()\n"
               "beep.boop = 1");
    assert(lua.get<vars>("beep").boop == 1);
}
```

More examples are given in the examples directory [here](https://github.com/T\
hePhD/sol2/tree/develop/examples). 


## Supporting

Please use the buttons above and help this project grow.

You can also help out the library by submitting pull requests to fix anything\
 or add anything you think would be helpful! This includes making small,\
 useful examples of something you haven't seen, or fixing typos and bad code\
 in the documentation.


## Presentations

"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"  
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2016.10\
.14%20-%20ThePhD%20-%20No%20Overhead%20C%20Abstraction.pdf)

"Wrapping Lua C in C++ - Efficiently, Nicely, and with a Touch of Magic"  
ThePhD
Boston C++ Meetup November 2017 - CiC (Milk Street), Boston, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2017.11\
.08%20-%20ThePhD%20-%20Wrapping%20Lua%20C%20in%20C%2B%2B.pdf)

"Biting the CMake Bullet"  
ThePhD
Boston C++ Meetup February 2018 - CiC (Main Street), Cambridge, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.02\
.06%20-%20ThePhD%20-%20Biting%20the%20CMake%20Bullet.pdf)

"Compile Fast, Run Faster, Scale Forever: A look into the sol2 Library"  
ThePhD
C++Now 2018 - Hudson Commons, Aspen Physics Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.05\
.10%20-%20ThePhD%20-%20Compile%20Fast%2C%20Run%20Faster%2C%20Scale%20Forever.\
pdf)

"Scripting at the Speed of Thought: Using Lua in C++ with sol3"  
ThePhD
CppCon 2018 - 404 Keystone, Meydenbauer Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.09\
.28%20-%20ThePhD%20-%20Scripting%20at%20the%20Speed%20of%20Thought.pdf)

"The Plan for Tomorrow: Compile-Time Extension Points in C++"
ThePhD
C++Now 2019 - Flug Auditorium, Aspen Physics Center, Aspen, Colorado
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2019.05\
.10%20-%20ThePhD%20-%20The%20Plan%20for%20Tomorrow%20-%20Compile-Time%20Exten\
sion%20Points%20in%20C%2b%2b.pdf)


## Features

- [Fastest in the land](http://sol2.readthedocs.io/en/latest/benchmarks.html)\
 (see: sol bar in graph).
- Supports retrieval and setting of multiple types including: 
  * `std::string`, `std::wstring`, `std::u16string` and `std::u32string`\
 support (and for views).
  * understands and works with containers such as `std::map/unordered_map`,\
 c-style arrays, vectors, non-standard custom containers and more.
  * user-defined types, with or **without** registering that type 
  * `std::unique_ptr`, `std::shared_ptr`, and optional support of other\
 pointer types like `boost::shared_ptr`.
  * custom `optional<T>` that works with references, and support for the\
 inferior `std::optional`.
  * C++17 support for variants and similar new types.
- Lambda, function, and member function bindings are supported.
- Intermediate type for checking if a variable exists.
- Simple API that completely abstracts away the C stack API, including\
 `protected_function` with the ability to use an error-handling function.
- `operator[]`-style manipulation of tables
- C++ type representations in Lua userdata as `usertype`s with guaranteed\
 cleanup.
- Customization points to allow your C++ objects to be pushed and retrieved\
 from Lua as multiple consecutive objects, or anything else you desire!
- Overloaded function calls: `my_function(1); my_function("Hello")` in the\
 same Lua script route to different function calls based on parameters
- Support for tables, nested tables, table iteration with `table.for_each` /\
 `begin()` and `end()` iterators.
- Zero string overhead for usertype function lookup.


## Supported Compilers

sol makes use of C++17 features. GCC 7.x.x and Clang 3.9.x (with `-std=c++1z`\
 and appropriate standard library) 
or higher should be able to compile without problems. However, the officially\
 supported and CI-tested compilers are:

- GCC 7.x.x+ (MinGW 7.x.x+)
- Clang 3.9.x+
- Visual Studio 2017 Community (Visual C++ 15.0)+

Please make sure you use the `-std=c++2a`, `-std=c++1z`, `-std=c++17` or\
 better standard flags 
(some of these flags are the defaults in later versions of GCC, such as 7+\
 and better).

If you would like support for an older compiler (at the cost of some\
 features), use the latest tagged sol2 branch. If you would like support for\
 an even older compiler, feel free to contact me for a Custom Solution.

sol3 is checked by-hand for other platforms as well, including Android-based\
 builds with GCC and iOS-based builds out of XCode with Apple-clang. It\
 should work on both of these platforms, so long as you have the proper\
 standards flags.


## Creating a single header

You can grab a single header (and the single forward header) out of the\
 library [here](https://github.com/ThePhD/sol2/tree/develop/single). For\
 stable version, check the releases tab on GitHub for a provided single\
 header file for maximum ease of use. A script called [`single.py`](https://g\
ithub.com/ThePhD/sol2/blob/develop/single/single.py) is provided in the\
 repository if there's some bleeding edge change that hasn't been published\
 on the releases page. You can run this script to create a single file\
 version of the library so you can only include that part of it. Check\
 `single.py --help` for more info.

If you use CMake, you can also configure and generate a project that will\
 generate the `sol2_single_header` for you. You can also include the project\
 using CMake. Run CMake for more details. Thanks @Nava2, @alkino,\
 @mrgreywater and others for help with making the CMake build a reality.


## Running the Tests

Testing on Travis-CI and Appveyor use CMake. You can generate the tests by\
 running CMake and configuring `SOL2_TESTS`, `SOL2_TESTS_SINGLE`,\
 `SOL2_TESTS_EXAMPLES`, and `SOL2_EXAMPLES` to be on. Make sure `SOL2_SINGLE`\
 is also on.

You will need any flavor of python3 and an available compiler. The testing\
 suite will build its own version of Lua and LuaJIT, so you do not have to\
 provide one (you may provide one with the `LUA_LOCAL_DIR` variable).


## License

sol is distributed with an MIT License. You can see LICENSE.txt for more info.

If you need a custom solution, feel free to contact me.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ThePhD/sol2
email: phdofthehouse@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: lua ^5.0.0
bootstrap-build2:
\
project = sol2

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/include
tests_dir = $upstream_dir/tests
examples_dir = $upstream_dir/examples

\
location: sol2/sol2-3.2.0+2.tar.gz
sha256sum: 0f550155b815f86aea66a92eb1a5e0768cfa2235d3bbb0b2d22ac273e9374ff9
:
name: sol2
version: 3.2.1
summary: `sol2` is a C++ library binding to Lua.
license: MIT
description:
\
## sol3 (sol2 v3.0.3)

[![Join the chat in Discord: https://discord.gg/buxkYNT](https://img.shields.\
io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/buxkYNT)

[![Linux & Max OSX Build Status](https://travis-ci.org/ThePhD/sol2.svg?branch\
=develop)](https://travis-ci.org/ThePhD/sol2)
[![Windows Build status](https://ci.appveyor.com/api/projects/status/n38suofr\
21e9uk7h?svg=true)](https://ci.appveyor.com/project/ThePhD/sol2)
[![Documentation Status](https://readthedocs.org/projects/sol2/badge/?version\
=latest)](http://sol2.readthedocs.io/en/latest/?badge=latest)

[![Support via Github Sponsors](https://img.shields.io/badge/Github-Become%20\
a%20Sponsor-ff69b4.svg?style=flat&logo=GitHub)](https://github.com/users/TheP\
hD/sponsorship)
[![Support via PayPal](https://cdn.rawgit.com/twolfson/paypal-github-button/1\
.0.0/dist/button.svg)](https://www.paypal.me/Soasis)
[![Support via Ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https:/\
/ko-fi.com/Soasis) 
[![Support via Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2\
Fshieldsio-patreon.herokuapp.com%2FSoasis)](https://patreon.com/soasis)
[![Support via Liberapay](https://img.shields.io/liberapay/patrons/ThePhD.svg\
)](https://liberapay.com/Soasis/)

sol2 is a C++ library binding to Lua. It currently supports all Lua versions\
 5.1+ (LuaJIT 2.x included). sol2 aims to be easy to use and easy to add to a\
 project.
The library is header-only for easy integration with projects.

## Documentation

Find it [here](http://sol2.rtfd.io/). A run-through kind of tutorial is\
 [here](http://sol2.readthedocs.io/en/latest/tutorial/all-the-things.html)!\
 The API documentation goes over most cases (particularly, the "api/usertype"\
 and "api/table_proxy" and "api/function" sections) that should still get you\
 off your feet and going, and there's an examples directory\
 [here](https://github.com/ThePhD/sol2/tree/develop/examples) as well.

## Sneak Peek

```cpp
#include <sol/sol.hpp>
#include <cassert>

int main() {
    sol::state lua;
    int x = 0;
    lua.set_function("beep", [&x]{ ++x; });
    lua.script("beep()");
    assert(x == 1);
}
```

```cpp
#include <sol/sol.hpp>
#include <cassert>

struct vars {
    int boop = 0;
};

int main() {
    sol::state lua;
    lua.new_usertype<vars>("vars", "boop", &vars::boop);
    lua.script("beep = vars.new()\n"
               "beep.boop = 1");
    assert(lua.get<vars>("beep").boop == 1);
}
```

More examples are given in the examples directory [here](https://github.com/T\
hePhD/sol2/tree/develop/examples). 


## Supporting

Please use the buttons above and help this project grow.

You can also help out the library by submitting pull requests to fix anything\
 or add anything you think would be helpful! This includes making small,\
 useful examples of something you haven't seen, or fixing typos and bad code\
 in the documentation.


## Presentations

"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"  
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2016.10\
.14%20-%20ThePhD%20-%20No%20Overhead%20C%20Abstraction.pdf)

"Wrapping Lua C in C++ - Efficiently, Nicely, and with a Touch of Magic"  
ThePhD
Boston C++ Meetup November 2017 - CiC (Milk Street), Boston, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2017.11\
.08%20-%20ThePhD%20-%20Wrapping%20Lua%20C%20in%20C%2B%2B.pdf)

"Biting the CMake Bullet"  
ThePhD
Boston C++ Meetup February 2018 - CiC (Main Street), Cambridge, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.02\
.06%20-%20ThePhD%20-%20Biting%20the%20CMake%20Bullet.pdf)

"Compile Fast, Run Faster, Scale Forever: A look into the sol2 Library"  
ThePhD
C++Now 2018 - Hudson Commons, Aspen Physics Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.05\
.10%20-%20ThePhD%20-%20Compile%20Fast%2C%20Run%20Faster%2C%20Scale%20Forever.\
pdf)

"Scripting at the Speed of Thought: Using Lua in C++ with sol3"  
ThePhD
CppCon 2018 - 404 Keystone, Meydenbauer Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.09\
.28%20-%20ThePhD%20-%20Scripting%20at%20the%20Speed%20of%20Thought.pdf)

"The Plan for Tomorrow: Compile-Time Extension Points in C++"
ThePhD
C++Now 2019 - Flug Auditorium, Aspen Physics Center, Aspen, Colorado
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2019.05\
.10%20-%20ThePhD%20-%20The%20Plan%20for%20Tomorrow%20-%20Compile-Time%20Exten\
sion%20Points%20in%20C%2b%2b.pdf)


## Features

- [Fastest in the land](http://sol2.readthedocs.io/en/latest/benchmarks.html)\
 (see: sol3 bar in graph).
- Supports retrieval and setting of multiple types including: 
  * `std::string`, `std::wstring`, `std::u16string` and `std::u32string`\
 support (and for views).
  * understands and works with containers such as `std::map/unordered_map`,\
 c-style arrays, vectors, non-standard custom containers and more.
  * user-defined types, with or **without** registering that type 
  * `std::unique_ptr`, `std::shared_ptr`, and optional support of other\
 pointer types like `boost::shared_ptr`.
  * custom `optional<T>` that works with references, and support for the\
 inferior `std::optional`.
  * C++17 support for variants and similar new types.
- Lambda, function, and member function bindings are supported.
- Intermediate type for checking if a variable exists.
- Simple API that completely abstracts away the C stack API, including\
 `protected_function` with the ability to use an error-handling function.
- `operator[]`-style manipulation of tables
- C++ type representations in Lua userdata as `usertype`s with guaranteed\
 cleanup.
- Customization points to allow your C++ objects to be pushed and retrieved\
 from Lua as multiple consecutive objects, or anything else you desire!
- Overloaded function calls: `my_function(1); my_function("Hello")` in the\
 same Lua script route to different function calls based on parameters
- Support for tables, nested tables, table iteration with `table.for_each` /\
 `begin()` and `end()` iterators.
- Zero string overhead for usertype function lookup.


## Supported Compilers

sol2 makes use of C++17 features. GCC 7.x.x and Clang 3.9.x (with\
 `-std=c++1z` and appropriate standard library) 
or higher should be able to compile without problems. However, the officially\
 supported and CI-tested compilers are:

- GCC 7.x.x+ (MinGW 7.x.x+)
- Clang 3.9.x+
- Visual Studio 2017 Community (Visual C++ 15.0)+

Please make sure you use the `-std=c++2a`, `-std=c++1z`, `-std=c++17` or\
 better standard flags 
(some of these flags are the defaults in later versions of GCC, such as 7+\
 and better).

If you would like support for an older compiler (at the cost of some\
 features), use the latest tagged sol2 branch. If you would like support for\
 an even older compiler, feel free to contact me for a Custom Solution.

sol3 is checked by-hand for other platforms as well, including Android-based\
 builds with GCC and iOS-based builds out of XCode with Apple-clang. It\
 should work on both of these platforms, so long as you have the proper\
 standards flags.


## Creating a single header

You can grab a single header (and the single forward header) out of the\
 library [here](https://github.com/ThePhD/sol2/tree/develop/single). For\
 stable version, check the releases tab on GitHub for a provided single\
 header file for maximum ease of use. A script called [`single.py`](https://g\
ithub.com/ThePhD/sol2/blob/develop/single/single.py) is provided in the\
 repository if there's some bleeding edge change that hasn't been published\
 on the releases page. You can run this script to create a single file\
 version of the library so you can only include that part of it. Check\
 `single.py --help` for more info.

If you use CMake, you can also configure and generate a project that will\
 generate the `sol2_single_header` for you. You can also include the project\
 using CMake. Run CMake for more details. Thanks @Nava2, @alkino,\
 @mrgreywater and others for help with making the CMake build a reality.


## Running the Tests

Testing on Travis-CI and Appveyor use CMake. You can generate the tests by\
 running CMake and configuring `SOL2_TESTS`, `SOL2_TESTS_SINGLE`,\
 `SOL2_TESTS_EXAMPLES`, and `SOL2_EXAMPLES` to be on. Make sure `SOL2_SINGLE`\
 is also on.

You will need any flavor of python3 and an available compiler. The testing\
 suite will build its own version of Lua and LuaJIT, so you do not have to\
 provide one (you may provide one with the `LUA_LOCAL_DIR` variable).


## License

sol2 is distributed with an MIT License. You can see LICENSE.txt for more\
 info.

If you need a custom solution, feel free to contact me.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ThePhD/sol2
email: phdofthehouse@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: lua ^5.0.0
bootstrap-build2:
\
project = sol2

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/include
tests_dir = $upstream_dir/tests
examples_dir = $upstream_dir/examples

\
location: sol2/sol2-3.2.1.tar.gz
sha256sum: 1da23eac746a18b590265d68aeb1865a2fdff3bd1e57bb10e4e35190b3feb22e
:
name: sol2
version: 3.2.2
summary: `sol2` is a C++ library binding to Lua.
license: MIT
description:
\
## sol3 (sol2 v3.2.2)

[![Linux & Max OSX Build Status](https://travis-ci.org/ThePhD/sol2.svg?branch\
=develop)](https://travis-ci.org/ThePhD/sol2)
[![Windows Build status](https://ci.appveyor.com/api/projects/status/n38suofr\
21e9uk7h?svg=true)](https://ci.appveyor.com/project/ThePhD/sol2)
[![Documentation Status](https://readthedocs.org/projects/sol2/badge/?version\
=latest)](http://sol2.readthedocs.io/en/latest/?badge=latest)

[![Support via Github Sponsors](https://img.shields.io/badge/Github-Become%20\
a%20Sponsor-ff69b4.svg?style=flat&logo=GitHub)](https://github.com/users/TheP\
hD/sponsorship)
[![Support via PayPal](https://cdn.rawgit.com/twolfson/paypal-github-button/1\
.0.0/dist/button.svg)](https://www.paypal.me/Soasis)
[![Support via Ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https:/\
/ko-fi.com/Soasis) 
[![Support via Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2\
Fshieldsio-patreon.herokuapp.com%2FSoasis)](https://patreon.com/soasis)
[![Support via Liberapay](https://img.shields.io/liberapay/patrons/ThePhD.svg\
)](https://liberapay.com/Soasis/)

sol2 is a C++ library binding to Lua. It currently supports all Lua versions\
 5.1+ (LuaJIT 2.x included). sol2 aims to be easy to use and easy to add to a\
 project.
The library is header-only for easy integration with projects.

## Documentation

Find it [here](http://sol2.rtfd.io/). A run-through kind of tutorial is\
 [here](http://sol2.readthedocs.io/en/latest/tutorial/all-the-things.html)!\
 The API documentation goes over most cases (particularly, the "api/usertype"\
 and "api/table_proxy" and "api/function" sections) that should still get you\
 off your feet and going, and there's an examples directory\
 [here](https://github.com/ThePhD/sol2/tree/develop/examples) as well.

## Sneak Peek

```cpp
#include <sol/sol.hpp>
#include <cassert>

int main() {
    sol::state lua;
    int x = 0;
    lua.set_function("beep", [&x]{ ++x; });
    lua.script("beep()");
    assert(x == 1);
}
```

```cpp
#include <sol/sol.hpp>
#include <cassert>

struct vars {
    int boop = 0;
};

int main() {
    sol::state lua;
    lua.new_usertype<vars>("vars", "boop", &vars::boop);
    lua.script("beep = vars.new()\n"
               "beep.boop = 1");
    assert(lua.get<vars>("beep").boop == 1);
}
```

More examples are given in the examples directory [here](https://github.com/T\
hePhD/sol2/tree/develop/examples). 


## Supporting

Please use the buttons above and help this project grow.

You can also help out the library by submitting pull requests to fix anything\
 or add anything you think would be helpful! This includes making small,\
 useful examples of something you haven't seen, or fixing typos and bad code\
 in the documentation.


## Presentations

"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"  
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2016.10\
.14%20-%20ThePhD%20-%20No%20Overhead%20C%20Abstraction.pdf)

"Wrapping Lua C in C++ - Efficiently, Nicely, and with a Touch of Magic"  
ThePhD
Boston C++ Meetup November 2017 - CiC (Milk Street), Boston, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2017.11\
.08%20-%20ThePhD%20-%20Wrapping%20Lua%20C%20in%20C%2B%2B.pdf)

"Biting the CMake Bullet"  
ThePhD
Boston C++ Meetup February 2018 - CiC (Main Street), Cambridge, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.02\
.06%20-%20ThePhD%20-%20Biting%20the%20CMake%20Bullet.pdf)

"Compile Fast, Run Faster, Scale Forever: A look into the sol2 Library"  
ThePhD
C++Now 2018 - Hudson Commons, Aspen Physics Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.05\
.10%20-%20ThePhD%20-%20Compile%20Fast%2C%20Run%20Faster%2C%20Scale%20Forever.\
pdf)

"Scripting at the Speed of Thought: Using Lua in C++ with sol3"  
ThePhD
CppCon 2018 - 404 Keystone, Meydenbauer Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.09\
.28%20-%20ThePhD%20-%20Scripting%20at%20the%20Speed%20of%20Thought.pdf)

"The Plan for Tomorrow: Compile-Time Extension Points in C++"
ThePhD
C++Now 2019 - Flug Auditorium, Aspen Physics Center, Aspen, Colorado
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2019.05\
.10%20-%20ThePhD%20-%20The%20Plan%20for%20Tomorrow%20-%20Compile-Time%20Exten\
sion%20Points%20in%20C%2b%2b.pdf)


## Features

- [Fastest in the land](http://sol2.readthedocs.io/en/latest/benchmarks.html)\
 (see: sol3 bar in graph).
- Supports retrieval and setting of multiple types including: 
  * `std::string`, `std::wstring`, `std::u16string` and `std::u32string`\
 support (and for views).
  * understands and works with containers such as `std::map/unordered_map`,\
 c-style arrays, vectors, non-standard custom containers and more.
  * user-defined types, with or **without** registering that type 
  * `std::unique_ptr`, `std::shared_ptr`, and optional support of other\
 pointer types like `boost::shared_ptr`.
  * custom `optional<T>` that works with references, and support for the\
 inferior `std::optional`.
  * C++17 support for variants and similar new types.
- Lambda, function, and member function bindings are supported.
- Intermediate type for checking if a variable exists.
- Simple API that completely abstracts away the C stack API, including\
 `protected_function` with the ability to use an error-handling function.
- `operator[]`-style manipulation of tables
- C++ type representations in Lua userdata as `usertype`s with guaranteed\
 cleanup.
- Customization points to allow your C++ objects to be pushed and retrieved\
 from Lua as multiple consecutive objects, or anything else you desire!
- Overloaded function calls: `my_function(1); my_function("Hello")` in the\
 same Lua script route to different function calls based on parameters
- Support for tables, nested tables, table iteration with `table.for_each` /\
 `begin()` and `end()` iterators.
- Zero string overhead for usertype function lookup.


## Supported Compilers

sol2 makes use of C++17 features. GCC 7.x.x and Clang 3.9.x (with\
 `-std=c++1z` and appropriate standard library) 
or higher should be able to compile without problems. However, the officially\
 supported and CI-tested compilers are:

- GCC 7.x.x+ (MinGW 7.x.x+)
- Clang 3.9.x+
- Visual Studio 2017 Community (Visual C++ 15.0)+

Please make sure you use the `-std=c++2a`, `-std=c++1z`, `-std=c++17` or\
 better standard flags 
(some of these flags are the defaults in later versions of GCC, such as 7+\
 and better).

If you would like support for an older compiler (at the cost of some\
 features), use the latest tagged sol2 branch. If you would like support for\
 an even older compiler, feel free to contact me for a Custom Solution.

sol3 is checked by-hand for other platforms as well, including Android-based\
 builds with GCC and iOS-based builds out of XCode with Apple-clang. It\
 should work on both of these platforms, so long as you have the proper\
 standards flags.


## Creating a single header

You can grab a single header (and the single forward header) out of the\
 library [here](https://github.com/ThePhD/sol2/tree/develop/single). For\
 stable version, check the releases tab on GitHub for a provided single\
 header file for maximum ease of use. A script called [`single.py`](https://g\
ithub.com/ThePhD/sol2/blob/develop/single/single.py) is provided in the\
 repository if there's some bleeding edge change that hasn't been published\
 on the releases page. You can run this script to create a single file\
 version of the library so you can only include that part of it. Check\
 `single.py --help` for more info.

If you use CMake, you can also configure and generate a project that will\
 generate the `sol2_single_header` for you. You can also include the project\
 using CMake. Run CMake for more details. Thanks @Nava2, @alkino,\
 @mrgreywater and others for help with making the CMake build a reality.


## Running the Tests

Testing on Travis-CI and Appveyor use CMake. You can generate the tests by\
 running CMake and configuring `SOL2_TESTS`, `SOL2_TESTS_SINGLE`,\
 `SOL2_TESTS_EXAMPLES`, and `SOL2_EXAMPLES` to be on. Make sure `SOL2_SINGLE`\
 is also on.

You will need any flavor of python3 and an available compiler. The testing\
 suite will build its own version of Lua and LuaJIT, so you do not have to\
 provide one (you may provide one with the `LUA_LOCAL_DIR` variable).


## License

sol2 is distributed with an MIT License. You can see LICENSE.txt for more\
 info.

If you need a custom solution, feel free to contact me.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ThePhD/sol2
email: phdofthehouse@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: lua ^5.0.0
bootstrap-build2:
\
project = sol2

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/include
tests_dir = $upstream_dir/tests
examples_dir = $upstream_dir/examples

\
location: sol2/sol2-3.2.2.tar.gz
sha256sum: 3e02b8d211d7b9a4b880bbbc89358874834573d508987328546d573eacc3bb3a
:
name: sol2
version: 3.2.3
summary: `sol2` is a C++ library binding to Lua.
license: MIT
description:
\
## sol3 (sol2 v3.2.3)

[![Linux & Max OSX Build Status](https://travis-ci.org/ThePhD/sol2.svg?branch\
=develop)](https://travis-ci.org/ThePhD/sol2)
[![Windows Build status](https://ci.appveyor.com/api/projects/status/n38suofr\
21e9uk7h?svg=true)](https://ci.appveyor.com/project/ThePhD/sol2)
[![Documentation Status](https://readthedocs.org/projects/sol2/badge/?version\
=latest)](http://sol2.readthedocs.io/en/latest/?badge=latest)

[![Support via Github Sponsors](https://img.shields.io/badge/Github-Become%20\
a%20Sponsor-ff69b4.svg?style=flat&logo=GitHub)](https://github.com/users/TheP\
hD/sponsorship)
[![Support via PayPal](https://cdn.rawgit.com/twolfson/paypal-github-button/1\
.0.0/dist/button.svg)](https://www.paypal.me/Soasis)
[![Support via Ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https:/\
/ko-fi.com/Soasis) 
[![Support via Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2\
Fshieldsio-patreon.herokuapp.com%2FSoasis)](https://patreon.com/soasis)
[![Support via Liberapay](https://img.shields.io/liberapay/patrons/ThePhD.svg\
)](https://liberapay.com/Soasis/)

sol2 is a C++ library binding to Lua. It currently supports all Lua versions\
 5.1+ (LuaJIT 2.x included). sol2 aims to be easy to use and easy to add to a\
 project.
The library is header-only for easy integration with projects.

## Documentation

Find it [here](http://sol2.rtfd.io/). A run-through kind of tutorial is\
 [here](http://sol2.readthedocs.io/en/latest/tutorial/all-the-things.html)!\
 The API documentation goes over most cases (particularly, the "api/usertype"\
 and "api/table_proxy" and "api/function" sections) that should still get you\
 off your feet and going, and there's an examples directory\
 [here](https://github.com/ThePhD/sol2/tree/develop/examples) as well.

## Sneak Peek

```cpp
#include <sol/sol.hpp>
#include <cassert>

int main() {
    sol::state lua;
    int x = 0;
    lua.set_function("beep", [&x]{ ++x; });
    lua.script("beep()");
    assert(x == 1);
}
```

```cpp
#include <sol/sol.hpp>
#include <cassert>

struct vars {
    int boop = 0;
};

int main() {
    sol::state lua;
    lua.new_usertype<vars>("vars", "boop", &vars::boop);
    lua.script("beep = vars.new()\n"
               "beep.boop = 1");
    assert(lua.get<vars>("beep").boop == 1);
}
```

More examples are given in the examples directory [here](https://github.com/T\
hePhD/sol2/tree/develop/examples). 


## Supporting

Please use the buttons above and help this project grow.

You can also help out the library by submitting pull requests to fix anything\
 or add anything you think would be helpful! This includes making small,\
 useful examples of something you haven't seen, or fixing typos and bad code\
 in the documentation.


## Presentations

"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"  
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2016.10\
.14%20-%20ThePhD%20-%20No%20Overhead%20C%20Abstraction.pdf)

"Wrapping Lua C in C++ - Efficiently, Nicely, and with a Touch of Magic"  
ThePhD
Boston C++ Meetup November 2017 - CiC (Milk Street), Boston, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2017.11\
.08%20-%20ThePhD%20-%20Wrapping%20Lua%20C%20in%20C%2B%2B.pdf)

"Biting the CMake Bullet"  
ThePhD
Boston C++ Meetup February 2018 - CiC (Main Street), Cambridge, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.02\
.06%20-%20ThePhD%20-%20Biting%20the%20CMake%20Bullet.pdf)

"Compile Fast, Run Faster, Scale Forever: A look into the sol2 Library"  
ThePhD
C++Now 2018 - Hudson Commons, Aspen Physics Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.05\
.10%20-%20ThePhD%20-%20Compile%20Fast%2C%20Run%20Faster%2C%20Scale%20Forever.\
pdf)

"Scripting at the Speed of Thought: Using Lua in C++ with sol3"  
ThePhD
CppCon 2018 - 404 Keystone, Meydenbauer Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.09\
.28%20-%20ThePhD%20-%20Scripting%20at%20the%20Speed%20of%20Thought.pdf)

"The Plan for Tomorrow: Compile-Time Extension Points in C++"
ThePhD
C++Now 2019 - Flug Auditorium, Aspen Physics Center, Aspen, Colorado
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2019.05\
.10%20-%20ThePhD%20-%20The%20Plan%20for%20Tomorrow%20-%20Compile-Time%20Exten\
sion%20Points%20in%20C%2b%2b.pdf)


## Features

- [Fastest in the land](http://sol2.readthedocs.io/en/latest/benchmarks.html)\
 (see: sol3 bar in graph).
- Supports retrieval and setting of multiple types including: 
  * `std::string`, `std::wstring`, `std::u16string` and `std::u32string`\
 support (and for views).
  * understands and works with containers such as `std::map/unordered_map`,\
 c-style arrays, vectors, non-standard custom containers and more.
  * user-defined types, with or **without** registering that type 
  * `std::unique_ptr`, `std::shared_ptr`, and optional support of other\
 pointer types like `boost::shared_ptr`.
  * custom `optional<T>` that works with references, and support for the\
 inferior `std::optional`.
  * C++17 support for variants and similar new types.
- Lambda, function, and member function bindings are supported.
- Intermediate type for checking if a variable exists.
- Simple API that completely abstracts away the C stack API, including\
 `protected_function` with the ability to use an error-handling function.
- `operator[]`-style manipulation of tables
- C++ type representations in Lua userdata as `usertype`s with guaranteed\
 cleanup.
- Customization points to allow your C++ objects to be pushed and retrieved\
 from Lua as multiple consecutive objects, or anything else you desire!
- Overloaded function calls: `my_function(1); my_function("Hello")` in the\
 same Lua script route to different function calls based on parameters
- Support for tables, nested tables, table iteration with `table.for_each` /\
 `begin()` and `end()` iterators.
- Zero string overhead for usertype function lookup.


## Supported Compilers

sol2 makes use of C++17 features. GCC 7.x.x and Clang 3.9.x (with\
 `-std=c++1z` and appropriate standard library) 
or higher should be able to compile without problems. However, the officially\
 supported and CI-tested compilers are:

- GCC 7.x.x+ (MinGW 7.x.x+)
- Clang 3.9.x+
- Visual Studio 2017 Community (Visual C++ 15.0)+

Please make sure you use the `-std=c++2a`, `-std=c++1z`, `-std=c++17` or\
 better standard flags 
(some of these flags are the defaults in later versions of GCC, such as 7+\
 and better).

If you would like support for an older compiler (at the cost of some\
 features), use the latest tagged sol2 branch. If you would like support for\
 an even older compiler, feel free to contact me for a Custom Solution.

sol3 is checked by-hand for other platforms as well, including Android-based\
 builds with GCC and iOS-based builds out of XCode with Apple-clang. It\
 should work on both of these platforms, so long as you have the proper\
 standards flags.


## Creating a single header

You can grab a single header (and the single forward header) out of the\
 library [here](https://github.com/ThePhD/sol2/tree/develop/single). For\
 stable version, check the releases tab on GitHub for a provided single\
 header file for maximum ease of use. A script called [`single.py`](https://g\
ithub.com/ThePhD/sol2/blob/develop/single/single.py) is provided in the\
 repository if there's some bleeding edge change that hasn't been published\
 on the releases page. You can run this script to create a single file\
 version of the library so you can only include that part of it. Check\
 `single.py --help` for more info.

If you use CMake, you can also configure and generate a project that will\
 generate the `sol2_single_header` for you. You can also include the project\
 using CMake. Run CMake for more details. Thanks @Nava2, @alkino,\
 @mrgreywater and others for help with making the CMake build a reality.


## Running the Tests

Testing on Travis-CI and Appveyor use CMake. You can generate the tests by\
 running CMake and configuring `SOL2_TESTS`, `SOL2_TESTS_SINGLE`,\
 `SOL2_TESTS_EXAMPLES`, and `SOL2_EXAMPLES` to be on. Make sure `SOL2_SINGLE`\
 is also on.

You will need any flavor of python3 and an available compiler. The testing\
 suite will build its own version of Lua and LuaJIT, so you do not have to\
 provide one (you may provide one with the `LUA_LOCAL_DIR` variable).


## License

sol2 is distributed with an MIT License. You can see LICENSE.txt for more\
 info.

If you need a custom solution, feel free to contact me.

\
description-type: text/markdown;variant=GFM
url: https://github.com/ThePhD/sol2
email: phdofthehouse@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: lua ^5.0.0
bootstrap-build2:
\
project = sol2

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/include
tests_dir = $upstream_dir/tests
examples_dir = $upstream_dir/examples

\
location: sol2/sol2-3.2.3.tar.gz
sha256sum: 9484c092cb64943210dd8856e4a79192a6d388c134cd3828ce5c0486fb34db7c
:
name: sol2
version: 3.3.1
summary: `sol2` is a C++ library binding to Lua.
license: MIT
description:
\
# sol2

[![Documentation Status](https://readthedocs.org/projects/sol2/badge/?version\
=latest)](http://sol2.readthedocs.io/en/latest/?badge=latest)



sol2 is a C++ library binding to Lua. It currently supports all Lua versions\
 5.1+ (LuaJIT 2.0+ and MoonJIT included). sol2 aims to be easy to use and\
 easy to add to a project. The library is header-only for easy integration\
 with projects, and a single header can be used for drag-and-drop start up.



## Sneak Peek

```cpp
#include <sol/sol.hpp>
#include <cassert>

int main() {
    sol::state lua;
    int x = 0;
    lua.set_function("beep", [&x]{ ++x; });
    lua.script("beep()");
    assert(x == 1);
}
```

```cpp
#include <sol/sol.hpp>
#include <cassert>

struct vars {
    int boop = 0;
};

int main() {
    sol::state lua;
    lua.new_usertype<vars>("vars", "boop", &vars::boop);
    lua.script("beep = vars.new()\n"
               "beep.boop = 1");
    assert(lua.get<vars>("beep").boop == 1);
}
```

More examples are given in the examples directory [here](https://github.com/T\
hePhD/sol2/tree/develop/examples). 


## Documentation

Find it [here](http://sol2.rtfd.io/). A run-through kind of tutorial is\
 [here](http://sol2.readthedocs.io/en/latest/tutorial/all-the-things.html)!\
 The API documentation goes over most cases (particularly, the "api/usertype"\
 and "api/table_proxy" and "api/function" sections) that should still get you\
 off your feet and going, and there's an examples directory\
 [here](https://github.com/ThePhD/sol2/tree/develop/examples) as well.




# "I need X Feature or Fix, Right Now™"

Find the support option that's right for you, [here](https://github.com/ThePh\
D/.github/blob/main/SUPPORT.md)! If you're happy to wait, you can just file a\
 boring issue and we'll get to it Whenever There Is Time™.



## I want to donate to help!

You can find [donation and sponorship options here](https://github.com/ThePhD\
/.github/blob/main/SUPPORT.md#support-in-general) and from the little heart\
 button near the top of this repository that will take you to a bevy of links\
 in which you can donate and show support for this project and others!




# Features

- [Fastest in the land](http://sol2.readthedocs.io/en/latest/benchmarks.html)\
 (see: sol2 bar in graph).
- Supports retrieval and setting of multiple types including: 
  * `std::string`, `std::wstring`, `std::u16string` and `std::u32string`\
 support (and for views).
  * understands and works with containers such as `std::map/unordered_map`,\
 c-style arrays, vectors, non-standard custom containers and more.
  * user-defined types, with or **without** registering that type 
  * `std::unique_ptr`, `std::shared_ptr`, and optional support of other\
 pointer types like `boost::shared_ptr`.
  * custom `optional<T>` that works with references, and support for the\
 inferior `std::optional`.
  * C++17 support for variants and similar new types.
- Lambda, function, and member function bindings are supported.
- Intermediate type for checking if a variable exists.
- Simple API that completely abstracts away the C stack API, including\
 `protected_function` with the ability to use an error-handling function.
- `operator[]`-style manipulation of tables
- C++ type representations in Lua userdata as `usertype`s with guaranteed\
 cleanup.
- Customization points to allow your C++ objects to be pushed and retrieved\
 from Lua as multiple consecutive objects, or anything else you desire!
- Overloaded function calls: `my_function(1); my_function("Hello")` in the\
 same Lua script route to different function calls based on parameters
- Support for tables, nested tables, table iteration with `table.for_each` /\
 `begin()` and `end()` iterators.
- Zero string overhead for usertype function lookup.



## Supported Compilers

sol2 makes use of C++17 features. GCC 7.x.x and Clang 3.9.x (with\
 `-std=c++1z` and appropriate standard library) or higher should be able to\
 compile without problems. However, the officially supported and CI-tested\
 compilers are:

- GCC 7.x.x+ (MinGW 7.x.x+)
- Clang 3.9.x+
- Visual Studio 2017 Community (Visual C++ 15.0)+

Please make sure you use the `-std=c++2a`, `-std=c++1z`, `-std=c++17` or\
 better standard flags 
(some of these flags are the defaults in later versions of GCC, such as 7+\
 and better).

If you would like support for an older compiler (at the cost of some\
 features), use the latest tagged sol2 branch. If you would like support for\
 an even older compiler, feel free to contact me for a Custom Solution.

sol2 is checked by-hand for other platforms as well, including Android-based\
 builds with GCC and iOS-based builds out of XCode with Apple-clang. It\
 should work on both of these platforms, so long as you have the proper\
 standards flags. If something doesn't work or you need special options, you\
 may need to look into the different ways to support the project to have it\
 done for you!



## Creating a single header

You can grab a single header (and the single forward header) out of the\
 library [here](https://github.com/ThePhD/sol2/tree/develop/single). For\
 stable version, check the releases tab on GitHub for a provided single\
 header file for maximum ease of use. A script called [`single.py`](https://g\
ithub.com/ThePhD/sol2/blob/develop/single/single.py) is provided in the\
 repository if there's some bleeding edge change that hasn't been published\
 on the releases page. You can run this script to create a single file\
 version of the library so you can only include that part of it. Check\
 `single.py --help` for more info.

If you use CMake, you can also configure and generate a project that will\
 generate the `sol2_single_header` for you. You can also include the project\
 using CMake. Run CMake for more details. Thanks @Nava2, @alkino,\
 @mrgreywater and others for help with making the CMake build a reality.




# Testing

Testing turns on certain CI-only variables in the CMake to test a myriad of\
 configuration options. You can generate the tests by running CMake and\
 configuring `SOL2_TESTS`, `SOL2_TESTS_SINGLE`, `SOL2_TESTS_EXAMPLES`, and\
 `SOL2_EXAMPLES` to be on. Make sure `SOL2_SINGLE` is also on.

You will need any flavor of python3 and an available compiler. The testing\
 suite will build its own version of Lua and LuaJIT, so you do not have to\
 provide one (you may provide one with the `LUA_LOCAL_DIR` variable).



# Presentations

"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"  
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2016.10\
.14%20-%20ThePhD%20-%20No%20Overhead%20C%20Abstraction.pdf)

"Wrapping Lua C in C++ - Efficiently, Nicely, and with a Touch of Magic"  
ThePhD
Boston C++ Meetup November 2017 - CiC (Milk Street), Boston, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2017.11\
.08%20-%20ThePhD%20-%20Wrapping%20Lua%20C%20in%20C%2B%2B.pdf)

"Biting the CMake Bullet"  
ThePhD
Boston C++ Meetup February 2018 - CiC (Main Street), Cambridge, MA  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.02\
.06%20-%20ThePhD%20-%20Biting%20the%20CMake%20Bullet.pdf)

"Compile Fast, Run Faster, Scale Forever: A look into the sol2 Library"  
ThePhD
C++Now 2018 - Hudson Commons, Aspen Physics Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.05\
.10%20-%20ThePhD%20-%20Compile%20Fast%2C%20Run%20Faster%2C%20Scale%20Forever.\
pdf)

"Scripting at the Speed of Thought: Using Lua in C++ with sol2"  
ThePhD
CppCon 2018 - 404 Keystone, Meydenbauer Center, Aspen, Colorado  
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2018.09\
.28%20-%20ThePhD%20-%20Scripting%20at%20the%20Speed%20of%20Thought.pdf)

"The Plan for Tomorrow: Compile-Time Extension Points in C++"
ThePhD
C++Now 2019 - Flug Auditorium, Aspen Physics Center, Aspen, Colorado
[Deck](https://github.com/ThePhD/sol2/blob/develop/docs/presentations/2019.05\
.10%20-%20ThePhD%20-%20The%20Plan%20for%20Tomorrow%20-%20Compile-Time%20Exten\
sion%20Points%20in%20C%2b%2b.pdf)




# License

sol2 is distributed with an MIT License. You can see LICENSE.txt for more\
 info.

If you need a custom solution, [feel free to reach out](https://soasis.org/co\
ntact/opensource/).

\
description-type: text/markdown;variant=GFM
url: https://github.com/ThePhD/sol2
email: phdofthehouse@gmail.com
package-email: mjklaim@gmail.com
depends: * build2 >= 0.12.0
depends: * bpkg >= 0.12.0
depends: lua ^5.0.0
bootstrap-build2:
\
project = sol2

using version
using config
using test
using install
using dist

\
root-build2:
\
cxx.std = latest

using cxx
using c

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

upstream_dir = $src_root/upstream
include_dir = $upstream_dir/include
tests_dir = $upstream_dir/tests
examples_dir = $upstream_dir/examples

\
location: sol2/sol2-3.3.1.tar.gz
sha256sum: a8b6db40a2ec61e68829f825a89dbb81b273bcc1e8e11a0c0db06bba08d62e3e
:
name: spdlog
version: 1.8.2+2
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![Build\
 Status](https://travis-ci.org/gabime/spdlog.svg?branch=v1.x)](https://travis\
-ci.org/gabime/spdlog)&nbsp; [![Build status](https://ci.appveyor.com/api/pro\
jects/status/d2jnxclg20vd0o50?svg=true)](https://ci.appveyor.com/project/gabi\
me/spdlog) [![Release](https://img.shields.io/github/release/gabime/spdlog.sv\
g)](https://github.com/gabime/spdlog/releases/latest)

## Install 
#### Header only version
Copy the source [folder](https://github.com/gabime/spdlog/tree/v1.x/include/s\
pdlog) to your build tree and use a C++11 compiler.

#### Static lib version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
      
   see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/ex\
ample/CMakeLists.txt) on how to use.

## Platforms
 * Linux, FreeBSD, OpenBSD, Solaris, AIX
 * Windows (msvc 2013+, cygwin)
 * macOS (clang 3.5+)
 * Android

## Package managers:
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `cd /usr/ports/devel/spdlog/ && make install clean`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`


## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
    * Rotating log files.
    * Daily log files.
    * Console logging (colors supported).
    * syslog.
    * Windows debugger (```OutputDebugString(..)```)
    * Easily extendable with custom log targets  (just implement a single\
 function in the [sink](include/spdlog/sinks/sink.h) interface).
* Log filtering - log levels can be modified in runtime as well as in compile\
 time.
* Support for loading log levels from argv or from environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display later on demand.
 
## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5mb size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day on 2:30am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Loggers can store in a ring buffer all messages (including debug/trace)\
 and display later on demand.
// When needed, call dump_backtrace() to see them

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer.\
 Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with different format and log level
```c++

// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks  
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User defined types
```c++
// user defined types logging by implementing operator<<
#include "spdlog/fmt/ostr.h" // must be included
struct my_type
{
    int i;
    template<typename OStream>
    friend OStream &operator<<(OStream &os, const my_type &c)
    {
        return os << "[my_type i=" << c.i << "]";
    }
};

void user_defined_example()
{
    spdlog::get("console")->info("user defined type: {}", my_type{14});
}

```

---
#### User defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog 
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example 
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from env variable or from argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^7.1.3
requires: c++ >= 11
build-exclude: windows*-gcc**; Builds but some tests fails, use at your own\
 risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.8.2+2.tar.gz
sha256sum: 036b41612b777b6e4df90b58a5ebd7e33f29014ea85bb71d696fa1c25311ea23
:
name: spdlog
version: 1.8.3+1
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![Build\
 Status](https://travis-ci.org/gabime/spdlog.svg?branch=v1.x)](https://travis\
-ci.org/gabime/spdlog)&nbsp; [![Build status](https://ci.appveyor.com/api/pro\
jects/status/d2jnxclg20vd0o50?svg=true)](https://ci.appveyor.com/project/gabi\
me/spdlog) [![Release](https://img.shields.io/github/release/gabime/spdlog.sv\
g)](https://github.com/gabime/spdlog/releases/latest)

## Install 
#### Header only version
Copy the source [folder](https://github.com/gabime/spdlog/tree/v1.x/include/s\
pdlog) to your build tree and use a C++11 compiler.

#### Static lib version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
      
   see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/ex\
ample/CMakeLists.txt) on how to use.

## Platforms
 * Linux, FreeBSD, OpenBSD, Solaris, AIX
 * Windows (msvc 2013+, cygwin)
 * macOS (clang 3.5+)
 * Android

## Package managers:
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `cd /usr/ports/devel/spdlog/ && make install clean`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```



## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
    * Rotating log files.
    * Daily log files.
    * Console logging (colors supported).
    * syslog.
    * Windows event log.
    * Windows debugger (```OutputDebugString(..)```).
    * Easily extendable with custom log targets  (just implement a single\
 function in the [sink](include/spdlog/sinks/sink.h) interface).
* Log filtering - log levels can be modified in runtime as well as in compile\
 time.
* Support for loading log levels from argv or from environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display later on demand.
 
## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5mb size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day on 2:30am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Loggers can store in a ring buffer all messages (including debug/trace)\
 and display later on demand.
// When needed, call dump_backtrace() to see them

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer.\
 Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with different format and log level
```c++

// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks  
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User defined types
```c++
// user defined types logging by implementing operator<<
#include "spdlog/fmt/ostr.h" // must be included
struct my_type
{
    int i;
    template<typename OStream>
    friend OStream &operator<<(OStream &os, const my_type &c)
    {
        return os << "[my_type i=" << c.i << "]";
    }
};

void user_defined_example()
{
    spdlog::get("console")->info("user defined type: {}", my_type{14});
}

```

---
#### User defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog 
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example 
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from env variable or from argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^7.1.3
requires: c++ >= 11
build-exclude: windows*-gcc**; Builds but some tests fails, use at your own\
 risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.8.3+1.tar.gz
sha256sum: 5284567a89a529a07528cf8d966fd42abdf85aa12c0e5a7f157d7f298c910507
:
name: spdlog
version: 1.9.0
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![Build\
 Status](https://travis-ci.com/gabime/spdlog.svg?branch=v1.x)](https://travis\
-ci.com/gabime/spdlog)&nbsp; [![Build status](https://ci.appveyor.com/api/pro\
jects/status/d2jnxclg20vd0o50?svg=true)](https://ci.appveyor.com/project/gabi\
me/spdlog) [![Release](https://img.shields.io/github/release/gabime/spdlog.sv\
g)](https://github.com/gabime/spdlog/releases/latest)

## Install 
#### Header only version
Copy the source [folder](https://github.com/gabime/spdlog/tree/v1.x/include/s\
pdlog) to your build tree and use a C++11 compiler.

#### Static lib version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
      
   see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/ex\
ample/CMakeLists.txt) on how to use.

## Platforms
 * Linux, FreeBSD, OpenBSD, Solaris, AIX
 * Windows (msvc 2013+, cygwin)
 * macOS (clang 3.5+)
 * Android

## Package managers:
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `cd /usr/ports/devel/spdlog/ && make install clean`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```



## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
    * Rotating log files.
    * Daily log files.
    * Console logging (colors supported).
    * syslog.
    * Windows event log.
    * Windows debugger (```OutputDebugString(..)```).
    * Easily [extendable](https://github.com/gabime/spdlog/wiki/4.-Sinks#impl\
ementing-your-own-sink) with custom log targets.
* Log filtering - log levels can be modified in runtime as well as in compile\
 time.
* Support for loading log levels from argv or from environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display later on demand.
 
## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5mb size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day on 2:30am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Debug messages can be stored in a ring buffer instead of being logged\
 immediately.
// This is useful in order to display debug logs only when really nededed\
 (e.g. when error happens).
// When needed, call dump_backtrace() to see them.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer.\
 Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with different format and log level
```c++

// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks  
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User defined types
```c++
// user defined types logging by implementing operator<<
#include "spdlog/fmt/ostr.h" // must be included
struct my_type
{
    int i;
    template<typename OStream>
    friend OStream &operator<<(OStream &os, const my_type &c)
    {
        return os << "[my_type i=" << c.i << "]";
    }
};

void user_defined_example()
{
    spdlog::get("console")->info("user defined type: {}", my_type{14});
}

```

---
#### User defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog 
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example 
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from env variable or from argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^7.1.3
requires: c++ >= 11
build-exclude: windows*-gcc**; Builds but some tests fails, use at your own\
 risks.
build-exclude: macos_11-clang_12.0-static_O3; Compiler error, use at your own\
 risks.
build-exclude: macos_11-gcc_11.1**; Compiler Bug, use at your own risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.9.0.tar.gz
sha256sum: 9c0bb170c50f55465322b5f0ef428e24ae96e1d9b2826ed33e7c4e507cfa620c
:
name: spdlog
version: 1.9.1
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![Build\
 Status](https://travis-ci.com/gabime/spdlog.svg?branch=v1.x)](https://travis\
-ci.com/gabime/spdlog)&nbsp; [![Build status](https://ci.appveyor.com/api/pro\
jects/status/d2jnxclg20vd0o50?svg=true)](https://ci.appveyor.com/project/gabi\
me/spdlog) [![Release](https://img.shields.io/github/release/gabime/spdlog.sv\
g)](https://github.com/gabime/spdlog/releases/latest)

## Install 
#### Header only version
Copy the source [folder](https://github.com/gabime/spdlog/tree/v1.x/include/s\
pdlog) to your build tree and use a C++11 compiler.

#### Static lib version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
      
   see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/ex\
ample/CMakeLists.txt) on how to use.

## Platforms
 * Linux, FreeBSD, OpenBSD, Solaris, AIX
 * Windows (msvc 2013+, cygwin)
 * macOS (clang 3.5+)
 * Android

## Package managers:
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `cd /usr/ports/devel/spdlog/ && make install clean`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```



## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
    * Rotating log files.
    * Daily log files.
    * Console logging (colors supported).
    * syslog.
    * Windows event log.
    * Windows debugger (```OutputDebugString(..)```).
    * Easily [extendable](https://github.com/gabime/spdlog/wiki/4.-Sinks#impl\
ementing-your-own-sink) with custom log targets.
* Log filtering - log levels can be modified in runtime as well as in compile\
 time.
* Support for loading log levels from argv or from environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display later on demand.
 
## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5mb size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day on 2:30am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Debug messages can be stored in a ring buffer instead of being logged\
 immediately.
// This is useful in order to display debug logs only when really nededed\
 (e.g. when error happens).
// When needed, call dump_backtrace() to see them.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer.\
 Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with different format and log level
```c++

// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks  
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User defined types
```c++
// user defined types logging by implementing operator<<
#include "spdlog/fmt/ostr.h" // must be included
struct my_type
{
    int i;
    template<typename OStream>
    friend OStream &operator<<(OStream &os, const my_type &c)
    {
        return os << "[my_type i=" << c.i << "]";
    }
};

void user_defined_example()
{
    spdlog::get("console")->info("user defined type: {}", my_type{14});
}

```

---
#### User defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog 
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example 
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from env variable or from argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^8.0.1
requires: c++ >= 11
build-exclude: windows*-gcc**; Builds but some tests fails, use at your own\
 risks.
build-exclude: **clang_12.0**; Lack of C++20 support causes errors
build-exclude: linux_debian_10-emcc_2.0.25; Compiler error, use at your own\
 risks.
build-exclude: macos_11-gcc_11.1**; Compiler Bug, use at your own risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.9.1.tar.gz
sha256sum: 07578f21eaaab9b2074fdde8f7f449d928d44fb2809dee28e5743bb92cf3cc02
:
name: spdlog
version: 1.9.2+1
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![Build\
 Status](https://travis-ci.com/gabime/spdlog.svg?branch=v1.x)](https://travis\
-ci.com/gabime/spdlog)&nbsp; [![Build status](https://ci.appveyor.com/api/pro\
jects/status/d2jnxclg20vd0o50?svg=true)](https://ci.appveyor.com/project/gabi\
me/spdlog) [![Release](https://img.shields.io/github/release/gabime/spdlog.sv\
g)](https://github.com/gabime/spdlog/releases/latest)

## Install 
#### Header only version
Copy the include [folder](https://github.com/gabime/spdlog/tree/v1.x/include/\
spdlog) to your build tree and use a C++11 compiler.

#### Static lib version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
      
   see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/ex\
ample/CMakeLists.txt) on how to use.

## Platforms
 * Linux, FreeBSD, OpenBSD, Solaris, AIX
 * Windows (msvc 2013+, cygwin)
 * macOS (clang 3.5+)
 * Android

## Package managers:
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `cd /usr/ports/devel/spdlog/ && make install clean`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```



## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
    * Rotating log files.
    * Daily log files.
    * Console logging (colors supported).
    * syslog.
    * Windows event log.
    * Windows debugger (```OutputDebugString(..)```).
    * Easily [extendable](https://github.com/gabime/spdlog/wiki/4.-Sinks#impl\
ementing-your-own-sink) with custom log targets.
* Log filtering - log levels can be modified in runtime as well as in compile\
 time.
* Support for loading log levels from argv or from environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display later on demand.
 
## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5mb size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day on 2:30am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Debug messages can be stored in a ring buffer instead of being logged\
 immediately.
// This is useful in order to display debug logs only when really needed\
 (e.g. when error happens).
// When needed, call dump_backtrace() to see them.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer.\
 Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with different format and log level
```c++

// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks  
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User defined types
```c++
// user defined types logging by implementing operator<<
#include "spdlog/fmt/ostr.h" // must be included
struct my_type
{
    int i;
    template<typename OStream>
    friend OStream &operator<<(OStream &os, const my_type &c)
    {
        return os << "[my_type i=" << c.i << "]";
    }
};

void user_defined_example()
{
    spdlog::get("console")->info("user defined type: {}", my_type{14});
}

```

---
#### User defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog 
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example 
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from env variable or from argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^8.0.1
requires: c++ >= 11
build-exclude: windows*-gcc**; Builds but some tests fails, use at your own\
 risks.
build-exclude: linux_debian_10-emcc_2.0.25; Compiler error, use at your own\
 risks.
build-exclude: macos_11-gcc_11.1**; Compiler Bug, use at your own risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.9.2+1.tar.gz
sha256sum: f23de17653518f7ac0d1501edf5155ba1876b39ac28304d454b05a6204fd0ac7
:
name: spdlog
version: 1.10.0+3
project: spdlog
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![Build\
 Status](https://app.travis-ci.com/gabime/spdlog.svg?branch=v1.x)](https://ap\
p.travis-ci.com/gabime/spdlog)&nbsp; [![Build status](https://ci.appveyor.com\
/api/projects/status/d2jnxclg20vd0o50?svg=true&branch=v1.x)](https://ci.appve\
yor.com/project/gabime/spdlog) [![Release](https://img.shields.io/github/rele\
ase/gabime/spdlog.svg)](https://github.com/gabime/spdlog/releases/latest)

## Install 
#### Header only version
Copy the include [folder](https://github.com/gabime/spdlog/tree/v1.x/include/\
spdlog) to your build tree and use a C++11 compiler.

#### Static lib version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
      
   see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/ex\
ample/CMakeLists.txt) on how to use.

## Platforms
 * Linux, FreeBSD, OpenBSD, Solaris, AIX
 * Windows (msvc 2013+, cygwin)
 * macOS (clang 3.5+)
 * Android

## Package managers:
* Debian: `sudo apt install libspdlog-dev`
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `pkg install spdlog`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```


## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
    * Rotating log files.
    * Daily log files.
    * Console logging (colors supported).
    * syslog.
    * Windows event log.
    * Windows debugger (```OutputDebugString(..)```).
    * Easily [extendable](https://github.com/gabime/spdlog/wiki/4.-Sinks#impl\
ementing-your-own-sink) with custom log targets.
* Log filtering - log levels can be modified in runtime as well as in compile\
 time.
* Support for loading log levels from argv or from environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display later on demand.
 
## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5mb size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day on 2:30am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Debug messages can be stored in a ring buffer instead of being logged\
 immediately.
// This is useful in order to display debug logs only when really needed\
 (e.g. when error happens).
// When needed, call dump_backtrace() to see them.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer.\
 Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with different format and log level
```c++

// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks  
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User defined types
```c++
// user defined types logging by implementing operator<<
#include "spdlog/fmt/ostr.h" // must be included
struct my_type
{
    int i;
    template<typename OStream>
    friend OStream &operator<<(OStream &os, const my_type &c)
    {
        return os << "[my_type i=" << c.i << "]";
    }
};

void user_defined_example()
{
    spdlog::get("console")->info("user defined type: {}", my_type{14});
}

```

---
#### User defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog 
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example 
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from env variable or from argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```


---
#### Log file open/close event handlers
```c++
// You can get callbacks from spdlog before/after log file has been opened or\
 closed. 
// This is useful for cleanup procedures or for adding someting the start/end\
 of the log files.
void file_events_example()
{
    // pass the spdlog::file_event_handlers to file sinks for open/close log\
 file notifications
    spdlog::file_event_handlers handlers;
    handlers.before_open = [](spdlog::filename_t filename) {\
 spdlog::info("Before opening {}", filename); };
    handlers.after_open = [](spdlog::filename_t filename, std::FILE *fstream)\
 { fputs("After opening\n", fstream); };
    handlers.before_close = [](spdlog::filename_t filename, std::FILE\
 *fstream) { fputs("Before closing\n", fstream); };
    handlers.after_close = [](spdlog::filename_t filename) {\
 spdlog::info("After closing {}", filename); };
    auto my_logger = spdlog::basic_logger_st("some_logger",\
 "logs/events-sample.txt", true, handlers);        
}
```

---
#### Replace the Default Logger
```c++
void replace_default_logger_example()
{
    auto new_logger = spdlog::basic_logger_mt("new_default_logger",\
 "logs/new-default-log.txt", true);
    spdlog::set_default_logger(new_logger);
    spdlog::info("new logger log message");
}
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^8.1.1
requires: c++ >= 11
tests: spdlog-tests == 1.10.0
benchmarks: spdlog-bench == 1.10.0
build-exclude: linux_debian_10-emcc_2.0.25; Compiler error, use at your own\
 risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.10.0+3.tar.gz
sha256sum: c97144e78b7cd7d8bdb11dd9aafbef7a527783baf39e2444821823cfaf24f44b
:
name: spdlog
version: 1.11.0+1
project: spdlog
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![ci](https://github.c\
om/gabime/spdlog/actions/workflows/ci.yml/badge.svg)](https://github.com/gabi\
me/spdlog/actions/workflows/ci.yml)&nbsp; [![Build status](https://ci.appveyo\
r.com/api/projects/status/d2jnxclg20vd0o50?svg=true&branch=v1.x)](https://ci.\
appveyor.com/project/gabime/spdlog) [![Release](https://img.shields.io/github\
/release/gabime/spdlog.svg)](https://github.com/gabime/spdlog/releases/latest)

## Install 
#### Header only version
Copy the include [folder](https://github.com/gabime/spdlog/tree/v1.x/include/\
spdlog) to your build tree and use a C++11 compiler.

#### Compiled version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
      
   see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/ex\
ample/CMakeLists.txt) on how to use.

## Platforms
 * Linux, FreeBSD, OpenBSD, Solaris, AIX
 * Windows (msvc 2013+, cygwin)
 * macOS (clang 3.5+)
 * Android

## Package managers:
* Debian: `sudo apt install libspdlog-dev`
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `pkg install spdlog`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* openSUSE: `sudo zypper in spdlog-devel`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```


## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
    * Rotating log files.
    * Daily log files.
    * Console logging (colors supported).
    * syslog.
    * Windows event log.
    * Windows debugger (```OutputDebugString(..)```).
    * Easily [extendable](https://github.com/gabime/spdlog/wiki/4.-Sinks#impl\
ementing-your-own-sink) with custom log targets.
* Log filtering - log levels can be modified in runtime as well as in compile\
 time.
* Support for loading log levels from argv or from environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display later on demand.
 
## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create color multi threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5mb size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day on 2:30am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Debug messages can be stored in a ring buffer instead of being logged\
 immediately.
// This is useful in order to display debug logs only when really needed\
 (e.g. when error happens).
// When needed, call dump_backtrace() to see them.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer.\
 Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with different format and log level
```c++

// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks  
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User defined types
```c++
template<>
struct fmt::formatter<my_type> : fmt::formatter<std::string>
{
    auto format(my_type my, format_context &ctx) -> decltype(ctx.out())
    {
        return format_to(ctx.out(), "[my_type i={}]", my.i);
    }
};

void user_defined_example()
{
    spdlog::info("user defined type: {}", my_type(14));
}

```

---
#### User defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog 
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example 
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from env variable or from argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```


---
#### Log file open/close event handlers
```c++
// You can get callbacks from spdlog before/after log file has been opened or\
 closed. 
// This is useful for cleanup procedures or for adding someting the start/end\
 of the log files.
void file_events_example()
{
    // pass the spdlog::file_event_handlers to file sinks for open/close log\
 file notifications
    spdlog::file_event_handlers handlers;
    handlers.before_open = [](spdlog::filename_t filename) {\
 spdlog::info("Before opening {}", filename); };
    handlers.after_open = [](spdlog::filename_t filename, std::FILE *fstream)\
 { fputs("After opening\n", fstream); };
    handlers.before_close = [](spdlog::filename_t filename, std::FILE\
 *fstream) { fputs("Before closing\n", fstream); };
    handlers.after_close = [](spdlog::filename_t filename) {\
 spdlog::info("After closing {}", filename); };
    auto my_logger = spdlog::basic_logger_st("some_logger",\
 "logs/events-sample.txt", true, handlers);        
}
```

---
#### Replace the Default Logger
```c++
void replace_default_logger_example()
{
    auto new_logger = spdlog::basic_logger_mt("new_default_logger",\
 "logs/new-default-log.txt", true);
    spdlog::set_default_logger(new_logger);
    spdlog::info("new logger log message");
}
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^9.1.0
requires: c++ >= 11
tests: spdlog-tests == 1.11.0
benchmarks: spdlog-bench == 1.11.0
build-exclude: linux_debian_10-emcc_2.0.25; Compiler error, use at your own\
 risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.11.0+1.tar.gz
sha256sum: 872e47875d80294b7419ee63c7c622c7e185625fa7a114c87405a7fe952f464a
:
name: spdlog
version: 1.12.0
project: spdlog
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![ci](https://github.c\
om/gabime/spdlog/actions/workflows/ci.yml/badge.svg)](https://github.com/gabi\
me/spdlog/actions/workflows/ci.yml)&nbsp; [![Build status](https://ci.appveyo\
r.com/api/projects/status/d2jnxclg20vd0o50?svg=true&branch=v1.x)](https://ci.\
appveyor.com/project/gabime/spdlog) [![Release](https://img.shields.io/github\
/release/gabime/spdlog.svg)](https://github.com/gabime/spdlog/releases/latest)

## Install
#### Header-only version
Copy the include [folder](https://github.com/gabime/spdlog/tree/v1.x/include/\
spdlog) to your build tree and use a C++11 compiler.

#### Compiled version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```

see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/examp\
le/CMakeLists.txt) on how to use.

## Platforms
* Linux, FreeBSD, OpenBSD, Solaris, AIX
* Windows (msvc 2013+, cygwin)
* macOS (clang 3.5+)
* Android

## Package managers:
* Debian: `sudo apt install libspdlog-dev`
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `pkg install spdlog`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* openSUSE: `sudo zypper in spdlog-devel`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```


## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature-rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
  * Rotating log files.
  * Daily log files.
  * Console logging (colors supported).
  * syslog.
  * Windows event log.
  * Windows debugger (```OutputDebugString(..)```).
  * Log to Qt widgets ([example](#log-to-qt-with-nice-colors)).
  * Easily [extendable](https://github.com/gabime/spdlog/wiki/4.-Sinks#implem\
enting-your-own-sink) with custom log targets.
* Log filtering - log levels can be modified at runtime as well as compile\
 time.
* Support for loading log levels from argv or environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display them later on demand.

## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create a color multi-threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5 MB size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day at 2:30 am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Debug messages can be stored in a ring buffer instead of being logged\
 immediately.
// This is useful to display debug logs only when needed (e.g. when an error\
 happens).
// When needed, call dump_backtrace() to dump them to your log.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer. 
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages
// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread-safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output into lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with a different format and log level
```c++

// create a logger with 2 targets, with different log levels and formats.
// The console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### User-defined callbacks about log events
```c++

// create a logger with a lambda function callback, the callback will be\
 called
// each time something is logged to the logger
void callback_example()
{
    auto callback_sink = std::make_shared<spdlog::sinks::callback_sink_mt>([]\
(const spdlog::details::log_msg &msg) {
         // for example you can be notified by sending an email to yourself
    });
    callback_sink->set_level(spdlog::level::err);

    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    spdlog::logger logger("custom_callback_logger", {console_sink,\
 callback_sink});

    logger.info("some info log");
    logger.error("critical issue"); // will notify you
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks
```c++
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User-defined types
```c++
template<>
struct fmt::formatter<my_type> : fmt::formatter<std::string>
{
    auto format(my_type my, format_context &ctx) const -> decltype(ctx.out())
    {
        return format_to(ctx.out(), "[my_type i={}]", my.i);
    }
};

void user_defined_example()
{
    spdlog::info("user defined type: {}", my_type(14));
}

```

---
#### User-defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from the env variable or argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from the command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```


---
#### Log file open/close event handlers
```c++
// You can get callbacks from spdlog before/after a log file has been opened\
 or closed. 
// This is useful for cleanup procedures or for adding something to the\
 start/end of the log file.
void file_events_example()
{
    // pass the spdlog::file_event_handlers to file sinks for open/close log\
 file notifications
    spdlog::file_event_handlers handlers;
    handlers.before_open = [](spdlog::filename_t filename) {\
 spdlog::info("Before opening {}", filename); };
    handlers.after_open = [](spdlog::filename_t filename, std::FILE *fstream)\
 { fputs("After opening\n", fstream); };
    handlers.before_close = [](spdlog::filename_t filename, std::FILE\
 *fstream) { fputs("Before closing\n", fstream); };
    handlers.after_close = [](spdlog::filename_t filename) {\
 spdlog::info("After closing {}", filename); };
    auto my_logger = spdlog::basic_logger_st("some_logger",\
 "logs/events-sample.txt", true, handlers);        
}
```

---
#### Replace the Default Logger
```c++
void replace_default_logger_example()
{
    auto new_logger = spdlog::basic_logger_mt("new_default_logger",\
 "logs/new-default-log.txt", true);
    spdlog::set_default_logger(new_logger);
    spdlog::info("new logger log message");
}
```

---
#### Log to Qt with nice colors
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/qt_sinks.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    setMinimumSize(640, 480);
    auto log_widget = new QTextEdit(this);
    setCentralWidget(log_widget);
    int max_lines = 500; // keep the text widget to max 500 lines. remove old\
 lines if needed.
    auto logger = spdlog::qt_color_logger_mt("qt_logger", log_widget,\
 max_lines);
    logger->info("Some info message");
}
```

---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^10.1.1
requires: c++ >= 11
tests: spdlog-tests == 1.12.0
benchmarks: spdlog-bench == 1.12.0
build-exclude: linux_debian_10-emcc_2.0.25; Compiler error, use at your own\
 risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.12.0.tar.gz
sha256sum: 296212b0501cf36592a10048525ba12e88e7c53a689f56f5fa752d9eee729b43
:
name: spdlog
version: 1.14.1+2
project: spdlog
summary: Fast C++ logging library.
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
description:
\
# spdlog

Very fast, header-only/compiled, C++ logging library. [![ci](https://github.c\
om/gabime/spdlog/actions/workflows/ci.yml/badge.svg)](https://github.com/gabi\
me/spdlog/actions/workflows/ci.yml)&nbsp; [![Build status](https://ci.appveyo\
r.com/api/projects/status/d2jnxclg20vd0o50?svg=true&branch=v1.x)](https://ci.\
appveyor.com/project/gabime/spdlog) [![Release](https://img.shields.io/github\
/release/gabime/spdlog.svg)](https://github.com/gabime/spdlog/releases/latest)

## Install
#### Header-only version
Copy the include [folder](https://github.com/gabime/spdlog/tree/v1.x/include/\
spdlog) to your build tree and use a C++11 compiler.

#### Compiled version (recommended - much faster compile times)
```console
$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j
```
see example [CMakeLists.txt](https://github.com/gabime/spdlog/blob/v1.x/examp\
le/CMakeLists.txt) on how to use.

## Platforms
* Linux, FreeBSD, OpenBSD, Solaris, AIX
* Windows (msvc 2013+, cygwin)
* macOS (clang 3.5+)
* Android

## Package managers:
* Debian: `sudo apt install libspdlog-dev`
* Homebrew: `brew install spdlog`
* MacPorts: `sudo port install spdlog`
* FreeBSD:  `pkg install spdlog`
* Fedora: `dnf install spdlog`
* Gentoo: `emerge dev-libs/spdlog`
* Arch Linux: `pacman -S spdlog`
* openSUSE: `sudo zypper in spdlog-devel`
* vcpkg: `vcpkg install spdlog`
* conan: `spdlog/[>=1.4.1]`
* conda: `conda install -c conda-forge spdlog`
* build2: ```depends: spdlog ^1.8.2```


## Features
* Very fast (see [benchmarks](#benchmarks) below).
* Headers only or compiled
* Feature-rich formatting, using the excellent [fmt](https://github.com/fmtli\
b/fmt) library.
* Asynchronous mode (optional)
* [Custom](https://github.com/gabime/spdlog/wiki/3.-Custom-formatting)\
 formatting.
* Multi/Single threaded loggers.
* Various log targets:
  * Rotating log files.
  * Daily log files.
  * Console logging (colors supported).
  * syslog.
  * Windows event log.
  * Windows debugger (```OutputDebugString(..)```).
  * Log to Qt widgets ([example](#log-to-qt-with-nice-colors)).
  * Easily [extendable](https://github.com/gabime/spdlog/wiki/4.-Sinks#implem\
enting-your-own-sink) with custom log targets.
* Log filtering - log levels can be modified at runtime as well as compile\
 time.
* Support for loading log levels from argv or environment var.
* [Backtrace](#backtrace-support) support - store debug messages in a ring\
 buffer and display them later on demand.

## Usage samples

#### Basic usage
```c++
#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin:\
 {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // Note that this does not change the current log level, it will only
    // remove (depending on SPDLOG_ACTIVE_LEVEL) the call on the release code.
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

```
---
#### Create stdout/stderr logger object
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
    // create a color multi-threaded logger
    auto console = spdlog::stdout_color_mt("console");    
    auto err_logger = spdlog::stderr_color_mt("stderr");    
    spdlog::get("console")->info("loggers can be retrieved from a global\
 registry using the spdlog::get(logger_name)");
}
```

---
#### Basic file logger
```c++
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
    try 
    {
        auto logger = spdlog::basic_logger_mt("basic_logger",\
 "logs/basic-log.txt");
    }
    catch (const spdlog::spdlog_ex &ex)
    {
        std::cout << "Log init failed: " << ex.what() << std::endl;
    }
}
```
---
#### Rotating files
```c++
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
    // Create a file rotating logger with 5 MB size max and 3 rotated files
    auto max_size = 1048576 * 5;
    auto max_files = 3;
    auto logger = spdlog::rotating_logger_mt("some_logger_name",\
 "logs/rotating.txt", max_size, max_files);
}
```

---
#### Daily files
```c++

#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
    // Create a daily logger - a new file is created every day at 2:30 am
    auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt",\
 2, 30);
}

```

---
#### Backtrace support
```c++
// Debug messages can be stored in a ring buffer instead of being logged\
 immediately.
// This is useful to display debug logs only when needed (e.g. when an error\
 happens).
// When needed, call dump_backtrace() to dump them to your log.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer. 
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
  spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages
// or my_logger->dump_backtrace(32)..
```

---
#### Periodic flush
```c++
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread-safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));

```

---
#### Stopwatch
```c++
// Stopwatch support for spdlog
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
    spdlog::stopwatch sw;    
    spdlog::debug("Elapsed {}", sw);
    spdlog::debug("Elapsed {:.3}", sw);       
}

```

---
#### Log binary data in hex
```c++
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output into lines.
// {:a} - show ASCII if :n is not set.

#include "spdlog/fmt/bin_to_hex.h"

void binary_example()
{
    auto console = spdlog::get("console");
    std::array<char, 80> buf;
    console->info("Binary example: {}", spdlog::to_hex(buf));
    console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(bu\
f), std::begin(buf) + 10));
    // more examples:
    // logger->info("uppercase: {:X}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
    // logger->info("uppercase, no delimiters, no position info: {:Xsp}",\
 spdlog::to_hex(buf));
}

```

---
#### Logger with multi sinks - each with a different format and log level
```c++

// create a logger with 2 targets, with different log levels and formats.
// The console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    console_sink->set_level(spdlog::level::warn);
    console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("log\
s/multisink.txt", true);
    file_sink->set_level(spdlog::level::trace);

    spdlog::logger logger("multi_sink", {console_sink, file_sink});
    logger.set_level(spdlog::level::debug);
    logger.warn("this should appear in both console and file");
    logger.info("this message should not appear in the console, only in the\
 file");
}
```

---
#### User-defined callbacks about log events
```c++

// create a logger with a lambda function callback, the callback will be\
 called
// each time something is logged to the logger
void callback_example()
{
    auto callback_sink = std::make_shared<spdlog::sinks::callback_sink_mt>([]\
(const spdlog::details::log_msg &msg) {
         // for example you can be notified by sending an email to yourself
    });
    callback_sink->set_level(spdlog::level::err);

    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>\
();
    spdlog::logger logger("custom_callback_logger", {console_sink,\
 callback_sink});

    logger.info("some info log");
    logger.error("critical issue"); // will notify you
}
```

---
#### Asynchronous logging
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
    // default thread pool settings can be modified *before* creating the\
 async logger:
    // spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1\
 backing thread.
    auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_f\
ile_logger", "logs/async_log.txt");
    // alternatively:
    // auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_\
mt>("async_file_logger", "logs/async_log.txt");   
}

```

---
#### Asynchronous logger with multi sinks
```c++
#include "spdlog/async.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"

void multi_sink_example2()
{
    spdlog::init_thread_pool(8192, 1);
    auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt\
 >();
    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_m\
t>("mylog.txt", 1024*1024*10, 3);
    std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
    auto logger = std::make_shared<spdlog::async_logger>("loggername",\
 sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_po\
licy::block);
    spdlog::register_logger(logger);
}
```
 
---
#### User-defined types
```c++
template<>
struct fmt::formatter<my_type> : fmt::formatter<std::string>
{
    auto format(my_type my, format_context &ctx) const -> decltype(ctx.out())
    {
        return format_to(ctx.out(), "[my_type i={}]", my.i);
    }
};

void user_defined_example()
{
    spdlog::info("user defined type: {}", my_type(14));
}

```

---
#### User-defined flags in the log pattern
```c++ 
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a\
 <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
    void format(const spdlog::details::log_msg &, const std::tm &,\
 spdlog::memory_buf_t &dest) override
    {
        std::string some_txt = "custom-flag";
        dest.append(some_txt.data(), some_txt.data() + some_txt.size());
    }

    std::unique_ptr<custom_flag_formatter> clone() const override
    {
        return spdlog::details::make_unique<my_formatter_flag>();
    }
};

void custom_flags_example()
{    
    auto formatter = std::make_unique<spdlog::pattern_formatter>();
    formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*]\
 [%^%l%$] %v");
    spdlog::set_formatter(std::move(formatter));
}

```

---
#### Custom error handler
```c++
void err_handler_example()
{
    // can be set globally or per logger(logger->set_error_handler(..))
    spdlog::set_error_handler([](const std::string &msg) {\
 spdlog::get("console")->error("*** LOGGER ERROR ***: {}", msg); });
    spdlog::get("console")->info("some invalid message to trigger an error\
 {}{}{}{}", 3);
}

```

---
#### syslog
```c++
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
    std::string ident = "spdlog-example";
    auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
    syslog_logger->warn("This is warning that will end up in syslog.");
}
```
---
#### Android example
```c++
#include "spdlog/sinks/android_sink.h"
void android_example()
{
    std::string tag = "spdlog-android";
    auto android_logger = spdlog::android_logger_mt("android", tag);
    android_logger->critical("Use \"adb shell logcat\" to view this\
 message.");
}
```

---
#### Load log levels from the env variable or argv

```c++
#include "spdlog/cfg/env.h"
int main (int argc, char *argv[])
{
    spdlog::cfg::load_env_levels();
    // or from the command line:
    // ./example SPDLOG_LEVEL=info,mylogger=trace
    // #include "spdlog/cfg/argv.h" // for loading levels from argv
    // spdlog::cfg::load_argv_levels(argc, argv);
}
```
So then you can:

```console
$ export SPDLOG_LEVEL=info,mylogger=trace
$ ./example
```


---
#### Log file open/close event handlers
```c++
// You can get callbacks from spdlog before/after a log file has been opened\
 or closed. 
// This is useful for cleanup procedures or for adding something to the\
 start/end of the log file.
void file_events_example()
{
    // pass the spdlog::file_event_handlers to file sinks for open/close log\
 file notifications
    spdlog::file_event_handlers handlers;
    handlers.before_open = [](spdlog::filename_t filename) {\
 spdlog::info("Before opening {}", filename); };
    handlers.after_open = [](spdlog::filename_t filename, std::FILE *fstream)\
 { fputs("After opening\n", fstream); };
    handlers.before_close = [](spdlog::filename_t filename, std::FILE\
 *fstream) { fputs("Before closing\n", fstream); };
    handlers.after_close = [](spdlog::filename_t filename) {\
 spdlog::info("After closing {}", filename); };
    auto my_logger = spdlog::basic_logger_st("some_logger",\
 "logs/events-sample.txt", true, handlers);        
}
```

---
#### Replace the Default Logger
```c++
void replace_default_logger_example()
{
    auto new_logger = spdlog::basic_logger_mt("new_default_logger",\
 "logs/new-default-log.txt", true);
    spdlog::set_default_logger(new_logger);
    spdlog::info("new logger log message");
}
```

---
#### Log to Qt with nice colors
```c++
#include "spdlog/spdlog.h"
#include "spdlog/sinks/qt_sinks.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    setMinimumSize(640, 480);
    auto log_widget = new QTextEdit(this);
    setCentralWidget(log_widget);
    int max_lines = 500; // keep the text widget to max 500 lines. remove old\
 lines if needed.
    auto logger = spdlog::qt_color_logger_mt("qt_logger", log_widget,\
 max_lines);
    logger->info("Some info message");
}
```
---

#### Mapped Diagnostic Context
```c++
// Mapped Diagnostic Context (MDC) is a map that stores key-value pairs\
 (string values) in thread local storage.
// Each thread maintains its own MDC, which loggers use to append diagnostic\
 information to log outputs.
// Note: it is not supported in asynchronous mode due to its reliance on\
 thread-local storage.
#include "spdlog/mdc.h"
void mdc_example()
{
    spdlog::mdc::put("key1", "value1");
    spdlog::mdc::put("key2", "value2");
    // if not using the default format, use the %& formatter to print mdc data
    // spdlog::set_pattern("[%H:%M:%S %z] [%^%L%$] [%&] %v");
}
```
---
## Benchmarks

Below are some [benchmarks](https://github.com/gabime/spdlog/blob/v1.x/bench/\
bench.cpp) done in Ubuntu 64 bit, Intel i7-4770 CPU @ 3.40GHz

#### Synchronous mode
```
[info] **************************************************************
[info] Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.17 secs        5,777,626/sec
[info] rotating_st      Elapsed: 0.18 secs        5,475,894/sec
[info] daily_st         Elapsed: 0.20 secs        5,062,659/sec
[info] empty_logger     Elapsed: 0.07 secs       14,127,300/sec
[info] **************************************************************
[info] C-string (400 bytes). Single thread, 1,000,000 iterations
[info] **************************************************************
[info] basic_st         Elapsed: 0.41 secs        2,412,483/sec
[info] rotating_st      Elapsed: 0.72 secs        1,389,196/sec
[info] daily_st         Elapsed: 0.42 secs        2,393,298/sec
[info] null_st          Elapsed: 0.04 secs       27,446,957/sec
[info] **************************************************************
[info] 10 threads, competing over the same logger object, 1,000,000 iterations
[info] **************************************************************
[info] basic_mt         Elapsed: 0.60 secs        1,659,613/sec
[info] rotating_mt      Elapsed: 0.62 secs        1,612,493/sec
[info] daily_mt         Elapsed: 0.61 secs        1,638,305/sec
[info] null_mt          Elapsed: 0.16 secs        6,272,758/sec
```
#### Asynchronous mode
```
[info] -------------------------------------------------
[info] Messages     : 1,000,000
[info] Threads      : 10
[info] Queue        : 8,192 slots
[info] Queue memory : 8,192 x 272 = 2,176 KB 
[info] -------------------------------------------------
[info] 
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 1.70784 secs     585,535/sec
[info] Elapsed: 1.69805 secs     588,910/sec
[info] Elapsed: 1.7026 secs      587,337/sec
[info] 
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 0.372816 secs    2,682,285/sec
[info] Elapsed: 0.379758 secs    2,633,255/sec
[info] Elapsed: 0.373532 secs    2,677,147/sec

```

## Documentation
Documentation can be found in the [wiki](https://github.com/gabime/spdlog/wik\
i/1.-QuickStart) pages.

---

Thanks to [JetBrains](https://www.jetbrains.com/?from=spdlog) for donating\
 product licenses to help develop **spdlog** <a href="https://www.jetbrains.c\
om/?from=spdlog"><img src="logos/jetbrains-variant-4.svg" width="94"\
 align="center" /></a>



\
description-type: text/markdown;variant=GFM
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: fmt ^10.1.1
requires: c++ >= 11
tests: spdlog-tests == 1.14.1
benchmarks: spdlog-bench == 1.14.1
build-exclude: linux_debian_10-emcc_2.0.25; Compiler error, use at your own\
 risks.
bootstrap-build:
\
project = spdlog

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Used in buildfiles
#
include_dir = $src_root/upstream/include
src_dir = $src_root/upstream/src

\
location: spdlog/spdlog-1.14.1+2.tar.gz
sha256sum: b0e844d10d8f27bce6b878fcddbcc87254e22691246627b9b436c48b1f8c8258
:
name: spdlog-bench
version: 1.10.0+3
project: spdlog
summary: Benchmarks package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: google-benchmark ^1.6.0
bootstrap-build:
\
project = spdlog-bench

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-bench-1.10.0+3.tar.gz
sha256sum: 65b9b8a60c5d6c0675f01c4f60d5561484efbeefde17ccc03288430fda90eea3
:
name: spdlog-bench
version: 1.11.0+1
project: spdlog
summary: Benchmarks package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: google-benchmark ^1.6.0
bootstrap-build:
\
project = spdlog-bench

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-bench-1.11.0+1.tar.gz
sha256sum: c554379649fbeff14060d9498f111fac77065b7691ee9ed86fab181851b1476f
:
name: spdlog-bench
version: 1.12.0
project: spdlog
summary: Benchmarks package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: google-benchmark ^1.6.0
bootstrap-build:
\
project = spdlog-bench

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-bench-1.12.0.tar.gz
sha256sum: be2babea020d28893bb53ccfb174055c6529bb3e07467d0b41b33cf52f6af913
:
name: spdlog-bench
version: 1.14.1+2
project: spdlog
summary: Benchmarks package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: google-benchmark ^1.6.0
bootstrap-build:
\
project = spdlog-bench

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-bench-1.14.1+2.tar.gz
sha256sum: e7e6e92302a52c544a13afbcbc37c406191cd152a333dc8eb11cb001cb4ea311
:
name: spdlog-tests
version: 1.10.0+3
project: spdlog
summary: Tests package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = spdlog-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-tests-1.10.0+3.tar.gz
sha256sum: 8a68890ff61693e52af4e31e7cd90b83344a9c45c67ee18b0269102d0b6291f1
:
name: spdlog-tests
version: 1.11.0+1
project: spdlog
summary: Tests package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = spdlog-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-tests-1.11.0+1.tar.gz
sha256sum: e41b64de4d9155350a35578659fd279f3577abe23da5aa39f21d7a4785edd06e
:
name: spdlog-tests
version: 1.12.0
project: spdlog
summary: Tests package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: catch2 ^3.3.2
bootstrap-build:
\
project = spdlog-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-tests-1.12.0.tar.gz
sha256sum: a0f1d74a95bfa6203f763a8cfde3bad5939a6360f2b11c28724725d44a6f15af
:
name: spdlog-tests
version: 1.14.1+2
project: spdlog
summary: Tests package for spdlog
license: MIT; MIT License
topics: logging, C++
keywords: logging c++ fast modern
doc-url: https://github.com/gabime/spdlog/wiki
src-url: https://github.com/gabime/spdlog
package-url: https://github.com/build2-packaging/spdlog
email: gmelman1@gmail.com
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: catch2 ^3.3.2
bootstrap-build:
\
project = spdlog-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true

\
location: spdlog/spdlog-tests-1.14.1+2.tar.gz
sha256sum: a2e9fa65b4cbd44363303af75de93de1a6cf55d94ee6a95abbcf876feb13aa66
:
name: sqlite3
version: 3.18.2+7
project: sqlite
summary: SQLite database engine shell program
license: public domain
keywords: sql database shell
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite shell program source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/cli.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/sqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.9.0
depends: * bpkg >= 0.9.0
depends: libsqlite3 == 3.18.2
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = sqlite3

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.class == 'msvc')
{
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS
  c.coptions += /wd4251 /wd4275 /wd4800
}

# Specify the test target for cross-testing.
#
test.target = $c.target

\
location: sqlite/sqlite3-3.18.2+7.tar.gz
sha256sum: 2c06310562a141fcfc19cf8f09a12a8ee54ac96cf2fa401e7e41c8a347de7c23
:
name: sqlite3
version: 3.27.2+2
project: sqlite
summary: SQLite database engine shell program
license: blessing; SQLite Blessing.
topics: SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite shell program source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/cli.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/sqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
depends: libsqlite3 == 3.27.2
depends: libz >= 1.2.1100
builds: all
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = sqlite3

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $c.target

\
location: sqlite/sqlite3-3.27.2+2.tar.gz
sha256sum: d3448088436002540112c841461814b1a5c07d0a21d7f393896c596b9701cc21
:
name: sqlite3
version: 3.35.5
project: sqlite
summary: SQLite database engine shell program
license: blessing; SQLite Blessing.
topics: SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite shell program source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/cli.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/sqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.11.0
depends: * bpkg >= 0.11.0
depends: libsqlite3 == 3.35.5
depends: libz ^1.2.1100
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = sqlite3

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $c.target

\
location: sqlite/sqlite3-3.35.5.tar.gz
sha256sum: 61a787f65a5252b92bd2ce488d7571b87b6776c2c5f84235d7c8305b468576a3
:
name: sqlite3
version: 3.39.4+1
project: sqlite
summary: SQLite database engine shell program
license: blessing; SQLite Blessing.
topics: SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite shell program source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/cli.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/sqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsqlite3 == 3.39.4
depends: libz ^1.2.1100
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = sqlite3

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $c.target

\
location: sqlite/sqlite3-3.39.4+1.tar.gz
sha256sum: 25167421c48475b02f5f058a79222c0439e9e44f3026e57514e1990864a50fb1
:
name: sqlite3
version: 3.45.3+2
project: sqlite
summary: SQLite database engine shell program
license: blessing; SQLite Blessing.
topics: SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite shell program source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/cli.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/sqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsqlite3 == 3.45.3
depends: libz ^1.2.1100
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = sqlite3

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $c.target

\
location: sqlite/sqlite3-3.45.3+2.tar.gz
sha256sum: 7eff72d8e2f1ac5f64445026ad3647d8e485cbd937c036af9c6eafb7424312ac
:
name: sqlite3
version: 3.51.2
project: sqlite
summary: SQLite database engine shell program
license: blessing; SQLite Blessing.
topics: SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite shell program source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/cli.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/sqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsqlite3 == 3.51.2
depends: libz ^1.2.1100
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = sqlite3

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $c.target

\
location: sqlite/sqlite3-3.51.2.tar.gz
sha256sum: fb7f15df8f6dacfa17fa31d2a6c8c8a541b6359b9235af80458e71208b28316e
:
name: sqlite3
version: 3.51.3+1
project: sqlite
summary: SQLite database engine shell program
license: blessing; SQLite Blessing.
topics: SQLite, SQL, relational database
description:
\
SQLite is a C library that implements an in-process SQL database engine. A
complete database is stored in a single file on disk. The code for SQLite is
in the public domain. For more information see:

https://sqlite.org/

This package contains the original SQLite shell program source code overlaid
with the build2-based build system and packaged for the build2 package manager
(bpkg).

See the INSTALL file for the prerequisites and installation instructions.

Send questions, bug reports, or any other feedback about the program itself to
the SQLite mailing lists. Send build system and packaging-related feedback to
the packaging@build2.org mailing list (see https://lists.build2.org for
posting guidelines, etc).

The packaging of SQLite for build2 is tracked in a Git repository at:

https://git.build2.org/cgit/packaging/sqlite/

\
description-type: text/plain
url: https://sqlite.org/
doc-url: https://sqlite.org/cli.html
src-url: https://git.build2.org/cgit/packaging/sqlite/sqlite/tree/sqlite3/
package-url: https://git.build2.org/cgit/packaging/sqlite/
email: sqlite-users@mailinglists.sqlite.org; Mailing list.
package-email: packaging@build2.org; Mailing list.
build-error-email: builds@build2.org
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: libsqlite3 == 3.51.3
depends: libz ^1.2.1100
builds: all
builds: -wasm
bootstrap-build:
\
# file      : build/bootstrap.build
# copyright : not copyrighted - public domain

project = sqlite3

using version
using config
using dist
using test
using install

\
root-build:
\
# file      : build/root.build
# copyright : not copyrighted - public domain

using c

h{*}: extension = h
c{*}: extension = c

if ($c.target.system == 'win32-msvc')
  c.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($c.class == 'msvc')
  c.coptions += /wd4251 /wd4275 /wd4800

# Specify the test target for cross-testing.
#
test.target = $c.target

\
location: sqlite/sqlite3-3.51.3+1.tar.gz
sha256sum: 1e218596edb700820f1150ff8fa562320f76d4826cad466285a4cfb5b66a257f
:
name: stb_dxt
version: 1.12.0
type: lib,binless
language: c
project: stb
summary: DXT1/DXT5 compressor
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_dxt

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_dxt-1.12.0.tar.gz
sha256sum: c29a18ed4e03bd39e2fa4c2ce65a51bd74b91109a5ff1c10b15a2daaa93f0a42
:
name: stb_easy_font
version: 1.1.0+1
type: lib,binless
language: c
project: stb
summary: bitmap font for 3D rendering
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_easy_font

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_easy_font-1.1.0+1.tar.gz
sha256sum: 5e6f86a6aab5a81996414baab80d54a43aa36f0e19064c38e718b954085a60bb
:
name: stb_image
version: 2.26.0
project: stb
summary: Public Domain Image Loader
license: MIT; MIT License
license: Unlicense; The Unlicense
topics: image loader, image decoding, from file, from memory
keywords: PNG JPG TGA BMP GIF
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.20 | audio | 5563 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_image.h](stb_image.h)** | 2.26 | graphics | 7762 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.24 | graphics | 5011 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.15 | graphics | 1690 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.96 | graphics | 2631 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.00 | graphics | 628 | simple 2D\
 rectangle packer with decent quality
**[stb_ds.h](stb_ds.h)** | 0.65 | utility | 1880 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.09 | utility | 1879 | fast sprintf,\
 snprintf for C/C++
**[stretchy_buffer.h](stretchy_buffer.h)** | 1.04 | utility | 263 | typesafe\
 dynamic array for C (i.e. approximation to vector<>), doesn't compile as C++
**[stb_textedit.h](stb_textedit.h)** | 1.13 | user&nbsp;interface | 1404 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.10 | 3D&nbsp;graphics | 753 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_perlin.h](stb_perlin.h)** | 0.5 | 3D&nbsp;graphics | 428 | revised\
 Perlin noise (3D input, 1D output)
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.41 | game&nbsp;dev |\
 4161 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.11 | parsing | 966 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.93 | math | 430 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb.h](stb.h)** | 2.37 | misc | 14454 | helper functions for C, mostly\
 redundant in C++; basically author's personal stuff
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 22
Total lines of C code: 56774


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb
email: sean+github@nothings.org
package-email: lyrahgames@mailbox.org
build-error-email: lyrahgames@mailbox.org
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = stb_image

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

src_upstream = $src_root/upstream
\
location: stb/stb_image-2.26.0.tar.gz
sha256sum: 8d59c09badc03eb1e19d67b41fa182e2e0b38785b3dbfadd2c20c563880d6d5c
:
name: stb_image
version: 2.28.0+1
type: lib,binless
language: c
project: stb
summary: image loader
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_image

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_image-2.28.0+1.tar.gz
sha256sum: 6eab0cda1ae7cfb58086e8622bc446ec97e70dd4963bea4c23a6ffc1b3cf7ae5
:
name: stb_image_write
version: 1.15.0
project: stb
summary: Public Domain Image Writer
license: MIT; MIT License
topics: image writer, to disk
keywords: PNG TGA BMP
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.20 | audio | 5563 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_image.h](stb_image.h)** | 2.26 | graphics | 7762 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.24 | graphics | 5011 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.15 | graphics | 1690 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.96 | graphics | 2631 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.00 | graphics | 628 | simple 2D\
 rectangle packer with decent quality
**[stb_ds.h](stb_ds.h)** | 0.65 | utility | 1880 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.09 | utility | 1879 | fast sprintf,\
 snprintf for C/C++
**[stretchy_buffer.h](stretchy_buffer.h)** | 1.04 | utility | 263 | typesafe\
 dynamic array for C (i.e. approximation to vector<>), doesn't compile as C++
**[stb_textedit.h](stb_textedit.h)** | 1.13 | user&nbsp;interface | 1404 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.10 | 3D&nbsp;graphics | 753 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_perlin.h](stb_perlin.h)** | 0.5 | 3D&nbsp;graphics | 428 | revised\
 Perlin noise (3D input, 1D output)
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.41 | game&nbsp;dev |\
 4161 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.11 | parsing | 966 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.93 | math | 430 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb.h](stb.h)** | 2.37 | misc | 14454 | helper functions for C, mostly\
 redundant in C++; basically author's personal stuff
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 22
Total lines of C code: 56774


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb
email: sean+github@nothings.org
package-email: wmbat@protonmail.com
build-error-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = stb_image_write

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: stb/stb_image_write-1.15.0.tar.gz
sha256sum: 08755e4508ae198495547f217ed7981a97384a383ca73e1cb96c2452f69afc87
:
name: stb_image_write
version: 1.16.0
type: lib,binless
language: c
project: stb
summary: writes out PNG/BMP/TGA/JPEG/HDR images to C stdio
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_image_write

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_image_write-1.16.0.tar.gz
sha256sum: d16d621fccf8c38a163217df19b8704350ede3bee36aed20482dedda06ba0a9a
:
name: stb_rect_pack
version: 1.1.0
type: lib,binless
language: c
project: stb
summary: rectangle packing
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_rect_pack

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_rect_pack-1.1.0.tar.gz
sha256sum: 0e3cfa6071750b85d876a8348b0fde53cee870198f9fadda6916d3b118d79703
:
name: stb_sprintf
version: 1.10.0
type: lib,binless
language: c
project: stb
summary: Single file sprintf replacement.
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_sprintf

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_sprintf-1.10.0.tar.gz
sha256sum: 297b93e99c77ba8a039dc99945804eadcba7a5f58ece72a42f2c538fa8dce7d0
:
name: stb_textedit
version: 1.14.0
type: lib,binless
language: c
project: stb
summary: implements the guts of a multi-line text-editing widget
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_textedit

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_textedit-1.14.0.tar.gz
sha256sum: 9c51ad0e8cd2412658fa22c0f0805a1fc4def72090b2ab8bff3205718162f17f
:
name: stb_truetype
version: 1.26.0
type: lib,binless
language: c
project: stb
summary: This library processes TrueType files.
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_truetype

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_truetype-1.26.0.tar.gz
sha256sum: 951efe42086fa95567daf0c345160b219380a4713e56a3fa17bd5dd41c37314a
:
name: stb_vorbis
version: 1.22.0+1
type: lib,binless
language: c
project: stb
summary: Ogg Vorbis audio decoder
license: MIT
license: Unlicense
description:
\
<!---   THIS FILE IS AUTOMATICALLY GENERATED, DO NOT CHANGE IT BY HAND   --->

stb
===

single-file public domain (or MIT licensed) libraries for C/C++

Noteworthy:

* image loader: [stb_image.h](stb_image.h)
* image writer: [stb_image_write.h](stb_image_write.h)
* image resizer: [stb_image_resize.h](stb_image_resize.h)
* font text rasterizer: [stb_truetype.h](stb_truetype.h)
* typesafe containers: [stb_ds.h](stb_ds.h)

Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen,\
 stb_image_resize
by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts.

<a name="stb_libs"></a>

library    | lastest version | category | LoC | description
--------------------- | ---- | -------- | --- | -----------------------------\
---
**[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis\
 files from file/memory to float/16-bit signed output
**[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform\
 synthesizer
**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image\
 loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC
**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse,\
 decode, and rasterize characters from truetype fonts
**[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image\
 writing to disk: PNG, TGA, BMP
**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 |\
 resize images larger/smaller with good quality
**[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D\
 rectangle packer with decent quality
**[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised\
 simplex noise w/ different seeds
**[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and\
 hash tables for C, will compile in C++
**[stb_sprintf.h](stb_sprintf.h)** | 1.10 | utility | 1906 | fast sprintf,\
 snprintf for C/C++
**[stb_textedit.h](stb_textedit.h)** | 1.14 | user&nbsp;interface | 1429 |\
 guts of a text editor for games etc implementing them from scratch
**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D&nbsp;graphics | 3807\
 | Minecraft-esque voxel rendering "engine" with many more features
**[stb_dxt.h](stb_dxt.h)** | 1.12 | 3D&nbsp;graphics | 719 | Fabian "ryg"\
 Giesen's real-time DXT compressor
**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D&nbsp;graphics | 305 |\
 quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc
**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game&nbsp;dev |\
 4187 | embeddable tilemap editor
**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 |\
 game&nbsp;dev | 1221 | herringbone Wang tile map generator
**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing\
 parsers for C-like languages
**[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit\
 modulus e.g. "euclidean divide"
**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049\
 | incrementally compute reachability on grids
**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty\
 malloc/free leak-checking
**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive\
 #include support, particularly for GLSL

Total libraries: 21
Total lines of C code: 43117


FAQ
---

#### What's the license?

These libraries are in the public domain. You can do anything you
want with them. You have no legal obligation
to do anything else, although I appreciate attribution.

They are also licensed under the MIT open source license, if you have lawyers
who are unhappy with public domain. Every source file includes an explicit
dual-license for you to choose from.

#### How do I use these libraries?

The idea behind single-header file libraries is that they're easy to\
 distribute and deploy
because all the code is contained in a single file. By default, the .h files\
 in here act as
their own header files, i.e. they declare the functions contained in the file\
 but don't
actually result in any code getting compiled.

So in addition, you should select _exactly one_ C/C++ source file that\
 actually instantiates
the code, preferably a file you're not editing frequently. This file should\
 define a
specific macro (this is documented per-library) to actually enable the\
 function definitions.
For example, to use stb_image, you should have exactly one C/C++ file that\
 doesn't
include stb_image.h regularly, but instead does

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

The right macro to define is pointed out right at the top of each of these\
 libraries.

#### <a name="other_libs"></a> Are there other single-file public-domain/open\
 source libraries with minimal dependencies out there?

[Yes.](https://github.com/nothings/single_file_libs)

#### If I wrap an stb library in a new library, does the new library have to\
 be public domain/MIT?

No, because it's public domain you can freely relicense it to whatever\
 license your new
library wants to be.

#### What's the deal with SSE support in GCC-based compilers?

stb_image will either use SSE2 (if you compile with -msse2) or
will not use any SIMD at all, rather than trying to detect the
processor at runtime and handle it correctly. As I understand it,
the approved path in GCC for runtime-detection require
you to use multiple source files, one for each CPU configuration.
Because stb_image is a header-file library that compiles in only
one source file, there's no approved way to build both an
SSE-enabled and a non-SSE-enabled variation.

While we've tried to work around it, we've had multiple issues over
the years due to specific versions of gcc breaking what we're doing,
so we've given up on it. See https://github.com/nothings/stb/issues/280
and https://github.com/nothings/stb/issues/410 for examples.

#### Some of these libraries seem redundant to existing open source\
 libraries. Are they better somehow?

Generally they're only better in that they're easier to integrate,
easier to use, and easier to release (single file; good API; no
attribution requirement). They may be less featureful, slower,
and/or use more memory. If you're already using an equivalent
library, there's probably no good reason to switch.

#### Can I link directly to the table of stb libraries?

You can use [this URL](https://github.com/nothings/stb#stb_libs) to link\
 directly to that list.

#### Why do you list "lines of code"? It's a terrible metric.

Just to give you some idea of the internal complexity of the library,
to help you manage your expectations, or to let you know what you're
getting into. While not all the libraries are written in the same
style, they're certainly similar styles, and so comparisons between
the libraries are probably still meaningful.

Note though that the lines do include both the implementation, the
part that corresponds to a header file, and the documentation.

#### Why single-file headers?

Windows doesn't have standard directories where libraries
live. That makes deploying libraries in Windows a lot more
painful than open source developers on Unix-derivates generally
realize. (It also makes library dependencies a lot worse in Windows.)

There's also a common problem in Windows where a library was built
against a different version of the runtime library, which causes
link conflicts and confusion. Shipping the libs as headers means
you normally just compile them straight into your project without
making libraries, thus sidestepping that problem.

Making them a single file makes it very easy to just
drop them into a project that needs them. (Of course you can
still put them in a proper shared library tree if you want.)

Why not two files, one a header and one an implementation?
The difference between 10 files and 9 files is not a big deal,
but the difference between 2 files and 1 file is a big deal.
You don't need to zip or tar the files up, you don't have to
remember to attach *two* files, etc.

#### Why "stb"? Is this something to do with Set-Top Boxes?

No, they are just the initials for my name, Sean T. Barrett.
This was not chosen out of egomania, but as a moderately sane
way of namespacing the filenames and source function names.

#### Will you add more image types to stb_image.h?

No. As stb_image use has grown, it has become more important
for us to focus on security of the codebase. Adding new image
formats increases the amount of code we need to secure, so it
is no longer worth adding new formats.

#### Do you have any advice on how to create my own single-file library?

Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt

#### Why public domain?

I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons.
Some of them are listed here:
https://github.com/nothings/stb/blob/master/docs/why_public_domain.md

#### Why C?

Primarily, because I use C, not C++. But it does also make it easier
for other people to use them from other languages.

#### Why not C99? stdint.h, declare-anywhere, etc.

I still use MSVC 6 (1998) as my IDE because it has better human factors
for me than later versions of MSVC.

\
description-type: text/markdown;variant=GFM
package-description:
\
<h1 align="center">
    build2 Packages for stb Libraries
</h1>

<p align="center">
    This project builds and defines the build2 packages for the
    <a href="https://github.com/nothings/stb">stb</a> libraries (single-file\
 public domain or MIT licensed libraries for C/C++).
</p>

<p align="center">
    <a href="https://github.com/nothings/stb">
        <img src="https://img.shields.io/website/https/github.com/nothings/st\
b.svg?down_message=offline&label=Official&style=for-the-badge&up_color=blue&u\
p_message=online">
    </a>
    <a href="https://github.com/build2-packaging/stb">
        <img src="https://img.shields.io/website/https/github.com/build2-pack\
aging/stb.svg?down_message=offline&label=build2&style=for-the-badge&up_color=\
blue&up_message=online">
    </a>
    <a href="https://cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/cppget.org/stb.svg?dow\
n_message=online&down_color=blue&label=cppget.org&style=for-the-badge&up_colo\
r=blue&up_message=online">
    </a>
    <a href="https://queue.cppget.org/?packages=stb">
        <img src="https://img.shields.io/website/https/queue.cppget.org/stb.s\
vg?down_message=check&down_color=blue&label=queue.cppget.org&style=for-the-ba\
dge&up_color=blue&up_message=check">
    </a>
</p>

## Usage
Make sure to add an appropriate section, like `alpha` or `stable`, of the\
 `cppget.org` repository to your project's `repositories.manifest` to be able\
 to fetch required packages.

    :
    role: prerequisite
    location: https://pkg.cppget.org/1/stable
    # trust: ...

If `cppget.org` is not an option then add this Git repository itself instead\
 as a prerequisite.

    :
    role: prerequisite
    location: https://github.com/build2-packaging/stb.git

Add the respective dependency in your project's `manifest` file to make the\
 required packages available for import.

    depends: stb_c_lexer ^0.12.0
    depends: stb_connected_components ^0.96.0
    depends: stb_divide ^0.94.0
    depends: stb_ds ^0.67.0
    depends: stb_dxt ^1.12.0
    depends: stb_easy_font ^1.1.0
    depends: stb_herringbone_wang_tile ^0.7.0
    depends: stb_hexwave ^0.5.0
    depends: stb_image ^2.28.0
    depends: stb_image_resize ^0.97.0
    depends: stb_image_write ^1.16.0
    depends: stb_include ^0.2.0
    depends: stb_leakcheck ^0.6.0
    depends: stb_perlin ^0.5.0
    depends: stb_rect_pack ^1.1.0
    depends: stb_sprintf ^1.10.0
    depends: stb_textedit ^1.14.0
    depends: stb_tilemap_editor ^0.42.0
    depends: stb_truetype ^1.26.0
    depends: stb_vorbis ^1.22.0
    depends: stb_voxel_render ^0.89.0

Libraries can then simply be imported by the following declarations in a\
 `buildfile`.

    import stb_c_lexer = stb_c_lexer%lib{stb_c_lexer}
    import stb_connected_components = stb_connected_components%lib{stb_connec\
ted_components}
    import stb_divide = stb_divide%lib{stb_divide}
    import stb_ds = stb_ds%lib{stb_ds}
    import stb_dxt = stb_dxt%lib{stb_dxt}
    import stb_easy_font = stb_easy_font%lib{stb_easy_font}
    import stb_herringbone_wang_tile = stb_herringbone_wang_tile%lib{stb_herr\
ingbone_wang_tile}
    import stb_hexwave = stb_hexwave%lib{stb_hexwave}
    import stb_image = stb_image%lib{stb_image}
    import stb_image_resize = stb_image_resize%lib{stb_image_resize}
    import stb_image_write = stb_image_write%lib{stb_image_write}
    import stb_include = stb_include%lib{stb_include}
    import stb_leakcheck = stb_leakcheck%lib{stb_leakcheck}
    import stb_perlin = stb_perlin%lib{stb_perlin}
    import stb_rect_pack = stb_rect_pack%lib{stb_rect_pack}
    import stb_sprintf = stb_sprintf%lib{stb_sprintf}
    import stb_textedit = stb_textedit%lib{stb_textedit}
    import stb_tilemap_editor = stb_tilemap_editor%lib{stb_tilemap_editor}
    import stb_truetype = stb_truetype%lib{stb_truetype}
    import stb_vorbis = stb_vorbis%lib{stb_vorbis}
    import stb_voxel_render = stb_voxel_render%lib{stb_voxel_render}

## Configuration
There are no configuration options vailable.

## Issues and Notes
- Each package provides its own version. That makes updates to new specific\
 versions and the support of older versions much harder.
- When compiling C code, for some libraries `-lm` needs to added manually for\
 static builds. This might be a bug in build2.
- Working on these packages is quite generic. You should use in-place shell\
 programming to add features to all packages at once.
```fish
for x in stb*
    echo $x:
    ...
end
```
- Tests with file I/O fail on Emscripten-based target configurations.
- `stb_herringbone_wang_tile` and `stb_sprintf` exhibit errors for a few\
 other target configurations.
- For `stb_image_write`, there are still some unused-function warnings.
- Other warnings are not disabled. They show potential flaws in the upstream\
 libraries.
- Precompiled targets are not supported as all the libraries provide too many\
 configuration macros.
- The documentation of each library can be found in their respective header\
 file itself.

## Contributing
Thanks in advance for your help and contribution to keep these packages\
 up-to-date.
For now, please, file an issue on [GitHub](https://github.com/build2-packagin\
g/miniz/issues) for everything that is not described below.

### Recommend Updating Version
Please, file an issue on [GitHub](https://github.com/build2-packaging/miniz/i\
ssues) with the new recommended version.

### Update Version by Pull Request
1. Fork the repository on [GitHub](https://github.com/build2-packaging/miniz)\
 and clone it to your local machine.
2. Run `git submodule init` and `git submodule update` to get the current\
 upstream directory.
3. Inside the `upstream` directory, checkout the new commit.
4. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
5. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
6. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
7. Run `bdep ci` and test for errors.
8. If everything works fine, make a pull request on GitHub and write down the\
 `bdep ci` link to your CI tests.
9. After a successful pull request, we will run the appropriate commands to\
 publish a new package version.

### Update Version Directly if You Have Permissions
1. Inside the `upstream` directory, checkout the new commit.
2. If needed, change source files, `buildfiles`, and symbolic links\
 accordingly to create a working build2 package. Make sure not to directly\
 depend on the upstream directory inside the build system but use symbolic\
 links instead.
3. Update library version in `manifest` file if it has changed or add package\
 update by using `+n` for the `n`-th update.
4. Make an appropriate commit message by using imperative mood and a capital\
 letter at the start and push the new commit to the `master` branch.
5. Run `bdep ci` and test for errors and warnings.
6. When successful, run `bdep release --tag --push` to push new tag version\
 to repository.
7. Run `bdep publish` to publish the package to [cppget.org](https://cppget.o\
rg).

\
package-description-type: text/markdown;variant=GFM
url: https://github.com/nothings/stb
package-url: https://github.com/build2-packaging/stb/
email: sean+github@nothings.org
package-email: packaging@build2.org
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
bootstrap-build:
\
project = stb_vorbis

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Configurable header-only libraries are not importable.
#
h{*}: c.importable = false

test.target = $c.target

\
location: stb/stb_vorbis-1.22.0+1.tar.gz
sha256sum: 199e1fbe4b560becb9b977c97bfb3a34322e8e2127aa32d03628515d30866ef5
:
name: strong_type
version: 12.0.0+1
type: lib,binless
language: c++
summary: An additive strong typedef library for C++14/17/20
license: BSL-1.0
description:
\
# strong_type
An additive strong typedef library for C++14/17/20 using the
Boost Software License 1.0

[![CI Build Status](https://github.com/rollbear/strong_type/actions/workflows\
/ci.yml/badge.svg)](https://github.com/rollbear/strong_type/actions/workflows\
/ci.yml)
[![codecov](https://codecov.io/gh/rollbear/strong_type/branch/main/graph/badg\
e.svg?token=cS97dA6jRV)](https://codecov.io/gh/rollbear/strong_type)

* [Intro](#intro)
* [Modifiers](#modifiers)
* [Utilities](#utilities)
* [Writing a modifier](#writing_modifier)
* [Self test](#selftest)
* [Other libraries](#other)
* [Presentations](#presentations)

# <A name="intro"/>Intro

Very much inspired by [@foonathan's](https://twitter.com/foonathan)
[`type_safe`](https://github.com/foonathan/type_safe) library, but aim is
slightly different. Limit scope for type safety only. No runtime checks. Also
strive for a higher level abstraction of the needed functionality. The idea
is to suffer no runtime penalty, but to capture misuse at compile time
(for example accidentally subtracting from a handle, or swapping two\
 parameters
in a function call) while still being easy to use for inexperienced
programmers.

Example use:

```Cpp
#include <strong_type/strong_type.hpp>
using myint = strong::type<int, struct my_int_>;
```

`myint` is a very basic handle. You can initialize it. You can do
equal/not-equal comparison with other instances of the same type, and you can
access its underlying `int` instance with `value_of(variable)`.

To get the underlying type of a strong type, use
`typename strong::underlying_type<mytype>::type`, or the convenience alias
`strong::underlying_type_t<mytype>`. If `mytype` is not a `strong::type`,
they give `mytype`.

```Cpp
using otherint = strong::type<int, struct other_int_>;
```

`otherint` is a distinct type from `myint`. If a function takes an argument of
type `myint`, you can't pass it an instance of `otherint`, and vice-versa. You
also can't cross-assign, cross-create or cross-compare.

To access more functionality, you add modifiers. For example:

```Cpp
using ordered_int = strong::type<int, struct ordered_int_, strong::ordered>;
```

Type `ordered_int` now supports relational order comparisons, like `<`,
(provided the underlying type, int this case `int`, does.) Type `ordered_int`
can thus be used as key in `std::map`<> or `std::set<>`.

The header file `<strong_type/strong_type.hpp>` brings you all functionality.
There are more fine-grained headers available, which may speed up builds in
some situations.

A strong type can be used as an NTTP ([Non Type Template
Parameter](https://en.cppreference.com/w/cpp/language/template_parameters)),\
 if
the underlying type can be, for compilers and standards that support it.

# <A name="modifiers"/> Modifiers:

* <A name="affine_point"/>`strong::affine_point<D>` allows instances to be
  subtracted (yielding a `D`) or to add or subtract a `D` to an instance.
  See [Affine Space](https://en.wikipedia.org/wiki/Affine_space). Examples of
  one dimentional affine points are pointer (with `D` being `ptrdiff_t`,) or
  `std::time_point<>` (with `std::duration<>` as `D`.) An example of a
  multidimensional affine point is a coordinate (with a vector type for `D`.)
  `D` can be defaulted, using `strong::affine_point<>`, in which case the
  difference type shares the same tag.
  The difference type from a `strong::affine_point<D>` can be obtained using
  `type::difference`, regardless of whether `D` is explicit or
  defaulted.  It is natural that `D` is of a [`strong::difference`](#differen\
ce)
  type. This is a good name from a mathematical point of view, but perhaps a\
 bit
  too academic, and not well aligned with the other names.

  Available in `strong_type//affine_point.hpp`.


* <A name="arithmetic"/>`strong::arithmetic` allows addition, subtraction,
  multiplication, division and remainder of instances.

  [`std::numeric_limits<T>`](https://en.cppreference.com/w/cpp/types/numeric_\
limits)
  is specialized for types using the `strong::arithmetic` modifier.

  Available in `strong_type/arithmetic.hpp`.


* <A name="bicrementable"/>`strong::bicrementable`. Obviously a made up word
  for the occation. Implements both
  [`strong::incrementable`](#incrementable) and
  [`strong::decrementable`](#decrementable).

  Available in `strong_type/bicrementable.hpp`


* <A name="bitarithmetic"/>`strong::bitarithmetic` allows bitwise `&`, bitwise
  `|`, bitwise `^` and shift operations.

  Available in `strong_type/bitarithmetic.hpp`.


* <A name="boolean"/>`strong::boolean` provides
  `explicit operator bool() const`, providing the
  underlying type supports it.

  Available in `strong_type/boolean.hpp`.


* <A name="convertible_to"/>`strong::convertible_to<Ts...>` provides an
  `explicit operator Ts() const` for each type `Ts`, providing the underlying
  type supports it.

  Available in `strong_type/convertible_to.hpp`.


* <A name="decrementable"/>`strong::decrementable`. Provides
  [`operator--`](https://en.cppreference.com/w/cpp/language/operator_incdec)\
 for
  the strong type, using the operator of the underlying type.

  Available in `strong_type/incrementable.hpp`


* <A name="default_constructible"/>`strong::default_constructible`. The strong
  type is not default constructible by default. This modifier enables a\
 default
  constructor which uses a default constructor of the underlying type.

  Available in `strong_type/type.hpp`


* <A name="difference"/>`strong::difference` allows instances to be subtracted
  and added (yielding a `strong::difference`).

  Conditionally, if the underlying
  type supports it, `strong_difference` is ordered, may be divided (yielding
  the base type), or multiplied or divided with the base type, yielding\
 another
  `strong::difference`. Also, conditionally, the remainder
  after division of two differences yields the underlying type, and the
  remainder after division of a difference and the underlying type yields a
  difference.  A `strong::difference` is also [`strong::equality`](#equality).

  Available in `strong_type/difference.hpp`.


* <A name="equality"/>`strong::equality` provides operators `==` and `!=`. The
  strong type can be compared for equality or inequality.

  Available in `strong_type/equality.hpp`.


* <A name="equality_with"/>`strong::equality_with<Ts...>` provides operators
  `==` and `!=` between the  strong type and each of the types `Ts...`.
  Note! While `Ts` can include other strong types, it can not refer to the
  strong type being defined. Use [`strong::equality`](#equality) for that.

  Available in `strong_type/equality_with.hpp`.


* <A name="formattable"/>`strong::formattable` adds `std::format` and/or
  [`fmt::format`](https://fmt.dev/latest/index.html) capability, based on
  availability of the formatting library. This can further be controlled
  (globally) with the defines `STRONG_HAS_STD_FORMAT` respectively
  `STRONG_HAS_FMT_FORMAT`. With 0 to disable the support completly, and with 1
  to force the support, disable the auto detection.

  `fmt::format` allows formatting also types that are
  [`strong::ostreamable`](#ostreamable).

  Available in `strong_type/formattable.hpp`.


* <A name="hashable"/>`strong::hashable` allows `std::hash<>` on the type
  (forwards to the underlying type,) to allow use in `std::unordered_set<>`\
 and
  `std::unordered_map<>`.

  Available in `strong_type/hashable.hpp`.


* <A name="implicitly_convertible_to"/>`strong::implicitly_convertible_to<Ts.\
..>`
  provides an `operator Ts() const` for each type `Ts`, providing the\
 underlying
  type supports it.

  Available in `strong_type/implicitly_convertible_to.hpp`.


* <A name="incrementable"/>`strong::incrementable`. Provides
  [`operator++](https://en.cppreference.com/w/cpp/language/operator_incdec)\
 for
  the strong type, using the operator of the underlying type.

  Available in `strong_type/incrementable.hpp`


* <A name="indexed"/>`strong::indexed<D>` allows use of the subscript\
 operator[]
  on type `D`. This also allows member function `at(D)`, providing the
  underlying type supports it. A lame version `indexed<>` allows subscript on
  any type that works.

  Available in `strong_type/indexed.hpp`.


* <A name="iostreamable"/>`strong::iostreamable`. Both
  [`strong::istreamable`](#istreamable) and
  [`strong::ostreamable`](#ostreamable).

  Available in `strong_type/iostreamable.hpp`


* <A name="istreamable"/>`strong::istreamable`. Provides the default
  [`istream`](https://en.cppreference.com/w/cpp/io/basic_istream) extraction
  `operator>>` for the strong type, as handled by the underfying type. Provide
  your own operator istead if you prefer a custom istream extraction operator.

  Available in `strong_type/istreamable.hpp`


* <A name="iterator"/>`strong::iterator` adds functionality needed depending\
 on
  iterator category. If the iterator type is a `random_access_iterator`,
  the strong type is [`strong::indexed<>`](#indexed) and
  [`strong::affine_point<difference>`](#affine_point). It should be
  possible to specify the index type and affine_point type.

  The type trait
  [`std::iterator_traits`](https://en.cppreference.com/w/cpp/iterator/iterato\
r_traits)
  mirrors  the traits of the underlying iterator type.

  Available in `strong_type/iterator.hpp`


* <A name="ordered"/>`strong::ordered` provides operators '<', '<=', '>=' and
  '>'. The strong type offers the same ordering relatin as the underlying\
 type.

  Available in `strong_type/ordered.hpp`


* <A name="ordered_with"/>`strong::ordered_with<Ts...>` provides operators\
 '<',
  '<=', '>=' and '>' between the strong type and each of the types `Ts...`.
   Note! While `Ts` can include other strong types, it cannot refer to the\
 strong
  type being defined. Use [`strong::ordered`](#ordered) for that.

  Available in `strong_type/ordered_with.hpp`


* <A name="ostreamable"/>`strong::ostreamable`. Provides the default
  [`ostream`](https://en.cppreference.com/w/cpp/io/basic_ostream) insertion
  `operator<<` for the strong type, as handled by the underlying type. Provide
  your own operator instead if you prefer a custom  ostream insertion\
 operator.

  Available in `strong_type/ostreamable.hpp`


* <A name="partially_ordered"/>`strong::partially_ordered` provides operator
  '<=>' The strong type offers the same ordering relatin as the underlying\
 type.
  The result is [`std::partial_ordering`](https://en.cppreference.com/w/cpp/u\
tility/compare/partial_ordering).
  Note! This does not imply [´strong::equality´](#equality).

  Available in `strong_type/ordered.hpp`


* <A name="partially_ordered_with"/>`strong::partially_ordered_with<Ts...>`
  provides operator '<=>' between the strong type and each of the types\
 `Ts...`.
  Note! While `Ts` can include other strong types, it cannot refer to the\
 strong
  type being defined. Use [`strong::partially_ordered`](#partially_ordered)\
 for
  that. The result is [`std::partial_ordering`](https://en.cppreference.com/w\
/cpp/utility/compare/partial_ordering).
  Note! This does not imply [´strong::equality_with<Ts...>´](#equality_with).

  Available in `strong_type/ordered_with.hpp`


* <A name="pointer"/>`strong::pointer` allows `operator*` and `operator->`,\
 and
  comparisons with `nullptr` providing the underlying type supports it.

  Available in `strong_type/pointer.hpp`


* <A name="range"/>`strong::range` adds the functionality needed to iterate\
 over
  the elements. The [iterator types](#iterator) are using the same tag as\
 using
  in the range. Only implements types `iterator` and `const_iterator`, and\
 thus
  `.begin()`, `.end()`, `.cbegin()`, `.cend()`, `.begin() const` and
  `.end() const`.

  Available in `strong_type/range.hpp`


* <A name="regular"/>`strong::regular`. Same as [`semiregular`](#semiregular)
  and also equality comparable. A good default base for most types.

  Available in `strong_type/regular.hpp`


* <A name="scalable_with"/>`strong::scalable_with<Ts...>` Allows multiplying\
 and
  dividing the value with each type `Ts`, providing the underlying type\
 supports
  it. It also allows dividing instances of `scalable_with<>`, if the\
 underlying
  type supports it, and returns the first type in the list of `Ts...`.

  Available in `strong_type/scalable_with.hpp`


* <A name="semiregular"/>`strong::semiregular`. This gives you default
  constructible, move/copy constructible, move/copy assignable and swappable.
  A decent default for many types.

  Available in `strong_type/semiregular.hpp`.


* <A name="strongly_ordered"/>`strong::strongly_ordered` provides operator\
 '<=>'
  The strong type offers the same ordering relatin as the underlying type. The
  result is [`std::strong_ordering`](https://en.cppreference.com/w/cpp/utilit\
y/compare/strong_ordering).
  Note! This does not imply [´strong::equality<Ts...>´](#equality).

  Available in `strong_type/ordered.hpp`


* <A name="strongly_ordered_with"/>`strong::strongly_ordered_with<Ts...>`
  provides operator '<=>' between the strong type and each of the types\
 `Ts...`.
  Note! While `Ts` can include other strong types, it cannot refer to the\
 strong
  type being defined. Use [`strong::strongly_ordered`](#strongly_ordered) for
  that. The result is [`std::strong_ordering`](https://en.cppreference.com/w/\
cpp/utility/compare/strong_ordering)
  Note! This does not imply [´strong::equality_with<Ts...>´](#equality_with).

  Available in `strong_type/ordered_with.hpp`


* <A name="unique"/>`strong::unique`. Make the type move constructible and\
 move
  assignable but not copy constructible nor copy assignable.

  Available in `strong_type/unique.hpp`

* <A name="weakly_ordered"/>`strong::weakly_ordered` provides operator '<=>'
  The strong type offers the same ordering relatin as the underlying type. The
  result is [`std::weak_ordering`](https://en.cppreference.com/w/cpp/utility/\
compare/weak_ordering).
  Note! This does not imply [´strong::equality´](#equality).

  Available in `strong_type/ordered.hpp`


* <A name="weakly_ordered_with"/>`strong::weakly_ordered_with<Ts...>` provides
  operator '<=>' between the strong type and each of the types `Ts...`.
  Note! While `Ts` can include other strong types, it cannot refer to the\
 strong
  type being defined. Use [`strong::weakly_ordered`](#weakly_ordered) for
  that. The result is [`std::weak_ordering`](https://en.cppreference.com/w/cp\
p/utility/compare/weak_ordering)
  Note! This does not imply [´strong::equality_with<Ts...>´](#equality_with).

  Available in `strong_type/ordered_with.hpp`



# <A name="utilities"/> Utilities:

A number of small utilities are available directly in `strong_type/type.hpp`.

* `strong::type` provides a non-member `swap()` function as a friend, which
   swaps underlying values using.


* `strong::underlying_type<Type>` is `T` for `strong::type<T, Tag, Ms...>` and
   public descendants, and `Type` for other types.


* `strong::uninitialized` can be used to construct instances of\
 `strong::type<T...>`
  without initializing the value. This is only possible if the underlying type
  is [`trivially default constructible`](
  https://en.cppreference.com/w/cpp/language/default_constructor), for\
 example:
  ```C++
  void init(int*);
  void function() {
      strong::type<int, struct int_tag> x(strong::uninitialized);
      // x will have an unspecified value
      init(&value_of(x)); // hopefully the init() function assigns a value
  }
  ```

* `strong::type_is<type, modifier>`, a boolean constant type whith the value\
 of
  `strong::type_is_v<type, modifier>`.


* `strong::type_is_v<type, modifier>` is a constexpr predicate to test if a\
 type
  has a modifier. For variadic modifiers, like `strong::ordered_with<Ts...>`,
  it tests each of the types `Ts` individually. Example:

  ```C++
  using handle = strong::type<int, struct handle_, strong::regular>;

  static_assert(strong::type_is_v<handle, strong::equality>);
  static_assert(strong::type_is_v<handle, strong::regular>);

  using id = strong::type<int, struct id_, strong::ordered_with<int, long>>;

  static_assert(strong::type_is_v<id, strong::ordered_with<int, long>>);
  static_assert(strong::type_is_v<id, strong::ordered_with<long>>);
  static_assert(strong::type_is_v<id, strong::ordered_with<int>>);
  static_assert(strong::type_is_v<id, strong::ordered_with<>>);
  ```

  All `static_assert`s above pass.

# <A name="writing_modifier"/>Writing a modifier

A modifier is a nested structure. The outer type, a struct or class, is what
the user sees. Inside it is a struct/class template that is a
[CRTP](https://en.cppreference.com/w/cpp/language/crtp) mixin, and
it must be named `modifier`, and the type it will be instantiated with is the
complete strong type. A type
`using my_strong_type = strong::type<int, struct my_, my_modifier>` will\
 inherit
publically from `my_modifier::modifier<my_strong_type>`. This CRTP mixin
implements the functionality of the modifier.

As an example, let's make a modifier that uses one value from the value space
to mean 'has no value'. It is not uncommon in some low level code to see
and `int` being used, and the value `-1` to mean no value. We can call it
`optional<N>`, where `N` is the 'has no value' value, and the interface mimics
that of [`std::optional`](https://en.cppreference.com/w/cpp/utility/optional).

```C++
template <auto no_value>
struct optional
{
    template <typename T>
    struct modifier
    {
        // implementation here
    };
};
```

This can already be used, but it's not very useful yet:

```C++
using my_type = strong::type<int, struct tag_, optional<0>>;
static_assert(strong::type_is_v<my_type, optional<0>);
```

Let's add some functionality to the mixin. Since the strong type inherits
publically from the `modifier<>` template, any public member function declared
here becomes available from the strong type itself.

```C++
template <auto no_value>
struct optional
{
    template <typename T> // This is the strong type
    struct modifier
    {
        constexpr bool has_value() const noexcept
        {
            auto& self = static_cast<const T&>(*this);
            return value_of(self) != no_value;
        }
    };
};
```
Since the `modifier` mixin inherits from the strong type, it is always safe to
[`static_cast<>`](https://en.cppreference.com/w/cpp/language/static_cast) to\
 the
strong type.

It is now possible to query your strong type if it has a value or not.

```C++
using my_type = strong::type<int, struct tag_, optional<0>>;
static_assert(my_type{3}.has_value());
stacic_assert(! my_type{0}.has_value());
```

`std::optional<>` also has `operator*` to get the underlying value, without
checking if it's valid. Let's add that too.

```C++
template <auto no_value>
struct optional
{
    template <typename T> // This is the strong type
    struct modifier
    {
        constexpr bool has_value() const noexcept;
        constexpr strong::underlying_type_t<T>& operator*() noexcept
        {
            auto& self = static_cast<T&>(*this);
            return value_of(self);
        }
        constexpr const strong::underlying_type_t<T>& operator*() const\
 noexcept
        {
            auto& self = static_cast<const T&>(*this);
            return value_of(self);
        }
    };
};
```

If you want to move out of r-values, you need special overloads for that too,
which unfortunately makes the code quite repetitive. Writing the operators as
friend functions, taking the `T` as a parameter removes the need for the\
 casts.

```C++
template <auto no_value>
struct optional
{
    template <typename T> // This is the strong type
    struct modifier
    {
        constexpr bool has_value() const noexcept;
        friend constexpr decltype(auto) operator*(T& self) noexcept
        {
            return value_of(self);
        }
        friend constexpr decltype(auto) operator*(const T& self) noexcept
        {
            return value_of(self);
        }
        friend constexpr decltype(auto) operator*(T&& self) noexcept
        {
            return value_of(std::move(self));
        }
        friend constexpr decltype(auto) operator*(const T&& self) noexcept
        {
            return value_of(std::move(self));
        }
    };
};
```

`std::optional<>` also has member functions `.value()`, which returns the\
 value
if there is one, or throws.

```C++
template <auto no_value>
struct optional
{
    template <typename T> // This is the strong type
    struct modifier
    {
        constexpr bool has_value() const noexcept;
        constexpr friend decltype(auto) operator*(T& t) noexcept;
        constexpr friend decltype(auto) operator*(T&& t) noexcept;
        constexpr friend decltype(auto) operator*(const T& t) noexcept;
        constexpr friend decltype(auto) operator*(const T&& t) noexcept;
        strong::underlying_type_t<T>& value()
        {
            if (!has_value() {
                throw std::bad_optional_access();
            }
            auto& self = static_cast<cT&>(*this);
            return value_of(self);
        }
        const strong::underlying_type_t<T>& value() const
        {
            if (!has_value() {
                throw std::bad_optional_access();
            }
            auto& self = static_cast<cconst T&>(*this);
            return value_of(self);
        }
        // ... and more
    };
};
```

Unfortunately there is little that can be done to reduce the repetition. A
bit can be done by writing a static helper function template:

```C++
template <auto no_value>
struct optional
{
    template <typename T> // This is the strong type
    struct modifier
    {
        constexpr bool has_value() const noexcept;
        constexpr friend decltype(auto) operator*(T& t) noexcept;
        constexpr friend decltype(auto) operator*(T&& t) noexcept;
        constexpr friend decltype(auto) operator*(const T& t) noexcept;
        constexpr friend decltype(auto) operator*(const T&& t) noexcept;
        decltype(auto) value() &
        {
            return get_value(static_cast<T&>(*this));
        }
        decltype(auto) value() const &
        {
            return get_value(static_cast<const T&>(*this));
        }
        decltype(auto) value() &&
        {
            return get_value(static_cast<T&&>(*this));
        }
        decltype(auto) value() const &&
        {
            return get_value(static_cast<const T&&>(*this));
        }
    private:
        template <typename TT>
        static constexpr decltype(auto) get_value(TT&& self)
        {
            if (!self.has_value()) {
                throw std::bad_optional_access();
            }
            return value_of(std::forward<TT>(self));
        }
    };
};
```

Here's the full implementation:
```C++
template <auto no_value>
struct optional
{
    template <typename T>
    struct modifier
    {
        constexpr bool has_value() const noexcept
        {
            auto& self = static_cast<const T&>(*this);
            return value_of(self) != no_value;
        }
        friend constexpr decltype(auto) operator*(T&& self) noexcept
        {
            return value_of(std::move(self));
        }
        friend constexpr decltype(auto) operator*(const T&& self) noexcept
        {
            return value_of(std::move(self));
        }
        friend constexpr decltype(auto) operator*(T& self) noexcept
        {
            return value_of(self);
        }
        friend constexpr decltype(auto) operator*(const T& self) noexcept
        {
            return value_of(self);
        }
        constexpr decltype(auto) value() &
        {
            return get_value(static_cast<T&>(*this));
        }
        constexpr decltype(auto) value() const &
        {
            return get_value(static_cast<const T&>(*this));
        }
        constexpr decltype(auto) value() &&
        {
            return get_value(static_cast<T&&>(*this));
        }
        constexpr decltype(auto) value() const &&
        {
            return get_value(static_cast<const T&&>(*this));
        }
    private:
        template <typename TT>
        static constexpr decltype(auto) get_value(TT&& t)
        {
            if (!t.has_value()) {
                throw std::bad_optional_access();
            }
            return value_of(std::forward<TT>(t));
        }
    };
};
```

# <A name="selftest"/> Self test

To build the self-test program(s):

```bash
cmake <strong_type_dir> -DSTRONG_TYPE_UNIT_TEST=yes
cmake --build .
```

This will produce the test programs `self_test`, and conditionally also
`test_fmt8` and `test_fmt9`, depending on which version(s) of
[`{fmt}`](https://fmt.dev/latest/index.html)

N.B. Microsoft Visual Studio MSVC compiler < 19.22 does not handle `constexpr`
correctly. Those found to cause trouble are disabled for those versions.

## <A name="other"/> Other libraries:

| Library                                             | Author |
|-----------------------------------------------------|-------------------|
| [type_safe](https://github.com/foonathan/type_safe) | Jonathan Müller   |
| [NamedType](https://github.com/joboccara/NamedType) | Jonathan Boccara  |
| [strong_typedef](https://github.com/anthonywilliams/strong_typedef) |\
 Anthony Williams (justsoftwaresolutions) |

## <A name="presentations"/> Presentations about defining and using strong\
 types

|   |   |
|---|---|
| [![Strong Types for Strong Interfaces](https://img.youtube.com/vi/WVleZqzTw\
2k/mqdefault.jpg)](https://img.youtube.com/vi/WVleZqzTw2k/mqdefault.jpg) |\
 Jonathan Boccara from MeetingC++ 2017 |
| [![Strong Types in C++](https://img.youtube.com/vi/fWcnp7Bulc8/mqdefault.jp\
g)](https://youtu.be/fWcnp7Bulc8) | Barney Dellar from C++OnSea 2019 |
| [![Type Safe C++? - LOL! - ;-)](https://img.youtube.com/vi/SWHvNvY-PHw/mqde\
fault.jpg)](https://youtu.be/SWHvNvY-PHw) | Björn Fahller from ACCU 2018 |
| [![Curiously Coupled Types](https://img.youtube.com/vi/msi4WNQZyWs/mqdefaul\
t.jpg)](https://youtu.be/msi4WNQZyWs) | Adi Shavit & Björn Fahller from\
 NDC{Oslo} 2019 |

Discussions, pull-requests, flames are welcome.

[@bjorn_fahller](https://twitter.com/bjorn_fahller)

\
description-type: text/markdown;variant=GFM
url: https://github.com/rollbear/strong_type
package-url: https://github.com/build2-packaging/strong_type
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
tests: strong_type-tests == 12.0.0
bootstrap-build2:
\
project = strong_type

using version
using config
using test
using install
using dist

\
root-build2:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# For conditional test-dependencies
#
#config [bool] config.strong_type.develop ?= false

\
location: strong_type/strong_type-12.0.0+1.tar.gz
sha256sum: 5db6f111d1693afdc1bd1ff4495c097f0470f71c4b556bd4dcb6bb5c0ba2916d
:
name: strong_type-tests
version: 12.0.0+1
language: c++
project: strong_type
summary: An additive strong typedef library for C++14/17/20, tests
license: BSL-1.0
description:
\
# strong_type-tests

Just tests for strong_type lib.

\
description-type: text/markdown;variant=GFM
url: https://github.com/rollbear/strong_type
package-url: https://github.com/build2-packaging/strong_type
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: catch2 ^3.0.0
depends: fmt ^10.0.0
bootstrap-build2:
\
project = strong_type-tests

using version
using config
using test
using install
using dist

\
root-build2:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

exe{*}: test = true

\
location: strong_type/strong_type-tests-12.0.0+1.tar.gz
sha256sum: 979bbb653901a9b7925bb9297be0e388f21acbbe71396d8eaf8cf718421f0b1d
:
name: tl-expected
version: 1.0.0
project: tl
summary: C++11/14/17 std::expected with functional-style extensions
license: CC0 1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# expected
Single header implementation of `std::expected` with functional-style\
 extensions.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://travis-ci.org/TartanLlama/expecte\
d.png?branch=master)](https://travis-ci.org/TartanLlama/expected)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/expecte\
d)

Available on [Vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/tl-\
expected) and [Conan](https://github.com/yipdw/conan-tl-expected).

[`std::expected`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p03\
23r3.pdf) is proposed as the preferred way to represent object which will\
 either have an expected value, or an unexpected value giving information\
 about why something failed. Unfortunately, chaining together many\
 computations which may fail can be verbose, as error-checking code will be\
 mixed in with the actual programming logic. This implementation provides a\
 number of utilities to make coding with `expected` cleaner.

For example, instead of writing this code:

```cpp
std::expected<image,fail_reason> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return cropped;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return with_tie;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
       return with_sparkles;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```cpp
tl::expected<image,fail_reason> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::expected` as proposed in\
 [p0323r3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0323r3.pd\
f), but the following member functions are also defined. Explicit types are\
 for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::expected<std::size_t,std::error_code> s = exp_string.map(&std::strin\
g::size);`
- `map_error`: carries out some operation on the unexpected object if there\
 is one.
  * `my_error_code translate_error (std::error_code);`
  * `tl::expected<int,my_error_code> s = exp_int.map_error(translate_error);`
- `and_then`: like `map`, but for operations which return a `tl::expected`.
  * `tl::expected<ast, fail_reason> parse (const std::string& s);`
  * `tl::expected<ast, fail_reason> exp_ast = exp_string.and_then(parse);`
- `or_else`: calls some function if there is no value stored.
  * `exp.or_else([] { throw std::runtime_error{"oh no"}; });`

### Compiler support

Tested on:

- Linux
  * clang 6.0.1
  * clang 5.0.2
  * clang 4.0.1
  * clang 3.9
  * clang 3.8
  * clang 3.7
  * clang 3.6
  * clang 3.5
  * g++ 8.0.1  
  * g++ 7.3  
  * g++ 6.4
  * g++ 5.5  
  * g++ 4.9
  * g++ 4.8
- Windows
  * MSVC 2015
  * MSVC 2017

### Acknowledgements

Thanks to [Kévin Alexandre Boissonneault](https://github.com/KABoissonneault)\
 and [Björn Fahller](https://github.com/rollbear) for various bug fixes.

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `expected`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++ >= 11
tests: tl-expected-tests == 1.0.0
bootstrap-build:
\
project = tl-expected

using version
using config
using install
using dist
using test

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

\
location: tl/tl-expected-1.0.0.tar.gz
sha256sum: c1949b78accf36797e2fe3019e16abd9da8b9090938ebd38df837bb1286e08aa
:
name: tl-expected
version: 1.1.0+1
project: tl
summary: C++11/14/17 std::expected with functional-style extensions
license: CC0-1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# expected
Single header implementation of `std::expected` with functional-style\
 extensions.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://github.com/TartanLlama/expected/a\
ctions/workflows/cmake.yml/badge.svg)](https://github.com/TartanLlama/expecte\
d/actions/workflows/cmake.yml)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/expecte\
d)

Available on [Vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/tl-\
expected) and [Conan](https://github.com/yipdw/conan-tl-expected).

[`std::expected`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p03\
23r3.pdf) is proposed as the preferred way to represent object which will\
 either have an expected value, or an unexpected value giving information\
 about why something failed. Unfortunately, chaining together many\
 computations which may fail can be verbose, as error-checking code will be\
 mixed in with the actual programming logic. This implementation provides a\
 number of utilities to make coding with `expected` cleaner.

For example, instead of writing this code:

```cpp
std::expected<image,fail_reason> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return cropped;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return with_tie;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
       return with_sparkles;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```cpp
tl::expected<image,fail_reason> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::expected` as proposed in\
 [p0323r3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0323r3.pd\
f), but the following member functions are also defined. Explicit types are\
 for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::expected<std::size_t,std::error_code> s = exp_string.map(&std::strin\
g::size);`
- `map_error`: carries out some operation on the unexpected object if there\
 is one.
  * `my_error_code translate_error (std::error_code);`
  * `tl::expected<int,my_error_code> s = exp_int.map_error(translate_error);`
- `and_then`: like `map`, but for operations which return a `tl::expected`.
  * `tl::expected<ast, fail_reason> parse (const std::string& s);`
  * `tl::expected<ast, fail_reason> exp_ast = exp_string.and_then(parse);`
- `or_else`: calls some function if there is no value stored.
  * `exp.or_else([] { throw std::runtime_error{"oh no"}; });`

p0323r3 specifies calling `.error()` on an expected value, or using the `*`\
 or `->` operators on an unexpected value, to be undefined behaviour. In this\
 implementation it causes an assertion failure. The implementation of\
 assertions can be overridden by defining the macro `TL_ASSERT(boolean_condit\
ion)` before #including <tl/expected.hpp>; by default, `assert(boolean_condit\
ion)` from the `<cassert>` header is used. Note that correct code would not\
 rely on these assertions.

### Compiler support

Tested on:

- Linux
  * clang++ 3.5, 3.6, 3.7, 3.8, 3.9, 4, 5, 6, 7, 8, 9, 10, 11
  * g++ 4.8, 4.9, 5.5, 6.4, 7.5, 8, 9, 10 
- Windows
  * MSVC 2015, 2017, 2019, 2022

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `expected`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++ >= 11
tests: tl-expected-tests == 1.1.0
bootstrap-build:
\
project = tl-expected

using version
using config
using install
using dist
using test

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

\
location: tl/tl-expected-1.1.0+1.tar.gz
sha256sum: 1ecf4a359936f86f6ffbeb87d1909d32fa55f9a310fa133b2691d23555c0a934
:
name: tl-expected-tests
version: 1.0.0
project: tl
summary: C++11/14/17 std::optional with functional-style extensions and\
 reference support
license: CC0 1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# expected
Single header implementation of `std::expected` with functional-style\
 extensions.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://travis-ci.org/TartanLlama/expecte\
d.png?branch=master)](https://travis-ci.org/TartanLlama/expected)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/expecte\
d)

Available on [Vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/tl-\
expected) and [Conan](https://github.com/yipdw/conan-tl-expected).

[`std::expected`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p03\
23r3.pdf) is proposed as the preferred way to represent object which will\
 either have an expected value, or an unexpected value giving information\
 about why something failed. Unfortunately, chaining together many\
 computations which may fail can be verbose, as error-checking code will be\
 mixed in with the actual programming logic. This implementation provides a\
 number of utilities to make coding with `expected` cleaner.

For example, instead of writing this code:

```cpp
std::expected<image,fail_reason> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return cropped;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return with_tie;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
       return with_sparkles;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```cpp
tl::expected<image,fail_reason> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::expected` as proposed in\
 [p0323r3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0323r3.pd\
f), but the following member functions are also defined. Explicit types are\
 for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::expected<std::size_t,std::error_code> s = exp_string.map(&std::strin\
g::size);`
- `map_error`: carries out some operation on the unexpected object if there\
 is one.
  * `my_error_code translate_error (std::error_code);`
  * `tl::expected<int,my_error_code> s = exp_int.map_error(translate_error);`
- `and_then`: like `map`, but for operations which return a `tl::expected`.
  * `tl::expected<ast, fail_reason> parse (const std::string& s);`
  * `tl::expected<ast, fail_reason> exp_ast = exp_string.and_then(parse);`
- `or_else`: calls some function if there is no value stored.
  * `exp.or_else([] { throw std::runtime_error{"oh no"}; });`

### Compiler support

Tested on:

- Linux
  * clang 6.0.1
  * clang 5.0.2
  * clang 4.0.1
  * clang 3.9
  * clang 3.8
  * clang 3.7
  * clang 3.6
  * clang 3.5
  * g++ 8.0.1  
  * g++ 7.3  
  * g++ 6.4
  * g++ 5.5  
  * g++ 4.9
  * g++ 4.8
- Windows
  * MSVC 2015
  * MSVC 2017

### Acknowledgements

Thanks to [Kévin Alexandre Boissonneault](https://github.com/KABoissonneault)\
 and [Björn Fahller](https://github.com/rollbear) for various bug fixes.

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `expected`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: catch2 ^2.13.7
requires: c++ >= 11
bootstrap-build:
\
project = tl-expected-tests

using version
using config
using test
using install
using dist
using test

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# In this package, all executables are tests.
exe{*} : test = true

\
location: tl/tl-expected-tests-1.0.0.tar.gz
sha256sum: e6b1dad1749d0c68228f4a0f5e2eeaf57c4c536cb97f5e3b223645aee8ae23c6
:
name: tl-expected-tests
version: 1.1.0+1
project: tl
summary: C++11/14/17 std::optional with functional-style extensions and\
 reference support
license: CC0 1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# expected
Single header implementation of `std::expected` with functional-style\
 extensions.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://github.com/TartanLlama/expected/a\
ctions/workflows/cmake.yml/badge.svg)](https://github.com/TartanLlama/expecte\
d/actions/workflows/cmake.yml)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/expecte\
d)

Available on [Vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/tl-\
expected) and [Conan](https://github.com/yipdw/conan-tl-expected).

[`std::expected`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p03\
23r3.pdf) is proposed as the preferred way to represent object which will\
 either have an expected value, or an unexpected value giving information\
 about why something failed. Unfortunately, chaining together many\
 computations which may fail can be verbose, as error-checking code will be\
 mixed in with the actual programming logic. This implementation provides a\
 number of utilities to make coding with `expected` cleaner.

For example, instead of writing this code:

```cpp
std::expected<image,fail_reason> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return cropped;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return with_tie;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
       return with_sparkles;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```cpp
tl::expected<image,fail_reason> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::expected` as proposed in\
 [p0323r3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0323r3.pd\
f), but the following member functions are also defined. Explicit types are\
 for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::expected<std::size_t,std::error_code> s = exp_string.map(&std::strin\
g::size);`
- `map_error`: carries out some operation on the unexpected object if there\
 is one.
  * `my_error_code translate_error (std::error_code);`
  * `tl::expected<int,my_error_code> s = exp_int.map_error(translate_error);`
- `and_then`: like `map`, but for operations which return a `tl::expected`.
  * `tl::expected<ast, fail_reason> parse (const std::string& s);`
  * `tl::expected<ast, fail_reason> exp_ast = exp_string.and_then(parse);`
- `or_else`: calls some function if there is no value stored.
  * `exp.or_else([] { throw std::runtime_error{"oh no"}; });`

p0323r3 specifies calling `.error()` on an expected value, or using the `*`\
 or `->` operators on an unexpected value, to be undefined behaviour. In this\
 implementation it causes an assertion failure. The implementation of\
 assertions can be overridden by defining the macro `TL_ASSERT(boolean_condit\
ion)` before #including <tl/expected.hpp>; by default, `assert(boolean_condit\
ion)` from the `<cassert>` header is used. Note that correct code would not\
 rely on these assertions.

### Compiler support

Tested on:

- Linux
  * clang++ 3.5, 3.6, 3.7, 3.8, 3.9, 4, 5, 6, 7, 8, 9, 10, 11
  * g++ 4.8, 4.9, 5.5, 6.4, 7.5, 8, 9, 10 
- Windows
  * MSVC 2015, 2017, 2019, 2022

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `expected`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: catch2 ^2.13.7
requires: c++ >= 11
bootstrap-build:
\
project = tl-expected-tests

using version
using config
using test
using install
using dist
using test

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# In this package, all executables are tests.
exe{*} : test = true

\
location: tl/tl-expected-tests-1.1.0+1.tar.gz
sha256sum: 86361c94029fbede45cfba77d442099ab55999876e001480998078a71be4c2e3
:
name: tl-optional
version: 1.0.0
project: tl
summary: C++11/14/17 std::optional with functional-style extensions and\
 reference support
license: CC0 1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# optional

Single header implementation of `std::optional` with functional-style\
 extensions and support for references.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://travis-ci.org/TartanLlama/optiona\
l.png?branch=master)](https://travis-ci.org/TartanLlama/optional)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/optiona\
l)

`std::optional` is the preferred way to represent an object which may or may\
 not have a value. Unfortunately, chaining together many computations which\
 may or may not produce a value can be verbose, as empty-checking code will\
 be mixed in with the actual programming logic. This implementation provides\
 a number of utilities to make coding with `optional` cleaner.

For example, instead of writing this code:

```c++
std::optional<image> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return std::nullopt;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return std::nullopt;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
      return std::nullopt;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```c++
tl::optional<image> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::optional`, but the following member\
 functions are also defined. Explicit types are for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::optional<std::size_t> s = opt_string.map(&std::string::size);`
- `and_then`: like `map`, but for operations which return a `tl::optional`.
  * `tl::optional<int> stoi (const std::string& s);`
  * `tl::optional<int> i = opt_string.and_then(stoi);`
- `or_else`: calls some function if there is no value stored.
  * `opt.or_else([] { throw std::runtime_error{"oh no"}; });`
- `map_or`: carries out a `map` if there is a value, otherwise returns a\
 default value.
  * `tl::optional<std::size_t> s = opt_string.map_or(&std::string::size, 0);`
- `map_or_else`: carries out a `map` if there is a value, otherwise returns\
 the result of a given default function.
  * `std::size_t get_default();`
  * `tl::optional<std::size_t> s = opt_string.map_or_else(&std::string::size,\
 get_default);`
- `conjunction`: returns the argument if a value is stored in the optional,\
 otherwise an empty optional.
  * `tl::make_optional(42).conjunction(13); //13`
  * `tl::optional<int>{}.conjunction(13); //empty`
- `disjunction`: returns the argument if the optional is empty, otherwise the\
 current value.
  * `tl::make_optional(42).disjunction(13); //42`
  * `tl::optional<int>{}.disjunction(13); //13`
- `take`: returns the current value, leaving the optional empty.
  * `opt_string.take().map(&std::string::size); //opt_string now empty;`

In addition to those member functions, optional references are also supported:

```c++
int i = 42;
tl::optional<int&> o = i;
*o == 42; //true
i = 12;
*o == 12; //true
&*o == &i; //true
```

Assignment has rebind semantics rather than assign-through semantics:

```c++
int j = 8;
o = j;

&*o == &j; //true
```

### Compiler support

Tested on:


- Linux
  * clang 6.0.1
  * clang 5.0.2
  * clang 4.0.1
  * clang 3.9
  * clang 3.8
  * clang 3.7
  * clang 3.6
  * clang 3.5
  * g++ 8.0.1
  * g++ 7.3
  * g++ 6.4
  * g++ 5.5
  * g++ 4.9
  * g++ 4.8
- Windows
  * MSVC 2015
  * MSVC 2017

### Standards Proposal

This library also serves as an implementation of WG21 standards paper\
 [P0798R0: Monadic operations for std::optional](https://wg21.tartanllama.xyz\
/monadic-optional). This paper proposes adding `map`, `and_then`, and\
 `or_else` to `std::optional`.

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `optional`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++ >= 11
tests: tl-optional-tests == 1.0.0
bootstrap-build:
\
project = tl-optional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: tl/tl-optional-1.0.0.tar.gz
sha256sum: c53516bd333e81669e59aeff2f086a5d1fd8a9f36f3db07b18383dee985f1d05
:
name: tl-optional
version: 1.1.0+1
project: tl
summary: C++11/14/17 std::optional with functional-style extensions and\
 reference support
license: CC0-1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# optional

Single header implementation of `std::optional` with functional-style\
 extensions and support for references.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://travis-ci.org/TartanLlama/optiona\
l.png?branch=master)](https://travis-ci.org/TartanLlama/optional)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/optiona\
l)

`std::optional` is the preferred way to represent an object which may or may\
 not have a value. Unfortunately, chaining together many computations which\
 may or may not produce a value can be verbose, as empty-checking code will\
 be mixed in with the actual programming logic. This implementation provides\
 a number of utilities to make coding with `optional` cleaner.

For example, instead of writing this code:

```c++
std::optional<image> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return std::nullopt;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return std::nullopt;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
      return std::nullopt;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```c++
tl::optional<image> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::optional`, but the following member\
 functions are also defined. Explicit types are for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::optional<std::size_t> s = opt_string.map(&std::string::size);`
- `and_then`: like `map`, but for operations which return a `tl::optional`.
  * `tl::optional<int> stoi (const std::string& s);`
  * `tl::optional<int> i = opt_string.and_then(stoi);`
- `or_else`: calls some function if there is no value stored.
  * `opt.or_else([] { throw std::runtime_error{"oh no"}; });`
- `map_or`: carries out a `map` if there is a value, otherwise returns a\
 default value.
  * `tl::optional<std::size_t> s = opt_string.map_or(&std::string::size, 0);`
- `map_or_else`: carries out a `map` if there is a value, otherwise returns\
 the result of a given default function.
  * `std::size_t get_default();`
  * `tl::optional<std::size_t> s = opt_string.map_or_else(&std::string::size,\
 get_default);`
- `conjunction`: returns the argument if a value is stored in the optional,\
 otherwise an empty optional.
  * `tl::make_optional(42).conjunction(13); //13`
  * `tl::optional<int>{}.conjunction(13); //empty`
- `disjunction`: returns the argument if the optional is empty, otherwise the\
 current value.
  * `tl::make_optional(42).disjunction(13); //42`
  * `tl::optional<int>{}.disjunction(13); //13`
- `take`: returns the current value, leaving the optional empty.
  * `opt_string.take().map(&std::string::size); //opt_string now empty;`

In addition to those member functions, optional references are also supported:

```c++
int i = 42;
tl::optional<int&> o = i;
*o == 42; //true
i = 12;
*o == 12; //true
&*o == &i; //true
```

Assignment has rebind semantics rather than assign-through semantics:

```c++
int j = 8;
o = j;

&*o == &j; //true
```

### Compiler support

Tested on:


- Linux
  * clang 6.0.1
  * clang 5.0.2
  * clang 4.0.1
  * clang 3.9
  * clang 3.8
  * clang 3.7
  * clang 3.6
  * clang 3.5
  * g++ 8.0.1
  * g++ 7.3
  * g++ 6.4
  * g++ 5.5
  * g++ 4.9
  * g++ 4.8
- Windows
  * MSVC 2015
  * MSVC 2017

### Standards Proposal

This library also serves as an implementation of WG21 standards paper\
 [P0798R0: Monadic operations for std::optional](https://wg21.tartanllama.xyz\
/monadic-optional). This paper proposes adding `map`, `and_then`, and\
 `or_else` to `std::optional`.

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `optional`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: c++ >= 11
tests: tl-optional-tests == 1.1.0
bootstrap-build:
\
project = tl-optional

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: tl/tl-optional-1.1.0+1.tar.gz
sha256sum: d272e8b790ac502baee6f6901fb510cd779d144bfdb44de25ffc27ae6e7f35c8
:
name: tl-optional-tests
version: 1.0.0
project: tl
summary: C++11/14/17 std::optional with functional-style extensions and\
 reference support
license: CC0 1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# optional

Single header implementation of `std::optional` with functional-style\
 extensions and support for references.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://travis-ci.org/TartanLlama/optiona\
l.png?branch=master)](https://travis-ci.org/TartanLlama/optional)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/optiona\
l)

`std::optional` is the preferred way to represent an object which may or may\
 not have a value. Unfortunately, chaining together many computations which\
 may or may not produce a value can be verbose, as empty-checking code will\
 be mixed in with the actual programming logic. This implementation provides\
 a number of utilities to make coding with `optional` cleaner.

For example, instead of writing this code:

```c++
std::optional<image> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return std::nullopt;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return std::nullopt;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
      return std::nullopt;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```c++
tl::optional<image> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::optional`, but the following member\
 functions are also defined. Explicit types are for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::optional<std::size_t> s = opt_string.map(&std::string::size);`
- `and_then`: like `map`, but for operations which return a `tl::optional`.
  * `tl::optional<int> stoi (const std::string& s);`
  * `tl::optional<int> i = opt_string.and_then(stoi);`
- `or_else`: calls some function if there is no value stored.
  * `opt.or_else([] { throw std::runtime_error{"oh no"}; });`
- `map_or`: carries out a `map` if there is a value, otherwise returns a\
 default value.
  * `tl::optional<std::size_t> s = opt_string.map_or(&std::string::size, 0);`
- `map_or_else`: carries out a `map` if there is a value, otherwise returns\
 the result of a given default function.
  * `std::size_t get_default();`
  * `tl::optional<std::size_t> s = opt_string.map_or_else(&std::string::size,\
 get_default);`
- `conjunction`: returns the argument if a value is stored in the optional,\
 otherwise an empty optional.
  * `tl::make_optional(42).conjunction(13); //13`
  * `tl::optional<int>{}.conjunction(13); //empty`
- `disjunction`: returns the argument if the optional is empty, otherwise the\
 current value.
  * `tl::make_optional(42).disjunction(13); //42`
  * `tl::optional<int>{}.disjunction(13); //13`
- `take`: returns the current value, leaving the optional empty.
  * `opt_string.take().map(&std::string::size); //opt_string now empty;`

In addition to those member functions, optional references are also supported:

```c++
int i = 42;
tl::optional<int&> o = i;
*o == 42; //true
i = 12;
*o == 12; //true
&*o == &i; //true
```

Assignment has rebind semantics rather than assign-through semantics:

```c++
int j = 8;
o = j;

&*o == &j; //true
```

### Compiler support

Tested on:


- Linux
  * clang 6.0.1
  * clang 5.0.2
  * clang 4.0.1
  * clang 3.9
  * clang 3.8
  * clang 3.7
  * clang 3.6
  * clang 3.5
  * g++ 8.0.1
  * g++ 7.3
  * g++ 6.4
  * g++ 5.5
  * g++ 4.9
  * g++ 4.8
- Windows
  * MSVC 2015
  * MSVC 2017

### Standards Proposal

This library also serves as an implementation of WG21 standards paper\
 [P0798R0: Monadic operations for std::optional](https://wg21.tartanllama.xyz\
/monadic-optional). This paper proposes adding `map`, `and_then`, and\
 `or_else` to `std::optional`.

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `optional`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: catch2 ^2.13.7
requires: c++ >= 11
bootstrap-build:
\
project = tl-optional-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# In this package, all executables are tests.
exe{*} : test = true

\
location: tl/tl-optional-tests-1.0.0.tar.gz
sha256sum: 4bb43f8b73ba114753f4594be4c1b85943f5d555343a371e6d4ee55dc0bbdda5
:
name: tl-optional-tests
version: 1.1.0+1
project: tl
summary: C++11/14/17 std::optional with functional-style extensions and\
 reference support
license: CC0 1.0 Universal; Creative Commons Zero v1.0 Universal
description:
\
# optional

Single header implementation of `std::optional` with functional-style\
 extensions and support for references.

[![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?vers\
ion=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest)
Clang + GCC: [![Linux Build Status](https://travis-ci.org/TartanLlama/optiona\
l.png?branch=master)](https://travis-ci.org/TartanLlama/optional)
MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5\
x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/optiona\
l)

`std::optional` is the preferred way to represent an object which may or may\
 not have a value. Unfortunately, chaining together many computations which\
 may or may not produce a value can be verbose, as empty-checking code will\
 be mixed in with the actual programming logic. This implementation provides\
 a number of utilities to make coding with `optional` cleaner.

For example, instead of writing this code:

```c++
std::optional<image> get_cute_cat (const image& img) {
    auto cropped = crop_to_cat(img);
    if (!cropped) {
      return std::nullopt;
    }

    auto with_tie = add_bow_tie(*cropped);
    if (!with_tie) {
      return std::nullopt;
    }

    auto with_sparkles = make_eyes_sparkle(*with_tie);
    if (!with_sparkles) {
      return std::nullopt;
    }

    return add_rainbow(make_smaller(*with_sparkles));
}
```

You can do this:

```c++
tl::optional<image> get_cute_cat (const image& img) {
    return crop_to_cat(img)
           .and_then(add_bow_tie)
           .and_then(make_eyes_sparkle)
           .map(make_smaller)
           .map(add_rainbow);
}
```

The interface is the same as `std::optional`, but the following member\
 functions are also defined. Explicit types are for clarity.

- `map`: carries out some operation on the stored object if there is one.
  * `tl::optional<std::size_t> s = opt_string.map(&std::string::size);`
- `and_then`: like `map`, but for operations which return a `tl::optional`.
  * `tl::optional<int> stoi (const std::string& s);`
  * `tl::optional<int> i = opt_string.and_then(stoi);`
- `or_else`: calls some function if there is no value stored.
  * `opt.or_else([] { throw std::runtime_error{"oh no"}; });`
- `map_or`: carries out a `map` if there is a value, otherwise returns a\
 default value.
  * `tl::optional<std::size_t> s = opt_string.map_or(&std::string::size, 0);`
- `map_or_else`: carries out a `map` if there is a value, otherwise returns\
 the result of a given default function.
  * `std::size_t get_default();`
  * `tl::optional<std::size_t> s = opt_string.map_or_else(&std::string::size,\
 get_default);`
- `conjunction`: returns the argument if a value is stored in the optional,\
 otherwise an empty optional.
  * `tl::make_optional(42).conjunction(13); //13`
  * `tl::optional<int>{}.conjunction(13); //empty`
- `disjunction`: returns the argument if the optional is empty, otherwise the\
 current value.
  * `tl::make_optional(42).disjunction(13); //42`
  * `tl::optional<int>{}.disjunction(13); //13`
- `take`: returns the current value, leaving the optional empty.
  * `opt_string.take().map(&std::string::size); //opt_string now empty;`

In addition to those member functions, optional references are also supported:

```c++
int i = 42;
tl::optional<int&> o = i;
*o == 42; //true
i = 12;
*o == 12; //true
&*o == &i; //true
```

Assignment has rebind semantics rather than assign-through semantics:

```c++
int j = 8;
o = j;

&*o == &j; //true
```

### Compiler support

Tested on:


- Linux
  * clang 6.0.1
  * clang 5.0.2
  * clang 4.0.1
  * clang 3.9
  * clang 3.8
  * clang 3.7
  * clang 3.6
  * clang 3.5
  * g++ 8.0.1
  * g++ 7.3
  * g++ 6.4
  * g++ 5.5
  * g++ 4.9
  * g++ 4.8
- Windows
  * MSVC 2015
  * MSVC 2017

### Standards Proposal

This library also serves as an implementation of WG21 standards paper\
 [P0798R0: Monadic operations for std::optional](https://wg21.tartanllama.xyz\
/monadic-optional). This paper proposes adding `map`, `and_then`, and\
 `or_else` to `std::optional`.

----------

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)]("http://creativec\
ommons.org/publicdomain/zero/1.0/")

To the extent possible under law, [Sy Brand](https://twitter.com/TartanLlama)\
 has waived all copyright and related or neighboring rights to the `optional`\
 library. This work is published from: United Kingdom.

\
description-type: text/markdown;variant=GFM
doc-url: https://tl.tartanllama.xyz/en/latest/
package-url: https://github.com/build2-packaging/build2-tl
package-email: wmbat-dev@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: catch2 ^2.13.7
requires: c++ >= 11
bootstrap-build:
\
project = tl-optional-tests

using version
using config
using test
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# In this package, all executables are tests.
exe{*} : test = true

\
location: tl/tl-optional-tests-1.1.0+1.tar.gz
sha256sum: 06d1ea743b9d3e48571e4fb550c8dcded2f6ebd5ff135271c69d8da8376f8409
:
name: uvw
version: 2.10.0+2
summary: Header-only, event based, tiny and easy to use libuv wrapper in\
 modern C++ - now available as also shared/static library!
license: MIT
description:
\
![uvw - libuv wrapper in modern C++](https://user-images.githubusercontent.co\
m/1812216/46069406-c977a600-c17b-11e8-9a47-9bba6f412c57.png)

<!--
@cond TURN_OFF_DOXYGEN
-->
[![Build Status](https://github.com/skypjack/uvw/workflows/build/badge.svg)](\
https://github.com/skypjack/uvw/actions)
[![Coverage](https://codecov.io/gh/skypjack/uvw/branch/master/graph/badge.svg\
)](https://codecov.io/gh/skypjack/uvw)
[![Documentation](https://img.shields.io/badge/docs-docsforge-blue)](http://u\
vw.docsforge.com/)
[![Download](https://api.bintray.com/packages/skypjack/conan/uvw%3Askypjack/i\
mages/download.svg)](https://bintray.com/skypjack/conan/uvw%3Askypjack/_lates\
tVersion)
[![Gitter chat](https://badges.gitter.im/skypjack/uvw.png)](https://gitter.im\
/skypjack/uvw)
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www\
.paypal.me/skypjack)

Do you have a **question** that doesn't require you to open an issue? Join the
[gitter channel](https://gitter.im/skypjack/uvw).<br/>
If you use `uvw` and you want to say thanks or support the project, please
**consider becoming a
[sponsor](https://github.com/users/skypjack/sponsorship)**.<br/>
You can help me make the difference.
[Many thanks](https://skypjack.github.io/sponsorship/) to those who supported\
 me
and still support me today.
<!--
@endcond TURN_OFF_DOXYGEN
-->

# Introduction

`uvw` started as a header-only, event based, tiny and easy to use wrapper for
[`libuv`](https://github.com/libuv/libuv) written in modern C++.<br/>
Now it's finally available also as a compilable static library.

The basic idea is to hide completely the *C-ish* interface of `libuv` behind a
graceful C++ API. Currently, no `uv_*_t` data structure is actually exposed by
the library.<br/>
Note that `uvw` stays true to the API of `libuv` and it doesn't add anything\
 to
its interface. For the same reasons, users of the library must follow the same
rules which are used with `libuv`.<br/>
As an example, a *handle* should be initialized before any other operation and
closed once it is no longer in use.

## Code Example

```cpp
#include <uvw.hpp>
#include <memory>

void listen(uvw::Loop &loop) {
    std::shared_ptr<uvw::TCPHandle> tcp = loop.resource<uvw::TCPHandle>();

    tcp->once<uvw::ListenEvent>([](const uvw::ListenEvent &, uvw::TCPHandle\
 &srv) {
        std::shared_ptr<uvw::TCPHandle> client = srv.loop().resource<uvw::TCP\
Handle>();

        client->on<uvw::CloseEvent>([ptr = srv.shared_from_this()](const\
 uvw::CloseEvent &, uvw::TCPHandle &) { ptr->close(); });
        client->on<uvw::EndEvent>([](const uvw::EndEvent &, uvw::TCPHandle\
 &client) { client.close(); });

        srv.accept(*client);
        client->read();
    });

    tcp->bind("127.0.0.1", 4242);
    tcp->listen();
}

void conn(uvw::Loop &loop) {
    auto tcp = loop.resource<uvw::TCPHandle>();

    tcp->on<uvw::ErrorEvent>([](const uvw::ErrorEvent &, uvw::TCPHandle &) {\
 /* handle errors */ });

    tcp->once<uvw::ConnectEvent>([](const uvw::ConnectEvent &, uvw::TCPHandle\
 &tcp) {
        auto dataWrite = std::unique_ptr<char[]>(new char[2]{ 'b', 'c' });
        tcp.write(std::move(dataWrite), 2);
        tcp.close();
    });

    tcp->connect(std::string{"127.0.0.1"}, 4242);
}

int main() {
    auto loop = uvw::Loop::getDefault();
    listen(*loop);
    conn(*loop);
    loop->run();
}
```

## Motivation

The main reason for which `uvw` has been written is the fact that there does\
 not
exist a valid `libuv` wrapper in C++. That's all.

# Build Instructions

## Requirements

To be able to use `uvw`, users must provide the following system-wide tools:

* A full-featured compiler that supports at least C++17.
* `libuv` (which version depends on the tag of `uvw` in use).

The requirements below are mandatory to compile the tests and to extract the
documentation:

* CMake version 3.13 or later.
* Doxygen version 1.8 or later.

Note that `libuv` is part of the dependencies of the project and may be cloned
by `CMake` in some cases (see below for further details).<br/>
Because of that, users don't have to install it to run the tests or when `uvw`
libraries are compiled through `CMake`.

## Library

`uvw` is a dual-mode library. It can be used in its header-only form or as a
compiled static library.<br/>
The following sections describe what to do in both cases to get `uvw` up and
runningin your own project.

### Header-only

To use `uvw` as a header-only library, all is needed is to include the\
 `uvw.hpp`
header or one of the other `uvw/*.hpp` files.<br/>
It's a matter of adding the following line at the top of a file:

```cpp
#include <uvw.hpp>
```

Then pass the proper `-I` argument to the compiler to add the `src` directory\
 to
the include paths.<br/>
Note that users are required to correctly setup the include directories and
libraries search paths for `libuv` in this case.

When used through `CMake`, the `uvw::uvw` target is exported for convenience.

### Static

To use `uvw` as a compiled library, set the `BUILD_UVW_LIBS` options in cmake
before including the project.<br/>
This option triggers the generation of a targets named
`uvw::uvw-static`. The matching version of `libuv` is also
compiled and exported as `uv::uv-static` for convenience.

In case you don't use or don't want to use `CMake`, you can still compile all
`.cpp` files and include all `.h` files to get the job done. In this case,\
 users
are required to correctly setup the include directories and libraries search
paths for `libuv`.

## Versioning

Starting with tag _v1.12.0_ of `libuv`, `uvw` follows the
[semantic versioning](http://semver.org/) scheme.<br/>
The problem is that any version of `uvw` also requires to track explicitly the
version of `libuv` to which it is bound.<br/>
Because of that, the latter wil be appended to the version of `uvw`. As an
example:

    vU.V.W_libuv-vX.Y

In particular, the following applies:

* _U.V.W_ are major, minor and patch versions of `uvw`.
* _X.Y_ is the version of `libuv` to which to refer (where any patch version\
 is
  valid).

In other terms, tags will look like this from now on:

    v1.0.0_libuv-v1.12

Branch `master` of `uvw` will be a work in progress branch that follows branch
_v1.x_ of `libuv` (at least as long as it remains their _master_ branch).<br/>

## Documentation

The documentation is based on
[`doxygen`](http://www.stack.nl/~dimitri/doxygen/). To build it:

* `$ cd build`
* `$ cmake ..`
* `$ make docs`

The API reference will be created in HTML format within the directory
`build/docs/html`.<br/>
To navigate it with your favorite browser:

* `$ cd build`
* `$ your_favorite_browser docs/html/index.html`

The same version is also available [online](https://skypjack.github.io/uvw/)
for the latest release, that is the last stable tag. If you are looking for
something more pleasing to the eye, consider reading the nice-looking version
available on [docsforge](https://uvw.docsforge.com/): same documentation, much
more pleasant to read.

### Note

The documentation is mostly inspired by the official
[libuv API documentation](http://docs.libuv.org/en/v1.x/) for obvious
reasons.

## Tests

To compile and run the tests, `uvw` requires `libuv` and `googletest`.<br/>
`CMake` will download and compile both the libraries before compiling anything
else.

To build the tests:

* `$ cd build`
* `$ cmake .. -DBUILD_TESTING=ON`
* `$ make`
* `$ ctest -j4 -R uvw`

Omit `-R uvw` if you also want to test `libuv` and other dependencies.

# Crash Course

## Vademecum

There is only one rule when using `uvw`: always initialize the resources and
terminate them.

Resources belong mainly to two families: _handles_ and _requests_.<br/>
Handles represent long-lived objects capable of performing certain operations
while active.<br/>
Requests represent (typically) short-lived operations performed either over a
handle or standalone.

The following sections will explain in short what it means to initialize and
terminate these kinds of resources.<br/>
For more details, please refer to the
[online documentation](https://skypjack.github.io/uvw/).

## Handles

Initialization is usually performed under the hood and can be even passed\
 over,
as far as handles are created using the `Loop::resource` member function.<br/>
On the other side, handles keep themselves alive until one explicitly closes
them. Because of that, memory usage will grow if users simply forget about a
handle.<br/>
Therefore the rule quickly becomes *always close your handles*. It's as simple
as calling the `close` member function on them.

## Requests

Usually initializing a request object is not required. Anyway, the recommended
way to create a request is still through the `Loop::resource` member
function.<br/>
Requests will keep themselves alive as long as they are bound to unfinished
underlying activities. This means that users don't have to discard a
request explicitly .<br/>
Therefore the rule quickly becomes *feel free to make a request and forget\
 about
it*. It's as simple as calling a member function on them.

## The Loop and the Resource

The first thing to do to use `uvw` is to create a loop. In case the default\
 one
is enough, it's easy as doing this:

```cpp
auto loop = uvw::Loop::getDefault();
```

Note that loop objects don't require being closed explicitly, even if they\
 offer
the `close` member function in case a user wants to do that.<br/>
Loops can be started using the `run` member function. The two calls below are
equivalent:

```cpp
loop->run();
loop->run<uvw::Loop::Mode::DEFAULT>();
```

Available modes are: `DEFAULT`, `ONCE`, `NOWAIT`. Please refer to the
documentation of `libuv` for further details.

In order to create a resource and to bind it to the given loop, just do the
following:

```cpp
auto tcp = loop->resource<uvw::TCPHandle>();
```

The line above will create and initialize a tcp handle, then a shared pointer\
 to
that resource will be returned.<br/>
Users should check if pointers have been correctly initialized: in case of
errors, they won't be.<br/>
Another way to create a resource is:

```cpp
auto tcp = TCPHandle::create(loop);
tcp->init();
```

Pretty annoying indeed. Using a loop is the recommended approach.

The resources also accept arbitrary user-data that won't be touched in any
case.<br/>
Users can set and get them through the `data` member function as it follows:

```cpp
resource->data(std::make_shared<int>(42));
std::shared_ptr<void> data = resource->data();
```

Resources expect a `std::shared_pointer<void>` and return it, therefore any\
 kind
of data is welcome.<br/>
Users can explicitly specify a type other than `void` when calling the `data`
member function:

```cpp
std::shared_ptr<int> data = resource->data<int>();
```

Remember from the previous section that a handle will keep itself alive until
one invokes the `close` member function on it.<br/>
To know what are the handles that are still alive and bound to a given loop,
there exists the `walk` member function. It returns handles with their types.
Therefore, the use of `Overloaded` is recommended to be able to intercept all
types of interest:

```cpp
handle.loop().walk(uvw::Overloaded{
    [](uvw::TimerHandle &h){ /* application code for timers here */ },
    [](auto &&){ /* ignore all other types */ }
});
```

This function can also be used for a completely generic approach. For example,
all the pending handles can be closed easily as it follows:

```cpp
loop->walk([](auto &&h){ h.close(); });
```

No need to keep track of them.

## The event-based approach

`uvw` offers an event-based approach, so resources are small event emitters
to which listeners can be attached.<br/>
Attaching a listener to a resource is the recommended way to be notified about
changes.<br/>
Listeners must be callable objects of type `void(EventType &, ResourceType\
 &)`,
where:

* `EventType` is the type of the event for which they have been designed.
* `ResourceType` is the type of the resource that has originated the event.

It means that the following function types are all valid:

* `void(EventType &, ResourceType &)`
* `void(const EventType &, ResourceType &)`
* `void(EventType &, const ResourceType &)`
* `void(const EventType &, const ResourceType &)`

Please note that there is no need to keep around references to the resources:
they will pass themselves as an argument whenever an event is published.

There exist two methods to attach a listener to a resource:

* `resource.once<EventType>(listener)`: the listener will be automatically
  removed after the first event of the given type.
* `resource.on<EventType>(listener)`: to be used for long-running listeners.

Both of them return an object of type `ResourceType::Connection` (as an\
 example,
`TCPHandle::Connection`).<br/>
A connection object can be used later as an argument to the `erase` member
function of the resource to remove the listener.<br/>
There exists also the `clear` member function to drop all the listeners at\
 once.
Note that `clear` should only be invoked on non-active handles. The handles
exploit the same event mechanism made available to users to satisfy pending
requests. Invoking `clear` on an active handle, for example with requests\
 still
in progress, risks leading to memory leaks or unexpected behavior.

Almost all the resources emit `ErrorEvent` in case of errors.<br/>
All the other events are specific for the given resource and documented in the
API reference.

The code below shows how to create a simple tcp server using `uvw`:

```cpp
auto loop = uvw::Loop::getDefault();
auto tcp = loop->resource<uvw::TCPHandle>();

tcp->on<uvw::ErrorEvent>([](const uvw::ErrorEvent &, uvw::TCPHandle &) { /*\
 something went wrong */ });

tcp->on<uvw::ListenEvent>([](const uvw::ListenEvent &, uvw::TCPHandle &srv) {
    std::shared_ptr<uvw::TCPHandle> client = srv.loop().resource<uvw::TCPHand\
le>();
    client->once<uvw::EndEvent>([](const uvw::EndEvent &, uvw::TCPHandle\
 &client) { client.close(); });
    client->on<uvw::DataEvent>([](const uvw::DataEvent &, uvw::TCPHandle &) {\
 /* data received */ });
    srv.accept(*client);
    client->read();
});

tcp->bind("127.0.0.1", 4242);
tcp->listen();
```

Note also that `uvw::TCPHandle` already supports _IPv6_ out-of-the-box. The
statement above is equivalent to `tcp->bind<uvw::IPv4>("127.0.0.1",\
 4242)`.<br/>
It's sufficient to explicitly specify `uvw::IPv6` as the underlying protocol\
 to
use it.

The API reference is the recommended documentation for further details about
resources and their methods.

## Going raw

In case users need to use functionalities not wrapped yet by `uvw` or if they
want to get the underlying data structures as defined by `libuv` for some\
 other
reasons, almost all the classes in `uvw` give direct access to them.<br/>
Please, note that this functions should not be used directly unless users know
exactly what they are doing and what are the risks. Going raw is dangerous,
mainly because the lifetime management of a loop, a handle or a request is
completely controlled by the library and working around it could quickly break
things.

That being said, _going raw_ is a matter of using the `raw` member functions:

```cpp
auto loop = uvw::Loop::getDefault();
auto tcp = loop->resource<uvw::TCPHandle>();

uv_loop_t *raw = loop->raw();
uv_tcp_t *handle = tcp->raw();
```

Go the raw way at your own risk, but do not expect any support in case of\
 bugs.

# Contributors

If you want to contribute, please send patches as pull requests against the
branch master.<br/>
Check the
[contributors list](https://github.com/skypjack/uvw/blob/master/AUTHORS) to\
 see
who has partecipated so far.

# License

Code and documentation Copyright (c) 2016-2021 Michele Caini.<br/>
Logo Copyright (c) 2018-2021 Richard Caseres.

Code released under
[the MIT license](https://github.com/skypjack/uvw/blob/master/LICENSE).
Documentation released under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).<br/>
Logo released under
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).

<!--
@cond TURN_OFF_DOXYGEN
-->
# Support

If you want to support this project, you can
[offer me](https://github.com/users/skypjack/sponsorship) an espresso.<br/>
If you find that it's not enough, feel free to
[help me](https://www.paypal.me/skypjack) the way you prefer.
<!--
@endcond TURN_OFF_DOXYGEN
-->

\
description-type: text/markdown;variant=GFM
url: https://github.com/skypjack/uvw
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: libuv ~1.42.0
bootstrap-build:
\
project = uvw

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

\
location: uvw/uvw-2.10.0+2.tar.gz
sha256sum: 74ebd439345ef21b5a0f5a289eb087a1090cfee866e4a3ab35cafc74918a0808
:
name: Vulkan-Headers
version: 1.2.185
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.185.tar.gz
sha256sum: 5a3779f3d7b27d259b6bd860f606a501a471f05d36d8351c5cb14f9b267d8f09
:
name: Vulkan-Headers
version: 1.2.186
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.186.tar.gz
sha256sum: 7f9f1adfb520e73c086c5b3cf4589f8db174b73d9f31fbe90427a8e199da4e98
:
name: Vulkan-Headers
version: 1.2.187
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.187.tar.gz
sha256sum: 02d2834196054e0404b2d5071b4b829bc07a138045fceadfbfa717a895d3ffa6
:
name: Vulkan-Headers
version: 1.2.188
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.188.tar.gz
sha256sum: 6cdd172dcf93652963ae5324d4b5d2b6a62d7946d54dc3aad594e0f07c8ec9ca
:
name: Vulkan-Headers
version: 1.2.189
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.189.tar.gz
sha256sum: 0fa09d6456941e0a4334dcdabbc9f050bd62de82cb8f3c80c4c1b789deed1b44
:
name: Vulkan-Headers
version: 1.2.190
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.190.tar.gz
sha256sum: b3494fe17629ca859565a310c5cb416e2636c4f2d61db91cea7d88165cefbdc8
:
name: Vulkan-Headers
version: 1.2.191
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.191.tar.gz
sha256sum: 0c3a21b945363df7d3f5d115b5d75eda9a7e60b3c507d916912579af88866d2d
:
name: Vulkan-Headers
version: 1.2.192
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.192.tar.gz
sha256sum: 55a82ca01450f94d5011cc603f1690fbd3888e8136ed2a90a92638c66f007746
:
name: Vulkan-Headers
version: 1.2.193
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.193.tar.gz
sha256sum: 17bfe14a21ed8aedfd79453822f5b421f44bf40a0b36078435db5b60c3af3c26
:
name: Vulkan-Headers
version: 1.2.194
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.194.tar.gz
sha256sum: 2a14aa43f63fd62369fe57bf4f4bc10a76ec3e4c44fa7c5bd39c14b9e6a4669c
:
name: Vulkan-Headers
version: 1.2.195
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.195.tar.gz
sha256sum: dc9a5ce2a1cacddc40210a33228ea87e40738fbf09904bd070dd32fb0a205de4
:
name: Vulkan-Headers
version: 1.2.196
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.196.tar.gz
sha256sum: 83a65fb4901314e5606fb28640780d160be2ee4fdc3f598a605c0ac4e18f0eaf
:
name: Vulkan-Headers
version: 1.2.197
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.197.tar.gz
sha256sum: 0767ffe6a3e7120ef86c0dfbf13ed16015d8b2ecb36d02bf30898a4f0168fdfe
:
name: Vulkan-Headers
version: 1.2.198
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.2.198.tar.gz
sha256sum: 5b1762ad22855b6f3d0235b475cc61773c437a43f5ff71f790fcb82aab643c75
:
name: Vulkan-Headers
version: 1.3.204
project: Vulkan-Headers
summary: Vulkan-Headers C library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.3.204.tar.gz
sha256sum: e2c6a9cd7d3719eebc4e9a7d7b93c342248f623017544043601228136cf68286
:
name: Vulkan-Headers
version: 1.3.211
project: Vulkan-Headers
summary: The C headers for the Vulkan graphics API
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.3.211.tar.gz
sha256sum: 89def1c8972e1225a9529d13b8094434fa560ccbf193836e86f81df55e23d27c
:
name: Vulkan-Headers
version: 1.3.216
project: Vulkan-Headers
summary: The C headers for the Vulkan graphics API
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/video.xml
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = Vulkan-Headers

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# Assume headers are importable unless stated otherwise.
#
h{*}: c.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: Vulkan-Headers/Vulkan-Headers-1.3.216.tar.gz
sha256sum: 43edac3de1eae5a2f0b9e8ad14580560bc3236d7755f7766ba6353719f6aa859
:
name: Vulkan-Hpp
version: 1.2.185
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.185
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.185.tar.gz
sha256sum: 5d1b1ceac13de674e492bb6f9ac7f6b93f2e97ac5261d36e22fd061e1e19429e
:
name: Vulkan-Hpp
version: 1.2.186
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.186
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.186.tar.gz
sha256sum: fccb230bcabfec4b86782b676574f3d0b906ef278e2c159ce84075ceecc6ebf5
:
name: Vulkan-Hpp
version: 1.2.187
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.187
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.187.tar.gz
sha256sum: 569c6f9a952ca2afa2b708b4019900e0c4f72bf0dbae5d37d4d9ce5b027ced36
:
name: Vulkan-Hpp
version: 1.2.188
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.188
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.188.tar.gz
sha256sum: c1b856d5ffaa60a1188e93f90343f885f2c4d7b6a00e462d8f3c93cd870752dc
:
name: Vulkan-Hpp
version: 1.2.189
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.189
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.189.tar.gz
sha256sum: c281a7e6e70c7b158e01f00b892e8339b7da96558a768a7ff16e3f816988371b
:
name: Vulkan-Hpp
version: 1.2.190
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.190
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.190.tar.gz
sha256sum: 0a8347a6f86be0670e7fa2ceb0e102785a730c5fd97cbccc7ea12299ef329267
:
name: Vulkan-Hpp
version: 1.2.191
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.191
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.191.tar.gz
sha256sum: d172923683dc3dfe68f6eb40c027693daa106cbba4a1b1d29ba514eb0f98dc0e
:
name: Vulkan-Hpp
version: 1.2.192
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.192
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.192.tar.gz
sha256sum: b1eb6ffe06a10ce5f811f5ad24e21d50a327be8002cb839c0951ad2690c99441
:
name: Vulkan-Hpp
version: 1.2.193
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.193
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.193.tar.gz
sha256sum: 94f2036e752ead5637652653e232ace41245ce982ba8d8ad128f85b654b9afaf
:
name: Vulkan-Hpp
version: 1.2.194
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.194
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.194.tar.gz
sha256sum: 531721233ed051bc1e3685ce26ee311d041237970b966666e7cf727d4c64ccee
:
name: Vulkan-Hpp
version: 1.2.195
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.195
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.195.tar.gz
sha256sum: 6aa7256d5f2a60238d0904f6063845f7d0b02a03ebda2b39a64990545ba25213
:
name: Vulkan-Hpp
version: 1.2.196
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues against @lenny-lunarg)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.196
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.196.tar.gz
sha256sum: d4b35fb3112ddd11aae170933675290d11bf645c53b0f9921bf34b6f4c37bb0c
:
name: Vulkan-Hpp
version: 1.2.197
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.197
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.197.tar.gz
sha256sum: 1da6d54f76cb533de2d8eaff06df8df56efc61bbfee89dd185a75ecb3755f64c
:
name: Vulkan-Hpp
version: 1.2.198
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.2.198
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.2.198.tar.gz
sha256sum: f0d7013a6cc4a1d35c2f22159e9bde5374813d93eadc064ef97c1775d82d6af1
:
name: Vulkan-Hpp
version: 1.3.204
project: Vulkan-Headers
summary: Vulkan-Headers C++ library
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.13.0
depends: * bpkg >= 0.13.0
depends: Vulkan-Headers == 1.3.204
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.3.204.tar.gz
sha256sum: 029494e14e926e73d97e379433c24c7bc1f183385fa44c76822be7ee0613dc35
:
name: Vulkan-Hpp
version: 1.3.211
project: Vulkan-Headers
summary: The C++ headers for the Vulkan graphics API
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: Vulkan-Headers == 1.3.211
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.3.211.tar.gz
sha256sum: d25042a4fa85e19b46ba34c8cbfd3a86c5fb19f1a6021160e764f4be572e4723
:
name: Vulkan-Hpp
version: 1.3.216
project: Vulkan-Headers
summary: The C++ headers for the Vulkan graphics API
license: Apache-2.0; Apache License 2.0
topics: Graphics, API, c++, Vulkan
description:
\
# Vulkan-Headers

Vulkan header files and API registry

## Default branch changed to 'main' 2021-09-12

As discussed in #222, the default branch of this repository is now 'main'.\
 This change should be largely transparent to repository users, since github\
 rewrites many references to the old 'master' branch to 'main'. However, if\
 you have a checked-out local clone, you may wish to take the following steps\
 as recommended by github:

```sh
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```

## Repository Content

The contents of this repository are largely obtained from other repositories
and are collected, coordinated, and curated here.

If proposing changes to any file originating from a different repository,
please propose such changes in that repository, rather than Vulkan-Headers.
Files in this repository originate from:

### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs)

* registry/cgenerator.py
* registry/conventions.py
* registry/generator.py
* registry/genvk.py
* registry/reg.py
* registry/spec_tools/util.py
* registry/validusage.json
* registry/video.xml
* registry/vk.xml
* registry/vkconventions.py
* All files under include/vulkan/ which are *not* listed explicitly as\
 originating from another repository.

### This repository (https://github.com/KhronosGroup/Vulkan-Headers)

* .cmake-format.py
* BUILD.gn
* BUILD.md
* CMakeLists.txt
* CODE_OF_CONDUCT.md
* LICENSE.txt
* README.md
* cmake/Copyright_cmake.txt
* cmake/cmake_uninstall.cmake.in
* Non-API headers (report issues to the [Vulkan-Loader/issues](https://github\
.com/KhronosGroup/Vulkan-Loader/issues) tracker)
  * include/vulkan/vk_icd.h
  * include/vulkan/vk_layer.h
  * include/vulkan/vk_sdk_platform.h

### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp)

As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been
split into multiple files. All of those files are now included in this
repository.

* include/vulkan/vulkan.hpp
* include/vulkan/vulkan_enums.hpp
* include/vulkan/vulkan_funcs.hpp
* include/vulkan/vulkan_handles.hpp
* include/vulkan/vulkan_raii.hpp
* include/vulkan/vulkan_structs.hpp

## Version Tagging Scheme

Updates to the `Vulkan-Headers` repository which correspond to a new Vulkan
specification release are tagged using the following format:
`v<`_`version`_`>` (e.g., `v1.1.96`).

**Note**: Marked version releases have undergone thorough testing but do not
imply the same quality level as SDK tags. SDK tags follow the
`sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `sdk-1.1.92.0`).

This scheme was adopted following the 1.1.96 Vulkan specification release.

\
description-type: text/markdown;variant=GFM
src-url: https://github.com/KhronosGroup/Vulkan-Headers
package-email: wmbat@protonmail.com
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: Vulkan-Headers == 1.3.216
requires: c++ >= 11
bootstrap-build:
\
project = Vulkan-Hpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

\
location: Vulkan-Headers/Vulkan-Hpp-1.3.216.tar.gz
sha256sum: 6a8df86b2fa7126192888deb8bb2778516c84517ac80850689077a5b445839ec
:
name: websocketpp
version: 0.8.2+4
summary: C++ websocket client/server library
license: BSD-3-Clause
description:
\
WebSocket++ (0.8.2)
==========================

WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket
Protocol. It allows integrating WebSocket client and server functionality into
C++ programs. It uses interchangeable network transport modules including one
based on raw char buffers, one based on C++ iostreams, and one based on Asio 
(either via Boost or standalone). End users can write additional transport
policies to support other networking or event libraries as needed.

Major Features
==============
* Full support for RFC6455
* Partial support for Hixie 76 / Hybi 00, 07-17 draft specs (server only)
* Message/event based interface
* Supports secure WebSockets (TLS), IPv6, and explicit proxies.
* Flexible dependency management (C++11 Standard Library or Boost)
* Interchangeable network transport modules (raw, iostream, Asio, or custom)
* Portable/cross platform (Posix/Windows, 32/64bit, Intel/ARM/PPC)
* Thread-safe

Get Involved
============

[![Build Status](https://travis-ci.org/zaphoyd/websocketpp.png)](https://trav\
is-ci.org/zaphoyd/websocketpp)

**Project Website**
http://www.zaphoyd.com/websocketpp/

**User Manual**
http://docs.websocketpp.org/

**GitHub Repository**
https://github.com/zaphoyd/websocketpp/

GitHub pull requests should be submitted to the `develop` branch.

**Announcements Mailing List**
http://groups.google.com/group/websocketpp-announcements/

**IRC Channel**
 #websocketpp (freenode)

**Discussion / Development / Support Mailing List / Forum**
http://groups.google.com/group/websocketpp/

Author
======
Peter Thorson - websocketpp@zaphoyd.com

\
description-type: text/markdown;variant=GFM
url: https://www.zaphoyd.com/websocketpp
doc-url: https://docs.websocketpp.org/
src-url: https://github.com/zaphoyd/websocketpp
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
depends: libboost-asio ^1.76.0
bootstrap-build:
\
project = websocketpp

using version
using config
using test
using install
using dist

\
root-build:
\
cxx.std = latest

using cxx

hxx{*}: extension = hpp

\
location: websocketpp/websocketpp-0.8.2+4.tar.gz
sha256sum: 7dca569316068748094dd0fddb1e51fb10e32b404d4c3fef5dc773baba5302c2
:
name: xsd
version: 4.2.0
language: c++
summary: XML Schema to C++ data binding compiler
license: other: GPL-2.0-only with Xerces-C++ linking exception and FLOSS\
 exception
topics: C++, XML, XML Schema, XML parser, source code generation
description:
\
# xsd - XML Schema to C++ data binding compiler

XSD is an open-source, cross-platform XML Schema to C++ data binding
compiler. Provided with an XML document specification (XML Schema), it
generates C++ classes that represent the given vocabulary as well as XML
parsing and serialization code. You can then access the data stored in XML
using types and functions that semantically correspond to your application
domain rather than dealing with generic elements/attributes and raw strings.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [XSD project
page](https://codesynthesis.com/products/xsd/).

\
description-type: text/markdown;variant=GFM
package-description:
\
# XSD

XSD is an open-source, cross-platform XML Schema to C++ data binding
compiler. Provided with an XML document specification (XML Schema), it
generates C++ classes that represent the given vocabulary as well as XML
parsing and serialization code. You can then access the data stored in XML
using types and functions that semantically correspond to your application
domain rather than dealing with generic elements/attributes and raw strings.

For further information, refer to the [XSD project
page](https://codesynthesis.com/products/xsd/).

## Usage

XSD consists of several packages with the main ones being `xsd` (the XML
Schema to C++ compiler) and `libxsd` (the runtime library). There are also
several `*-tests` packages as well as `xsd-examples`.

When specifying dependencies on XSD packages in your project, the `xsd`
package should be a build-time dependency. The `libxsd` library is
header-only and because it can be used either with Xerces-C++ or
Expat as the underlying XML parser, it does not have a dependency on
either, expecting your project to make the choice by depending on
one or the other explicitly and then importing and linking the
corresponding library.

So, putting it all together, your project's `manifest` would normally
have the following fragment if using Xerces-C++:

```
depends: * xsd ^4.2.0
depends: libxsd ^4.2.0
depends  libxerces-c ^3.2.4
```

Or the following fragment if using Expat:

```
depends: * xsd ^4.2.0
depends: libxsd ^4.2.0
depends  libexpat ^2.5.0
```

Then your `buildfile` would have something along these lines if using
Xerces-C++:

```
import! [metadata] xsd = xsd%exe{xsd}

import libs  = libxsd%lib{xsd}
import libs += libxerces-c%lib{xerces-c}
```

Or along these lines if using Expat:

```
import! [metadata] xsd = xsd%exe{xsd}

import libs  = libxsd%lib{xsd}
import libs += libexpat%lib{expat}
```

Note that the `xsd` executable provides `build2` metadata.

The compilation of XML Schema to C++ can be implemented using ad hoc recipes
or rules. See the `xsd-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 4.2.0

  * In this version we have switched to the build2 build system. For the
    step-by-step instructions on how to build XSD from source on all the
    major platforms, see:

    https://codesynthesis.com/products/xsd/doc/install-build2.xhtml

  * In this version we have changed the default C++ standard that is used
    by the generated code from C++98 to C++11. While you can still request
    C++98 with the --std=c++98 option, note that this is the last release
    that supports the C++98 standard and the next release will require C++11
    or later (in fact, building the XSD compiler itself already requires
    C++11 or later). Note also that the --std option now recognizes the
    c++14, c++17, c++20, and c++23 additional values.

  * This version will be the last release that supports Xerces-C++ earlier
    than 3.1.0 and the next release will require Xerces-C++ 3.1.0 or later.

  * New --file-list-only option that allows only writing the list of C++
    files that would be generated without actually generating them.

  * The --file-list option now recognize the `-` value as a request to write
    to stdout.

  * New --dep-file option that allows specifying the dependency file name.
    It also allows writing the dependency information to stdout by specifying
    `-` as this option's value.

  * This version contains a large number of bug fixes and minor improvements
    that have accumulated over the years.

C++/Tree

  * Support for abstract XML Schema types. The corresponding C++ classes now
    have the _clone() member function declared pure virtual which prevents
    the construction of instances of such types.

    Note that if after upgrading to this version you start getting C++
    compile errors in the generated code with diagnostics saying that a
    type cannot be instantiated because _clone() is pure virtual, then
    it's a strong indication that this type (or its base) is polymorphic
    and needs to be marked as such (see --polymorphic-type* options).

  * New base_string() accessors in the xml_schema::{string,uri} types that
    return the underlying string.

  * Support for `ucc` (upper-camel-case) value in the --function-naming
    option.

  * New C++/Tree `secure` example (xsd-examples/cxx/tree/secure/) shows how
    to perform more secure XML parsing by disabling the XML External Entity
    (XXE) Processing. See the accompanying README file for details.

Version 4.1.0

  * This version was never released. It was skipped due to a minor versioning
    scheme adjustment in the pre-release component when migrating to build2.

Version 4.0.0

  * Xerces-C++ 2-series (2.8.0 and earlier) is no longer supported.

  * Visual Studio 2003 (7.1) is no longer supported.

  * HP aCC3 (HP-UX/PA-RISC) is no longer supported.

  * Oracle/Berkeley DB XML support has been removed since it no longer
    supports the Xerces-C++-based document access.

  * New option, --std, specifies the C++ standard that the generated code
    should conform to. Valid values are c++98 (default) and c++11.

    The C++ standard affects various aspects of the generated code that are
    discussed in more detail in mapping-specific documentation (guides and
    manuals). Overall, when C++11 is selected, the generated code relies on
    the move semantics and uses std::unique_ptr instead of deprecated
    std::auto_ptr. See also the documentation for the --std option in the
    XSD compiler command line manual (man pages).

  * New option, --fat-type-file, triggers the placement of code corresponding
    to global elements into type files instead of schema files in the file-
    per-type mode. This option is primarily useful when trying to minimize
    the amount of object code that is linked to an executable by packaging
    compiled generated code into a static (archive) library.

C++/Tree

  * Support for ordered types. C++/Tree flattens nested compositors which
    sometimes can result in the loss of element ordering information that
    could be significant to the application. Ordered types address this
    problem. For more information, refer to Section 2.8.4, "Element Order"
    in the C++/Tree Mapping User Manual.

  * Support for mixed content in ordered types. For more information, refer
    to Section 2.13, "Mapping for Mixed Content Models" in the C++/Tree
    Mapping User Manual.

  * xml_schema::type represents anyType content as a DOM fragment, similar
    to wildcards. For more information, refer to Section 2.5.2, "Mapping
    for anyType" in the C++/Tree Mapping User Manual.

  * xml_schema::simple_type represents anySimpleType content as a text
    string. For more information, refer to Section 2.5.3, "Mapping for
    anySimpleType" in the C++/Tree Mapping User Manual.

  * Improved streaming example that now provides better XML namespace
    handling and supports streaming parsing and serialization at multiple
    document levels.

  * New option, --generate-dep, triggers the generation of the make
    dependency files (.d) for the generated C++ files. Other options
    controlling dependency generation are: --generate-dep-only,
    --dep-phony, --dep-target, --dep-suffix, and --dep-regex. For
    details on this functionality, refer to the XSD compiler command
    line manual (man pages).

  * New option, --suppress-assignment, suppresses the generation of copy
    assignment operators for complex types. If this option is specified,
    the copy assignment operators for such types are declared private and
    left unimplemented.

  * Binary representation now stores string-based enumerations as integer
    values corresponding to C++ enumerators instead of string literals.

  * Binary representation now pools polymorphic type-id strings in an
    implicit string pool. The string pool support can also be used to
    pool strings in other situations. For example, you can implement
    string insertion/extraction operators for your stream to pool all
    strings. This can be useful if your documents contain a large number
    of repetitive strings.

  * New option, --polymorphic-plate, allows the creation of multiple
    polymorphic map plates in the same application. For details, refer
    to the XSD compiler command line manual (man pages).

  * To get the DOM association in the copy of an object model tree one
    now needs to explicitly pass the xml_schema::flags::keep_dom flag as
    the second argument to the copy constructor or clone() function.

Version 3.3.0

  * New option, --char-encoding, allows you to specify the character encoding
    that should be used in the generated code. Valid values for the 'char'
    character type are 'utf8' (default), 'iso8859-1' (new), 'lcp' (Xerces-C++
    local code page), and 'custom' (provides support for custom encodings).
    Note that if you use a non-default character encoding and include some
    libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly, then you will
    need to first include the correct xsd/cxx/xml/char-<enc>.hxx header,
    where <enc> is iso8859-1, lcp, etc. This mechanism replaces the
    XSD_USE_LCP macro.

    For the wchar_t character type the only valid value for this option is
    'auto' and the encoding is automatically selected between UTF-16 and
    UTF-32, depending on the wchar_t type size.

  * When the XSD compiler is built with Xerces-C++ 3.1.0 or later, the
    handling  of multiple imports for the same namespace is enabled. Before,
    all subsequent imports for a namespace were ignored which caused errors
    in some schemas. Note that if your application has XML Schema validation
    enabled, then you will also need to build it with Xerces-C++ 3.1.0 or
    later to take advantage of this feature.

  * Automatic mapping for the urn-style XML namespaces. The last component
    in the urn name is used to derive the C++ namespace name.

  * New option, --schema-file-regex, in combination with the existing
    --type-file-regex, can be used to place the generated files into
    subdirectories or to resolve file name conflicts in the file-per-
    type mode (--file-per-type).

  * Warning id's have changed to start with a letter identifying the
    component issuing the warning. F - compiler frontend, D - compiler
    driver, P - C++/Parser mapping, T - C++/Tree mapping.

  * Strings used to match regular expressions supplied with the
    --namespace-regex and --anonymous-regex options now include the file
    component for the schema being compiled.

  * The XSD_NO_EXPORT macro can be used to omit code generated with the
    --export/import-maps and, for C++/Tree, --generate-xml-schema options
    during C++ compilation. This may be useful if you would like to use
    the same generated code across multiple platforms.

 C++/Tree

  * New option, --generate-element-type, triggers the generation of types
    instead of parsing/serialization functions for root elements. This
    is primarily useful to distinguish object models with the same root
    type but with different root elements. For more information, refer
    to the messaging example and Section 2.9.1, "Element Types" in the
    C++/Tree Mapping User Manual. To support the customization of the
    element type naming the --element-type-regex option has been added.
    See the NAMING CONVENTION section in the compiler command line manual
    (man pages) for details.

  * New option, --generate-element-map, triggers the generation of a root
    element map. The element map allows uniform parsing and serialization
    of multiple root elements. This option can only be used together with
    --generate-element-type. For more information, refer to the messaging
    example and Section 2.9.2, "Element Map" in the C++/Tree Mapping
    User Manual.

  * Prior to this version, if the --generate-polymorphic option is
    specified, the compiler treats all types as potentially polymorphic.
    Now by default only type hierarchies used in substitution groups and
    those explicitly declared polymorphic with the new --polymorphic-type
    option are treated as polymorphic. This results in smaller and faster
    generated code. If you would like to continue using the old behavior,
    you will need to specify --polymorphic-type-all. For more information,
    on this change see Section 2.11, "Mapping for xsi:type and Substitution
    Groups" in the C++/Tree Mapping User Manual.

  * New option, --generate-detach, triggers the generation of detach
    functions for required elements and attributes. For optional and
    sequence cardinalities the detach functions are now provided by the
    respective containers even without this option. These functions, for
    example, allow one to move sub-trees in the object model either within
    the same tree or between different trees without copying. For more
    information, refer to Section 2.8 "Mapping for Local Elements and
    Attributes" in the C++/Tree Mapping User Manual.

  * New option, --export-xml-schema, causes the compiler to export/import
    types in the XML Schema namespace using the export symbol provided
    with the --export-symbol option.

  * New example, embedded, shows how to embed the binary representation of
    the schema grammar into an application and then use it to parse and
    validate XML documents.

  * New example, compression, shows how to compress an XML document during
    serialization and decompress it during parsing using the zlib library.

  * New example, custom/mixed, shows how to use type customization to parse
    and serialize mixed content.

  * The streaming example has been extended to show how to perform stream-
    oriented, partially in-memory XML processing using the C++/Tree mapping.
    With the partially in-memory parsing and serialization only a part of
    the object model is in memory at any given time. With this approach one
    can process parts of the document as they become available as well as
    handle documents that are too large to fit into memory.

  * New default/fixed value initialization code. Now the default/fixed values
    are parsed by the XSD compiler at compile time instead of the standard
    parsing code at runtime. This will allow the compilation of schemas that
    use the default/fixed values without support for XML parsing
    (--suppress-parsing option).

  * Empty XML Schema enumeration values are now mapped to the 'empty' C++
    enumerator name instead of 'cxx'.

  * XML Schema union types with members that are enumeration types are
    automatically converted to equivalent enumeration types with a union
    of all the members' enumerators.

Version 3.2.0

  * New option, --disable-warning, disables printing of a warning with
    the specified id. Specifying 'all' for the warning id disables all
    warnings.

  * New options, --export-maps and --import-maps, provide support for
    splitting a polymorphic type hierarchy across several Win32 DLLs.
    See the compiler command line manual (man pages) for details.

 C++/Tree

  * During serialization the generated code automatically assigns
    generic prefixes (p1, p2, etc) to XML namespaces used in the
    vocabulary and for which no custom prefix-namespace mapping
    was provided via the xml_schema::namespace_infomap argument.
    The xml_schema::namespace_infomap argument in the serialization
    functions is now default-initialized to an empty map. The
    xml_schema::no_namespace_mapping and xml_schema::xsi_already_in_use
    exceptions have been removed.

  * New example, performance, measures the performance of parsing and
    serialization. This example also shows how to structure your code
    to achieve the maximum performance for these two operations.

  * New example, xpath, shows how to use the C++/Tree mapping together
    with XPath.

  * New options, --one-accessor-regex, --opt-accessor-regex,
    --seq-accessor-regex, --one-modifier-regex, --opt-modifier-regex,
    and --seq-modifier-regex, allow specification of transformations
    for accessor and modifier function names for elements and attributes
    with specific cardinalities. For more information see the NAMING
    CONVENTION section in the compiler command line manual (man pages).

  * Support for comparison (--generate-comparison) and printing
    (--generate-ostream) of polymorphic object models.

  * New serialization flag, xml_schema::flags::dont_pretty_print,
    disables extra spaces and new lines that make the resulting XML
    slightly bigger but easier to read.

  * New example, custom/double, shows how to customize parsing and
    serialization code for the xsd:double XML Schema built-in type.
    It can be used as a guide on how to customize built-in XML Schema
    types that are mapped to fundamental C++ types.

  * Support for fractionDigits and totalDigits facets in serialization
    of types derived from xsd:decimal.

  * New set of compile-time macros that control how the xsd:float,
    xsd:double, and xsd:decimal types are serialized. The following
    macros control the format:

    XSD_CXX_TREE_FLOAT_FIXED
    XSD_CXX_TREE_FLOAT_SCIENTIFIC
    XSD_CXX_TREE_DOUBLE_FIXED
    XSD_CXX_TREE_DOUBLE_SCIENTIFIC

    The following macros control the precision:

    XSD_CXX_TREE_FLOAT_PRECISION_MAX
    XSD_CXX_TREE_FLOAT_PRECISION
    XSD_CXX_TREE_DOUBLE_PRECISION_MAX
    XSD_CXX_TREE_DOUBLE_PRECISION
    XSD_CXX_TREE_DECIMAL_PRECISION_MAX
    XSD_CXX_TREE_DECIMAL_PRECISION

    If the *_PRECISION_MAX macro is defined then the maximum number of
    potentially significant decimal digits that the type can represent
    is used. Otherwise, if the *_PRECISION macro is defined then its
    value is used. By default the precision is set to the number of
    decimal digits that the type can represent without change. For
    more information on these options, refer to the following paper:

    http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf

    The old macro, XSD_FP_ALL_DIGITS, that was equivalent to defining
    all three *_PRECISION_MAX macros has been removed.

    An alternative to using these macros is to customize the floating
    point type as shown in the custom/double example.

  * An additional constructor is generated in situations where a type
    contains one or more required element of complex type (that is,
    it itself contains elements or attributes). In this constructor,
    initializers for such elements are passed as std::auto_ptr and the
    newly created instance is directly initialized with and assumes
    ownership of the pointed to objects. This constructor is a logical
    addition to the non-copying modifiers that were introduced in the
    previous version.

  * Extra conversion operators in the fundamental_base class template
    which is used to emulate inheritance from fundamental types are now
    disabled by default since they cause problems on several compilers.
    To enable them compile your code with the XSD_TREE_EXTRA_FUND_CONV
    macro defined.

 C++/Parser

  * New options, --generate-xml-schema and --extern-xml-schema, trigger
    generation of the mapping for the XML Schema namespace to a separate
    header file and inclusion of that header into other generated header
    files instead of generating the necessary declarations inline,
    respectively. See the compiler command line manual (man pages) for
    details.

  * New example, performance, measures the performance of XML parsing.
    This example also shows how to structure your code to achieve the
    maximum performance for this operation.

  * Type map files can now include comments. A comment starts with #
    and ends with a new line or end of file. To specify a name that
    contains # enclose it in "".

  * In type map files the optional argument type now defaults to the
    return type if the return type ends with * or & (that is, it is
    a pointer or a reference) and 'const return type&' otherwise.

  * The interface for polymorphic parsing has been simplified. Calling the
    *_parser() functions multiple times to specify several parsers is no
    longer supported. Instead you need to pass the xml_schema::parser_map
    object which contains the parsers. For more information refer to
    Section 5.4, "Support for Polymorphism" in the C++/Parser Mapping
    Getting Started Guide.

  * The use of virtual inheritance has been reduced which results in a
    much smaller object code size (more than factor of 2 on some tests)
    and faster C++ compilation with less RAM used.

  * The low-level Expat-specific parsing API (parse_begin() and parse_end())
    has been extended to provide XML and XML Schema error translation to
    exceptions or error handler calls. See Section 7.2, "Expat Document
    Parser" in the C++/Parser Mapping Getting Started Guide for more
    information.

Version 3.1.0

  * New option, --file-per-type, triggers generation of a separate set
    of C++ files for each type defined in XML Schema. This compilation
    mode is primarily useful when some of your schemas cannot be compiled
    separately or have cyclic dependencies which involve inheritance.
    Other new options that are useful in this compilation mode are
    --type-file-regex, --type-file-regex-trace, and --file-list. See the
    compiler command line manual (man pages) for more information.

  * New option, --options-file, allows additional command line options
    to be provided in files, with one option per line.

  * New option, --reserved-name, allows insertion of additional names
    with optional replacements to the list of names that should not be
    used as identifiers. See the compiler command line manual (man pages)
    for details.

  * New options, --location-map, --location-regex, and
    --location-regex-trace, allow re-mapping of schema locations
    specified in the include and import elements without modifying the
    schema files. See the compiler command line manual (man pages) for
    more information.

  * New option, --guard-prefix, allows specification of a prefix that
    should be added to generated header inclusion guards.

  * New option, --file-list, triggers creation of a file with a list of
    generated C++ files. This option is primarily useful in the file-per-
    type compilation mode (--file-per-type) to create a list of generated
    C++ files, for example, as a makefile fragment. Other new options
    that are useful with --file-list are --file-list-prologue,
    --file-list-epilogue, and --file-list-delim. See the compiler command
    line manual (man pages) for more information.

  * Support for the upcoming Xerces-C++ 3.0.0 release.

 C++/Tree

  * New option, --generate-intellisense, triggers generation of workarounds
    for IntelliSense bugs in Visual Studio 2005 (8.0). When this option is
    used, the resulting code is slightly more verbose. IntelliSense in
    Visual Studio 2008 (9.0) does not require these workarounds. Support
    for IntelliSense in Visual Studio 2003 (7.1) is improved with this
    option but is still incomplete.

  * New options, --type-naming and --function-naming, allow specification
    of the type and function naming conventions that should be used in the
    generated code. Supported values for --type-naming are: knr (K&R), ucc
    (upper-camel-case), and java. Supported values for --function-naming
    are: knr (K&R), lcc (lower-camel-case), and java. For more information
    see the NAMING CONVENTION section in the compiler command line manual
    (man pages).

  * New options, --type-regex, --accessor-regex, --modifier-regex,
    --parser-regex, --serializer-regex, and --enumerator-regex, allow
    specification of transformations for type, accessor function,
    modifier function, parsing function, serialization function, and
    enumerator names in order to produce the generated code using a
    custom naming convention. For more information see the NAMING
    CONVENTION section in the compiler command line manual (man pages).

  * Generated list classes now provide a complete set of constructors and
    conform to the standard C++ sequence interface.

  * String-based types now provide two extra constructors that expect a
    C string and std::string as their arguments. This allows direct
    initialization of string-based types from string literals.

  * New implementations of the XML Schema date/time types (date, dateTime,
    duration, gDay, gMonth, gMonthDay, gYear, gYearMonth, and time) that
    represent the information in the numerical form.

  * New binary serialization examples: binary/boost, which shows how to
    save/load the object model to/from a custom format using the Boost
    serialization library as an example, and binary/xdr, which shows how to
    save/load the object model to/from XDR (eXternal Data Representation)
    binary format using the XDR API provided as part of Sun RPC.

  * The non-copying modifier functions can now be used to assemble object
    models from scratch. For more information see Section 4.4, "Creating
    the Object Model from Scratch" in the C++/Tree Mapping Getting Started
    Guide as well as Section 2.8, "Mapping for Local Elements and Attributes"
    in the C++/Tree Mapping User Manual.

  * Doxygen documentation was added to the XSD runtime for the built-in XML
    Schema types, exceptions, etc. This allows linking of the generated
    documentation to the XSD runtime documentation using the Doxygen tags
    mechanism. The Doxygen configuration file for the XSD runtime is
    provided in the documentation/cxx/tree/reference/ directory.

  * Support for customization of anyType. Because anyType is a base type
    for every generated type, customizing it allows one to implement custom
    functionality that spans the entire type system. See the comments
    example in the examples/cxx/tree/custom/ directory.

  * New option, --omit-default-attributes, triggers generation of extra
    checks that exclude attributes with default and fixed values from the
    serialized XML documents.

  * The parsing functions that used to read from DOMInputSource were changed
    to use InputSource to ease support of Xerces-C++ 3 and 2 series in the
    same code base.

  * The parsing function that used to parse DOMDocument* was changed to
    parse xml_schema::dom::auto_ptr<DOMDocument>& instead. If the keep_dom
    and own_dom flags are specified then this parsing function resets the
    passed automatic pointer and the returned object model assumes
    ownership of the DOM document. xml_schema::dom::auto_ptr is a simple
    automatic pointer for Xerces-C++ DOM with the same interface as
    std::auto_ptr.

  * The xml_schema::tree_node_key DOM user data key was moved to
    xml_schema::dom::tree_node_key.

 C++/Parser

  * New option, --generate-polymorphic, triggers generation of polymorphism-
    aware code. This option should be used on XML vocabularies which use
    xsi:type and/or substitution groups. For more information see Section
    5.4, "Support for Polymorphism" in the C++/Parser Mapping Getting
    Started Guide we well as the polymorphism and polyroot examples in the
    examples/cxx/parser/ directory.

  * The date/time types (date, dateTime, gDay, gMonth, gMonthDay, gYear,
    gYearMonth, and time) now represent time zone in the numerical form.

  * In order to support parsing of polymorphic XML documents, the signatures
    of the start_* functions (_start_element, _start_any_element, and
    start_root_element) have changed to include a third argument of type
    const ro_string<C>*. This argument contains the resolved type name and
    namespace in case the xsi:type attribute was specified.

Version 3.0.0

  * Anonymous type morphing (automatic type naming) is now performed by
    default in both mappings. The --morph-anonymous option does not have
    any effect but is preserved for backwards compatibility. A new option,
    --preserve-anonymous, disables anonymous type morphing. This option is
    useful together with --show-anonymous if you want to make sure your
    schemas do not have any anonymous types.

  * A number of bugs fixed in both C++/Tree and C++/Parser mappings.

 C++/Tree

  * The new C++/Tree Mapping Getting Started Guide is available in the
    documentation/cxx/tree/guide/ directory.

  * The type definitions for local elements and attributes in the form
    name::type have been changed to name_type. For example, an element
    bar in type foo with maxOccurs="unbounded" used to have its iterator
    type defined as foo::bar::iterator. With this change it becomes
    foo::bar_iterator. Furthermore, the container type name for sequence
    elements has changed from foo::bar::container to foo::bar_sequence
    and for optional elements and attributes from foo::bar::container
    to foo::bar_optional. This is a backwards incompatible change and
    may require application code adjustments (the C++ compiler will
    pinpoint the affected places).

  * New option, --generate-doxygen, triggers generation of documentation
    comments suitable for extraction by the Doxygen documentation system.
    Documentation from annotations is added to the comments if present in
    the schema.

  * New option, --generate-wildcard, triggers generation of the new
    wildcard (any and anyAttribute) mapping. This mapping represents the
    content matched by wildcards as DOM fragments. For more information on
    the new mapping see Section 2.12, "Mapping for any and anyAttribute"
    in the C++/Tree Mapping User Manual as well as the wildcard example in
    the examples/cxx/tree/ directory.

  * New option, --generate-comparison, triggers generation of comparison
    operators (== and !=) for complex types. Comparison is performed
    memberwise.

  * Support for the RPC XDR binary stream in addition to ACE CDR.

  * New constructor is generated for complex types with ultimate bases
    that are simple types and can be default-initialized. This constructor
    includes initializers for all required members but omits the initializer
    for the base type. See Section 2.7, "Mapping for Complex Types" in the
    C++/Tree Mapping User Manual for more information.

  * Support for polymorphic binary serialization and extraction. Note that
    the semantics of the --generate-insertion and --generate-extraction
    options has changed. See the the compiler command line manual (man
    pages) for details.

  * New parsing function with the DOMDocument* argument and the own_dom
    flag allow the tree to assume the ownership of the DOM document
    being parsed when DOM association is requested (keep_dom flag).
    See the C++/Tree Mapping User Manual for more information.

  * New example, multiroot, shows how to handle XML vocabularies with
    multiple root elements.

  * New example, caching, shows how to parse several XML documents while
    reusing the underlying XML parser and caching the schemas used for
    validation.

  * The mapping of built-in XML Schema type decimal has changed from
    long double to double. The old mapping can be obtained by providing
    a custom mapping for this type.

  * The xml_schema::errors type which is used in the xml_schema::parsing
    and xml_schema::serialization exceptions has been renamed to
    xml_schema::diagnostics and extended to include warnings in addition
    to errors.

  * Serialization operators now clear the element being serialized to from
    existing child nodes and attributes (except for special attributes such
    as prefix-namespace mappings, etc.).

  * Improved built-in type parsing, including support for normalization and
    whitespace collapsing.

  * Optimizations for the generated code size and compilation time,
    including space optimizations for polymorphic parsing and
    serialization. Optimizations for XML parsing speed.

 C++/Parser

  * The C++/Parser mapping have been significantly redesigned. See the new
    Getting Started Guide in documentation/cxx/parser/guide/ for details.

  * The new C++/Parser Mapping Getting Started Guide is available in the
    documentation/cxx/parser/guide/ directory.

  * The mapping now provides parser implementations for all built-in XML
    Schema types. See Chapter 6, "Built-In XML Schema Type Parsers" in
    the C++/Parser Mapping Getting Started Guide for more information.

  * The mapping now supports automatic generation of sample parser
    implementations and a test driver. The --generate-noop-impl option
    triggers generation of a sample implementation with empty function
    bodies. The --generate-print-impl option triggers generation of a
    sample implementation that prints the data stored in XML to STDOUT.
    The --generate-test-driver option trigger generation of a test driver.
    For more information on this feature see the compiler command line
    manual (man pages) and the generated example in the examples/cxx/parser/
    directory. Other relevant options include: --force-overwrite,
    --root-element-first, --root-element-last, and --root-element.

  * New example, wildcard, shows how to parse the XML data matched by
    XML Schema wildcards (any and anyAttribute).

  * The xml_schema::document parser has been extended with overridable
    virtual functions start_root_element and end_root_element to support
    parsing of XML vocabularies with multiple document roots. See the
    multiroot example in the examples/cxx/parser/ directory for more
    information.

  * The xml_schema::errors type which is used in the xml_schema::parsing
    exception has been renamed to xml_schema::diagnostics and extended to
    include warnings in addition to errors.

Version 2.3.1

  * The compiler is now capable of translating multiple schemas with
    one invocation.

  * New option, --sloc-limit, allows one to limit the amount of the
    generated code.

  * New option, --proprietary-license, instructs the compiler not to
    include the GPL banner in each generated file. Instead a short
    notice about a required proprietary license is generated. You
    should not use this option unless you have obtained a proprietary
    license from Code Synthesis.

  * The default encoding for the 'char' character type is now UTF-8.
    To get the previous behavior (local code page via the Xerces-C++
    transcode functions) define the XSD_USE_LCP preprocessor macro
    when compiling your source code.

  C++/Tree

    * The --parts option has been improved to split generated code more
      evenly by analyzing the complexity of the generated schema constructs.

    * Ability to customize serialization, std::ostream, and binary
      insertion/extraction operators. See examples/cxx/tree/custom/wildcard
      for an example on how to handle XML Schema wildcards (xsd:any and
      xsd:anyAttribute) by customizing the parsing constructor and
      serialization operators.

    * Optimizations for the run-time memory consumption.

    * Optimizations for space in the generated code.

    * Number of bug fixes.

  C++/Parser

    * Proper handling of an xsd:any nested content. Nested elements,
      attributes, and text are reported via _any_* hooks of the current
      parser.

    * Number of bug fixes, mostly in the generated validation code.


Version 2.3.0

    * Name conflicts across type inheritance hierarchies are now detected
      and resolved via name escaping.

  C++/Tree

    * New option, --suppress-parsing, suppresses generation of the parsing
      constructors and functions. This can be used to minimize the generated
      code footprint when parsing from XML is not used.

    * New option, --generate-forward, triggers generation of a forward
      declaration header file for types defined in the schema. A set of
      --fwd-* options that control the resulting file name as well as
      prologue and epilogue code are available.

    * New option, --generate-xml-schema, triggers generation of the mapping
      for the XML Schema namespace to a separate header file. See the man
      pages for details and examples/cxx/tree/custom/calendar for an example.

    * New option, --extern-xml-schema, triggers inclusion of a header
      file for the XML Schema namespace instead of generating the
      necessary declarations inline. See the man pages for details and
      examples/cxx/tree/custom/calendar for an example.

    * New options, --custom-type and --custom-type-regex, instruct the
      compiler to use custom C++ type for a type defined in the schema.
      The standard mapping can still be generated (with a different name)
      usually to be used as a base. Built-in XML Schema types can be
      customized using this mechanism. See the man pages for details and
      examples/cxx/tree/custom/* for examples.

    * The generated parsing constructors and serialization operators have
      been changed to use the Xerces-C++ DOM elements and attributes
      instead of the internal wrapper types. This should provide easier
      integration with other code and libraries that use the Xerces-C++
      DOM types such as Berkeley DB XML.

    * New example, examples/cxx/tree/dbxml, shows how to use the C++/Tree
      mapping on top of the Berkeley DB XML database.

  C++/Parser

    * Validation of the attribute structure in the generated code.

    * Validation of the character content models including mixed content in
      the generated code.

    * Validation of the built-in XML Schema types.

    * Optimizations for space and time in the generated code. In particular
      data coping during parsing and validation was significantly reduced.


Version 2.2.0

    * Detection of a version mismatch between the generated code and
      the runtime.

  C++/Tree

    * Escaping of a global element name that conflicts with a global type
      name. This is a backwards-incompatible change. Previous versions
      map them to the same name.

    * New options, --generate--insertion and --generate-extraction,
      trigger generation of (binary) data representation stream
      insertion and extraction operators, respectively. This allows
      one to serialize/deserialize in-memory representation to/from
      data representation streams such as XSD, CDR, etc. ACE CDR
      streams are supported out of the box (see the binary example).
      User-supplied streams can be used via an adaptation layer.

    * New serialization flag, no_xml_declaration, instructs the XML
      serialization functions to omit an XML declaration. This is useful
      for streaming serialization (see the streaming example).

    * Optimizations to reduce generated code size.


  C++/Parser

    * New options, --generate-validation and --suppress-validation,
      trigger and suppress generation of the validation code,
      respectively. The validation code is the implementation of the
      XML Schema validation in the generated code (also known as
      "perfect" parser). In this version validation of the element
      structure has been implemented.

    * New architecture for underlying XML parsers. This is a backwards-
      incompatible change. Existing applications will have to be
      modified. See examples for details.


Version 2.1.1

  C++/Tree

    * New option, --namespace-map, allows direct mapping of XML Schema
      namespaces to C++ namespaces without the use of regular expressions.

    * Further optimizations in the container code and enum mapping to
      reduce generated code size.

    * Number of bug fixes in the generated code.


  C++/Parser

    * New option, --namespace-map, allows direct mapping of XML Schema
      namespaces to C++ namespaces without the use of regular expressions.


Version 2.1.0

  * Automatic handling of forward inheritance. XML Schema allows
    inheritance from yet undefined types while it is illegal to do
    so in C++. Now the translator automatically handles forward
    inheritance by re-arranging the schema during compilation.


  C++/Tree

    * New enum mapping with support for inheritance. Enumerators are
      now parsed using binary search instead of linear search.

    * Associated DOM nodes now retain "back" pointers to tree nodes.

    * Optimizations to reduce generated code size.


  C++/Parser

    * Specialization for void. You can now use void as a hook argument
      type if you don't want to pass any data between parsers.

    * Support for re-use of implementations of base parsers in derived
      parsers using the mixin C++ idiom. See the examples/cxx/parser/mixin
      for more information.

    * Support for uninitialized parser. If you don't provide a parser
      for element/attribute, that element/attribute will be ignored
      during parsing.


Version 2.0.0

  * New cardinality calculator. This improves support for schemas that
    use complex structures with repeated elements, e.g.,

    <complexType name="Type">
      <choice>
        <sequence>
          <element name="a" type="string"/>
          <element name="c" type="string"/>
        </sequence>
        <sequence>
          <element name="b" type="string"/>
          <element name="c" type="string"/>
        </sequence>
      </choice>
    </complexType>


  * New identifier escaping code. With this feature xsd generates proper
    code for schemas that use the same name for an element and an attribute
    in the same type or use several elements/attributes with different
    qualified names but with the same local name, e.g.,

    <!-- base.xsd -->
    <schema xmlns="http://codesynthesis.com/xmlns/test/foo"
            targetNamespace="http://codesynthesis.com/xmlns/test/foo">

      <element name="foo" type="int"/>
    </schema>

    <schema xmlns="http://codesynthesis.com/xmlns/test/bar"
	    xmlns:f="http://codesynthesis.com/xmlns/test/foo"
            targetNamespace="http://codesynthesis.com/xmlns/test/bar">

      <import namespace="http://codesynthesis.com/xmlns/test/foo"
              schemaLocation="base.xsd"/>

      <element name="foo" type="string"/>

      <complexType name="Foo">
        <sequence>
          <element ref="foo"/>
          <element name="foo" type="long"/>
          <element ref="f:foo"/>
          <element ref="f:foo"/>
        </sequence>
        <attribute name="foo" type="string"/>
      </complexType>
    </schema>


  C++/Tree

    * New option, --generate-polymorphic, triggers generation of
      polymorphism-aware code. Before this release xsd used to always
      generate polymorphism-aware code. However, it appears to be quite
      wasteful in terms of the generated code size (up to 40%). You will
      now need to explicitly specify this option if you use substitution
      groups or xsi:type. A warning is issued if this option is not
      specified but the schema makes use of substitution groups.

    * New options, --root-element-first, --root-element-last,
      --root-element-all, --root-element-none, and --root-element, control
      generation of parsing and serialization functions. With these options
      you can avoid generating extra code for global elements that are not
      document roots. See the man pages for details.

    * New options, --parts and -parts-suffix, allows you to split generated
      source code into a number of parts. This is useful when translating
      large, monolithic schemas and a C++ compiler is not able to compile
      the resulting source code at once (usually due to insufficient memory).

    * New option, --generate-default-ctor, triggers generation of default
      constructors even for types that have required members. Required
      members of an instance constructed using such a constructor are not
      initialized and accessing them results in undefined behavior. Thanks
      to Jean-Francois Dube <jf at magnu.polymtl.ca> for suggesting this
      feature.

    * New option, --generate-from-base-ctor, triggers generation of
      constructors that expect an instance of a base type followed by all
      required members. Thanks to Jean-Francois Dube <jf at magnu.polymtl.ca>
      for suggesting this feature.

    * Information scopes for attributes and elements with default/fixed values
      now define the public static default_value function which allows one to
      obtain the default/fixed value for the element/attribute. Thanks to
      Dave Moss <david.r.moss at selex-comm.com> for suggesting this feature.

    * MSVC 7.1 has a limit on the length of the "if else if" chain. This
      results in ICE when compiling generated code for enumerations with
      a large number of values. This version addresses this issue. Thanks
      to Cyrille Chépélov <cyrille at chepelov.org> for reporting this and
      suggesting a fix.


  C++/Parser

    * The parser construction API has changed. Now, for element 'foo',
      the name of the parser modifier function is 'foo_parser'. Likewise,
      operator() for setting all parsers at once has been changed to the
      'parsers' function.


Version 1.9.0

  C++/Tree

    * The size modifier function in the base64_binary and hex_binary
      built-in types automatically adjusts capacity if needed.

    * More internal names (names that start with _xsd_) were made
      private or protected.

  C++/Parser

    * Typedef for the parser base in the xml_schema namespace.

  C++/Parser-E

    * C++/Parser mapping optimized for embedded systems. For now it
      is equivalent to 'cxx-parser --xml-parser expat'.


Version 1.8.0

  * Moved to the build 0.2 series.

  C++/Tree

    * Support for default and fixed values in attributes. An optional
      attribute with a default or fixed value is mapped to the One
      cardinality class instead of the Optional cardinality class.

    * Mapping for base64Binary and hexBinary has improved. Now these
      types support a basic buffer abstraction and perform automatic
      encoding and decoding.

    * Internal names are protected. We've noticed (via bug reports) a
      wide use of internal names (names that start with _xsd_) in user
      code. This is not portable and instead you should use public
      names. To prevent this from happening in the future we've made
      all internal names protected.

  C++/Parser

    * Support for Expat as the underlying XML parser in addition to
      Xerces-C++. This allows one to use the C++/Parser mapping in
      memory-constrained environments such as embedded systems. To
      select Expat instead of Xerces-C++ (default) add
      '--xml-parser expat' to the command line. At the moment only
      'char' (UTF-8) is supported as the base character type when
      Expat is selected.

    * The invalid_instance exception has been renamed to parsing.

    * Generic error_handler interface has been added in addition
      to Xerces-C++-specific DOMErrorHandler. It allows you to
      handle parsing errors and warnings without having to deal
      with Xerces-C++ specifics.

    * The default error handling behavior has changed in parsing
      functions. Instead of printing errors and warnings to STDERR,
      the errors are now collected and thrown as part of the parsing
      exception.

    * In parsing functions, the name, namespace arguments order has
      been reversed to be consistent with the one used in parsing
      hooks.

Version 1.7.0

  * Number of bug fixes in libxsd and the generated code.

  C++/Tree

    * Comprehensive XML Schema C++/Tree Mapping User Manual.

    * Basic support for union. A simple type that is defined using
      derivation by union is mapped to a C++ class that derives from
      string.

    * The _clone function has its arguments default-initialized.

    * The invalid_instance exception has been renamed to parsing.

    * Generic error_handler interface has been added in addition
      to Xerces-C++-specific DOMErrorHandler. It allows you to
      handle parsing/serialization errors and warnings without
      having to deal with Xerces-C++ specifics. See the user
      manual for more information.

    * The default error handling behavior has changed in parsing
      and serialization functions. Instead of printing errors and
      warnings to STDERR, the errors are now collected and thrown
      as part of the parsing/serialization exception. See the user
      manual for more information.

    * The optional and sequence containers now support operators ==,
      !=, <, >, <=, and >=.

    * Flags argument has been added to serialization functions. The
      only flag that is currently supported is dont_initialize.

    * Generated code cleanups.

  C++/Parser

    * Basic support for union. A simple type that is defined using
      derivation by union is mapped to a C++ class template that
      is just an alias for the generic parser. You are expected to
      override the _characters function in your implementation.

    * Properties argument to parsing functions which allows to
      programmatically specify schemas for instance document
      validation.

    * Flags argument to parsing functions. The following flags
      are supported:

      dont_validate   - do not validate instance documents
      dont_initialize - do not initialize the Xerces-C++ runtime

Version 1.6.0

  * Number of bug fixes in libxsd and the generated code.

  C++/Tree

    * Support for xsi:type and substitution groups in parsing and
      serialization. See examples/cxx/tree/polymorphism for a code
      sample.

    * Properties argument to parsing functions which allows to
      programmatically specify schemas for instance document
      validation.

    * Extra checks in parsing code which prevents construction
      of inconsistent in-memory representation from invalid
      instance documents. Should be useful when validation is
      disabled.

    * Accessors and modifier were made normal member functions.
      Before they were implemented via functors.

    * Workaround for g++-3.3 bug# 16650:

      http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16650

  C++/Parser

    * All "service" functions were renamed to start with '_'.
      This should prevent hiding of service functions by
      elements/attributes with the same names.

Version 1.5.0

  * Number of bug fixes in libxsd and the generated code.

  C++/Tree

    * Basic support for inheritance-by-restriction in complex types.

    * The following parsing flags have been introduced:

      keep_dom        - keep association with underlying DOM nodes
      dont_validate   - do not validate instance documents
      dont_initialize - do not initialize the Xerces-C++ runtime

    * "Type-less content" such as mixed content models, xsd:anyType/
      xsd:anySimpleType, and xsd:any/xsd:anyAttribute is supported by
      exposing corresponding DOM nodes (see the keep_dom parsing flag).
      Note that only a subset of XML Schema xsd:any functionality is
      supported. The compiler will issue diagnostics for unsupported
      cases. See examples/cxx/tree/mixed for a code sample.

  C++/Parser

    * Support for inheritance-by-restriction in complex types.

    * "Type-less content" such as mixed content models, xsd:anyType/
      xsd:anySimpleType, and xsd:any/xsd:anyAttribute is supported
      by forwarding parsing events to a set of "unexpected" hooks.
      Note that only a subset of XML Schema xsd:any functionality is
      supported. The compiler will issue diagnostics for unsupported
      cases. See examples/cxx/parser/mixed for a code sample.

Version 1.4.0

  * Number of improvements and bug fixes in the diagnostics code.

  * libxsd has been reorganized to provide a clean split of code with
    regards to char/wchar_t use. It should be possible to use libxsd
    and the xsd-generated code on platforms that lack wchar_t support,
    such as mingw.

  C++/Tree

    * Work around for g++ bug# 23206.

    * Support for xsd:list.

    * Type/member name conflicts are auto-resolved. Such conflicts
      occur when a type and an element or attribute withing this type
      share the same name.

    * XML Schema extension, the 'refType' attribute, allows one to
      specify referenced type for xsd:IDREF and xsd:IDREFS data types.
      See examples/cxx/tree/library for details.

    * New option, --morph-anonymous, allows automatic morphing
      of anonymous types to named ones. See the man pages for
      details.

    * New option, --namespace-regex-trace, allows one to trace the
      namespace mapping process. See the man pages for details.

    * Mapping for optional elements/attributes (cardinality 0..1)
      has changed in a backwards-incompatible way. In the previous
      version you would write:

      Bar& bar = ...

      if (bar.foo.present ())  // test
      {
        Foo& foo (bar.foo ()); // get

        bar.foo (Foo (...));   // set

        bar.foo.reset ();      // reset
      }

      Now you would write it like this:

      if (bar.foo ().present ())      // test
      {
        Foo& foo (bar.foo ().get ()); // get

        bar.foo (Foo (...));          // set

        bar.foo ().reset ();          // reset
      }

      Or using the pointer notation:

      if (bar.foo ())           // test
      {
        Foo& foo (*bar.foo ()); // get

        bar.foo (Foo (...));    // set

        bar.foo ().reset ();    // reset
      }

  C++/Parser

    * Support for xsd:list.

    * Type/member name conflicts are auto-resolved. Such conflicts
      occur when a type and an element or attribute withing this type
      share the same name.

    * New option, --namespace-regex-trace, allows one to trace the
      namespace mapping process. See the man pages for details.

Version 1.3.0

  * Numerous bug fixes.

  * The XML subsystem of libxsd has been reorganized to provide
    a clean split of DOM and SAX functionalities.

  C++/Parser

    * New option, --morph-anonymous, allows automatic morphing
      of anonymous types to named ones. See the man pages for
      details.

  C++/Tree

    * Additional parser functions provide support for reading
      from std::istream.

Version 1.2.0

  C++/Parser

    * New backend that generates the C++/Parser mapping.

Version 1.1.1

  all backends

    * Bug fixes in the filesystem path handling logic.

Version 1.1.0

  C++/Tree

    * New option, --generate-serialization, triggers generation of
      serialization functions. Serialization functions convert an in-memory
      representation back to XML.

    * xsd::cxx::tree::vector has been extended to closely follow std::vector
      API. This allows you to access and modify element sequences as if they
      were of type std::vector.

    * Generated constructors from xml::attribute and xml::element are made
      explicit.

    * The library example was extended to showcase modification and
      serialization of the in-memory representation.

    * New "XML Schema C++/Tree Mapping Serialization Guide" has an in-depth
      treatment of the serialization mechanisms provided by xsd.

Version 1.0.1

  all backends

    * Improved diagnostics.

    * Bug fixes in the schema inclusion/importing logic.

  C++/Tree

    * Two new options: --include-with-brackets and --include-prefix

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/xsd/
doc-url: https://www.codesynthesis.com/products/xsd/
src-url: https://git.codesynthesis.com/cgit/xsd/xsd/
email: xsd-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libxsd-frontend ^2.1.0
depends: libcutl ^1.11.0
depends: libxerces-c ^3.0.0
depends: * cli ^1.2.0- ? ($config.xsd.develop)
requires: host
requires: c++11
tests: * xsd-tests == 4.2.0
examples: * xsd-examples == 4.2.0
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
bpkg.bindist.debian:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libxerces-c
\
bindist-ubuntu-builds: bindist
bindist-ubuntu-build-include: linux_ubuntu*-**
bindist-ubuntu-build-exclude: **
bindist-ubuntu-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
bpkg.bindist.debian:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libicuuc
?sys:libicui18n
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
bpkg.bindist.fedora:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libxerces-c
\
bindist-rhel-builds: bindist
bindist-rhel-build-include: linux_rhel*-**
bindist-rhel-build-exclude: **
bindist-rhel-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
bpkg.bindist.fedora:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libicuuc
?sys:libicui18n
\
bindist-windows-builds: bindist
bindist-windows-build-include: windows*-**
bindist-windows-build-exclude: **
bindist-windows-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=auto
bpkg.bindist.archive:--archive-lang-impl=cc=
bpkg.bindist.archive:config.install.relocatable=true
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
bpkg.create:config.cc.coptions+="/MT"
b.create:config.cc.coptions="/W2 /O2"
\
bindist-macos-builds: bindist
bindist-macos-build-include: macos*-**
bindist-macos-build-exclude: **
bindist-macos-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=auto
bpkg.bindist.archive:--archive-lang-impl=cc=
bpkg.bindist.archive:config.install.relocatable=true
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
b.create:config.cc.coptions="-Wall -O3"
\
bindist-linux-glibc2.31-builds: bindist
bindist-linux-glibc2.31-build-include: linux_debian_11-gcc_10.2-bindist
bindist-linux-glibc2.31-build-exclude: **
bindist-linux-glibc2.31-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=auto
bpkg.bindist.archive:--archive-no-os
bpkg.bindist.archive:--archive-lang-impl=cc=
bpkg.bindist.archive:--archive-build-meta=+linux-glibc2.31
bpkg.bindist.archive:config.install.relocatable=true
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
config.cc.loptions+="-static-libstdc++ -static-libgcc"
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = xsd

using version
using config
using test
using dist
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

config [bool] config.xsd.develop ?= false

develop = $config.xsd.develop

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

using in

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

cxx.poptions =+ "-I$out_root" "-I$src_root"

# Extract the copyright notice from the LICENSE file.
#
# Note that cat is a builtin which means this is both portable and fast.
#
if ($build.mode != 'skeleton')
  copyright = $process.run_regex(cat $src_root/LICENSE,    \\
                                 'Copyright \(c\) (.+)\.', \\
                                 '\1')

\
location: xsd/xsd-4.2.0.tar.gz
sha256sum: 301db203a6182a727550cc251d85cd1ec7c3627c2f2ebc09356d334b1aec239e
:
name: xsd-examples
version: 4.2.0
type: examples
language: c++
project: xsd
summary: XML Schema to C++ data binding compiler examples
license: Unlicence
description:
\
# xsd-examples - examples for XSD compiler

This package contains examples for `xsd`, the XML Schema to C++ data binding
compiler.

The C++/Tree and C++/Parser mapping examples can be found in the `cxx/tree/`
and `cxx/parser/` subdirectories, respectively. For the summary of available
examples for each mapping, see `cxx/tree/README` and `cxx/parser/README`,
respectively. Each example also comes with its own `README` file that provides
a detailed description of the functionality shown as well as the steps to
build and run it.

\
description-type: text/markdown;variant=GFM
url: https://www.codesynthesis.com/products/xsd/
doc-url: https://www.codesynthesis.com/products/xsd/
src-url: https://git.codesynthesis.com/cgit/xsd/xsd/
email: xsd-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libxsd == 4.2.0
depends: libxerces-c ^3.0.0
depends: libexpat ^2.1.0
depends: libz ^1.2.1100
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : not copyrighted - public domain

project = xsd-examples

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : not copyrighted - public domain

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($build.mode != 'skeleton')
{
  define xsd: file
  xsd{*}: extension = xsd

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

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

  if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

  if ($cxx.class == 'msvc')
    cxx.coptions += /wd4251 /wd4275 /wd4800

  # Import xsd that we are testing.
  #
  import! [metadata] xsd = xsd%exe{xsd}

  # Every exe{} in this project is by default a test.
  #
  exe{*}: test = true

  # Specify the test target for cross-testing.
  #
  test.target = $cxx.target
}

\
location: xsd/xsd-examples-4.2.0.tar.gz
sha256sum: 99330057f7ca9d21f0148597069605a8b4a44493bfd563f64632c40ef7adc36d
:
name: xsd-tests
version: 4.2.0
type: tests
language: c++
project: xsd
summary: XML Schema to C++ data binding compiler tests
license: other: GPL-2.0-only with Xerces-C++ linking exception and FLOSS\
 exception
description:
\
# xsd-tests - tests for XSD compiler

This package contains tests for `xsd`, the XML Schema to C++ data binding
compiler.

\
description-type: text/markdown;variant=GFM
url: https://www.codesynthesis.com/products/xsd/
doc-url: https://www.codesynthesis.com/products/xsd/
src-url: https://git.codesynthesis.com/cgit/xsd/xsd/
email: xsd-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libxsd == 4.2.0
depends: libxerces-c ^3.0.0
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = xsd-tests

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

using in

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($build.mode != 'skeleton')
{
  define xsd: file
  xsd{*}: extension = xsd

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

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

  if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

  if ($cxx.class == 'msvc')
    cxx.coptions += /wd4251 /wd4275 /wd4800

  # Import xsd that we are testing.
  #
  import! [metadata] xsd = xsd%exe{xsd}

  # Every exe{} in this project is by default a test.
  #
  exe{*}: test = true

  # Specify the test target for cross-testing.
  #
  test.target = $cxx.target
}

\
location: xsd/xsd-tests-4.2.0.tar.gz
sha256sum: ab46649566bcc69ecdd4cc63e10773f9fc21a198e40f8e8743bfa65dc7dcd141
:
name: xsde
version: 3.4.0
language: c++
summary: XML Schema to C++ data binding compiler for mobile and embedded\
 systems
license: other: GPL-2.0-only with FLOSS exception
topics: C++, XML, XML Schema, XML parser, source code generation
description:
\
# xsde - XSD/e data binding compiler

XSD/e is an open-source, dependency-free XML Schema to C++ compiler for
mobile, embedded, and light-weight applications. It provides XML parsing,
serialization, XML Schema validation, and XML data binding while maintaining a
small footprint and portability.

For further information, including licensing conditions, documentation, and
binary packages, refer to the [XSD/e project
page](https://codesynthesis.com/products/xsde/).

\
description-type: text/markdown;variant=GFM
package-description:
\
# XSD/e

XSD/e is an open-source, dependency-free XML Schema to C++ compiler for
mobile, embedded, and light-weight applications. It provides XML parsing,
serialization, XML Schema validation, and XML data binding while maintaining a
small footprint and portability.

For further information, refer to the [XSD/e project
page](https://codesynthesis.com/products/xsde/).

## Usage

XSD/e consists of several packages with the main ones being `xsde` (the XML
Schema to C++ compiler) and `libxsde` (the runtime library). There are also
`xsde-tests` and `xsde-examples` packages.

When specifying dependencies on the XSD/e packages in your project, the `xsde`
package should be a build-time dependency. The `libxsde` library can be
configured differently depending on your project needs via the
`config.libxsde.*` configuration variables (see `libxsde/build/root.build` for
the available variables).

So, putting it all together, your project's `manifest` would normally
have the following fragment if using the default `libxsde` configuration:

```
depends: * xsde ^3.4.0
depends: libxsde ^3.4.0
```

Or, for example, the following fragment if your project needs to configure
`libxsde` not to use STL, iostream, or C++ exceptions:

```
depends: * xsde ^3.4.0
depends:
\\
libxsde ^3.4.0
{
  prefer
  {
    config.libxsde.stl = false
    config.libxsde.iostream = false
    config.libxsde.exceptions = false
  }

  accept (!$config.libxsde.stl && \\
          !$config.libxsde.iostream && \\
          !$config.libxsde.exceptions)
}
\\
```

Then your `buildfile` would have something along these lines:

```
import! [metadata] xsde = xsde%exe{xsde}

import libs = libxsde%lib{xsde}
```

Note that the `xsde` executable provides `build2` metadata.

The compilation of XML Schema to C++ can be implemented using ad hoc recipes
or rules. See the `xsde-examples` package for the complete examples.

\
package-description-type: text/markdown;variant=GFM
changes:
\
Version 3.4.0

  * New option, --fat-type-file, triggers the generation of code
    corresponding to global elements into type files instead of schema
    files in the file-per-type mode. This option is primarily useful
    when trying to minimize the amount of object code that is linked
    to an executable by packaging compiled generated code into a static
    (archive) library.

  * Extra validation for date, dateTime, and gMonthDay per XML Schema 1.1.

  * Support for using external Expat library instead of bundled source
    code. See config.libxsde.external_expat (build2) or XSDE_EXTERNAL_EXPAT
    (secondary build systems) for details.

 C++/Parser

  * Allow empty base64Binary values per the specification.

 C++/Serializer

  * Elements with empty content are now closed immediately (for example,
    <foo x="y"/>) rather than with a separate closing tag (for example,
    <foo x="y"></foo>).

  * To improve the serialization performance, attributes are no longer
    sorted but rather written in the order that they were specified.

  * Support for the fractionDigits facet on the decimal data type.

  * New functions, format() and precision(), allow changing of the
    output notation and precision for the float, double, and decimal
    type serializers.

Version 3.3.0

  * This version was never released. It was skipped due to a minor versioning
    scheme adjustment in the pre-release component when migrating to build2.

Version 3.2.0

  * Support for ISO-8859-1 in addition to UTF-8 as application encoding.
    Note that this encoding is not the same as the XML document encoding
    that is being parsed or serialized. Rather, it is the encoding that
    is used inside the application. When an XML document is parsed, the
    character data is automatically converted to the application encoding.
    Similarly, when an XML document is serialized, the data in the
    application encoding is automatically converted to the resulting
    document encoding. To select a particular encoding, configure the
    XSD/e runtime library accordingly and pass the --char-encoding option
    to the XSD/e compiler when translating your schemas.

  * Support for custom allocators. This feature allows you to configure
    the XSD/e runtime and generated code to perform memory management
    using custom allocator functions provided by your application instead
    of the standard operator new/delete. For more information, see Section
    3.8, "Custom Allocators" in the C++/Hybrid Mapping Getting Started
    Guide (equivalent documentation is provided for other mappings) as
    well as the 'allocator' example in the examples/cxx/hybrid/ directory.

  * When built with Xerces-C++ 3-series, enable handling of multiple imports
    for the same namespace. Before, all subsequent imports for a namespace
    were ignored which caused errors in some schemas.

  * Automatic mapping for the urn-style XML namespaces. The last component
    in the urn name is used to derive the C++ namespace name.

  * New option, --schema-file-regex, in combination with the existing
    --type-file-regex, can be used to place the generated files into
    subdirectories or to resolve file name conflicts in the file-per-
    type mode (--file-per-type).

  * Strings used to match regular expression supplied with the
    --namespace-regex and --anonymous-regex options now include the file
    component for the schema being compiled.

 C++/Hybrid

  * String-based types that use XML Schema restriction by enumeration are
    now mapped to C++ classes with semantics similar to C++ enum. You can
    suppress this new mapping and instead get the old behavior (plain
    inheritance) by specifying the --suppress-enum compiler option. See
    Section 4.3, "Enumerations" in the Getting Started Guide for more
    information.

  * New option, --generate-clone, triggers the generation of clone functions
    for variable-length types. These functions allow you to make dynamically-
    allocated copies of variable-length objects.

  * Support for schema evolution using substitution groups. The 'ignore' and
    'passthrough' examples in the examples/cxx/hybrid/evolution/ directory
    show how the new mechanism works. The 'ignore' example shows how to
    ignore unknown elements. The 'passthrough' example shows how to pass
    the unknown content through parsing and serialization so that the output
    XML contains all the unknown elements.

  * The anySimpleType build-in type is now mapped to std::string or a\
 C-string,
    depending on whether STL is enabled or not.

  * New mapping for anyType with support for polymorphism. For more
    information, see Section 5.14, "Mapping for anyType" in the Embedded
    C++/Hybrid Mapping Getting Started Guide.

  * The object model interface for optional members of variable-length
    types now omits the _present modifier function. This is done to help
    detect programming errors that result from a type becoming variable-
    length due to schema changes. To reset such optional members you can
    call the member modifier function with NULL as its argument.

  * New configuration parameter, XSDE_STL_ITERATOR, makes iterators
    provided by the mapping conform to the STL requirements. This feature
    requires working <iterator> header and allows you to use the standard
    algorithms such as find_if, etc.

  * When the code is generated with the --generate-polymorphic or
    --runtime-polymorphic option, the resulting parser and serializer
    aggregate classes provide the static polymorphic() function which
    returns true if the object model corresponding to the root element
    or root type is polymorphic and false otherwise. This can be used
    together with the XSDE_POLYMORPHIC macro to implement generic parsing
    and serialization code that works with both polymorphic and non-
    polymorphic object models.

  * XML Schema union types with members that are enumeration types are
    automatically converted to equivalent enumeration types with a union
    of all the member's enumerators.

 C++/Parser

  * Support for the following XML Schema facets:

    String-based types:
      - length
      - minLength
      - maxLength
      - pattern
      - whiteSpace
      - enumeration

    Integer and floating-point types:
      - minExclusive
      - minInclusive
      - maxExclusive
      - maxInclusive

    For more information on the pattern facet validation, see the XSDE_REGEXP
    parameter in the configuration files.

  * The anySimpleType build-in type is now mapped to std::string or a\
 C-string,
    depending on whether STL is enabled or not.

 C++/Serializer

  * Support for the following XML Schema facets:

    String-based types:
      - length
      - minLength
      - maxLength
      - pattern
      - enumeration

    Integer and floating-point types:
      - minExclusive
      - minInclusive
      - maxExclusive
      - maxInclusive

    For more information on the pattern facet validation, see the XSDE_REGEXP
    parameter in the configuration files.

  * The anySimpleType build-in type is now mapped to std::string or a\
 C-string,
    depending on whether STL is enabled or not.

Version 3.1.0

 C++/Hybrid

  * Support for XML Schema polymorphism. The new --generate-polymorphic
    option triggers the generation of polymorphism-aware code. This option
    should be used on XML vocabularies which use xsi:type and/or
    substitution groups. For more information see Section 3.7, "Support
    for Polymorphism" and Section 4.9, "Polymorphic Object Models" in
    the Embedded C++/Parser Mapping Getting Started Guide as well as
    the polymorphism and polyroot examples in the examples/cxx/hybrid/
    directory.

  * Support for saving the object model to and loading it from binary
    representations. The new --generate--insertion and --generate-extraction
    options trigger the generation of data representation stream insertion
    and extraction operators, respectively. The XSD/e runtime provides
    support for the ACE CDR streams and XDR API that is part of Sun RPC.
    Custom representations can be supported by implementing insertion and
    extraction operators for the built-in XML Schema types and sequence
    templates. For more information, see Chapter 7, "Binary Representation"
    in the Getting Started Guide as well as examples in the
    examples/cxx/hybrid/binary/ directory.

  * Support for attributes with default and fixed values. For details see
    Section 4.3, "Attributes and Elements" in the Getting Started Guide.
    Use the new --omit-default-attributes option to omit the attributes
    with default and fixed values from serialized XML documents.

  * New option, --custom-type, allows the customization of the object model
    classes. You have the option of either basing your custom implementation
    on the generated version or providing your own implementation from
    scratch. For details see Section 4.8, "Customizing the Object Model"
    in the Getting Started Guide as well as examples in the
    examples/cxx/hybrid/custom/ directory.

  * New option, --generate-detach, triggers the generation of detach
    functions for elements and attributes of variable-length types. These
    functions, for example, allow you to move sub-trees in the object model
    either within the same tree or between different trees. The sequence
    interfaces for variable-length types now also provide the detach()
    function.

  * The generated parser and serializer implementations are now capable
    of parsing/serializing recursive types. The XSD/e compiler detects
    recursive types and generates stack-based implementations with the
    optimized non-recursive case (i.e., the first iteration still does
    not result in any heap allocations for the state maintenance).

  * Assignment function with signature assign(const T*, size_t) for
    sequences of fixed-length types. With this function you can, for
    example, initialize a sequence with a C array. Assignment of
    sequences of fundamental types (e.g., int, float, etc.) is
    implemented in terms of memcpy().

 C++/Serializer

  * Support for XML pretty-printing. The serialize() functions in the
    xml_schema::document_simpl class now have the flags argument (defaults
    to 0). You can pass the xml_schema::document_simpl::pretty_print flag
    for this argument to turn on pretty-printing. See the examples and
    documentation for details.

Version 3.0.0

  * The new Embedded C++/Hybrid mapping provides a light-weight, tree-
    like object model with precise reproduction of the XML vocabulary
    structure and element order. C++/Hybrid supports fully in-memory
    as well as hybrid, partially event-driven, partially in-memory
    XML processing. For more information on the new mapping see the
    Embedded C++/Hybrid Mapping Getting Started Guide and examples in
    the examples/cxx/hybrid/ directory.

  * New option, --disable-warning, disables printing of a warning with
    the specified id. Specifying 'all' for the warning id disables all
    warnings.

  * The interfaces of the non-STL versions of the xml_schema::qname and
    xml_schema::string_sequence classes have changed. Now by default
    their modifier functions assume ownership of the passed strings.
    The *_copy() versions of the modifier functions that make copies
    of the passed strings are now provided. See the documentation for
    details.

  * The implementation of the STL version of the xml_schema::string_sequence
    class has changed. Now a custom implementation of the sequence
    container is used instead of std::vector. See the documentation for
    details.

  * When STL is enabled the xml_schema::string_sequence objects
    corresponding to the NMTOKENS and IDREFS types are now returned and
    passed by pointer rather than by value.

Version 2.1.0

  * New delegation-based parser/serializer implementation reuse style in
    addition to virtual inheritance-based. The new style results in a much
    smaller object code size. The new reuse style is used by default and is
    incompatible with the old style. Applications that require backwards
    compatibility should use the --reuse-style-mixin option. The reuse
    support code now can be completely omitted with the --reuse-style-none
    option. A number of examples were converted to support both the new
    and old reuse styles while others were converted to support the new
    style only. For more information on the new reuse style see Section
    5.6 in the Embedded C++/Parser Getting Started Guide and Section 6.6
    in the Embedded C++/Serializer Getting Started Guide.

  * New option, --file-per-type, triggers generation of a separate set
    of C++ files for each type defined in XML Schema. This compilation
    mode is primarily useful when some of your schemas cannot be compiled
    separately or have cyclic dependencies which involve inheritance.
    Other new options that are useful in this compilation mode are
    --type-file-regex, --type-file-regex-trace, and --file-list. See the
    compiler command line manual (man pages) for more information.

  * New option, --options-file, allows additional command line options
    to be provided in files, with one option per line.

  * New option, --reserved-name, allows inserting additional names with
    optional replacements to the list of names that should not be used
    as identifiers. See the compiler command line manual (man pages)
    for details.

  * New options, --location-map, --location-regex, and
    --location-regex-trace, allow re-mapping of schema locations
    specified in the include and import elements without modifying the
    schema files. See the compiler command line manual (man pages) for
    more information.

  * New option, --guard-prefix, allows specifying a prefix that will be
    added to generated header inclusion guards.

  * New option, --file-list, triggers creation of a file with a list of
    generated C++ files. This option is primarily useful in the file-per-
    type compilation mode (--file-per-type) to create a list of generated
    C++ files, for example, as a makefile fragment. Other new options
    that are useful with --file-list are --file-list-prologue,
    --file-list-epilogue, and --file-list-delim. See the compiler command
    line manual (man pages) for more information.

  * In type map files the optional argument type now defaults to the
    return type if the return type ends with * or & (that is, it is
    a pointer or a reference) and 'const return type&' otherwise.

  * Type map files can now include comments. A comment starts with #
    and ends with a new line or end of file. To specify a name that
    contains # enclose it in "".

 C++/Parser

  * New option, --generate-polymorphic, triggers generation of polymorphism-
    aware code. This option should be used on XML vocabularies which use
    xsi:type and/or substitution groups. For more information see Section
    5.7, "Support for Polymorphism" in the Embedded C++/Parser Mapping
    Getting Started Guide we well as the polymorphism and polyroot
    examples in the examples/cxx/parser/ directory.

  * New options, --generate-xml-schema and --extern-xml-schema, trigger
    generation of the mapping for the XML Schema namespace to a separate
    header file and inclusion of that header into other generated header
    files instead of generating the necessary declarations inline,
    respectively. See the the compiler command line manual (man pages)
    for details.

  * Support for parser reuse after an error. For more information refer
    to Section 7.4, "Reusing Parsers after an Error" in the Embedded
    C++/Parser Mapping Getting Started Guide. To suppress generation
    of the reset code use the --suppress-reset option.

  * New, context-based internal parsing architecture which provides
    better performance, especially for deeply-nested documents. This
    change should not affect user code except for wildcard parsing.
    See the wildcard example for the required changes.

  * The generated sample test driver file name was changed from
    <schema>-driver.cxx to <schema>-pdriver.cxx.

 C++/Serializer

  * The mapping now supports automatic generation of sample serializer
    implementations and a test driver. The --generate-empty-impl option
    triggers generation of a sample implementation with empty function
    bodies which can then be filled with application code. The
    --generate-test-driver option trigger generation of a test driver.
    For more information on this feature see the compiler command line
    manual (man pages). Other relevant new options include:
    --impl-file-suffix, --force-overwrite, --root-element-first,
    --root-element-last, and --root-element.

  * New option, --generate-polymorphic, triggers generation of polymorphism-
    aware code. This option should be used on XML vocabularies which use
    xsi:type and/or substitution groups. For more information see Section
    6.7, "Support for Polymorphism" in the Embedded C++/Serializer Mapping
    Getting Started Guide we well as the polymorphism and polyroot
    examples in the examples/cxx/serializer/ directory.

  * New options, --generate-xml-schema and --extern-xml-schema, trigger
    generation of the mapping for the XML Schema namespace to a separate
    header file and inclusion of that header into other generated header
    files instead of generating the necessary declarations inline,
    respectively. See the the compiler command line manual (man pages)
    for details.

  * Support for serializer reuse after an error. For more information
    refer to Section 8.4, "Reusing Serializers after an Error" in the
    Embedded C++/Serializer Mapping Getting Started Guide. To suppress
    generation of the reset code use the --suppress-reset option.

Version 2.0.0

  * The new Embedded C++/Serializer mapping supports event-driven,
    stream oriented XML serialization with XML Schema validation
    and C++ data binding. The new Embedded C++/Serializer Mapping
    Getting Started Guide as well as the set of examples provide
    an introduction to the mapping.

 C++/Parser

  * The argument order in the generated parsers() functions has
    changed from elements then attributes to attributes then
    elements.

  * A number of types in the xml_schema namespaces have been
    renamed in order to make the C++/Parser and C++/Serializer
    mappings usable in the same translation unit. The old and
    new names are listed below:

    document         document_pimpl
    exception        parser_exception
    xml              parser_xml
    schema           parser_schema
    error            parser_error
    xml_error        parser_xml_error
    schema_error     parser_schema_error
    simple_content   parser_simple_content
    complex_content  parser_complex_content
    list_base        parser_list_base

  * The error accessor function has been renamed from error()
    to _error(). The application error modifier function has
    been renamed from error(int) to _app_error(int).

  * For each subsequent element with the same name in the same
    complex type, the mapping now produces a separate set of
    callbacks and accessors. Note that in this case the
    generated code will be able to perform correct dispatching
    only with XML Schema validation enabled. When validation is
    disabled all events will be delivered to the callback
    corresponding to the first element with this name.

Version 1.1.0

  * The runtime library now provides parser implementations for all
    built-in XML Schema types. See Chapter 6, "Built-In XML Schema
    Type Parsers" in the Embedded C++/Parser Mapping Getting Started
    Guide for more information.

  * The mapping now supports automatic generation of sample parser
    implementations and a test driver. The --generate-noop-impl option
    triggers generation of a sample implementation with empty function
    bodies. The --generate-print-impl option triggers generation of a
    sample implementation that prints the data stored in XML to STDOUT.
    The --generate-test-driver option trigger generation of a test driver.
    For more information on this feature see the compiler command line
    manual (man pages) and the generated example in the examples/cxx/parser/
    directory. Other relevant new options include: --force-overwrite,
    --root-element-first, --root-element-last, and --root-element.

  * New example, examples/cxx/parser/wildcard, shows how to parse the
    XML data matched by XML Schema wildcards (any and anyAttribute).

  * The xml_schema::document parser has been extended with overridable
    virtual functions start_root_element and end_root_element to support
    parsing of XML vocabularies with multiple document roots. See the
    multiroot example in the examples/cxx/parser/ directory for more
    information.

  * Declaration for built-in parser implementations and the document
    parser are now automatically included into generated header files.
    As a result, you do not need to explicitly include the
    xml-schema-impl.hxx or document.hxx header files.

  * The default parser skeleton type and file suffixes have changed
    from _skel to _pskel and from -skel to -pskel, respectively. The
    --type-suffix and --file-suffix options were renamed to
    --skel-type-suffix and --skel-file-suffix, respectively.

Version 1.0.0

  * First public release.

\
changes-type: text/plain
url: https://www.codesynthesis.com/products/xsde/
doc-url: https://www.codesynthesis.com/products/xsde/
src-url: https://git.codesynthesis.com/cgit/xsde/xsde/
email: xsde-users@codesynthesis.com; Mailing list
build-warning-email: builds@codesynthesis.com
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends: libxsd-frontend ^2.1.0
depends: libcutl ^1.11.0
depends: * cli ^1.2.0- ? ($config.xsde.develop)
requires: host
requires: c++11
tests: * xsde-tests == 3.4.0
examples: * xsde-examples == 3.4.0
iso8859-1-builds: -( +windows -gcc -static )
iso8859-1-build-config:
\
{ config.xsde_tests.encoding=iso8859-1    }+ xsde-tests
{ config.xsde_examples.encoding=iso8859-1 }+ xsde-examples
\
no-stl-build-config:
\
{ config.xsde_tests.stl=false    }+ xsde-tests
{ config.xsde_examples.stl=false }+ xsde-examples
\
no-iostream-build-config:
\
{ config.xsde_tests.iostream=false    }+ xsde-tests
{ config.xsde_examples.iostream=false }+ xsde-examples
\
no-exceptions-build-config:
\
{ config.xsde_tests.exceptions=false    }+ xsde-tests
{ config.xsde_examples.exceptions=false }+ xsde-examples
\
no-long-long-build-config:
\
{ config.xsde_tests.long_long=false    }+ xsde-tests
{ config.xsde_examples.long_long=false }+ xsde-examples
\
reuse-mixin-build-config:
\
{ config.xsde_tests.reuse_style=mixin    }+ xsde-tests
{ config.xsde_examples.reuse_style=mixin }+ xsde-examples
\
polymorphic-builds: -( +windows -gcc -static )
polymorphic-build-config:
\
{ config.xsde_tests.polymorphic=true    }+ xsde-tests
{ config.xsde_examples.polymorphic=true }+ xsde-examples
\
no-parser_validation-build-config:
\
{ config.xsde_tests.parser_validation=false    }+ xsde-tests
{ config.xsde_examples.parser_validation=false }+ xsde-examples
\
no-serializer_validation-build-config:
\
{ config.xsde_tests.serializer_validation=false    }+ xsde-tests
{ config.xsde_examples.serializer_validation=false }+ xsde-examples
\
external-expat-build-config:
\
{
  config.xsde_tests.external_expat=true
  config.xsde_tests.custom_allocator=true
  config.xsde_tests.default_allocator=true
}+ xsde-tests

{
  config.xsde_examples.external_expat=true
  config.xsde_examples.custom_allocator=true
  config.xsde_examples.default_allocator=true
}+ xsde-examples
\
minimal-build-config:
\
{
  config.xsde_tests.stl=false
  config.xsde_tests.iostream=false
  config.xsde_tests.exceptions=false
}+ xsde-tests

{
  config.xsde_examples.stl=false
  config.xsde_examples.iostream=false
  config.xsde_examples.exceptions=false
}+ xsde-examples
\
custom-allocator-builds: static
custom-allocator-build-config:
\
{
  config.xsde_tests.custom_allocator=true
  config.xsde_tests.stl=false
  config.xsde_tests.iostream=false
  config.xsde_tests.exceptions=false
}+ xsde-tests

{
  config.xsde_examples.custom_allocator=true
  config.xsde_examples.stl=false
  config.xsde_examples.iostream=false
  config.xsde_examples.exceptions=false
}+ xsde-examples
\
bindist-debian-builds: bindist
bindist-debian-build-include: linux_debian*-**
bindist-debian-build-exclude: **
bindist-debian-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
bpkg.bindist.debian:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libxerces-c
\
bindist-ubuntu-builds: bindist
bindist-ubuntu-build-include: linux_ubuntu*-**
bindist-ubuntu-build-exclude: **
bindist-ubuntu-build-config:
\
+bpkg.bindist.debian:
+bbot.bindist.upload:
bpkg.bindist.debian:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libicuuc
?sys:libicui18n
\
bindist-fedora-builds: bindist
bindist-fedora-build-include: linux_fedora*-**
bindist-fedora-build-exclude: **
bindist-fedora-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
bpkg.bindist.fedora:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libxerces-c
\
bindist-rhel-builds: bindist
bindist-rhel-build-include: linux_rhel*-**
bindist-rhel-build-exclude: **
bindist-rhel-build-config:
\
+bpkg.bindist.fedora:
+bbot.bindist.upload:
bpkg.bindist.fedora:--recursive=auto
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
?sys:libicuuc
?sys:libicui18n
\
bindist-windows-builds: bindist
bindist-windows-build-include: windows*-msvc**
bindist-windows-build-exclude: **
bindist-windows-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=auto
bpkg.bindist.archive:--archive-lang-impl=cc=

# Relocatable by default (see target configuration for details).
#
#bpkg.bindist.archive:config.install.relocatable=true

bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
bpkg.create:config.cc.coptions+="/MT"
b.create:config.cc.coptions="/W2 /O2"
\
bindist-linux-glibc2.31-builds: bindist
bindist-linux-glibc2.31-build-include: linux_debian_11-gcc_10.2-bindist
bindist-linux-glibc2.31-build-exclude: **
bindist-linux-glibc2.31-build-config:
\
+bpkg.bindist.archive:
+bbot.bindist.upload:
bpkg.bindist.archive:--recursive=auto
bpkg.bindist.archive:--archive-no-os
bpkg.bindist.archive:--archive-lang-impl=cc=
bpkg.bindist.archive:--archive-build-meta=+linux-glibc2.31
bpkg.bindist.archive:config.install.relocatable=true
bpkg.create:config.bin.lib=static
bpkg.create:config.bin.liba.lib="shared static"
config.cc.loptions+="-static-libstdc++ -static-libgcc"
\
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = xsde

using version
using config
using test
using dist
using install

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

config [bool] config.xsde.develop ?= false

develop = $config.xsde.develop

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

using in

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

if ($cxx.target.system == 'win32-msvc')
  cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

if ($cxx.class == 'msvc')
  cxx.coptions += /wd4251 /wd4275 /wd4800

cxx.poptions =+ "-I$out_root" "-I$src_root"

# Extract the copyright notice from the LICENSE file.
#
# Note that cat is a builtin which means this is both portable and fast.
#
if ($build.mode != 'skeleton')
  copyright = $process.run_regex(cat $src_root/LICENSE,    \\
                                 'Copyright \(c\) (.+)\.', \\
                                 '\1')

\
location: xsde/xsde-3.4.0.tar.gz
sha256sum: 1eb43107eca40e3f15fe68ef26932fe90b18a46d5d0e7343864b2d326aad003f
:
name: xsde-examples
version: 3.4.0
type: examples
language: c++
project: xsde
summary: Examples of using the XML Schema to C++ data binding compiler for\
 mobile and embedded systems
license: Unlicence
description:
\
# xsde-examples - XSD/e examples

This package contains examples for `xsde`, the XML Schema to C++ data binding
compiler for mobile and embedded systems.

The Embedded C++/Parser, C++/Serializer, and C++/Hybrid mapping examples can
be found in the `cxx/parser/`, `cxx/serializer/`, and `cxx/hybrid/`
subdirectories, respectively. For the summary of available examples for each
mapping, see `cxx/parser/README`, `cxx/serializer/README`, and
`cxx/hybrid/README`, respectively. Each example also comes with its own
`README` file that provides a detailed description of the functionality shown
as well as the steps to build and run it.

\
description-type: text/markdown;variant=GFM
url: https://www.codesynthesis.com/products/xsde/
doc-url: https://www.codesynthesis.com/products/xsde/
src-url: https://git.codesynthesis.com/cgit/xsde/xsde/
email: xsde-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends:
\
libxsde == 3.4.0
{
  prefer
  {
    config.libxsde.encoding                       = $encoding
    config.libxsde.stl                            = $stl
    config.libxsde.stl_iterator                   = $stl_iterator
    config.libxsde.iostream                       = $iostream
    config.libxsde.exceptions                     = $exceptions
    config.libxsde.long_long                      = $long_long
    config.libxsde.parser_validation              = $parser_validation
    config.libxsde.serializer_validation          = $serializer_validation
    config.libxsde.regexp                         = $regexp
    config.libxsde.reuse_style                    = $reuse_style
    config.libxsde.custom_allocator               = $custom_allocator
    config.libxsde.default_allocator              = $default_allocator
    config.libxsde.cdr                            = $cdr
    config.libxsde.xdr                            = $xdr
    config.libxsde.polymorphic                    = $polymorphic
    config.libxsde.parser_smap_buckets            = $parser_smap_buckets
    config.libxsde.parser_imap_buckets            = $parser_imap_buckets
    config.libxsde.serializer_smap_buckets        = $serializer_smap_buckets
    config.libxsde.serializer_smap_bucket_buckets = $serializer_smap_bucket_b\
uckets
    config.libxsde.serializer_imap_buckets        = $serializer_imap_buckets
    config.libxsde.external_expat                 = $external_expat
  }

  accept ($config.libxsde.encoding                       == $encoding        \
               &&           $config.libxsde.stl                            ==\
 $stl                            &&           $config.libxsde.stl_iterator   \
                == $stl_iterator                   &&          \
 $config.libxsde.iostream                       == $iostream                 \
      &&           $config.libxsde.exceptions                     ==\
 $exceptions                     &&           $config.libxsde.long_long      \
                == $long_long                      &&          \
 $config.libxsde.parser_validation              == $parser_validation        \
      &&           $config.libxsde.serializer_validation          ==\
 $serializer_validation          &&           $config.libxsde.regexp         \
                == $regexp                         &&          \
 $config.libxsde.reuse_style                    == $reuse_style              \
      &&           $config.libxsde.custom_allocator               ==\
 $custom_allocator               &&           $config.libxsde.default_allocat\
or              == $default_allocator              &&          \
 $config.libxsde.cdr                            == $cdr                      \
      &&           $config.libxsde.xdr                            == $xdr    \
                        &&           $config.libxsde.polymorphic             \
       == $polymorphic                    &&           $config.libxsde.parser\
_smap_buckets            == $parser_smap_buckets            &&          \
 $config.libxsde.parser_imap_buckets            == $parser_imap_buckets      \
      &&           $config.libxsde.serializer_smap_buckets        ==\
 $serializer_smap_buckets        &&           $config.libxsde.serializer_smap\
_bucket_buckets == $serializer_smap_bucket_buckets &&          \
 $config.libxsde.serializer_imap_buckets        == $serializer_imap_buckets  \
      &&           $config.libxsde.external_expat                 ==\
 $external_expat)
}
\
requires: libace ? ($cdr); CDR implementation library.
requires: libtirpc ? ($xdr && $cxx.target.class == 'linux'); XDR\
 implementation library.
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : not copyrighted - public domain

project = xsde-examples

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : not copyrighted - public domain

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

skeleton = ($build.mode == 'skeleton')

# For the semantics of the following configuration variables refer to
# libxsde/build/root.build.
#
config [string] config.xsde_examples.encoding ?= 'utf8'
encoding = $config.xsde_examples.encoding

assert ($encoding == 'utf8' || $encoding == 'iso8859-1') \\
  "invalid config.xsde_examples.encoding value '$encoding'"

config [bool] config.xsde_examples.stl ?= true
stl = $config.xsde_examples.stl

config [bool] config.xsde_examples.stl_iterator ?= true
stl_iterator = $config.xsde_examples.stl_iterator

config [bool] config.xsde_examples.iostream ?= true
iostream = $config.xsde_examples.iostream

config [bool] config.xsde_examples.exceptions ?= true
exceptions = $config.xsde_examples.exceptions

config [bool] config.xsde_examples.long_long ?= true
long_long = $config.xsde_examples.long_long

config [bool] config.xsde_examples.parser_validation ?= true
parser_validation = $config.xsde_examples.parser_validation

config [bool] config.xsde_examples.serializer_validation ?= true
serializer_validation = $config.xsde_examples.serializer_validation

config [bool] config.xsde_examples.regexp ?= true
regexp = $config.xsde_examples.regexp

config [string] config.xsde_examples.reuse_style ?= 'tiein'
reuse_style = $config.xsde_examples.reuse_style

assert ($reuse_style == 'mixin' || \\
        $reuse_style == 'tiein' || \\
        $reuse_style == 'none')    \\
  "invalid config.xsde_examples.reuse_style value '$reuse_style'"

config [bool] config.xsde_examples.custom_allocator ?= false
custom_allocator = $config.xsde_examples.custom_allocator

config [bool] config.xsde_examples.default_allocator ?= false
default_allocator = $config.xsde_examples.default_allocator

assert (!$default_allocator || $custom_allocator) \\
  "config.xsde_examples.default_allocator can only be true if\
 config.xsde_examples.custom_allocator is true"

config [bool] config.xsde_examples.cdr ?= false
cdr = $config.xsde_examples.cdr

config [bool] config.xsde_examples.xdr ?= false
xdr = $config.xsde_examples.xdr

config [bool] config.xsde_examples.polymorphic ?= false
polymorphic = $config.xsde_examples.polymorphic

config [uint64] config.xsde_examples.parser_smap_buckets ?= 389
parser_smap_buckets = $config.xsde_examples.parser_smap_buckets

config [uint64] config.xsde_examples.parser_imap_buckets ?= 769
parser_imap_buckets = $config.xsde_examples.parser_imap_buckets

config [uint64] config.xsde_examples.serializer_smap_buckets ?= 389
serializer_smap_buckets = $config.xsde_examples.serializer_smap_buckets

config [uint64] config.xsde_examples.serializer_smap_bucket_buckets ?= 389
serializer_smap_bucket_buckets = $config.xsde_examples.serializer_smap_bucket\
_buckets

config [uint64] config.xsde_examples.serializer_imap_buckets ?= 769
serializer_imap_buckets = $config.xsde_examples.serializer_imap_buckets

config [bool] config.xsde_examples.external_expat ?= false
external_expat = $config.xsde_examples.external_expat

if! $skeleton
{
  define xsd: file
  xsd{*}: extension = xsd

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

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

  if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

  if ($cxx.class == 'msvc')
    cxx.coptions += /wd4251 /wd4275 /wd4800

  # Import xsde that we are testing.
  #
  import! [metadata] xsde = xsde%exe{xsde}

  # Every exe{} in this project is by default a test.
  #
  exe{*}: test = true

  # Specify the test target for cross-testing.
  #
  test.target = $cxx.target

  common_ops = --generate-inline                                       \\
               --char-encoding $encoding                               \\
               (!$stl                      ? --no-stl              : ) \\
               (!$iostream                 ? --no-iostream         : ) \\
               (!$exceptions               ? --no-exceptions       : ) \\
               (!$long_long                ? --no-long-long        : ) \\
               ( $reuse_style == 'mixin'   ? --reuse-style-mixin   : ) \\
               ( $custom_allocator         ? --custom-allocator    : ) \\
               ( $polymorphic              ? --runtime-polymorphic : )

  cxx_parser_options = $common_ops                                          \\
                       --skel-file-suffix -pskel                            \\
                       (!$parser_validation     ? --suppress-validation : ) \\
                       ( $reuse_style == 'none' ? --reuse-style-none    : )

  cxx_hybrid_options = $common_ops                                           \
   \\
                       --pskel-file-suffix -pskel                            \
   \\
                       --pimpl-file-suffix -pimpl                            \
   \\
                       --sskel-file-suffix -sskel                            \
   \\
                       --simpl-file-suffix -simpl                            \
   \\
                       (!$parser_validation     ? --suppress-parser-val     :\
 ) \\
                       (!$serializer_validation ? --suppress-serializer-val :\
 )

  cxx_serializer_options = $common_ops                                       \
   \\
                           --skel-file-suffix -sskel                         \
   \\
                           (!$serializer_validation ? --suppress-validation :\
 ) \\
                           ( $reuse_style == 'none' ? --reuse-style-none    :\
 )
}

\
location: xsde/xsde-examples-3.4.0.tar.gz
sha256sum: 2c8d479eb52237e5453678a77d36a81e5dd4de7180f5fdc6fdc759b6bb895b8a
:
name: xsde-tests
version: 3.4.0
type: tests
language: c++
project: xsde
summary: Tests for the XML Schema to C++ data binding compiler for mobile and\
 embedded systems
license: other: GPL-2.0-only with FLOSS exception
description:
\
# xsde-tests - XSD/e tests

This package contains tests for `xsde`, the XML Schema to C++ data binding
compiler for mobile and embedded systems.

\
description-type: text/markdown;variant=GFM
url: https://www.codesynthesis.com/products/xsde/
doc-url: https://www.codesynthesis.com/products/xsde/
src-url: https://git.codesynthesis.com/cgit/xsde/xsde/
email: xsde-users@codesynthesis.com; Mailing list
depends: * build2 >= 0.17.0
depends: * bpkg >= 0.17.0
depends:
\
libxsde == 3.4.0
{
  prefer
  {
    config.libxsde.encoding                       = $encoding
    config.libxsde.stl                            = $stl
    config.libxsde.stl_iterator                   = $stl_iterator
    config.libxsde.iostream                       = $iostream
    config.libxsde.exceptions                     = $exceptions
    config.libxsde.long_long                      = $long_long
    config.libxsde.parser_validation              = $parser_validation
    config.libxsde.serializer_validation          = $serializer_validation
    config.libxsde.regexp                         = $regexp
    config.libxsde.reuse_style                    = $reuse_style
    config.libxsde.custom_allocator               = $custom_allocator
    config.libxsde.default_allocator              = $default_allocator
    config.libxsde.cdr                            = $cdr
    config.libxsde.xdr                            = $xdr
    config.libxsde.polymorphic                    = $polymorphic
    config.libxsde.parser_smap_buckets            = $parser_smap_buckets
    config.libxsde.parser_imap_buckets            = $parser_imap_buckets
    config.libxsde.serializer_smap_buckets        = $serializer_smap_buckets
    config.libxsde.serializer_smap_bucket_buckets = $serializer_smap_bucket_b\
uckets
    config.libxsde.serializer_imap_buckets        = $serializer_imap_buckets
    config.libxsde.external_expat                 = $external_expat
  }

  accept ($config.libxsde.encoding                       == $encoding        \
               &&           $config.libxsde.stl                            ==\
 $stl                            &&           $config.libxsde.stl_iterator   \
                == $stl_iterator                   &&          \
 $config.libxsde.iostream                       == $iostream                 \
      &&           $config.libxsde.exceptions                     ==\
 $exceptions                     &&           $config.libxsde.long_long      \
                == $long_long                      &&          \
 $config.libxsde.parser_validation              == $parser_validation        \
      &&           $config.libxsde.serializer_validation          ==\
 $serializer_validation          &&           $config.libxsde.regexp         \
                == $regexp                         &&          \
 $config.libxsde.reuse_style                    == $reuse_style              \
      &&           $config.libxsde.custom_allocator               ==\
 $custom_allocator               &&           $config.libxsde.default_allocat\
or              == $default_allocator              &&          \
 $config.libxsde.cdr                            == $cdr                      \
      &&           $config.libxsde.xdr                            == $xdr    \
                        &&           $config.libxsde.polymorphic             \
       == $polymorphic                    &&           $config.libxsde.parser\
_smap_buckets            == $parser_smap_buckets            &&          \
 $config.libxsde.parser_imap_buckets            == $parser_imap_buckets      \
      &&           $config.libxsde.serializer_smap_buckets        ==\
 $serializer_smap_buckets        &&           $config.libxsde.serializer_smap\
_bucket_buckets == $serializer_smap_bucket_buckets &&          \
 $config.libxsde.serializer_imap_buckets        == $serializer_imap_buckets  \
      &&           $config.libxsde.external_expat                 ==\
 $external_expat)
}
\
requires: libace ? ($cdr); CDR implementation library.
requires: libtirpc ? ($xdr && $cxx.target.class == 'linux'); XDR\
 implementation library.
bootstrap-build:
\
# file      : build/bootstrap.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

project = xsde-tests

using version
using config
using dist
using test

\
root-build:
\
# file      : build/root.build
# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file

cxx.std = latest

using cxx

hxx{*}: extension = hxx
ixx{*}: extension = ixx
txx{*}: extension = txx
cxx{*}: extension = cxx

skeleton = ($build.mode == 'skeleton')

# For the semantics of the following configuration variables refer to
# libxsde/build/root.build.
#
config [string] config.xsde_tests.encoding ?= 'utf8'
encoding = $config.xsde_tests.encoding

assert ($encoding == 'utf8' || $encoding == 'iso8859-1') \\
  "invalid config.xsde_tests.encoding value '$encoding'"

config [bool] config.xsde_tests.stl ?= true
stl = $config.xsde_tests.stl

config [bool] config.xsde_tests.stl_iterator ?= true
stl_iterator = $config.xsde_tests.stl_iterator

config [bool] config.xsde_tests.iostream ?= true
iostream = $config.xsde_tests.iostream

config [bool] config.xsde_tests.exceptions ?= true
exceptions = $config.xsde_tests.exceptions

config [bool] config.xsde_tests.long_long ?= true
long_long = $config.xsde_tests.long_long

config [bool] config.xsde_tests.parser_validation ?= true
parser_validation = $config.xsde_tests.parser_validation

config [bool] config.xsde_tests.serializer_validation ?= true
serializer_validation = $config.xsde_tests.serializer_validation

config [bool] config.xsde_tests.regexp ?= true
regexp = $config.xsde_tests.regexp

config [string] config.xsde_tests.reuse_style ?= 'tiein'
reuse_style = $config.xsde_tests.reuse_style

assert ($reuse_style == 'mixin' || \\
        $reuse_style == 'tiein' || \\
        $reuse_style == 'none')    \\
  "invalid config.xsde_tests.reuse_style value '$reuse_style'"

config [bool] config.xsde_tests.custom_allocator ?= false
custom_allocator = $config.xsde_tests.custom_allocator

config [bool] config.xsde_tests.default_allocator ?= false
default_allocator = $config.xsde_tests.default_allocator

assert (!$default_allocator || $custom_allocator) \\
  "config.xsde_tests.default_allocator can only be true if\
 config.xsde_tests.custom_allocator is true"

config [bool] config.xsde_tests.cdr ?= false
cdr = $config.xsde_tests.cdr

config [bool] config.xsde_tests.xdr ?= false
xdr = $config.xsde_tests.xdr

config [bool] config.xsde_tests.polymorphic ?= false
polymorphic = $config.xsde_tests.polymorphic

config [uint64] config.xsde_tests.parser_smap_buckets ?= 389
parser_smap_buckets = $config.xsde_tests.parser_smap_buckets

config [uint64] config.xsde_tests.parser_imap_buckets ?= 769
parser_imap_buckets = $config.xsde_tests.parser_imap_buckets

config [uint64] config.xsde_tests.serializer_smap_buckets ?= 389
serializer_smap_buckets = $config.xsde_tests.serializer_smap_buckets

config [uint64] config.xsde_tests.serializer_smap_bucket_buckets ?= 389
serializer_smap_bucket_buckets = $config.xsde_tests.serializer_smap_bucket_bu\
ckets

config [uint64] config.xsde_tests.serializer_imap_buckets ?= 769
serializer_imap_buckets = $config.xsde_tests.serializer_imap_buckets

config [bool] config.xsde_tests.external_expat ?= false
external_expat = $config.xsde_tests.external_expat

if! $skeleton
{
  define xsd: file
  xsd{*}: extension = xsd

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

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

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

  if ($cxx.target.system == 'win32-msvc')
    cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS

  if ($cxx.class == 'msvc')
    cxx.coptions += /wd4251 /wd4275 /wd4800

  # Import xsde that we are testing.
  #
  import! [metadata] xsde = xsde%exe{xsde}

  # Every exe{} in this project is by default a test.
  #
  exe{*}: test = true

  # Specify the test target for cross-testing.
  #
  test.target = $cxx.target

  common_ops = --generate-inline                                       \\
               --char-encoding $encoding                               \\
               (!$stl                      ? --no-stl              : ) \\
               (!$iostream                 ? --no-iostream         : ) \\
               (!$exceptions               ? --no-exceptions       : ) \\
               (!$long_long                ? --no-long-long        : ) \\
               ( $reuse_style == 'mixin'   ? --reuse-style-mixin   : ) \\
               ( $custom_allocator         ? --custom-allocator    : ) \\
               ( $polymorphic              ? --runtime-polymorphic : )


  cxx_parser_options = $common_ops                                          \\
                       --skel-file-suffix -pskel                            \\
                       (!$parser_validation     ? --suppress-validation : ) \\
                       ( $reuse_style == 'none' ? --reuse-style-none    : )

  cxx_hybrid_options = $common_ops                                           \
   \\
                       --pskel-file-suffix -pskel                            \
   \\
                       --pimpl-file-suffix -pimpl                            \
   \\
                       --sskel-file-suffix -sskel                            \
   \\
                       --simpl-file-suffix -simpl                            \
   \\
                       (!$parser_validation     ? --suppress-parser-val     :\
 ) \\
                       (!$serializer_validation ? --suppress-serializer-val :\
 )

  cxx_serializer_options = $common_ops                                       \
   \\
                           --skel-file-suffix -sskel                         \
   \\
                           (!$serializer_validation ? --suppress-validation :\
 ) \\
                           ( $reuse_style == 'none' ? --reuse-style-none    :\
 )
}

\
location: xsde/xsde-tests-3.4.0.tar.gz
sha256sum: 710fbdef163025bc70c168b1496f6d715775bdaafb1e833f9c96fc0a76a95e42
:
name: xsimd-examples
version: 8.0.3
project: libxsimd
summary: Examples package for xsimd
license: BSD-3-Clause; BSD 3-Clause "New" or "Revised" License.
description:
\
# ![xsimd](docs/source/xsimd.svg)

[![Appveyor](https://ci.appveyor.com/api/projects/status/wori7my48os31nu0?svg\
=true)](https://ci.appveyor.com/project/xtensor-stack/xsimd)
[![Azure](https://dev.azure.com/xtensor-stack/xtensor-stack/_apis/build/statu\
s/xtensor-stack.xsimd?branchName=master)](https://dev.azure.com/xtensor-stack\
/xtensor-stack/_build/latest?definitionId=3&branchName=master)
[![Documentation Status](http://readthedocs.org/projects/xsimd/badge/?version\
=latest)](https://xsimd.readthedocs.io/en/latest/?badge=latest)
[![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://g\
itter.im/QuantStack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-b\
adge&utm_content=badge)

C++ wrappers for SIMD intrinsics

## Introduction

SIMD (Single Instruction, Multiple Data) is a feature of microprocessors that\
 has been available for many years. SIMD instructions perform a single\
 operation
on a batch of values at once, and thus provide a way to significantly\
 accelerate code execution. However, these instructions differ between\
 microprocessor
vendors and compilers.

`xsimd` provides a unified means for using these features for library\
 authors. Namely, it enables manipulation of batches of numbers with the same\
 arithmetic
operators as for single values. It also provides accelerated implementation\
 of common mathematical functions operating on batches.

You can find out more about this implementation of C++ wrappers for SIMD\
 intrinsics at the [The C++ Scientist](http://johanmabille.github.io/blog/arc\
hives/).
The mathematical functions are a lightweight implementation of the algorithms\
 used in [boost.SIMD](https://github.com/NumScale/boost.simd).

`xsimd` requires a C++11 compliant compiler. The following C++ compilers are\
 supported:

Compiler                | Version
------------------------|-------------------------------
Microsoft Visual Studio | MSVC 2015 update 2 and above
g++                     | 4.9 and above
clang                   | 4.0 and above

The following SIMD instruction set extensions are supported:

Architecture | Instruction set extensions
-------------|-----------------------------------------------------
x86          | SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, FMA3, AVX2
x86          | AVX512 (gcc7 and higher)
x86 AMD      | same as above + SSE4A, FMA4, XOP
ARM          | ARMv7, ARMv8

## Installation

### Install from conda-forge

A package for xsimd is available on the mamba (or conda) package manager.

```bash
mamba install -c conda-forge xsimd
```

### Install with Spack

A package for xsimd is available on the Spack package manager.

```bash
spack install xsimd
spack load xsimd
```

### Install from sources

You can directly install it from the sources with cmake:

```bash
cmake -D CMAKE_INSTALL_PREFIX=your_install_prefix
make install
```

## Documentation

To get started with using `xsimd`, check out the full documentation

http://xsimd.readthedocs.io/

## Dependencies

`xsimd` has an optional dependency on the [xtl](https://github.com/xtensor-st\
ack/xtl) library:

| `xsimd` | `xtl` (optional) |
|---------|------------------|
|  master |     ^0.7.0       |
|  8.x    |     ^0.7.0       |
|  7.x    |     ^0.7.0       |

The dependency on `xtl` is required if you want to support vectorization for\
 `xtl::xcomplex`. In this case, you must build your project with C++14\
 support enabled.

## Usage

The version 8 of the library is a complete rewrite and there are some slight\
 differences with 7.x versions.
A migration guide will be available soon. In the meanwhile, the following\
 examples show how to use both versions
7 and 8 of the library?

### Explicit use of an instruction set extension (8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, xs::avx2> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, xs::avx2> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Explicit use of an instruction set extension (7.x and 8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, 4> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, 4> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Auto detection of the instruction set extension to be used (7.x)

The same computation operating on vectors and using the most performant\
 instruction set available:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    std::size_t size = a.size();
    constexpr std::size_t simd_size = xsimd::simd_type<double>::size;
    std::size_t vec_size = size - size % simd_size;

    for(std::size_t i = 0; i < vec_size; i += simd_size)
    {
        auto ba = xs::load_aligned(&a[i]);
        auto bb = xs::load_aligned(&b[i]);
        auto bres = (ba + bb) / 2.;
        bres.store_aligned(&res[i]);
    }
    for(std::size_t i = vec_size; i < size; ++i)
    {
        res[i] = (a[i] + b[i]) / 2.;
    }
}
```

We also implement STL algorithms to work optimally on batches. Using\
 `xsimd::transform`
the loop from the example becomes:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"
#include "xsimd/stl/algorithms.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    xsimd::transform(a.begin(), a.end(), b.begin(), res.begin(),
                     [](const auto& x, const auto& y) { (x + y) / 2.; });
}
```


## Building and Running the Tests

Building the tests requires the [GTest](https://github.com/google/googletest)\
 testing framework and [cmake](https://cmake.org).

gtest and cmake are available as a packages for most linux distributions.\
 Besides, they can also be installed with the `conda` package manager (even\
 on windows):

```bash
conda install -c conda-forge gtest cmake
```

Once `gtest` and `cmake` are installed, you can build and run the tests:

```bash
mkdir build
cd build
cmake ../ -DBUILD_TESTS=ON
make xtest
```

In the context of continuous integration with Travis CI, tests are run in a\
 `conda` environment, which can be activated with

```bash
cd test
conda env create -f ./test-environment.yml
source activate test-xsimd
cd ..
cmake . -DBUILD_TESTS=ON
make xtest
```

## Building the HTML Documentation

xsimd's documentation is built with three tools

 - [doxygen](http://www.doxygen.org)
 - [sphinx](http://www.sphinx-doc.org)
 - [breathe](https://breathe.readthedocs.io)

While doxygen must be installed separately, you can install breathe by typing

```bash
pip install breathe
```

Breathe can also be installed with `conda`

```bash
conda install -c conda-forge breathe
```

Finally, build the documentation with

```bash
make html
```

from the `docs` subdirectory.

## License

We use a shared copyright model that enables all contributors to maintain the
copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the\
 [LICENSE](LICENSE) file for details.

\
description-type: text/markdown;variant=GFM
url: https://github.com/xtensor-stack/xsimd.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = xsimd-examples

using version
using config
using install
using dist
using test
\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

\
location: libxsimd/xsimd-examples-8.0.3.tar.gz
sha256sum: 250f6815aa0f4b28b1ffc89501ecc05f01a167ee81b6a8bc6b5fcd156e4556ae
:
name: xsimd-examples
version: 8.0.4
project: libxsimd
summary: Examples package for xsimd
license: BSD-3-Clause; BSD 3-Clause "New" or "Revised" License.
description:
\
# ![xsimd](docs/source/xsimd.svg)

[![Appveyor](https://ci.appveyor.com/api/projects/status/wori7my48os31nu0?svg\
=true)](https://ci.appveyor.com/project/xtensor-stack/xsimd)
[![Azure](https://dev.azure.com/xtensor-stack/xtensor-stack/_apis/build/statu\
s/xtensor-stack.xsimd?branchName=master)](https://dev.azure.com/xtensor-stack\
/xtensor-stack/_build/latest?definitionId=3&branchName=master)
[![Documentation Status](http://readthedocs.org/projects/xsimd/badge/?version\
=latest)](https://xsimd.readthedocs.io/en/latest/?badge=latest)
[![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://g\
itter.im/QuantStack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-b\
adge&utm_content=badge)

C++ wrappers for SIMD intrinsics

## Introduction

SIMD (Single Instruction, Multiple Data) is a feature of microprocessors that\
 has been available for many years. SIMD instructions perform a single\
 operation
on a batch of values at once, and thus provide a way to significantly\
 accelerate code execution. However, these instructions differ between\
 microprocessor
vendors and compilers.

`xsimd` provides a unified means for using these features for library\
 authors. Namely, it enables manipulation of batches of numbers with the same\
 arithmetic
operators as for single values. It also provides accelerated implementation\
 of common mathematical functions operating on batches.

You can find out more about this implementation of C++ wrappers for SIMD\
 intrinsics at the [The C++ Scientist](http://johanmabille.github.io/blog/arc\
hives/).
The mathematical functions are a lightweight implementation of the algorithms\
 used in [boost.SIMD](https://github.com/NumScale/boost.simd).

`xsimd` requires a C++11 compliant compiler. The following C++ compilers are\
 supported:

Compiler                | Version
------------------------|-------------------------------
Microsoft Visual Studio | MSVC 2015 update 2 and above
g++                     | 4.9 and above
clang                   | 4.0 and above

The following SIMD instruction set extensions are supported:

Architecture | Instruction set extensions
-------------|-----------------------------------------------------
x86          | SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, FMA3, AVX2
x86          | AVX512 (gcc7 and higher)
x86 AMD      | same as above + SSE4A, FMA4, XOP
ARM          | ARMv7, ARMv8

## Installation

### Install from conda-forge

A package for xsimd is available on the mamba (or conda) package manager.

```bash
mamba install -c conda-forge xsimd
```

### Install with Spack

A package for xsimd is available on the Spack package manager.

```bash
spack install xsimd
spack load xsimd
```

### Install from sources

You can directly install it from the sources with cmake:

```bash
cmake -D CMAKE_INSTALL_PREFIX=your_install_prefix
make install
```

## Documentation

To get started with using `xsimd`, check out the full documentation

http://xsimd.readthedocs.io/

## Dependencies

`xsimd` has an optional dependency on the [xtl](https://github.com/xtensor-st\
ack/xtl) library:

| `xsimd` | `xtl` (optional) |
|---------|------------------|
|  master |     ^0.7.0       |
|  8.x    |     ^0.7.0       |
|  7.x    |     ^0.7.0       |

The dependency on `xtl` is required if you want to support vectorization for\
 `xtl::xcomplex`. In this case, you must build your project with C++14\
 support enabled.

## Usage

The version 8 of the library is a complete rewrite and there are some slight\
 differences with 7.x versions.
A migration guide will be available soon. In the meanwhile, the following\
 examples show how to use both versions
7 and 8 of the library?

### Explicit use of an instruction set extension (8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, xs::avx2> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, xs::avx2> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Explicit use of an instruction set extension (7.x and 8.x)

Here is an example that computes the mean of two sets of 4 double floating\
 point values, assuming AVX extension is supported:
```cpp
#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, 4> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, 4> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}
```

Do not forget to enable AVX extension when building the example. With gcc or\
 clang, this is done with the `-march=native` flag,
on MSVC you have to pass the `/arch:AVX` option.

This example outputs:

```cpp
(2.0, 3.0, 4.0, 5.0)
```

### Auto detection of the instruction set extension to be used (7.x)

The same computation operating on vectors and using the most performant\
 instruction set available:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    std::size_t size = a.size();
    constexpr std::size_t simd_size = xsimd::simd_type<double>::size;
    std::size_t vec_size = size - size % simd_size;

    for(std::size_t i = 0; i < vec_size; i += simd_size)
    {
        auto ba = xs::load_aligned(&a[i]);
        auto bb = xs::load_aligned(&b[i]);
        auto bres = (ba + bb) / 2.;
        bres.store_aligned(&res[i]);
    }
    for(std::size_t i = vec_size; i < size; ++i)
    {
        res[i] = (a[i] + b[i]) / 2.;
    }
}
```

We also implement STL algorithms to work optimally on batches. Using\
 `xsimd::transform`
the loop from the example becomes:

```cpp
#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"
#include "xsimd/stl/algorithms.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    xsimd::transform(a.begin(), a.end(), b.begin(), res.begin(),
                     [](const auto& x, const auto& y) { (x + y) / 2.; });
}
```


## Building and Running the Tests

Building the tests requires the [GTest](https://github.com/google/googletest)\
 testing framework and [cmake](https://cmake.org).

gtest and cmake are available as a packages for most linux distributions.\
 Besides, they can also be installed with the `conda` package manager (even\
 on windows):

```bash
conda install -c conda-forge gtest cmake
```

Once `gtest` and `cmake` are installed, you can build and run the tests:

```bash
mkdir build
cd build
cmake ../ -DBUILD_TESTS=ON
make xtest
```

In the context of continuous integration with Travis CI, tests are run in a\
 `conda` environment, which can be activated with

```bash
cd test
conda env create -f ./test-environment.yml
source activate test-xsimd
cd ..
cmake . -DBUILD_TESTS=ON
make xtest
```

## Building the HTML Documentation

xsimd's documentation is built with three tools

 - [doxygen](http://www.doxygen.org)
 - [sphinx](http://www.sphinx-doc.org)
 - [breathe](https://breathe.readthedocs.io)

While doxygen must be installed separately, you can install breathe by typing

```bash
pip install breathe
```

Breathe can also be installed with `conda`

```bash
conda install -c conda-forge breathe
```

Finally, build the documentation with

```bash
make html
```

from the `docs` subdirectory.

## License

We use a shared copyright model that enables all contributors to maintain the
copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the\
 [LICENSE](LICENSE) file for details.

\
description-type: text/markdown;variant=GFM
url: https://github.com/xtensor-stack/xsimd.git
email: swat.somebug@gmail.com
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
bootstrap-build:
\
project = xsimd-examples

using version
using config
using install
using dist
using test
\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = hpp
ixx{*}: extension = ipp
txx{*}: extension = tpp
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

\
location: libxsimd/xsimd-examples-8.0.4.tar.gz
sha256sum: bff9c3c76b6a2b99c8738bca8452eb7e5debc12a5ebd3419d30c6aa5b107dc94
:
name: xxd
version: 8.2.3075+2
upstream-version: 20200204
summary: Vim xxd hexdump utility
license: X11 OR LGPL-2.0-only
description:
\
# xxd - Vim hexdump utility

This is a `build2` package for the Vim
[`xxd`](https://github.com/vim/vim/tree/master/src/xxd) executable. It creates
a hexdump of a given file or standard input. It can also convert a hexdump
back to its original binary form. One notable `xxd` mode is `-i|--include`,
which generates a C array definition of the input that can be used to embed
binary data into C/C++ programs. This functionality is the primary reason for
the use of this package.

Note that the `xxd` executable in this page provides `build2` metadata.


## Usage

To start using `xxd` in your project, add the following build-time `depends`
value to your `manifest`, adjusting the version constraint as appropriate:

```
depends: * xxd >= 8.2.3075
```

Then import the executable in your `buildfile`:

```
import! [metadata] xxd = xxd%exe{xxd}
```

While the default output of the `-i|--include` mode is a bit old school (using
`unsigned int` instead of `size_t`) and the array/length names are derived
from the input file name (including directories), `xxd` can also produce just
the array values allowing us to wrap it into an array of our choice. Below are
some examples of `build2` ad hoc recipes:

```
# Use the default output. Array and length names will be binary_bin and
# binary_bin_len.
#
cxx{binary}: file{binary.bin} $xxd
{{
  i = $path($<[0])
  env --cwd $directory($i) -- $xxd -i $leaf($i) >$path($>)
}}
```

```
# Use just the file name without the extension for names and size_t for
# length.
#
cxx{binary}: file{binary.bin} $xxd
{{
  i = $path($<[0]) # Input.
  o = $path($>)    # Output.
  n = $name($<[0]) # Array name.

  echo "#include <cstddef>"                     >$o
  echo "unsigned char $n[] = {"                >>$o
  $xxd -i <$i                                  >>$o
  echo "};"                                    >>$o
  echo "std::size_t $(n)_len = sizeof \($n\);" >>$o
}}
```

```
# Generate both the header with declarations and the source file with
# definitions.
#
<{hxx cxx}{binary}>: file{binary.bin} $xxd
{{
  i = $path($<[0]) # Input.
  h = $path($>[0]) # Output header.
  s = $path($>[1]) # Output source.
  n = $name($<[0]) # Array name.

  # Get the position of the last byte (in hex).
  #
  $xxd -s -1 -l 1 $i | sed -n -e 's/^([0-9a-f]+):.*$/\1/p' - | set pos

  if ($empty($pos))
    exit "unable to extract input size from xxd output"
  end

  # Write the header and source.
  #
  echo "#pragma once"                          >$h
  echo "extern unsigned char $n[0x$pos + 1];" >>$h

  echo "unsigned char $n[0x$pos + 1] = {"      >$s
  $xxd -i <$i                                 >>$s
  echo '};'                                   >>$s
}}
```

\
description-type: text/markdown;variant=GFM
url: https://github.com/vim/vim/tree/master/src/xxd
package-url: https://github.com/build2-packaging/xxd
package-email: boris@codesynthesis.com
build-error-email: builds@build2.org
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
requires: host
bootstrap-build:
\
project = xxd

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: xxd/xxd-8.2.3075+2.tar.gz
sha256sum: 16ed672dfea37e307f5611e1f2d48a058359c2bbfbb410c709eb694c2a1ce098
:
name: xxhash
version: 0.8.1
summary: Extremely fast non-cryptographic hash algorithm
license: BSD-2-Clause
description:
\

xxHash - Extremely fast hash algorithm
======================================

xxHash is an Extremely fast Hash algorithm, running at RAM speed limits.
It successfully completes the [SMHasher](https://code.google.com/p/smhasher/w\
iki/SMHasher) test suite
which evaluates collision, dispersion and randomness qualities of hash\
 functions.
Code is highly portable, and hashes are identical across all platforms\
 (little / big endian).

|Branch      |Status   |
|------------|---------|
|dev         | [![Build Status](https://github.com/Cyan4973/xxHash/actions/wo\
rkflows/ci.yml/badge.svg?branch=dev)](https://github.com/Cyan4973/xxHash/acti\
ons?query=branch%3Adev+) |


Benchmarks
-------------------------

The reference system uses an Intel i7-9700K cpu, and runs Ubuntu x64 20.04.
The [open source benchmark program] is compiled with `clang` v10.0 using\
 `-O3` flag.

| Hash Name     | Width | Bandwidth (GB/s) | Small Data Velocity | Quality |\
 Comment |
| ---------     | ----- | ---------------- | ----- | --- | --- |
| __XXH3__ (SSE2) |  64 | 31.5 GB/s        | 133.1 | 10
| __XXH128__ (SSE2) | 128 | 29.6 GB/s      | 118.1 | 10
| _RAM sequential read_ | N/A | 28.0 GB/s  |   N/A | N/A | _for reference_
| City64        |    64 | 22.0 GB/s        |  76.6 | 10
| T1ha2         |    64 | 22.0 GB/s        |  99.0 |  9 | Slightly worse\
 [collisions]
| City128       |   128 | 21.7 GB/s        |  57.7 | 10
| __XXH64__     |    64 | 19.4 GB/s        |  71.0 | 10
| SpookyHash    |    64 | 19.3 GB/s        |  53.2 | 10
| Mum           |    64 | 18.0 GB/s        |  67.0 |  9 | Slightly worse\
 [collisions]
| __XXH32__     |    32 |  9.7 GB/s        |  71.9 | 10
| City32        |    32 |  9.1 GB/s        |  66.0 | 10
| Murmur3       |    32 |  3.9 GB/s        |  56.1 | 10
| SipHash       |    64 |  3.0 GB/s        |  43.2 | 10
| FNV64         |    64 |  1.2 GB/s        |  62.7 |  5 | Poor avalanche\
 properties
| Blake2        |   256 |  1.1 GB/s        |   5.1 | 10 | Cryptographic
| SHA1          |   160 |  0.8 GB/s        |   5.6 | 10 | Cryptographic but\
 broken
| MD5           |   128 |  0.6 GB/s        |   7.8 | 10 | Cryptographic but\
 broken

[open source benchmark program]: https://github.com/Cyan4973/xxHash/tree/rele\
ase/tests/bench
[collisions]: https://github.com/Cyan4973/xxHash/wiki/Collision-ratio-compari\
son#collision-study

note 1: Small data velocity is a _rough_ evaluation of algorithm's efficiency\
 on small data. For more detailed analysis, please refer to next paragraph.

note 2: some algorithms feature _faster than RAM_ speed. In which case, they\
 can only reach their full speed when input data is already in CPU cache (L3\
 or better). Otherwise, they max out on RAM speed limit.

### Small data

Performance on large data is only one part of the picture.
Hashing is also very useful in constructions like hash tables and bloom\
 filters.
In these use cases, it's frequent to hash a lot of small data (starting at a\
 few bytes).
Algorithm's performance can be very different for such scenarios, since parts\
 of the algorithm,
such as initialization or finalization, become fixed cost.
The impact of branch mis-prediction also becomes much more present.

XXH3 has been designed for excellent performance on both long and small\
 inputs,
which can be observed in the following graph:

![XXH3, latency, random size](https://user-images.githubusercontent.com/75008\
1/61976089-aedeab00-af9f-11e9-9239-e5375d6c080f.png)

For a more detailed analysis, visit the wiki :
https://github.com/Cyan4973/xxHash/wiki/Performance-comparison#benchmarks-con\
centrating-on-small-data-

Quality
-------------------------

Speed is not the only property that matters.
Produced hash values must respect excellent dispersion and randomness\
 properties,
so that any sub-section of it can be used to maximally spread out a table or\
 index,
as well as reduce the amount of collisions to the minimal theoretical level,\
 following the [birthday paradox].

`xxHash` has been tested with Austin Appleby's excellent SMHasher test suite,
and passes all tests, ensuring reasonable quality levels.
It also passes extended tests from [newer forks of SMHasher], featuring\
 additional scenarios and conditions.

Finally, xxHash provides its own [massive collision tester](https://github.co\
m/Cyan4973/xxHash/tree/dev/tests/collisions),
able to generate and compare billions of hashes to test the limits of 64-bit\
 hash algorithms.
On this front too, xxHash features good results, in line with the [birthday\
 paradox].
A more detailed analysis is documented [in the wiki](https://github.com/Cyan4\
973/xxHash/wiki/Collision-ratio-comparison).

[birthday paradox]: https://en.wikipedia.org/wiki/Birthday_problem
[newer forks of SMHasher]: https://github.com/rurban/smhasher


### Build modifiers

The following macros can be set at compilation time to modify libxxhash's\
 behavior. They are generally disabled by default.

- `XXH_INLINE_ALL`: Make all functions `inline`, with implementations being\
 directly included within `xxhash.h`.
                    Inlining functions is beneficial for speed on small keys.
                    It's _extremely effective_ when key length is expressed\
 as _a compile time constant_,
                    with performance improvements observed in the +200% range\
 .
                    See [this article](https://fastcompression.blogspot.com/2\
018/03/xxhash-for-small-keys-impressive-power.html) for details.
- `XXH_PRIVATE_API`: same outcome as `XXH_INLINE_ALL`. Still available for\
 legacy support.
                     The name underlines that `XXH_*` symbols will not be\
 exported.
- `XXH_NAMESPACE`: Prefixes all symbols with the value of `XXH_NAMESPACE`.
                   This macro can only use compilable character set.
                   Useful to evade symbol naming collisions,
                   in case of multiple inclusions of xxHash's source code.
                   Client applications still use the regular function names,
                   as symbols are automatically translated through `xxhash.h`.
- `XXH_FORCE_MEMORY_ACCESS`: The default method `0` uses a portable\
 `memcpy()` notation.
                             Method `1` uses a gcc-specific `packed`\
 attribute, which can provide better performance for some targets.
                             Method `2` forces unaligned reads, which is not\
 standards compliant, but might sometimes be the only way to extract better\
 read performance.
                             Method `3` uses a byteshift operation, which is\
 best for old compilers which don't inline `memcpy()` or big-endian systems\
 without a byteswap instruction
- `XXH_FORCE_ALIGN_CHECK`: Use a faster direct read path when input is\
 aligned.
                           This option can result in dramatic performance\
 improvement when input to hash is aligned on 32 or 64-bit boundaries,
                           when running on architectures unable to load\
 memory from unaligned addresses, or suffering a performance penalty from it.
                           It is (slightly) detrimental on platform with good\
 unaligned memory access performance (same instruction for both aligned and\
 unaligned accesses).
                           This option is automatically disabled on `x86`,\
 `x64` and `aarch64`, and enabled on all other platforms.
- `XXH_VECTOR` : manually select a vector instruction set (default:\
 auto-selected at compilation time). Available instruction sets are\
 `XXH_SCALAR`, `XXH_SSE2`, `XXH_AVX2`, `XXH_AVX512`, `XXH_NEON` and\
 `XXH_VSX`. Compiler may require additional flags to ensure proper support\
 (for example, `gcc` on linux will require `-mavx2` for AVX2, and `-mavx512f`\
 for AVX512).
- `XXH_NO_PREFETCH` : disable prefetching. Some platforms or situations may\
 perform better without prefetching. XXH3 only.
- `XXH_PREFETCH_DIST` : select prefetching distance. For close-to-metal\
 adaptation to specific hardware platforms. XXH3 only.
- `XXH_NO_INLINE_HINTS`: By default, xxHash uses `__attribute__((always_inlin\
e))` and `__forceinline` to improve performance at the cost of code size.
                         Defining this macro to 1 will mark all internal\
 functions as `static`, allowing the compiler to decide whether to inline a\
 function or not.
                         This is very useful when optimizing for smallest\
 binary size,
                         and is automatically defined when compiling with\
 `-O0`, `-Os`, `-Oz`, or `-fno-inline` on GCC and Clang.
                         This may also increase performance depending on\
 compiler and architecture.
- `XXH32_ENDJMP`: Switch multi-branch finalization stage of XXH32 by a single\
 jump.
                  This is generally undesirable for performance, especially\
 when hashing inputs of random sizes.
                  But depending on exact architecture and compiler, a jump\
 might provide slightly better performance on small inputs. Disabled by\
 default.
- `XXH_STATIC_LINKING_ONLY`: gives access to internal state declaration,\
 required for static allocation.
                             Incompatible with dynamic linking, due to risks\
 of ABI changes.
- `XXH_NO_XXH3` : removes symbols related to `XXH3` (both 64 & 128 bits) from\
 generated binary.
                  Useful to reduce binary size, notably for applications\
 which do not use `XXH3`.
- `XXH_NO_LONG_LONG`: removes compilation of algorithms relying on 64-bit\
 types (XXH3 and XXH64). Only XXH32 will be compiled.
                      Useful for targets (architectures and compilers)\
 without 64-bit support.
- `XXH_IMPORT`: MSVC specific: should only be defined for dynamic linking, as\
 it prevents linkage errors.
- `XXH_CPU_LITTLE_ENDIAN`: By default, endianness is determined by a runtime\
 test resolved at compile time.
                           If, for some reason, the compiler cannot simplify\
 the runtime test, it can cost performance.
                           It's possible to skip auto-detection and simply\
 state that the architecture is little-endian by setting this macro to 1.
                           Setting it to 0 states big-endian.
- `XXH_DEBUGLEVEL` : When set to any value >= 1, enables `assert()`\
 statements.
                     This (slightly) slows down execution, but may help\
 finding bugs during debugging sessions.

When compiling the Command Line Interface `xxhsum` with `make`, the following\
 environment variables can also be set :
- `DISPATCH=1` : use `xxh_x86dispatch.c`, to automatically select between\
 `scalar`, `sse2`, `avx2` or `avx512` instruction set at runtime, depending\
 on local host. This option is only valid for `x86`/`x64` systems.


### Building xxHash - Using vcpkg

You can download and install xxHash using the [vcpkg](https://github.com/Micr\
osoft/vcpkg) dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install xxhash

The xxHash port in vcpkg is kept up to date by Microsoft team members and\
 community contributors. If the version is out of date, please [create an\
 issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg\
 repository.


### Example

The simplest example calls xxhash 64-bit variant as a one-shot function
generating a hash value from a single buffer, and invoked from a C/C++\
 program:

```C
#include "xxhash.h"

    (...)
    XXH64_hash_t hash = XXH64(buffer, size, seed);
}
```

Streaming variant is more involved, but makes it possible to provide data\
 incrementally:

```C
#include "stdlib.h"   /* abort() */
#include "xxhash.h"


XXH64_hash_t calcul_hash_streaming(FileHandler fh)
{
    /* create a hash state */
    XXH64_state_t* const state = XXH64_createState();
    if (state==NULL) abort();

    size_t const bufferSize = SOME_SIZE;
    void* const buffer = malloc(bufferSize);
    if (buffer==NULL) abort();

    /* Initialize state with selected seed */
    XXH64_hash_t const seed = 0;   /* or any other value */
    if (XXH64_reset(state, seed) == XXH_ERROR) abort();

    /* Feed the state with input data, any size, any number of times */
    (...)
    while ( /* some data left */ ) {
        size_t const length = get_more_data(buffer, bufferSize, fh);
        if (XXH64_update(state, buffer, length) == XXH_ERROR) abort();
        (...)
    }
    (...)

    /* Produce the final hash value */
    XXH64_hash_t const hash = XXH64_digest(state);

    /* State could be re-used; but in this example, it is simply freed  */
    free(buffer);
    XXH64_freeState(state);

    return hash;
}
```


### License

The library files `xxhash.c` and `xxhash.h` are BSD licensed.
The utility `xxhsum` is GPL licensed.


### Other programming languages

Beyond the C reference version,
xxHash is also available from many different programming languages,
thanks to great contributors.
They are [listed here](http://www.xxhash.com/#other-languages).


### Packaging status

Many distributions bundle a package manager
which allows easy xxhash installation as both a `libxxhash` library
and `xxhsum` command line interface.

[![Packaging status](https://repology.org/badge/vertical-allrepos/xxhash.svg)\
](https://repology.org/project/xxhash/versions)


### Special Thanks

- Takayuki Matsuoka, aka @t-mat, for creating `xxhsum -c` and great support\
 during early xxh releases
- Mathias Westerdahl, aka @JCash, for introducing the first version of `XXH64`
- Devin Hussey, aka @easyaspi314, for incredible low-level optimizations on\
 `XXH3` and `XXH128`

\
description-type: text/markdown;variant=GFM
url: https://cyan4973.github.io/xxHash/
src-url: https://github.com/Cyan4973/xxHash
depends: * build2 >= 0.14.0
depends: * bpkg >= 0.14.0
bootstrap-build:
\
project = xxhash

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

\
location: xxhash/xxhash-0.8.1.tar.gz
sha256sum: fd650d74791ee6157b72d0829baea021105e3b684ff99b93c9b76478f43ce7d7
:
name: yaml-cpp
version: 0.7.0
summary: yaml-cpp is a YAML parser and emitter in C++ matching the YAML 1.2\
 spec
license: MIT
description:
\
# yaml-cpp [![Build Status](https://travis-ci.org/jbeder/yaml-cpp.svg?branch=\
master)](https://travis-ci.org/jbeder/yaml-cpp) [![Documentation](https://cod\
edocs.xyz/jbeder/yaml-cpp.svg)](https://codedocs.xyz/jbeder/yaml-cpp/)

yaml-cpp is a [YAML](http://www.yaml.org/) parser and emitter in C++ matching\
 the [YAML 1.2 spec](http://www.yaml.org/spec/1.2/spec.html).

To get a feel for how it can be used, see the [Tutorial](https://github.com/j\
beder/yaml-cpp/wiki/Tutorial) or [How to Emit YAML](https://github.com/jbeder\
/yaml-cpp/wiki/How-To-Emit-YAML). For the old API (version < 0.5.0), see [How\
 To Parse A Document](https://github.com/jbeder/yaml-cpp/wiki/How-To-Parse-A-\
Document-(Old-API)).

# Problems? #

If you find a bug, post an [issue](https://github.com/jbeder/yaml-cpp/issues)\
! If you have questions about how to use yaml-cpp, please post it on\
 http://stackoverflow.com and tag it [`yaml-cpp`](http://stackoverflow.com/qu\
estions/tagged/yaml-cpp).

# How to Build #

yaml-cpp uses [CMake](http://www.cmake.org) to support cross-platform\
 building. The basic steps to build are:

1. Download and install [CMake](http://www.cmake.org) (Resources -> Download).

**Note:** If you don't use the provided installer for your platform, make\
 sure that you add CMake's bin folder to your path.

2. Navigate into the source directory, and type:

```
mkdir build
cd build
```

3. Run CMake. The basic syntax is:

```
cmake [-G generator] [-DYAML_BUILD_SHARED_LIBS=ON|OFF] ..
```

  * The `generator` is whatever type of build system you'd like to use. To\
 see a full list of generators on your platform, just run `cmake` (with no\
 arguments). For example:
    * On Windows, you might use "Visual Studio 12 2013" to generate a Visual\
 Studio 2013 solution or "Visual Studio 14 2015 Win64" to generate a 64-bit\
 Visual Studio 2015 solution.
    * On OS X, you might use "Xcode" to generate an Xcode project
    * On a UNIX-y system, simply omit the option to generate a makefile

  * yaml-cpp defaults to building a static library, but you may build a\
 shared library by specifying `-DYAML_BUILD_SHARED_LIBS=ON`.

  * For more options on customizing the build, see the [CMakeLists.txt](https\
://github.com/jbeder/yaml-cpp/blob/master/CMakeLists.txt) file.

4. Build it!

5. To clean up, just remove the `build` directory.

# Recent Release #

[yaml-cpp 0.6.0](https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.6\
.0) has been released! This release requires C++11, and no longer depends on\
 Boost.

[yaml-cpp 0.3.0](https://github.com/jbeder/yaml-cpp/releases/tag/release-0.3.\
0) is still available if you want the old API.

**The old API will continue to be supported, and will still receive\
 bugfixes!** The 0.3.x and 0.4.x versions will be old API releases, and 0.5.x\
 and above will all be new API releases.

# API Documentation 

The autogenerated API reference is hosted on [CodeDocs](https://codedocs.xyz/\
jbeder/yaml-cpp/index.html)

# Third Party Integrations

The following projects are not officially supported:

- [Qt wrapper](https://gist.github.com/brcha/d392b2fe5f1e427cc8a6)

\
description-type: text/markdown;variant=GFM
url: https://github.com/jbeder/yaml-cpp
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
requires: c++11
tests: yaml-cpp-tests == 0.7.0
bootstrap-build:
\
project = yaml-cpp

using version
using config
using install
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

\
location: yaml-cpp/yaml-cpp-0.7.0.tar.gz
sha256sum: 4b87dddebac013338a81912c5ff95f3c4d923812eab77b19195ce4b363f58af1
:
name: yaml-cpp-tests
version: 0.7.0
project: yaml-cpp
summary: Tests package for yaml-cpp library
license: MIT
description:
\
# yaml-cpp [![Build Status](https://travis-ci.org/jbeder/yaml-cpp.svg?branch=\
master)](https://travis-ci.org/jbeder/yaml-cpp) [![Documentation](https://cod\
edocs.xyz/jbeder/yaml-cpp.svg)](https://codedocs.xyz/jbeder/yaml-cpp/)

yaml-cpp is a [YAML](http://www.yaml.org/) parser and emitter in C++ matching\
 the [YAML 1.2 spec](http://www.yaml.org/spec/1.2/spec.html).

To get a feel for how it can be used, see the [Tutorial](https://github.com/j\
beder/yaml-cpp/wiki/Tutorial) or [How to Emit YAML](https://github.com/jbeder\
/yaml-cpp/wiki/How-To-Emit-YAML). For the old API (version < 0.5.0), see [How\
 To Parse A Document](https://github.com/jbeder/yaml-cpp/wiki/How-To-Parse-A-\
Document-(Old-API)).

# Problems? #

If you find a bug, post an [issue](https://github.com/jbeder/yaml-cpp/issues)\
! If you have questions about how to use yaml-cpp, please post it on\
 http://stackoverflow.com and tag it [`yaml-cpp`](http://stackoverflow.com/qu\
estions/tagged/yaml-cpp).

# How to Build #

yaml-cpp uses [CMake](http://www.cmake.org) to support cross-platform\
 building. The basic steps to build are:

1. Download and install [CMake](http://www.cmake.org) (Resources -> Download).

**Note:** If you don't use the provided installer for your platform, make\
 sure that you add CMake's bin folder to your path.

2. Navigate into the source directory, and type:

```
mkdir build
cd build
```

3. Run CMake. The basic syntax is:

```
cmake [-G generator] [-DYAML_BUILD_SHARED_LIBS=ON|OFF] ..
```

  * The `generator` is whatever type of build system you'd like to use. To\
 see a full list of generators on your platform, just run `cmake` (with no\
 arguments). For example:
    * On Windows, you might use "Visual Studio 12 2013" to generate a Visual\
 Studio 2013 solution or "Visual Studio 14 2015 Win64" to generate a 64-bit\
 Visual Studio 2015 solution.
    * On OS X, you might use "Xcode" to generate an Xcode project
    * On a UNIX-y system, simply omit the option to generate a makefile

  * yaml-cpp defaults to building a static library, but you may build a\
 shared library by specifying `-DYAML_BUILD_SHARED_LIBS=ON`.

  * For more options on customizing the build, see the [CMakeLists.txt](https\
://github.com/jbeder/yaml-cpp/blob/master/CMakeLists.txt) file.

4. Build it!

5. To clean up, just remove the `build` directory.

# Recent Release #

[yaml-cpp 0.6.0](https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.6\
.0) has been released! This release requires C++11, and no longer depends on\
 Boost.

[yaml-cpp 0.3.0](https://github.com/jbeder/yaml-cpp/releases/tag/release-0.3.\
0) is still available if you want the old API.

**The old API will continue to be supported, and will still receive\
 bugfixes!** The 0.3.x and 0.4.x versions will be old API releases, and 0.5.x\
 and above will all be new API releases.

# API Documentation 

The autogenerated API reference is hosted on [CodeDocs](https://codedocs.xyz/\
jbeder/yaml-cpp/index.html)

# Third Party Integrations

The following projects are not officially supported:

- [Qt wrapper](https://gist.github.com/brcha/d392b2fe5f1e427cc8a6)

\
description-type: text/markdown;variant=GFM
url: https://github.com/jbeder/yaml-cpp/tree/yaml-cpp-0.7.0/test
depends: * build2 >= 0.15.0
depends: * bpkg >= 0.15.0
depends: gtest ^1.11.0
depends: gmock ^1.11.0
bootstrap-build:
\
project = yaml-cpp-tests

using version
using config
using test
using dist

\
root-build:
\
# Uncomment to suppress warnings coming from external libraries.
#
#cxx.internal.scope = current

cxx.std = latest

using cxx

hxx{*}: extension = h
cxx{*}: extension = cpp

# Assume headers are importable unless stated otherwise.
#
hxx{*}: cxx.importable = true

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $cxx.target

# Every exe{} in this subproject is by default a test.
#
exe{*}: test = true
\
location: yaml-cpp/yaml-cpp-tests-0.7.0.tar.gz
sha256sum: b1e4ee4ecec21ca15f0b9e2b5baf2d421cf8895c0755bb10ac50865b3b34a653
:
name: zstd
version: 1.5.5+1
language: c
project: zstd
summary: Zstandard lossless compression algorithm command line utility
license: BSD-3-Clause OR GPL-2.0-only
description:
\
<p align="center"><img src="https://raw.githubusercontent.com/facebook/zstd/d\
ev/doc/images/zstd_logo86.png" alt="Zstandard"></p>

__Zstandard__, or `zstd` as short version, is a fast lossless compression\
 algorithm,
targeting real-time compression scenarios at zlib-level and better\
 compression ratios.
It's backed by a very fast entropy stage, provided by [Huff0 and FSE\
 library](https://github.com/Cyan4973/FiniteStateEntropy).

Zstandard's format is stable and documented in [RFC8878](https://datatracker.\
ietf.org/doc/html/rfc8878). Multiple independent implementations are already\
 available.
This repository represents the reference implementation, provided as an\
 open-source dual [BSD](LICENSE) and [GPLv2](COPYING) licensed **C** library,
and a command line utility producing and decoding `.zst`, `.gz`, `.xz` and\
 `.lz4` files.
Should your project require another programming language,
a list of known ports and bindings is provided on [Zstandard\
 homepage](https://facebook.github.io/zstd/#other-languages).

**Development branch status:**

[![Build Status][travisDevBadge]][travisLink]
[![Build status][CircleDevBadge]][CircleLink]
[![Build status][CirrusDevBadge]][CirrusLink]
[![Fuzzing Status][OSSFuzzBadge]][OSSFuzzLink]

[travisDevBadge]: https://api.travis-ci.com/facebook/zstd.svg?branch=dev\
 "Continuous Integration test suite"
[travisLink]: https://travis-ci.com/facebook/zstd
[CircleDevBadge]: https://circleci.com/gh/facebook/zstd/tree/dev.svg?style=sh\
ield "Short test suite"
[CircleLink]: https://circleci.com/gh/facebook/zstd
[CirrusDevBadge]: https://api.cirrus-ci.com/github/facebook/zstd.svg?branch=d\
ev
[CirrusLink]: https://cirrus-ci.com/github/facebook/zstd
[OSSFuzzBadge]: https://oss-fuzz-build-logs.storage.googleapis.com/badges/zst\
d.svg
[OSSFuzzLink]: https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&\
can=1&q=proj:zstd

## Benchmarks

For reference, several fast compression algorithms were tested and compared
on a desktop running Ubuntu 20.04 (`Linux 5.11.0-41-generic`),
with a Core i7-9700K CPU @ 4.9GHz,
using [lzbench], an open-source in-memory benchmark by @inikep
compiled with [gcc] 9.3.0,
on the [Silesia compression corpus].

[lzbench]: https://github.com/inikep/lzbench
[Silesia compression corpus]: https://sun.aei.polsl.pl//~sdeor/index.php?page\
=silesia
[gcc]: https://gcc.gnu.org/

| Compressor name         | Ratio | Compression| Decompress.|
| ---------------         | ------| -----------| ---------- |
| **zstd 1.5.1 -1**       | 2.887 |   530 MB/s |  1700 MB/s |
| [zlib] 1.2.11 -1        | 2.743 |    95 MB/s |   400 MB/s |
| brotli 1.0.9 -0         | 2.702 |   395 MB/s |   450 MB/s |
| **zstd 1.5.1 --fast=1** | 2.437 |   600 MB/s |  2150 MB/s |
| **zstd 1.5.1 --fast=3** | 2.239 |   670 MB/s |  2250 MB/s |
| quicklz 1.5.0 -1        | 2.238 |   540 MB/s |   760 MB/s |
| **zstd 1.5.1 --fast=4** | 2.148 |   710 MB/s |  2300 MB/s |
| lzo1x 2.10 -1           | 2.106 |   660 MB/s |   845 MB/s |
| [lz4] 1.9.3             | 2.101 |   740 MB/s |  4500 MB/s |
| lzf 3.6 -1              | 2.077 |   410 MB/s |   830 MB/s |
| snappy 1.1.9            | 2.073 |   550 MB/s |  1750 MB/s |

[zlib]: https://www.zlib.net/
[lz4]: https://lz4.github.io/lz4/

The negative compression levels, specified with `--fast=#`,
offer faster compression and decompression speed
at the cost of compression ratio (compared to level 1).

Zstd can also offer stronger compression ratios at the cost of compression\
 speed.
Speed vs Compression trade-off is configurable by small increments.
Decompression speed is preserved and remains roughly the same at all settings,
a property shared by most LZ compression algorithms, such as [zlib] or lzma.

The following tests were run
on a server running Linux Debian (`Linux version 4.14.0-3-amd64`)
with a Core i7-6700K CPU @ 4.0GHz,
using [lzbench], an open-source in-memory benchmark by @inikep
compiled with [gcc] 7.3.0,
on the [Silesia compression corpus].

Compression Speed vs Ratio | Decompression Speed
---------------------------|--------------------
![Compression Speed vs Ratio](doc/images/CSpeed2.png "Compression Speed vs\
 Ratio") | ![Decompression Speed](doc/images/DSpeed3.png "Decompression\
 Speed")

A few other algorithms can produce higher compression ratios at slower\
 speeds, falling outside of the graph.
For a larger picture including slow modes, [click on this link](doc/images/DC\
speed5.png).


## The case for Small Data compression

Previous charts provide results applicable to typical file and stream\
 scenarios (several MB). Small data comes with different perspectives.

The smaller the amount of data to compress, the more difficult it is to\
 compress. This problem is common to all compression algorithms, and reason\
 is, compression algorithms learn from past data how to compress future data.\
 But at the beginning of a new data set, there is no "past" to build upon.

To solve this situation, Zstd offers a __training mode__, which can be used\
 to tune the algorithm for a selected type of data.
Training Zstandard is achieved by providing it with a few samples (one file\
 per sample). The result of this training is stored in a file called\
 "dictionary", which must be loaded before compression and decompression.
Using this dictionary, the compression ratio achievable on small data\
 improves dramatically.

The following example uses the `github-users` [sample set](https://github.com\
/facebook/zstd/releases/tag/v1.1.3), created from [github public\
 API](https://developer.github.com/v3/users/#get-all-users).
It consists of roughly 10K records weighing about 1KB each.

Compression Ratio | Compression Speed | Decompression Speed
------------------|-------------------|--------------------
![Compression Ratio](doc/images/dict-cr.png "Compression Ratio") |\
 ![Compression Speed](doc/images/dict-cs.png "Compression Speed") |\
 ![Decompression Speed](doc/images/dict-ds.png "Decompression Speed")


These compression gains are achieved while simultaneously providing _faster_\
 compression and decompression speeds.

Training works if there is some correlation in a family of small data\
 samples. The more data-specific a dictionary is, the more efficient it is\
 (there is no _universal dictionary_).
Hence, deploying one dictionary per type of data will provide the greatest\
 benefits.
Dictionary gains are mostly effective in the first few KB. Then, the\
 compression algorithm will gradually use previously decoded content to\
 better compress the rest of the file.

### Dictionary compression How To:

1. Create the dictionary

   `zstd --train FullPathToTrainingSet/* -o dictionaryName`

2. Compress with dictionary

   `zstd -D dictionaryName FILE`

3. Decompress with dictionary

   `zstd -D dictionaryName --decompress FILE.zst`


## Build instructions

`make` is the officially maintained build system of this project.
All other build systems are "compatible" and 3rd-party maintained,
they may feature small differences in advanced options.
When your system allows it, prefer using `make` to build `zstd` and `libzstd`.

### Makefile

If your system is compatible with standard `make` (or `gmake`),
invoking `make` in root directory will generate `zstd` cli in root directory.
It will also create `libzstd` into `lib/`.

Other available options include:
- `make install` : create and install zstd cli, library and man pages
- `make check` : create and run `zstd`, test its behavior on local platform

The `Makefile` follows the [GNU Standard Makefile conventions](https://www.gn\
u.org/prep/standards/html_node/Makefile-Conventions.html),
allowing staged install, standard flags, directory variables and command\
 variables.

For advanced use cases, specialized compilation flags which control binary\
 generation
are documented in [`lib/README.md`](lib/README.md#modular-build) for the\
 `libzstd` library
and in [`programs/README.md`](programs/README.md#compilation-variables) for\
 the `zstd` CLI.

### cmake

A `cmake` project generator is provided within `build/cmake`.
It can generate Makefiles or other build scripts
to create `zstd` binary, and `libzstd` dynamic and static libraries.

By default, `CMAKE_BUILD_TYPE` is set to `Release`.

#### Support for Fat (Universal2) Output

`zstd` can be built and installed with support for both Apple Silicon (M1/M2)\
 as well as Intel by using CMake's Universal2 support.
To perform a Fat/Universal2 build and install use the following commands:

```bash
cmake -B build-cmake-debug -S build/cmake -G Ninja -DCMAKE_OSX_ARCHITECTURES=\
"x86_64;x86_64h;arm64"
cd build-cmake-debug
ninja
sudo ninja install
```

### Meson

A Meson project is provided within [`build/meson`](build/meson). Follow
build instructions in that directory.

You can also take a look at [`.travis.yml`](.travis.yml) file for an
example about how Meson is used to build this project.

Note that default build type is **release**.

### VCPKG
You can build and install zstd [vcpkg](https://github.com/Microsoft/vcpkg/)\
 dependency manager:

    git clone https://github.com/Microsoft/vcpkg.git
    cd vcpkg
    ./bootstrap-vcpkg.sh
    ./vcpkg integrate install
    ./vcpkg install zstd

The zstd port in vcpkg is kept up to date by Microsoft team members and\
 community contributors.
If the version is out of date, please [create an issue or pull\
 request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.

### Visual Studio (Windows)

Going into `build` directory, you will find additional possibilities:
- Projects for Visual Studio 2005, 2008 and 2010.
  + VS2010 project is compatible with VS2012, VS2013, VS2015 and VS2017.
- Automated build scripts for Visual compiler by [@KrzysFR](https://github.co\
m/KrzysFR), in `build/VS_scripts`,
  which will build `zstd` cli and `libzstd` library without any need to open\
 Visual Studio solution.

### Buck

You can build the zstd binary via buck by executing: `buck build\
 programs:zstd` from the root of the repo.
The output binary will be in `buck-out/gen/programs/`.

## Testing

You can run quick local smoke tests by running `make check`.
If you can't use `make`, execute the `playTest.sh` script from the\
 `src/tests` directory.
Two env variables `$ZSTD_BIN` and `$DATAGEN_BIN` are needed for the test\
 script to locate the `zstd` and `datagen` binary.
For information on CI testing, please refer to `TESTING.md`.

## Status

Zstandard is currently deployed within Facebook and many other large cloud\
 infrastructures.
It is run continuously to compress large amounts of data in multiple formats\
 and use cases.
Zstandard is considered safe for production environments.

## License

Zstandard is dual-licensed under [BSD](LICENSE) and [GPLv2](COPYING).

## Contributing

The `dev` branch is the one where all contributions are merged before\
 reaching `release`.
If you plan to propose a patch, please commit into the `dev` branch, or its\
 own feature branch.
Direct commit to `release` are not permitted.
For more information, please read [CONTRIBUTING](CONTRIBUTING.md).

\
description-type: text/markdown;variant=GFM
package-description:
\
# zstd - Zstandard command line utility

This is a `build2` package for the
[`zstd`](https://https://github.com/facebook/zstd) executable. It provides a
command line interface for Zstandard, a fast lossless compression algorithm,
targeting real-time compression scenarios at `zlib`-level and better
compression ratios.

Note that the `zstd` executable in this package provides `build2` metadata.


## Usage

To start using `zstd` in your project, add the following build-time
`depends` value to your `manifest`, adjusting the version constraint as
appropriate:

```
depends: * zstd ^1.5.5
```

Then import the executable in your `buildfile`:

```
import! [metadata] zstd = zstd%exe{zstd}
```

\
package-description-type: text/markdown;variant=GFM
changes:
\
v1.5.5 (Apr 2023)
fix: fix rare corruption bug affecting the high compression mode, reported by\
 @danlark1 (#3517, @terrelln)
perf: improve mid-level compression speed (#3529, #3533, #3543, @yoniko and\
 #3552, @terrelln)
lib: deprecated bufferless block-level API (#3534) by @terrelln
cli: mmap large dictionaries to save memory, by @daniellerozenblit
cli: improve speed of --patch-from mode (~+50%) (#3545) by @daniellerozenblit
cli: improve i/o speed (~+10%) when processing lots of small files (#3479) by\
 @felixhandte
cli: zstd no longer crashes when requested to write into write-protected\
 directory (#3541) by @felixhandte
cli: fix decompression into block device using -o, reported by @georgmu\
 (#3583)
build: fix zstd CLI compiled with lzma support but not zlib support (#3494)\
 by @Hello71
build: fix cmake does no longer require 3.18 as minimum version (#3510) by\
 @kou
build: fix MSVC+ClangCL linking issue (#3569) by @tru
build: fix zstd-dll, version of zstd CLI that links to the dynamic library\
 (#3496) by @yoniko
build: fix MSVC warnings (#3495) by @embg
doc: updated zstd specification to clarify corner cases, by @Cyan4973
doc: document how to create fat binaries for macos (#3568) by @rickmark
misc: improve seekable format ingestion speed (~+100%) for very small chunk\
 sizes (#3544) by @Cyan4973
misc: tests/fullbench can benchmark multiple files (#3516) by @dloidolt

v1.5.4 (Feb 2023)
perf: +20% faster huffman decompression for targets that can't compile x64\
 assembly (#3449, @terrelln)
perf: up to +10% faster streaming compression at levels 1-2 (#3114, @embg)
perf: +4-13% for levels 5-12 by optimizing function generation (#3295,\
 @terrelln)
pref: +3-11% compression speed for `arm` target (#3199, #3164, #3145, #3141,\
 #3138, @JunHe77 and #3139, #3160, @danlark1)
perf: +5-30% faster dictionary compression at levels 1-4 (#3086, #3114,\
 #3152, @embg)
perf: +10-20% cold dict compression speed by prefetching CDict tables (#3177,\
 @embg)
perf: +1% faster compression by removing a branch in ZSTD_fast_noDict (#3129,\
 @felixhandte)
perf: Small compression ratio improvements in high compression mode (#2983,\
 #3391, @Cyan4973 and #3285, #3302, @daniellerozenblit)
perf: small speed improvement by better detecting `STATIC_BMI2` for `clang`\
 (#3080, @TocarIP)
perf: Improved streaming performance when `ZSTD_c_stableInBuffer` is set\
 (#2974, @Cyan4973)
cli: Asynchronous I/O for improved cli speed (#2975, #2985, #3021, #3022,\
 @yoniko)
cli: Change `zstdless` behavior to align with `zless` (#2909, @binhdvo)
cli: Keep original file if `-c` or `--stdout` is given (#3052, @dirkmueller)
cli: Keep original files when result is concatenated into a single output\
 with `-o` (#3450, @Cyan4973)
cli: Preserve Permissions and Ownership of regular files (#3432, @felixhandte)
cli: Print zlib/lz4/lzma library versions with `-vv` (#3030, @terrelln)
cli: Print checksum value for single frame files with `-lv`  (#3332,\
 @Cyan4973)
cli: Print `dictID` when present with `-lv` (#3184, @htnhan)
cli: when `stderr` is *not* the console, disable status updates, but preserve\
 final summary (#3458, @Cyan4973)
cli: support `--best` and `--no-name` in `gzip` compatibility mode (#3059,\
 @dirkmueller)
cli: support for `posix` high resolution timer `clock_gettime()`, for\
 improved benchmark accuracy (#3423, @Cyan4973)
cli: improved help/usage (`-h`,  `-H`) formatting (#3094, @dirkmueller and\
 #3385, @jonpalmisc)
cli: Fix better handling of bogus numeric values (#3268, @ctkhanhly)
cli: Fix input consists of multiple files _and_ `stdin` (#3222, @yoniko)
cli: Fix tiny files passthrough (#3215, @cgbur)
cli: Fix for `-r` on empty directory (#3027, @brailovich)
cli: Fix empty string as argument for `--output-dir-*` (#3220, @embg)
cli: Fix decompression memory usage reported by `-vv --long` (#3042, @u1f35c,\
 and #3232, @zengyijing)
cli: Fix infinite loop when empty input is passed to trainer (#3081,\
 @terrelln)
cli: Fix `--adapt` doesn't work when `--no-progress` is also set (#3354,\
 @terrelln)
api: Support for Block-Level Sequence Producer (#3333, @embg)
api: Support for in-place decompression (#3432, @terrelln)
api: New  `ZSTD_CCtx_setCParams()`  function, set all parameters defined in a\
  `ZSTD_compressionParameters`  structure (#3403, @Cyan4973)
api: Streaming decompression detects incorrect header ID sooner (#3175,\
 @Cyan4973)
api: Window size resizing optimization for edge case (#3345,\
 @daniellerozenblit)
api: More accurate error codes for busy-loop scenarios (#3413, #3455,\
 @Cyan4973)
api: Fix limit overflow in `compressBound` and `decompressBound` (#3362,\
 #3373, Cyan4973) reported by @nigeltao
api: Deprecate several advanced experimental functions: streaming (#3408,\
 @embg), copy (#3196, @mileshu)
bug: Fix corruption that rarely occurs in 32-bit mode with wlog=25 (#3361,\
 @terrelln)
bug: Fix for block-splitter (#3033, @Cyan4973)
bug: Fixes for Sequence Compression API (#3023, #3040, @Cyan4973)
bug: Fix leaking thread handles on Windows (#3147, @animalize)
bug: Fix timing issues with cmake/meson builds (#3166, #3167, #3170,\
 @Cyan4973)
build: Allow user to select legacy level for cmake (#3050, @shadchin)
build: Enable legacy support by default in cmake (#3079, @niamster)
build: Meson build script improvements (#3039, #3120, #3122, #3327, #3357,\
 @eli-schwartz and #3276, @neheb)
build: Add aarch64 to supported architectures for zstd_trace (#3054,\
 @ooosssososos)
build: support AIX architecture (#3219, @qiongsiwu)
build: Fix `ZSTD_LIB_MINIFY` build macro, which now reduces static library\
 size by half (#3366, @terrelln)
build: Fix Windows issues with Multithreading translation layer (#3364,\
 #3380, @yoniko) and ARM64 target (#3320, @cwoffenden)
build: Fix `cmake` script (#3382, #3392, @terrelln and #3252 @Tachi107 and\
 #3167 @Cyan4973)
doc: Updated man page, providing more details for `--train` mode (#3112,\
 @Cyan4973)
doc: Add decompressor errata document (#3092, @terrelln)
misc: Enable Intel CET (#2992, #2994, @hjl-tools)
misc: Fix `contrib/` seekable format (#3058, @yhoogstrate and #3346,\
 @daniellerozenblit)
misc: Improve speed of the one-file library generator (#3241, @wahern and\
 #3005, @cwoffenden)

v1.5.3 (dev version, unpublished)

v1.5.2 (Jan, 2022)
perf: Regain Minimal memset()-ing During Reuse of Compression Contexts\
 (@Cyan4973, #2969)
build: Build Zstd with `noexecstack` on All Architectures (@felixhandte,\
 #2964)
doc: Clarify Licensing (@terrelln, #2981)

v1.5.1 (Dec, 2021)
perf: rebalanced compression levels, to better match the intended speed/level\
 curve, by @senhuang42
perf: faster huffman decoder, using x64 assembly, by @terrelln
perf: slightly faster high speed modes (strategies fast & dfast), by\
 @felixhandte
perf: improved binary size and faster compilation times, by @terrelln
perf: new row64 mode, used notably in level 12, by @senhuang42
perf: faster mid-level compression speed in presence of highly repetitive\
 patterns, by @senhuang42
perf: minor compression ratio improvements for small data at high levels, by\
 @cyan4973
perf: reduced stack usage (mostly useful for Linux Kernel), by @terrelln
perf: faster compression speed on incompressible data, by @bindhvo
perf: on-demand reduced ZSTD_DCtx state size, using build macro\
 ZSTD_DECODER_INTERNAL_BUFFER, at a small cost of performance, by @bindhvo
build: allows hiding static symbols in the dynamic library, using build\
 macro, by @skitt
build: support for m68k (Motorola 68000's), by @cyan4973
build: improved AIX support, by @Helflym
build: improved meson unofficial build, by @eli-schwartz
cli : custom memory limit when training dictionary (#2925), by @embg
cli : report advanced parameters information when compressing in very verbose\
 mode (``-vv`), by @Svetlitski-FB

v1.5.0  (May 11, 2021)
api: Various functions promoted from experimental to stable API: (#2579-2581,\
 @senhuang42)
  `ZSTD_defaultCLevel()`
  `ZSTD_getDictID_fromCDict()`
api: Several experimental functions have been deprecated and will emit a\
 compiler warning (#2582, @senhuang42)
  `ZSTD_compress_advanced()`
  `ZSTD_compress_usingCDict_advanced()`
  `ZSTD_compressBegin_advanced()`
  `ZSTD_compressBegin_usingCDict_advanced()`
  `ZSTD_initCStream_srcSize()`
  `ZSTD_initCStream_usingDict()`
  `ZSTD_initCStream_usingCDict()`
  `ZSTD_initCStream_advanced()`
  `ZSTD_initCStream_usingCDict_advanced()`
  `ZSTD_resetCStream()`
api: ZSTDMT_NBWORKERS_MAX reduced to 64 for 32-bit environments (@Cyan4973)
perf: Significant speed improvements for middle compression levels (#2494,\
 @senhuang42 @terrelln)
perf: Block splitter to improve compression ratio, enabled by default for\
 high compression levels (#2447, @senhuang42)
perf: Decompression loop refactor, speed improvements on `clang` and for\
 `--long` modes (#2614 #2630, @Cyan4973)
perf: Reduced stack usage during compression and decompression entropy stage\
 (#2522 #2524, @terrelln)
bug: Improve setting permissions of created files (#2525, @felixhandte)
bug: Fix large dictionary non-determinism (#2607, @terrelln)
bug: Fix non-determinism test failures on Linux i686 (#2606, @terrelln)
bug: Fix various dedicated dictionary search bugs (#2540 #2586, @senhuang42\
 @felixhandte)
bug: Ensure `ZSTD_estimateCCtxSize*() `monotonically increases with\
 compression level (#2538, @senhuang42)
bug: Fix --patch-from mode parameter bound bug with small files (#2637,\
 @occivink)
bug: Fix UBSAN error in decompression (#2625, @terrelln)
bug: Fix superblock compression divide by zero bug (#2592, @senhuang42)
bug: Make the number of physical CPU cores detection more robust (#2517,\
 @PaulBone)
doc: Improve `zdict.h` dictionary training API documentation (#2622,\
 @terrelln)
doc: Note that public `ZSTD_free*()` functions accept NULL pointers (#2521,\
 @animalize)
doc: Add style guide docs for open source contributors (#2626, @Cyan4973)
tests: Better regression test coverage for different dictionary modes (#2559,\
 @senhuang42)
tests: Better test coverage of index reduction (#2603, @terrelln)
tests: OSS-Fuzz coverage for seekable format (#2617, @senhuang42)
tests: Test coverage for ZSTD threadpool API (#2604, @senhuang42)
build: Dynamic library built multithreaded by default (#2584, @senhuang42)
build: Move  `zstd_errors.h`  and  `zdict.h`  to  `lib/`  root (#2597,\
 @terrelln)
build: Allow `ZSTDMT_JOBSIZE_MIN` to be configured at compile-time, reduce\
 default to 512KB (#2611, @Cyan4973)
build: Single file library build script moved to `build/` directory (#2618,\
 @felixhandte)
build: `ZBUFF_*()` is no longer built by default (#2583, @senhuang42)
build: Fixed Meson build (#2548, @SupervisedThinking @kloczek)
build: Fix excessive compiler warnings with clang-cl and CMake (#2600,\
 @nickhutchinson)
build: Detect presence of `md5` on Darwin (#2609, @felixhandte)
build: Avoid SIGBUS on armv6 (#2633, @bmwiedmann)
cli: `--progress` flag added to always display progress bar (#2595,\
 @senhuang42)
cli: Allow reading from block devices with `--force` (#2613, @felixhandte)
cli: Fix CLI filesize display bug (#2550, @Cyan4973)
cli: Fix windows CLI `--filelist` end-of-line bug (#2620, @Cyan4973)
contrib: Various fixes for linux kernel patch (#2539, @terrelln)
contrib: Seekable format - Decompression hanging edge case fix (#2516,\
 @senhuang42)
contrib: Seekable format - New seek table-only API  (#2113 #2518, @mdittmer\
 @Cyan4973)
contrib: Seekable format - Fix seek table descriptor check when loading\
 (#2534, @foxeng)
contrib: Seekable format - Decompression fix for large offsets, (#2594, @azat)
misc: Automatically published release tarballs available on Github (#2535,\
 @felixhandte)

v1.4.9  (Mar 1, 2021)
bug: Use `umask()` to Constrain Created File Permissions (#2495, @felixhandte)
bug: Make Simple Single-Pass Functions Ignore Advanced Parameters (#2498,\
 @terrelln)
api: Add (De)Compression Tracing Functionality (#2482, @terrelln)
api: Support References to Multiple DDicts (#2446, @senhuang42)
api: Add Function to Generate Skippable Frame (#2439, @senhuang42)
perf: New Algorithms for the Long Distance Matcher (#2483, @mpu)
perf: Performance Improvements for Long Distance Matcher (#2464, @mpu)
perf: Don't Shrink Window Log when Streaming with a Dictionary (#2451,\
 @terrelln)
cli: Fix `--output-dir-mirror`'s Rejection of `..`-Containing Paths (#2512,\
 @felixhandte)
cli: Allow Input From Console When `-f`/`--force` is Passed (#2466,\
 @felixhandte)
cli: Improve Help Message (#2500, @senhuang42)
tests: Remove Flaky Tests (#2455, #2486, #2445, @Cyan4973)
tests: Correctly Invoke md5 Utility on NetBSD (#2492, @niacat)
tests: Avoid Using `stat -c` on NetBSD (#2513, @felixhandte)
build: Zstd CLI Can Now be Linked to Dynamic `libzstd` (#2457, #2454\
 @Cyan4973)
build: Hide and Avoid Using Static-Only Symbols (#2501, #2504, @skitt)
build: CMake: Enable Only C for lib/ and programs/ Projects (#2498,\
 @concatime)
build: CMake: Use `configure_file()` to Create the `.pc` File (#2462, @lazka)
build: Fix Fuzzer Compiler Detection & Update UBSAN Flags (#2503, @terrelln)
build: Add Guards for `_LARGEFILE_SOURCE` and `_LARGEFILE64_SOURCE` (#2444,\
 @indygreg)
build: Improve `zlibwrapper` Makefile (#2437, @Cyan4973)
contrib: Add `recover_directory` Program (#2473, @terrelln)
doc: Change License Year to 2021 (#2452 & #2465, @terrelln & @senhuang42)
doc: Fix Typos (#2459, @ThomasWaldmann)

v1.4.8  (Dec 18, 2020)
hotfix: wrong alignment of an internal buffer

v1.4.7  (Dec 16, 2020)
perf: stronger --long mode at high compression levels, by @senhuang42
perf: stronger --patch-from at high compression levels, thanks to --long\
 improvements
perf: faster dictionary compression at medium compression levels, by\
 @felixhandte
perf: small speed & memory usage improvements for ZSTD_compress2(), by\
 @terrelln
perf: improved fast compression speeds with Visual Studio, by @animalize
cli : Set nb of threads with environment variable ZSTD_NBTHREADS, by\
 @senhuang42
cli : accept decompressing files with *.zstd suffix
cli : provide a condensed summary by default when processing multiple files
cli : fix : stdin input no longer confused as user prompt
cli : improve accuracy of several error messages
api : new sequence ingestion API, by @senhuang42
api : shared thread pool: control total nb of threads used by multiple\
 compression jobs, by @marxin
api : new ZSTD_getDictID_fromCDict(), by @LuAPi
api : zlibWrapper only uses public API, and is compatible with dynamic\
 library, by @terrelln
api : fix : multithreaded compression has predictable output even in special\
 cases (see #2327) (issue not accessible from cli)
api : fix : dictionary compression correctly respects dictionary compression\
 level (see #2303) (issue not accessible from cli)
build: fix cmake script when using path with spaces, by @terrelln
build: improved compile-time detection of aarch64/neon platforms, by @bsdimp
build: Fix building on AIX 5.1, by @likema
build: compile paramgrill with cmake on Windows, requested by @mirh
doc : clarify repcode updates in format specification, by @felixhandte

v1.4.6
fix : Always return dstSize_tooSmall when that is the case
fix : Fix ZSTD_initCStream_advanced() with static allocation and no dictionary
perf: Improve small block decompression speed by 20%+, by @terrelln
perf: Reduce compression stack usage by 1 KB, by @terrelln
perf: Improve decompression speed by improving ZSTD_wildcopy, by @helloguo\
 (#2252, #2256)
perf: Improve histogram construction, by @cyan4973 (#2253)
cli : Add --output-dir-mirror option, by @xxie24 (#2219)
cli : Warn when (de)compressing multiple files into a single output, by\
 @senhuang42 (#2279)
cli : Improved progress bar and status summary when (de)compressing multiple\
 files, by @senhuang42 (#2283)
cli : Call stat less often, by @felixhandte (#2262)
cli : Allow --patch-from XXX and --filelist XXX in addition to\
 --patch-from=XXX and --filelist=XXX, by @cyan4973 (#2250)
cli : Allow --patch-from to compress stdin with --stream-size, by\
 @bimbashrestha (#2206)
api : Do not install zbuff.h, since it has long been deprecated, by @cyan4973\
 (#2166).
api : Fix ZSTD_CCtx_setParameter() with ZSTD_c_compressionLevel to make 0\
 mean default level, by @i-do-cpp (#2291)
api : Rename ZSTDMT_NBTHREADS_MAX to ZSTDMT_NBWORKERS_MAX, by @marxin (#2228).
build: Install pkg-config file with CMake and MinGW, by @tonytheodore (#2183)
build: Install DLL with CMake on Windows, by @BioDataAnalysis (#2221)
build: Fix DLL install location with CMake, by @xantares and @bimbashrestha\
 (#2186)
build: Add ZSTD_NO_UNUSED_FUNCTIONS macro to hide unused functions
build: Add ZSTD_NO_INTRINSICS macro to avoid explicit intrinsics
build: Add STATIC_BMI2 macro for compile time detection of BMI2 on MSVC, by\
 @Niadb (#2258)
build: Fix -Wcomma warnings, by @cwoffenden
build: Remove distutils requirement for meson build, by @neheb (#2197)
build: Fix cli compilation with uclibc
build: Fix cli compilation without st_mtime, by @ffontaine (#2246)
build: Fix shadowing warnings in library
build: Fix single file library compilation with Enscripten, by @yoshihitoh\
 (#2227)
misc: Improve single file library and include dictBuilder, by @cwoffenden
misc: Allow compression dictionaries with missing symbols
misc: Add freestanding translation script in contrib/freestanding_lib
misc: Collect all of zstd's libc dependencies into zstd_deps.h
doc : Add ZSTD_versionString() to manual, by @animalize
doc : Fix documentation for ZSTD_CCtxParams_setParameter(), by @felixhandte\
 (#2270)

v1.4.5  (May 22, 2020)
fix : Compression ratio regression on huge files (> 3 GB) using high levels\
 (--ultra) and multithreading, by @terrelln
perf: Improved decompression speed: x64 : +10% (clang) / +5% (gcc); ARM :\
 from +15% to +50%, depending on SoC, by @terrelln
perf: Automatically downsizes ZSTD_DCtx when too large for too long (#2069,\
 by @bimbashreshta)
perf: Improved fast compression speed on aarch64 (#2040, ~+3%, by @caoyzh)
perf: Small level 1 compression speed gains (depending on compiler)
cli : New --patch-from command, create and apply patches from files, by\
 @bimbashreshta
cli : New --filelist= : Provide a list of files to operate upon from a file
cli : -b -d command can now benchmark decompression on multiple files
cli : New --no-content-size command
cli : New --show-default-cparams information command
api : ZDICT_finalizeDictionary() is promoted to stable (#2111)
api : new experimental parameter ZSTD_d_stableOutBuffer (#2094)
build: Generate a single-file libzstd library (#2065, by @cwoffenden)
build: Relative includes no longer require -I compiler flags for zstd lib\
 subdirs (#2103, by @felixhandte)
build: zstd now compiles cleanly under -pedantic (#2099)
build: zstd now compiles with make-4.3
build: Support mingw cross-compilation from Linux, by @Ericson2314
build: Meson multi-thread build fix on windows
build: Some misc icc fixes backed by new ci test on travis
misc: bitflip analyzer tool, by @felixhandte
misc: Extend largeNbDicts benchmark to compression
misc: Edit-distance match finder in contrib/
doc : Improved beginner CONTRIBUTING.md docs
doc : New issue templates for zstd

v1.4.4  (Nov 6, 2019)
perf: Improved decompression speed, by > 10%, by @terrelln
perf: Better compression speed when re-using a context, by @felixhandte
perf: Fix compression ratio when compressing large files with small\
 dictionary, by @senhuang42
perf: zstd reference encoder can generate RLE blocks, by @bimbashrestha
perf: minor generic speed optimization, by @davidbolvansky
api: new ability to extract sequences from the parser for analysis, by\
 @bimbashrestha
api: fixed decoding of magic-less frames, by @terrelln
api: fixed ZSTD_initCStream_advanced() performance with fast modes, reported\
 by @QrczakMK
cli: Named pipes support, by @bimbashrestha
cli: short tar's extension support, by @stokito
cli: command --output-dir-flat= , generates target files into requested\
 directory, by @senhuang42
cli: commands --stream-size=# and --size-hint=#, by @nmagerko
cli: command --exclude-compressed, by @shashank0791
cli: faster `-t` test mode
cli: improved some error messages, by @vangyzen
cli: fix command `-D dictionary` on Windows, reported by @artyompetrov
cli: fix rare deadlock condition within dictionary builder, by @terrelln
build: single-file decoder with emscripten compilation script, by @cwoffenden
build: fixed zlibWrapper compilation on Visual Studio, reported by @bluenlive
build: fixed deprecation warning for certain gcc version, reported by\
 @jasonma163
build: fix compilation on old gcc versions, by @cemeyer
build: improved installation directories for cmake script, by Dmitri Shubin
pack: modified pkgconfig, for better integration into openwrt, requested by\
 @neheb
misc: Improved documentation : ZSTD_CLEVEL, DYNAMIC_BMI2, ZSTD_CDict,\
 function deprecation, zstd format
misc: fixed educational decoder : accept larger literals section, and removed\
 UNALIGNED() macro

v1.4.3  (Aug 20, 2019)
bug: Fix Dictionary Compression Ratio Regression by @cyan4973 (#1709)
bug: Fix Buffer Overflow in legacy v0.3 decompression by @felixhandte (#1722)
build: Add support for IAR C/C++ Compiler for Arm by @joseph0918 (#1705)

v1.4.2  (Jul 26, 2019)
bug: Fix bug in zstd-0.5 decoder by @terrelln (#1696)
bug: Fix seekable decompression in-memory API by @iburinoc (#1695)
misc: Validate blocks are smaller than size limit by @vivekmg (#1685)
misc: Restructure source files by @ephiepark (#1679)

v1.4.1  (Jul 20, 2019)
bug: Fix data corruption in niche use cases by @terrelln (#1659)
bug: Fuzz legacy modes, fix uncovered bugs by @terrelln (#1593, #1594, #1595)
bug: Fix out of bounds read by @terrelln (#1590)
perf: Improve decode speed by ~7% @mgrice (#1668)
perf: Slightly improved compression ratio of level 3 and 4 (ZSTD_dfast) by\
 @cyan4973 (#1681)
perf: Slightly faster compression speed when re-using a context by @cyan4973\
 (#1658)
perf: Improve compression ratio for small windowLog by @cyan4973 (#1624)
perf: Faster compression speed in high compression mode for repetitive data\
 by @terrelln (#1635)
api: Add parameter to generate smaller dictionaries by @tyler-tran (#1656)
cli: Recognize symlinks when built in C99 mode by @felixhandte (#1640)
cli: Expose cpu load indicator for each file on -vv mode by @ephiepark (#1631)
cli: Restrict read permissions on destination files by @chungy (#1644)
cli: zstdgrep: handle -f flag by @felixhandte (#1618)
cli: zstdcat: follow symlinks by @vejnar (#1604)
doc: Remove extra size limit on compressed blocks by @felixhandte (#1689)
doc: Fix typo by @yk-tanigawa (#1633)
doc: Improve documentation on streaming buffer sizes by @cyan4973 (#1629)
build: CMake: support building with LZ4 @leeyoung624 (#1626)
build: CMake: install zstdless and zstdgrep by @leeyoung624 (#1647)
build: CMake: respect existing uninstall target by @j301scott (#1619)
build: Make: skip multithread tests when built without support by\
 @michaelforney (#1620)
build: Make: Fix examples/ test target by @sjnam (#1603)
build: Meson: rename options out of deprecated namespace by @lzutao (#1665)
build: Meson: fix build by @lzutao (#1602)
build: Visual Studio: don't export symbols in static lib by @scharan (#1650)
build: Visual Studio: fix linking by @absotively (#1639)
build: Fix MinGW-W64 build by @myzhang1029 (#1600)
misc: Expand decodecorpus coverage by @ephiepark (#1664)

v1.4.0  (Apr 17, 2019)
perf: Improve level 1 compression speed in most scenarios by 6% by @gbtucker\
 and @terrelln
api: Move the advanced API, including all functions in the staging section,\
 to the stable section
api: Make ZSTD_e_flush and ZSTD_e_end block for maximum forward progress
api: Rename ZSTD_CCtxParam_getParameter to ZSTD_CCtxParams_getParameter
api: Rename ZSTD_CCtxParam_setParameter to ZSTD_CCtxParams_setParameter
api: Don't export ZSTDMT functions from the shared library by default
api: Require ZSTD_MULTITHREAD to be defined to use ZSTDMT
api: Add ZSTD_decompressBound() to provide an upper bound on decompressed\
 size by @shakeelrao
api: Fix ZSTD_decompressDCtx() corner cases with a dictionary
api: Move ZSTD_getDictID_*() functions to the stable section
api: Add ZSTD_c_literalCompressionMode flag to enable or disable literal\
 compression by @terrelln
api: Allow compression parameters to be set when a dictionary is used
api: Allow setting parameters before or after ZSTD_CCtx_loadDictionary() is\
 called
api: Fix ZSTD_estimateCStreamSize_usingCCtxParams()
api: Setting ZSTD_d_maxWindowLog to 0 means use the default
cli: Ensure that a dictionary is not used to compress itself by @shakeelrao
cli: Add --[no-]compress-literals flag to enable or disable literal\
 compression
doc: Update the examples to use the advanced API
doc: Explain how to transition from old streaming functions to the advanced\
 API in the header
build: Improve the Windows release packages
build: Improve CMake build by @hjmjohnson
build: Build fixes for FreeBSD by @lwhsu
build: Remove redundant warnings by @thatsafunnyname
build: Fix tests on OpenBSD by @bket
build: Extend fuzzer build system to work with the new clang engine
build: CMake now creates the libzstd.so.1 symlink
build: Improve Menson build by @lzutao
misc: Fix symbolic link detection on FreeBSD
misc: Use physical core count for -T0 on FreeBSD by @cemeyer
misc: Fix zstd --list on truncated files by @kostmo
misc: Improve logging in debug mode by @felixhandte
misc: Add CirrusCI tests by @lwhsu
misc: Optimize dictionary memory usage in corner cases
misc: Improve the dictionary builder on small or homogeneous data
misc: Fix spelling across the repo by @jsoref

v1.3.8  (Dec 28, 2018)
perf: better decompression speed on large files (+7%) and cold dictionaries\
 (+15%)
perf: slightly better compression ratio at high compression modes
api : finalized advanced API, last stage before "stable" status
api : new --rsyncable mode, by @terrelln
api : support decompression of empty frames into NULL (used to be an error)\
 (#1385)
build: new set of macros to build a minimal size decoder, by @felixhandte
build: fix compilation on MIPS32, reported by @clbr (#1441)
build: fix compilation with multiple -arch flags, by @ryandesign
build: highly upgraded meson build, by @lzutao
build: improved buck support, by @obelisk
build: fix cmake script : can create debug build, by @pitrou
build: Makefile : grep works on both colored consoles and systems without\
 color support
build: fixed zstd-pgo, by @bmwiedemann
cli : support ZSTD_CLEVEL environment variable, by @yijinfb (#1423)
cli : --no-progress flag, preserving final summary (#1371), by @terrelln
cli : ensure destination file is not source file (#1422)
cli : clearer error messages, especially when input file not present
doc : clarified zstd_compression_format.md, by @ulikunitz
misc: fixed zstdgrep, returns 1 on failure, by @lzutao
misc: NEWS renamed as CHANGELOG, in accordance with fboss

v1.3.7  (Oct 20, 2018)
perf: slightly better decompression speed on clang (depending on hardware\
 target)
fix : performance of dictionary compression for small input < 4 KB at levels\
 9 and 10
build: no longer build backtrace by default in release mode; restrict further\
 automatic mode
build: control backtrace support through build macro BACKTRACE
misc: added man pages for zstdless and zstdgrep, by @samrussell

v1.3.6  (Oct 6, 2018)
perf: much faster dictionary builder, by @jenniferliu
perf: faster dictionary compression on small data when using multiple\
 contexts, by @felixhandte
perf: faster dictionary decompression when using a very large number of\
 dictionaries simultaneously
cli : fix : does no longer overwrite destination when source does not exist\
 (#1082)
cli : new command --adapt, for automatic compression level adaptation
api : fix : block api can be streamed with > 4 GB, reported by @catid
api : reduced ZSTD_DDict size by 2 KB
api : minimum negative compression level is defined, and can be queried using\
 ZSTD_minCLevel().
build: support Haiku target, by @korli
build: Read Legacy format is limited to v0.5+ by default. Can be changed at\
 compile time with macro ZSTD_LEGACY_SUPPORT.
doc : zstd_compression_format.md updated to match wording in IETF RFC 8478
misc: tests/paramgrill, a parameter optimizer, by @GeorgeLu97

v1.3.5  (Jun 29, 2018)
perf: much faster dictionary compression, by @felixhandte
perf: small quality improvement for dictionary generation, by @terrelln
perf: slightly improved high compression levels (notably level 19)
mem : automatic memory release for long duration contexts
cli : fix : overlapLog can be manually set
cli : fix : decoding invalid lz4 frames
api : fix : performance degradation for dictionary compression when using\
 advanced API, by @terrelln
api : change : clarify ZSTD_CCtx_reset() vs ZSTD_CCtx_resetParameters(), by\
 @terrelln
build: select custom libzstd scope through control macros, by @GeorgeLu97
build: OpenBSD patch, by @bket
build: make and make all are compatible with -j
doc : clarify zstd_compression_format.md, updated for IETF RFC process
misc: pzstd compatible with reproducible compilation, by @lamby

v1.3.4  (Mar 27, 2018)
perf: faster speed (especially decoding speed) on recent cpus (haswell+)
perf: much better performance associating --long with multi-threading, by\
 @terrelln
perf: better compression at levels 13-15
cli : asynchronous compression by default, for faster experience (use\
 --single-thread for former behavior)
cli : smoother status report in multi-threading mode
cli : added command --fast=#, for faster compression modes
cli : fix crash when not overwriting existing files, by Pádraig Brady\
 (@pixelb)
api : `nbThreads` becomes `nbWorkers` : 1 triggers asynchronous mode
api : compression levels can be negative, for even more speed
api : ZSTD_getFrameProgression() : get precise progress status of ZSTDMT\
 anytime
api : ZSTDMT can accept new compression parameters during compression
api : implemented all advanced dictionary decompression prototypes
build: improved meson recipe, by Shawn Landden (@shawnl)
build: VS2017 scripts, by @HaydnTrigg
misc: all /contrib projects fixed
misc: added /contrib/docker script by @gyscos

v1.3.3  (Dec 21, 2017)
perf: faster zstd_opt strategy (levels 16-19)
fix : bug #944 : multithreading with shared ditionary and large data,\
 reported by @gsliepen
cli : fix : content size written in header by default
cli : fix : improved LZ4 format support, by @felixhandte
cli : new : hidden command `-S`, to benchmark multiple files while generating\
 one result per file
api : fix : support large skippable frames, by @terrelln
api : fix : streaming interface was adding a useless 3-bytes null block to\
 small frames
api : change : when setting `pledgedSrcSize`, use `ZSTD_CONTENTSIZE_UNKNOWN`\
 macro value to mean "unknown"
build: fix : compilation under rhel6 and centos6, reported by @pixelb
build: added `check` target

v1.3.2  (Oct 10, 2017)
new : long range mode, using --long command, by Stella Lau (@stellamplau)
new : ability to generate and decode magicless frames (#591)
changed : maximum nb of threads reduced to 200, to avoid address space\
 exhaustion in 32-bits mode
fix : multi-threading compression works with custom allocators
fix : ZSTD_sizeof_CStream() was over-evaluating memory usage
fix : a rare compression bug when compression generates very large distances\
 and bunch of other conditions (only possible at --ultra -22)
fix : 32-bits build can now decode large offsets (levels 21+)
cli : added LZ4 frame support by default, by Felix Handte (@felixhandte)
cli : improved --list output
cli : new : can split input file for dictionary training, using command -B#
cli : new : clean operation artefact on Ctrl-C interruption
cli : fix : do not change /dev/null permissions when using command -t with\
 root access, reported by @mike155 (#851)
cli : fix : write file size in header in multiple-files mode
api : added macro ZSTD_COMPRESSBOUND() for static allocation
api : experimental : new advanced decompression API
api : fix : sizeof_CCtx() used to over-estimate
build: fix : no-multithread variant compiles without pool.c dependency,\
 reported by Mitchell Blank Jr (@mitchblank) (#819)
build: better compatibility with reproducible builds, by Bernhard M.\
 Wiedemann (@bmwiedemann) (#818)
example : added streaming_memory_usage
license : changed /examples license to BSD + GPLv2
license : fix a few header files to reflect new license (#825)

v1.3.1  (Aug 21, 2017)
New license : BSD + GPLv2
perf: substantially decreased memory usage in Multi-threading mode, thanks to\
 reports by Tino Reichardt (@mcmilk)
perf: Multi-threading supports up to 256 threads. Cap at 256 when more are\
 requested (#760)
cli : improved and fixed --list command, by @ib (#772)
cli : command -vV to list supported formats, by @ib (#771)
build : fixed binary variants, reported by @svenha (#788)
build : fix Visual compilation for non x86/x64 targets, reported by Greg\
 Slazinski (@GregSlazinski) (#718)
API exp : breaking change : ZSTD_getframeHeader() provides more information
API exp : breaking change : pinned down values of error codes
doc : fixed huffman example, by Ulrich Kunitz (@ulikunitz)
new : contrib/adaptive-compression, I/O driven compression strength, by Paul\
 Cruz (@paulcruz74)
new : contrib/long_distance_matching, statistics by Stella Lau (@stellamplau)
updated : contrib/linux-kernel, by Nick Terrell (@terrelln)

v1.3.0  (Jul 6, 2017)
cli : new : `--list` command, by Paul Cruz
cli : changed : xz/lzma support enabled by default
cli : changed : `-t *` continue processing list after a decompression error
API : added : ZSTD_versionString()
API : promoted to stable status : ZSTD_getFrameContentSize(), by Sean Purcell
API exp : new advanced API : ZSTD_compress_generic(), ZSTD_CCtx_setParameter()
API exp : new : API for static or external allocation : ZSTD_initStatic?Ctx()
API exp : added : ZSTD_decompressBegin_usingDDict(), requested by Guy Riddle\
 (#700)
API exp : clarified memory estimation / measurement functions.
API exp : changed : strongest strategy renamed ZSTD_btultra, fastest strategy\
 ZSTD_fast set to 1
tools : decodecorpus can generate random dictionary-compressed samples, by\
 Paul Cruz
new : contrib/seekable_format, demo and API, by Sean Purcell
changed : contrib/linux-kernel, updated version and license, by Nick Terrell

v1.2.0  (May 5, 2017)
cli : changed : Multithreading enabled by default (use target zstd-nomt or\
 HAVE_THREAD=0 to disable)
cli : new : command -T0 means "detect and use nb of cores", by Sean Purcell
cli : new : zstdmt symlink hardwired to `zstd -T0`
cli : new : command --threads=# (#671)
cli : changed : cover dictionary builder by default, for improved quality, by\
 Nick Terrell
cli : new : commands --train-cover and --train-legacy, to select dictionary\
 algorithm and parameters
cli : experimental targets `zstd4` and `xzstd4`, with support for lz4 format,\
 by Sean Purcell
cli : fix : does not output compressed data on console
cli : fix : ignore symbolic links unless --force specified,
API : breaking change : ZSTD_createCDict_advanced(), only use\
 compressionParameters as argument
API : added : prototypes ZSTD_*_usingCDict_advanced(), for direct control\
 over frameParameters.
API : improved: ZSTDMT_compressCCtx() reduced memory usage
API : fix : ZSTDMT_compressCCtx() now provides srcSize in header (#634)
API : fix : src size stored in frame header is controlled at end of frame
API : fix : enforced consistent rules for pledgedSrcSize==0 (#641)
API : fix : error code "GENERIC" replaced by "dstSizeTooSmall" when\
 appropriate
build: improved cmake script, by @Majlen
build: enabled Multi-threading support for *BSD, by Baptiste Daroussin
tools: updated Paramgrill. Command -O# provides best parameters for sample\
 and speed target.
new : contrib/linux-kernel version, by Nick Terrell

v1.1.4  (Mar 18, 2017)
cli : new : can compress in *.gz format, using --format=gzip command, by\
 Przemyslaw Skibinski
cli : new : advanced benchmark command --priority=rt
cli : fix : write on sparse-enabled file systems in 32-bits mode, by @ds77
cli : fix : --rm remains silent when input is stdin
cli : experimental : xzstd, with support for xz/lzma decoding, by Przemyslaw\
 Skibinski
speed : improved decompression speed in streaming mode for single shot\
 scenarios (+5%)
memory: DDict (decompression dictionary) memory usage down from 150 KB to 20\
 KB
arch: 32-bits variant able to generate and decode very long matches (>32 MB),\
 by Sean Purcell
API : new : ZSTD_findFrameCompressedSize(), ZSTD_getFrameContentSize(),\
 ZSTD_findDecompressedSize()
API : changed : dropped support of legacy versions <= v0.3 (can be changed by\
 modifying ZSTD_LEGACY_SUPPORT value)
build : new: meson build system in contrib/meson, by Dima Krasner
build : improved cmake script, by @Majlen
build : added -Wformat-security flag, as recommended by Padraig Brady
doc : new : educational decoder, by Sean Purcell

v1.1.3  (Feb 7, 2017)
cli : zstd can decompress .gz files (can be disabled with `make zstd-nogz` or\
 `make HAVE_ZLIB=0`)
cli : new : experimental target `make zstdmt`, with multi-threading support
cli : new : improved dictionary builder "cover" (experimental), by Nick\
 Terrell, based on prior work by Giuseppe Ottaviano.
cli : new : advanced commands for detailed parameters, by Przemyslaw Skibinski
cli : fix zstdless on Mac OS-X, by Andrew Janke
cli : fix #232 "compress non-files"
dictBuilder : improved dictionary generation quality, thanks to Nick Terrell
API : new : lib/compress/ZSTDMT_compress.h multithreading API (experimental)
API : new : ZSTD_create?Dict_byReference(), requested by Bartosz Taudul
API : new : ZDICT_finalizeDictionary()
API : fix : ZSTD_initCStream_usingCDict() properly writes dictID into frame\
 header, by Gregory Szorc (#511)
API : fix : all symbols properly exposed in libzstd, by Nick Terrell
build : support for Solaris target, by Przemyslaw Skibinski
doc : clarified specification, by Sean Purcell

v1.1.2  (Dec 15, 2016)
API : streaming : decompression : changed : automatic implicit reset when\
 chain-decoding new frames without init
API : experimental : added : dictID retrieval functions, and\
 ZSTD_initCStream_srcSize()
API : zbuff : changed : prototypes now generate deprecation warnings
lib : improved : faster decompression speed at ultra compression settings and\
 32-bits mode
lib : changed : only public ZSTD_ symbols are now exposed
lib : changed : reduced usage  of stack memory
lib : fixed : several corner case bugs, by Nick Terrell
cli : new : gzstd, experimental version able to decode .gz files, by\
 Przemyslaw Skibinski
cli : new : preserve file attributes
cli : new : added zstdless and zstdgrep tools
cli : fixed : status displays total amount decoded, even for file consisting\
 of multiple frames (like pzstd)
cli : fixed : zstdcat
zlib_wrapper : added support for gz* functions, by Przemyslaw Skibinski
install : better compatibility with FreeBSD, by Dimitry Andric
source tree : changed : zbuff source files moved to lib/deprecated

v1.1.1  (Nov 2, 2016)
New : command -M#, --memory=, --memlimit=, --memlimit-decompress= to limit\
 allowed memory consumption
New : doc/zstd_manual.html, by Przemyslaw Skibinski
Improved : slightly better compression ratio at --ultra levels (>= 20)
Improved : better memory usage when using streaming compression API, thanks\
 to @Rogier-5 report
Added : API : ZSTD_initCStream_usingCDict(), ZSTD_initDStream_usingDDict()\
 (experimental section)
Added : example/multiple_streaming_compression.c
Changed : zstd_errors.h is now installed within /include (and replaces\
 errors_public.h)
Updated man page
Fixed : zstd-small, zstd-compress and zstd-decompress compilation targets

v1.1.0  (Sep 28, 2016)
New : contrib/pzstd, parallel version of zstd, by Nick Terrell
added : NetBSD install target (#338)
Improved : speed for batches of small files
Improved : speed of zlib wrapper, by Przemyslaw Skibinski
Changed : libzstd on Windows supports legacy formats, by Christophe Chevalier
Fixed : CLI -d output to stdout by default when input is stdin (#322)
Fixed : CLI correctly detects console on Mac OS-X
Fixed : CLI supports recursive mode `-r` on Mac OS-X
Fixed : Legacy decoders use unified error codes, reported by benrg (#341),\
 fixed by Przemyslaw Skibinski
Fixed : compatibility with OpenBSD, reported by Juan Francisco Cantero\
 Hurtado (#319)
Fixed : compatibility with Hurd, by Przemyslaw Skibinski (#365)
Fixed : zstd-pgo, reported by octoploid (#329)

v1.0.0  (Sep 1, 2016)
Change Licensing, all project is now BSD, Copyright Facebook
Small decompression speed improvement
API : Streaming API supports legacy format
API : ZDICT_getDictID(), ZSTD_sizeof_{CCtx, DCtx, CStream, DStream}(),\
 ZSTD_setDStreamParameter()
CLI supports legacy formats v0.4+
Fixed : compression fails on certain huge files, reported by Jesse McGrew
Enhanced documentation, by Przemyslaw Skibinski

v0.8.1  (Aug 18, 2016)
New streaming API
Changed : --ultra now enables levels beyond 19
Changed : -i# now selects benchmark time in second
Fixed : ZSTD_compress* can now compress > 4 GB in a single pass, reported by\
 Nick Terrell
Fixed : speed regression on specific patterns (#272)
Fixed : support for Z_SYNC_FLUSH, by Dmitry Krot (#291)
Fixed : ICC compilation, by Przemyslaw Skibinski

v0.8.0  (Aug 2, 2016)
Improved : better speed on clang and gcc -O2, thanks to Eric Biggers
New : Build on FreeBSD and DragonFly, thanks to JrMarino
Changed : modified API : ZSTD_compressEnd()
Fixed : legacy mode with ZSTD_HEAPMODE=0, by Christopher Bergqvist
Fixed : premature end of frame when zero-sized raw block, reported by Eric\
 Biggers
Fixed : large dictionaries (> 384 KB), reported by Ilona Papava
Fixed : checksum correctly checked in single-pass mode
Fixed : combined --test amd --rm, reported by Andreas M. Nilsson
Modified : minor compression level adaptations
Updated : compression format specification to v0.2.0
changed : zstd.h moved to /lib directory

v0.7.5  (Aug 1, 2016)
Transition version, supporting decoding of v0.8.x

v0.7.4  (Jul 17, 2016)
Added : homebrew for Mac, by Daniel Cade
Added : more examples
Fixed : segfault when using small dictionaries, reported by Felix Handte
Modified : default compression level for CLI is now 3
Updated : specification, to v0.1.1

v0.7.3  (Jul 9, 2016)
New : compression format specification
New : `--` separator, stating that all following arguments are file names.\
 Suggested by Chip Turner.
New : `ZSTD_getDecompressedSize()`
New : OpenBSD target, by Juan Francisco Cantero Hurtado
New : `examples` directory
fixed : dictBuilder using HC levels, reported by Bartosz Taudul
fixed : legacy support from ZSTD_decompress_usingDDict(), reported by Felix\
 Handte
fixed : multi-blocks decoding with intermediate uncompressed blocks, reported\
 by Greg Slazinski
modified : removed "mem.h" and "error_public.h" dependencies from "zstd.h"\
 (experimental section)
modified : legacy functions no longer need magic number

v0.7.2  (Jul 4, 2016)
fixed : ZSTD_decompressBlock() using multiple consecutive blocks. Reported by\
 Greg Slazinski.
fixed : potential segfault on very large files (many gigabytes). Reported by\
 Chip Turner.
fixed : CLI displays system error message when destination file cannot be\
 created (#231). Reported by Chip Turner.

v0.7.1  (Jun 23, 2016)
fixed : ZBUFF_compressEnd() called multiple times with too small `dst`\
 buffer, reported by Christophe Chevalier
fixed : dictBuilder fails if first sample is too small, reported by\
 Руслан Ковалёв
fixed : corruption issue, reported by cj
modified : checksum enabled by default in command line mode

v0.7.0  (Jun 17, 2016)
New : Support for directory compression, using `-r`, thanks to Przemyslaw\
 Skibinski
New : Command `--rm`, to remove source file after successful de/compression
New : Visual build scripts, by Christophe Chevalier
New : Support for Sparse File-systems (do not use space for zero-filled\
 sectors)
New : Frame checksum support
New : Support pass-through mode (when using `-df`)
API : more efficient Dictionary API : `ZSTD_compress_usingCDict()`,\
 `ZSTD_decompress_usingDDict()`
API : create dictionary files from custom content, by Giuseppe Ottaviano
API : support for custom malloc/free functions
New : controllable Dictionary ID
New : Support for skippable frames

v0.6.1  (May 13, 2016)
New : zlib wrapper API, thanks to Przemyslaw Skibinski
New : Ability to compile compressor / decompressor separately
Changed : new lib directory structure
Fixed : Legacy codec v0.5 compatible with dictionary decompression
Fixed : Decoder corruption error (#173)
Fixed : null-string roundtrip (#176)
New : benchmark mode can select directory as input
Experimental : midipix support, VMS support

v0.6.0  (Apr 13, 2016)
Stronger high compression modes, thanks to Przemyslaw Skibinski
API : ZSTD_getFrameParams() provides size of decompressed content
New : highest compression modes require `--ultra` command to fully unleash\
 their capacity
Fixed : zstd cli return error code > 0 and removes dst file artifact when\
 decompression fails, thanks to Chip Turner

v0.5.1  (Feb 18, 2016)
New : Optimal parsing => Very high compression modes, thanks to Przemyslaw\
 Skibinski
Changed : Dictionary builder integrated into libzstd and zstd cli
Changed (!) : zstd cli now uses "multiple input files" as default mode. See\
 `zstd -h`.
Fix : high compression modes for big-endian platforms
New : zstd cli : `-t` | `--test` command

v0.5.0  (Feb 5, 2016)
New : dictionary builder utility
Changed : streaming & dictionary API
Improved : better compression of small data

v0.4.7  (Jan 22, 2016)
Improved : small compression speed improvement in HC mode
Changed : `zstd_decompress.c` has ZSTD_LEGACY_SUPPORT to 0 by default
fix : bt search bug

v0.4.6  (Jan 13, 2016)
fix : fast compression mode on Windows
New : cmake configuration file, thanks to Artyom Dymchenko
Improved : high compression mode on repetitive data
New : block-level API
New : ZSTD_duplicateCCtx()

v0.4.5  (Dec 18, 2015)
new : -m/--multiple : compress/decompress multiple files

v0.4.4  (Dec 14, 2015)
Fixed : high compression modes for Windows 32 bits
new : external dictionary API extended to buffered mode and accessible\
 through command line
new : windows DLL project, thanks to Christophe Chevalier

v0.4.3  (Dec 7, 2015)
new : external dictionary API
new : zstd-frugal

v0.4.2  (Dec 2, 2015)
Generic minor improvements for small blocks
Fixed : big-endian compatibility, by Peter Harris (#85)

v0.4.1  (Dec 1, 2015)
Fixed : ZSTD_LEGACY_SUPPORT=0 build mode (reported by Luben)
removed `zstd.c`

v0.4.0  (Nov 29, 2015)
Command line utility compatible with high compression levels
Removed zstdhc => merged into zstd
Added : ZBUFF API (see zstd_buffered.h)
Rolling buffer support

v0.3.6  (Nov 10, 2015)
small blocks params

v0.3.5  (Nov 9, 2015)
minor generic compression improvements

v0.3.4  (Nov 6, 2015)
Faster fast cLevels

v0.3.3  (Nov 5, 2015)
Small compression ratio improvement

v0.3.2  (Nov 2, 2015)
Fixed Visual Studio

v0.3.1  (Nov 2, 2015)
Small compression ratio improvement

v0.3  (Oct 30, 2015)
HC mode : compression levels 2-26

v0.2.2  (Oct 28, 2015)
Fix : Visual Studio 2013 & 2015 release compilation, by Christophe Chevalier

v0.2.1  (Oct 24, 2015)
Fix : Read errors, advanced fuzzer tests, by Hanno Böck

v0.2.0  (Oct 22, 2015)
**Breaking format change**
Faster decompression speed
Can still decode v0.1 format

v0.1.3  (Oct 15, 2015)
fix uninitialization warning, reported by Evan Nemerson

v0.1.2  (Sep 11, 2015)
frame concatenation support

v0.1.1  (Aug 27, 2015)
fix compression bug
detects write-flush errors

v0.1.0  (Aug 25, 2015)
first release

\
changes-type: text/plain
url: https://github.com/facebook/zstd
package-url: https://github.com/build2-packaging/zstd
package-email: packaging@build2.org; Mailing list.
depends: * build2 >= 0.16.0
depends: * bpkg >= 0.16.0
depends: libzstd == 1.5.5
bootstrap-build:
\
project = zstd

using version
using config
using test
using install
using dist

\
root-build:
\
using c

h{*}: extension = h
c{*}: extension = c

# The test target for cross-testing (running tests under Wine, etc).
#
test.target = $c.target

\
location: zstd/zstd-1.5.5+1.tar.gz
sha256sum: 6fb44ffc2c636c4d5caa90ffed9a69a42f06ee9efed223451d80871927592163
